需求
制作一个电子通讯录,通过该通讯录能存入好友ID号、姓名(英文)、手机号码、家庭住址、公司电话。
模块
 主界面:主要显示软件功能。
A) 添加好友信息。                                   //  id为唯一标识
B) 列表好友信息。(包含排序功能)
C) 搜索好友
D) 删除好友 //按姓名查找,如有重名全部列出,让用户选择

E )修改好友信息 //按id查找,修改信息

F)保存通讯录

文件1.h

#ifndef __1_H_
#define __1_H_#define SIZE (sizeof(struct tongxun)/sizeof(char))
typedef struct tongxun
{char id[20];        //编号char name[30];     //姓名char num[20];           //手机号码char zhuzhi[100]; //住址char tel[20];           //家庭电话struct tongxun * next;//下一条信息地址
}T;
//菜单
void caidan();
//创建通讯录信息链表
T * create();
//添加好友信息
void add(T * head);
//排序
void paixu(T*head);
//显示好友信息列表
void display(T * head);
//查找好友
void find(T* head);
//删除好友
void del(T* head);
//修改好友信息
void amend(T* head);#endif

文件1.c

#include<stdio.h>
#include<string.h>
#include"1.h"
#include<stdlib.h>
int count11=0;      //记录通讯录有多少好友
void caidan()       //菜单显示
{printf("        电子通讯录\n");printf("       A)添加好友信息.\n");printf("    B)列表好友信息.(包含排序功能)\n");printf("    C)搜索好友\n");printf("       D)删除好友\n");printf("       E)修改好友信息\n");printf("     F)退出并保存\n");}
T * create()        //创建链表并如果已有数据赋值
{FILE* fp;T* head;head=(T*)malloc(SIZE);if(head==NULL){printf("error\n");return NULL;}head->next=NULL;fp=fopen("1","r");if(fp==NULL){// printf("open error\n");return head;}T t;T *p,*p1;int n;fread(&n,sizeof(int),1,fp);count11=n;int i;for(i=0;i<n;i++){fread(&t,sizeof(T),1,fp);p1=head;while(p1->next){p1=p1->next;}p=(T*)malloc(sizeof(T));p->next=NULL;strcpy(p->id,t.id);strcpy(p->name,t.name);    strcpy(p->zhuzhi,t.zhuzhi);      strcpy(p->num,t.num);strcpy(p->tel,t.tel);p1->next=p;}fclose(fp);return head;
}
void add(T * head)  //添加好友
{T *p1,*p,*p3;int leap=0;p=(T*)malloc(SIZE);      //开辟一个空间存储信息if(p==NULL)return;
//  printf("输入ID(数字),姓名(英文),手机号码,家庭住址,家庭电话\n");
//  scanf("%s %s %s %s %s",&p->id,&p->name,&p->num,&p->zhuzhi,&p->tel);printf("输入ID(数字)\n");scanf("%s",p->id);printf("姓名(英文)\n");scanf("%s",p->name);printf("手机号码\n");scanf("%s",p->num);   printf("家庭住址\n");scanf("%s",p->zhuzhi);  printf("家庭电话\n");scanf("%s",p->tel); p1=head;while(p1->next){if(strcmp(p1->next->id,p->id)==0){leap=1;break;}p1=p1->next;}if(leap==1){printf("error id same\n");return ;}p1=head;while(p1->next){p1=p1->next;}p1->next=p;p->next=NULL;count11++;printf("添加成功\n");
}
void paixu(T*head)  //按id号从小到大排序
{T * p,*p1,*p2,*p3;int i;int j,k;for(i=0;i<20-1;i++)for(p=head;p->next->next!=NULL;p=p->next){j=atoi(p->next->id);k=atoi(p->next->next->id);if(j>k){p1=p->next;p2=p1->next;p3=p2->next;p->next=p2;p2->next=p1;p1->next=p3;}}}
void display(T * head) //显示好友
{T *p;if(head->next==NULL){printf("无好友\n");return;}paixu(head);p=head->next;printf("通讯录总共有人%d\n",count11);printf("ID\t姓名(英文)\t手机号码\t家庭住址\t家庭电话\n");while(p){printf("%s\t%s\t\t%s\t\t%s\t\t%s\n",p->id,p->name,p->num,p->zhuzhi,p->tel);p=p->next;}}void find(T* head)  //查找好友
{T*p;int n,leap=0;         //leap为标志为,1说明有此好友,0没有char name[30];if(head->next==NULL)    //链表为空说明没有好友{printf("您没有好友\n");return; }printf("输入姓名查询\n");      //输入姓名查找好友信息    scanf("%s",&name);p=head->next;                   //遍历链表while(p){if(strcmp(name,p->name)==0){leap=1;                //标志位为1,找到并退出break;}p=p->next;}if(leap==0)             //标志为0说明没找到{printf("您没有此好友\n");return;}else                       //否则输出好友信息{printf("ID\t姓名(英文)\t手机号码\t家庭住址\t家庭电话\n");p=head->next;while(p){if(strcmp(name,p->name)==0){printf("%s\t%s\t\t%s\t\t%s\t\t%s\n",p->id,p->name,p->num,p->zhuzhi,p->tel);}p=p->next;}}}
void del(T* head)  //删除好友
{T*p,*p1;int n=0,leap=0;char id[20];char name[30];if(head->next==NULL)     //判断是否有好友{printf("您好友列表为空,无需删除\n");return ;}printf("你想删除的姓名:");  //输入姓名删除scanf("%s",&name);p=head->next;while(p!=NULL)                  //遍历有多少重名的{if(strcmp(name,p->name)==0){n++;                  //n计数重名数量}p=p->next;}if(n==1)                     //如果数量为1,遍历找到直接删除{p=head;while(p->next!=NULL){if(strcmp((p->next->name),name)==0){p1=p->next;p->next=p1->next;free(p1);count11--;printf("删除成功\n");return;}p=p->next;   }   }else if(n==0)                    //数量为0说明,通讯录没有此好友{printf("您没有此好友\n");}else                             //否则有很多重名,打印输出并让用户判断{p=head;printf("ID\t姓名(英文)\t手机号码\t家庭住址\t家庭电话\n");while(p->next!=NULL){if(strcmp((p->next->name),name)==0){printf("%s\t%s\t\t%s\t\t%s\t\t%s\n",p->next->id,p->next->name,p->next->num,p->next->zhuzhi,p->next->tel);}p=p->next; }//让用户输入想删除人的id号printf("你想删除的ID号:");scanf("%s",&id);p=head;                    //遍历是否有此人while(p->next){if(strcmp(p->next->id,id)==0&&strcmp((p->next->name),name)==0){leap=1;          //标志位leap为1说明有此人,删除并释放空间p1=p->next;p->next=p1->next;free(p1);break;}p=p->next;}if(leap==0)                  //为0没有找到{printf("您没有此好友\n");return;}else                      //如果有提示用户删除成功{printf("删除成功\n");count11--;                 //成功删除后好友数量减一}}
}
void baocun(T *head)  //文件保存
{FILE *fp;fp=fopen("1","w+");if(fp==NULL){printf("open error\n");return;}fwrite(&count11,sizeof(int),1,fp);T* p;p=head;if(p->next==NULL){printf("无人,不需写入\n");fclose(fp);return ;}p=p->next;while(p){fwrite(p,sizeof(T),1,fp);p=p->next;}printf("保存成功\n");fclose(fp);
}
void update(T* head)
{char str[128];int n;printf("输入你想修改的好友id号:");memset(str,0,128);scanf("%s",str);if(count11==0){printf("您没有好友,无需修改\n");return;}T* p;  //链表遍历,找到就提前退出p=head;p=head->next;while(p){if(strcmp(p->id,str)==0)break;p=p->next;             }if(p==NULL)    //没找到,提示用户{printf("您没有此好友\n");return;}//屏幕打印输出用户需要修改的好友原来信息printf("此好友信息为\n");printf("ID\t姓名(英文)\t手机号码\t家庭住址\t家庭电话\n");printf("%s\t%s\t\t%s\t\t%s\t\t%s\n",p->id,p->name,p->num,p->zhuzhi,p->tel);while(1){printf(" 1.修改姓名输入\n");printf(" 2.修改手机号码\n");printf(" 3.修改家庭住址\n");printf(" 4.修改家庭电话\n");printf(" 5.不修改了\n");scanf("%d",&n);if(n==1)         //修改此好友姓名{printf("请输入修改后的姓名:");memset(str,0,128);scanf("%s",str);strcpy(p->name,str);printf("姓名修改成功\n");}else if(n==2)           //修改此好友手机号码{printf("请输入修改后的号码:");memset(str,0,128);scanf("%s",str);strcpy(p->num,str);printf("手机号码修改成功\n");}else if(n==3)            //修改此好友家庭住址{printf("请输入修改后的住址:");memset(str,0,128);scanf("%s",str);strcpy(p->zhuzhi,str);printf("家庭住址修改成功\n");}else if(n==4)         //修改此好友家庭电话{printf("请输入修改后的电话:");memset(str,0,128);scanf("%s",str);strcpy(p->zhuzhi,str);printf("家庭电话修改成功\n");}else if(n==5)         //退出return;}}
void amend(T* head)//修改好友信息
{char str[128];memset(str,0,128);printf("(需要显示好友信息请输入look,不需要输入nolook)\n");scanf("%s",str);if(strcmp(str,"look")==0){display(head);update(head);}else if(strcmp(str,"nolook")==0){      update(head);}
}

文件main.c

#include<stdio.h>
#include<string.h>
#include"1.h"int main()
{T * head;char ch[30],cd;head=create();   //创建链表system("clear");caidan();while(1){system("clear");caidan();printf("你想操作的的功能:");scanf("%s",&ch);//  fgets(ch,2,stdin);if(strcmp(ch,"1")==0||strcmp(ch,"A")==0)//添加好友信息{add(head);getchar();}else if(strcmp(ch,"2")==0||strcmp(ch,"B")==0)//列表好友信息{display(head);getchar();}else if(strcmp(ch,"3")==0||strcmp(ch,"C")==0)//搜索好友{display(head);find(head);getchar();}else if(strcmp(ch,"4")==0||strcmp(ch,"D")==0)//删除好友{display(head);del(head);getchar();}else if(strcmp(ch,"5")==0||strcmp(ch,"E")==0)//修改好友信息{amend(head);getchar();}else if(strcmp(ch,"6")==0||strcmp(ch,"F")==0){baocun(head);printf("欢迎使用谢谢\n");break;}else {printf("输入错误,请重新输入\n");            }getchar(); }return 0;
}

电子通讯录(文件保存版)相关推荐

  1. python将学生信息保存到文件中_Python学生管理系统-文件保存版

    #coding=utf-8 students = [] def stu_info_print(): print('*'*50) print(''' 1.添加某学生信息 2.修改某学生信息 3.查询某学 ...

  2. C语言小项目 -- 通讯录(静态版+动态版+文件版)

    文章目录 一.总体设计思路 1.设计背景 2.设计框架 3.功能概述 二.通讯录(静态版) 1.结构体设计 2.初始化通讯录 3.添加联系人信息 4.删除联系人信息 5.查找联系人(按姓名) 6.查找 ...

  3. 用C语言实现 静态通讯录+动态通讯录+文件实现“退出保存信息版本”(附上思路+项目展示+源代码)

    前言 : 在生活中我们经常会遇到通讯录的使用,比如存进一个新的联系人的信息,或者对其删除,修改,查找:那这些神奇的功能是如何实现的?我们不禁好奇.今天,这篇博文将教会大家实现一个静态的或者动态的通讯录 ...

  4. 将Office2010版EXCEL文件保存为2007版.XLS文件格式体积巨增解决方法

    将Office2010版EXCEL文件保存为2007版.XLS文件格式时体积会巨增几十倍,而且再在2010版来处理时会非常占用系统资源,非常慢!最简单的方法:用2010版Office时,直接保存为XL ...

  5. 在通用计算机内pc是指什么地方,电脑版微信保存的文件在哪里?PC端微信文件保存位置是什么?...

    随着微信越来越融入大家的生活,大家越发依赖微信,人们在微信中进行大量私人社交.办公等行为:聊天.接收文件等.无法使用手机时人们需要用到电脑版微信,在电脑版微信里,接收文件之后如何找到文件的保存位置?P ...

  6. 【240行拿下】基于C语言 实现通讯录管理系统 带文件保存及读取功能

    一 首言         学校布置的小作业希望对你有帮助,完整代码在文章结尾为方便阅读代码基本都有注释.代码是在满足老师要求下,尽量减少功能和代码方便同学理解的思想上完成的 (完成7个功能,功能性代码 ...

  7. C语言实现简单的电子通讯录2

    这两天学完系统调用和标准IO,之前的通讯录可以进行一些改进,将数据保存到文件中(图我这里就不发了). 原理:每次启动程序时先从预设文件中以只读的形式读取保存的通讯录信息,然后将读取到的信息导入到结构体 ...

  8. asp oracle源码下载,大型电子病历系统(oracle版)源码

    大型电子病历系统(oracle版)源码 电子病历系统是指计算机化的病历,它的内容包括纸张病历的所有信息.电子病历不仅指静态病历信息,还包括提供的相关服务.电子病历系统是支持电子病历的一套软硬件系统,它 ...

  9. 通讯录管理系统—优化版 (C语言 期末大作业 课程设计)

    文章目录 通讯录管理系统 --- 优化版 一.设计要求 二.总体设计 1.系统具体功能 2.数据结构设计 3.函数功能 4.磁盘文件 三.详细设计 主界面 管理员模块 用户模块 四.程序测试 1.查看 ...

  10. VCF电子海图投影文件的生成

    VCF格式电子海图投影文件的生成 目前国内的电子海图除S-57格式的电子海图外,还有VCF格式电子海图,也就是shape格式电子海图.VCF格式电子海图是由国内官方出版机构出版的,包括一个map.re ...

最新文章

  1. 这个AI模型用最少的训练数据学习对象之间的关系
  2. 玩转Android之在线视频播放控件Vitamio的使用
  3. 更简单的非递归遍历二叉树的方法
  4. 微信小程序扫二维码折中进入体验版
  5. 普通程序员,几个月如何成功转型AI?
  6. python selenium 自动登录_windows7 python3.63使用selenium+webdriver 实现自动登录使用过程...
  7. html(3)标签(2)
  8. 2020年全国儿童青少年总体近视率为52.7%,比上年上升2.5%播
  9. 零基础 Amazon Web Services (AWS) 入门教程图文版(一)
  10. python接口自动化(四十)- logger 日志 - 下(超详解)
  11. 基于浏览器的开源“管理+开发”工具,Pivotal MySQL*Web正式上线!
  12. 详解:Oracle数据库的分区表
  13. 适配器模式的极简概述
  14. 苹果mac磁盘清理工具:Pro Disk Cleaner
  15. log4j+flume+HDFS实现日志存储
  16. rdesktop 访问windows remote desktop
  17. 身份证号归属地 在线查询服务 api
  18. Python 图像拼接
  19. pyinstaller包含html文件,pyinstaller打包exe
  20. Activiti6.0.0及以上版本集成Activiti Modeler

热门文章

  1. 传统蓝牙HCI流控(HCI flow control)
  2. 解决 DOES NOT SUPPORT INDEXING ERROR IN A GO PROGRAM
  3. LeetCode--476. 数字的补数
  4. 学信网-账号被注销解决方法
  5. MQ--推模式与拉模式
  6. CNN之Xception Keras实现模型训练
  7. DRAM Failures(漏电流与寄生电容)
  8. Delphi键盘键值
  9. 基于移动终端的增强现实技术方案(已实现)
  10. 断网重启路由器就好_为什么总是断网重启路由器就好了