当前位置:首页 >> 其它课程 >> c语言双链表通讯录

c语言双链表通讯录


1.实验内容: 1、当启动通讯录管理系统时?读取通讯录文件 2、进入主功能菜单 3、创建联系人列表?并保存修改后的通讯录 4、删除创建的联系人?并保存修改后的通讯录? 5、打印出保存后的通讯录?当未创建通讯录时提示用户创建新的通讯录? 6、根据用户输入的联系人的首字母查找符合条件的联系人 7、退出通讯录管理系统 2.设计要点: 建立结构体并创建链表,添加删除节点,字符串的匹配。设

计功能选择函数,
读取文件内容

输入 1 添加 联系人

输入 2 删 除联系人

输入 3 查找 联系人

输入 4 打印 联系人信息

创建并添加节点 并赋值

删除关键 字节点

查找关键字并打 印到屏幕

联系人全部打印 到屏幕

调用 add()函 数

调 用 del_menu ()函数

调 用 search_menu() 函数

调用 print() 函数

显示主菜单

输入 5 退出并保存在程序所在 目录

程序结束

3.源程序: #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct message { char name[30]; char number[20]; char email[30]; char adress[100]; char qq[120]; struct message *proir; struct message *next; } mess; mess *head=NULL; mess *p[100]; int man=0; ////////////////////////////////////////////////////////////////////////////// char menu(); void add(); void del(); char del_menu(); void del_name(); void del_adress(); void del_number(); void del_email(); void del_qq(); void find(); char find_menu(); void find_name(); void find_adress(); void find_number(); void find_email(); void find_qq(); void print(); char print_menu(); void print_time(); void print_word(); void file_save();

//////////////////////////////////////////////////////////////////////////// //////////////////////////////////主函数 int main() { FILE *fp=fopen("1.txt","r+"); if(fp==NULL) printf("通讯录为空! !\n"); else {

fseek(fp,0,2); if(ftell(fp)==0) printf("通讯录为空!\n"); else { mess *p2,*tmp; rewind(fp); head=(mess *)malloc(sizeof(mess)); head->next=NULL; p[0]=head; while(feof(fp)==0) { p2=(mess *)malloc(sizeof(mess)); fscanf(fp,"%s%s%s%s%s",p2->name,p2->adress,p2->number,p2->email,p2->q q); tmp=head; while(tmp->next!=NULL) tmp=tmp->next; tmp->next=p2; p2->next=NULL; p2->proir=tmp; man++; p[man]=p2; p[man+1]=NULL; } man--; p2->proir->next=NULL; printf("数据读取完毕!\n"); int flag=fclose(fp); if(flag!=0) {printf("关闭文件失败!");return 0;} } } start: char i; i=menu(); switch(i) { case '1':add();break; case '2':del();break; case '3':find();break; case '4':print();break; case '5':file_save();return 0; case '6':return 0; } goto start; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////主菜单 char menu()

{ char i; printf("---------------功能菜单---------------\n"); printf(" | 1.录入信息\t 2.删除信息 |\n"); printf(" | 3.查找信息\t 4.显示信息 |\n"); printf(" | 5.保存并退出 6.退出 \t |\n"); printf("--------------------------------------\n"); while(1) { printf("请输入功能编号:"); scanf("%s",&i); if('0'<i&&i<'7') return i; else printf("无效指令!"); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// 录 入 函 数 void add() { mess *p1; p1=(mess *)malloc(sizeof(mess)); printf("请输入姓名:\n"); scanf("%s",&p1->name); printf("请输入地址:\n"); scanf("%s",&p1->adress); printf("请输入手机号码:\n"); scanf("%s",&p1->number); printf("请输入邮箱:\n"); scanf("%s",&p1->email); printf("请输入 qq 号码:\n"); scanf("%s",&p1->qq); if(head==NULL) { head=(mess *)malloc(sizeof(mess)); head->next=p1; p1->next=NULL; p1->proir=head; p[0]=head; man++; p[man]=p1; p[man+1]=NULL; } else { mess *p2=head->next; while(p2->next!=NULL)

p2=p2->next; p2->next=p1; p1->next=NULL; p1->proir=p2; man++; p[man]=p1; p[man+1]=NULL; } printf(" 添 加 成 功 ! 通 讯 录 内 现 有 %d 个 联 系 人 \n 是 否 继 续 录 入 信 息 <y/n>........",man); char ch; done: scanf("%s",&ch); if(ch=='n'); else if(ch=='y') add(); else {printf("无效指令!请重新输入:");goto done;} } /////////////////////////////////////////////////////////////////////////////////////////////////////////////删除函数 void del() { char i=del_menu(); switch(i) { case '1':del_name();break; case '2':del_adress();break; case '3':del_number();break; case '4':del_email();break; case '5':del_qq();break; case '6':break; } } //////////////////// char del_menu() { char i; printf("---------------删除菜单---------------\n"); printf(" | 1.按姓名删除\n | 2.按地址删除 \n"); printf(" | 3.按手机号码删除\n | 4.按邮箱删除 \n"); printf(" | 5.按 qq 号删除 \n | 6.返回主菜单\n"); printf("--------------------------------------\n"); while(1) { printf("请输入功能编号:"); scanf("%s",&i); if('0'<i&&i<'7') return i; else printf("无效指令!"); }

} /////////////////// void del_name() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; int i=1; mess *p1=head->next; printf("请输入被删用户的姓名:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->name,ch)==0) { while(p[i]!=p1) i++; while(p[i]!=NULL) {p[i]=p[i+1];i++;} p1->proir->next=p1->next; if(p1->next!=NULL) p1->next->proir=p1->proir; printf("此用户信息已删除!"); printf("是否继续删除<y/n>........"); man--; char tmp; scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {del();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next; } if(p1==NULL) { printf("查无此人!\n"); printf("是否继续删除<y/n>........"); char tmp; scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; }

done:

a:

} }}

///////////////////// void del_adress() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; int i=1; mess *p1=head->next; printf("请输入被删用户的地址:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->adress,ch)==0) { while(p[i]!=p1) i++; while(p[i]!=NULL) {p[i]=p[i+1];i++;} p1->proir->next=p1->next; if(p1->next!=NULL) p1->next->proir=p1->proir; printf("此用户信息已删除!"); printf("是否继续删除<y/n>........"); man--; char tmp; scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {del();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next;

done:

a:

} if(p1==NULL) { printf("查无此人!\n"); printf("是否继续删除<y/n>........"); char tmp; scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } }

}} ///////////////////////////// void del_number() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; int i=1; mess *p1=head->next; printf("请输入被删用户的电话号码:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->number,ch)==0) { while(p[i]!=p1) i++; while(p[i]!=NULL) {p[i]=p[i+1];i++;} p1->proir->next=p1->next; if(p1->next!=NULL) p1->next->proir=p1->proir; printf("此用户信息已删除!"); printf("是否继续删除<y/n>........"); man--; char tmp; scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {del();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next;

done:

a:

} if(p1==NULL) { printf("查无此人!\n"); printf("是否继续删除<y/n>........"); char tmp; scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } }

}} ///////////////////// void del_email() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; int i=1; mess *p1=head->next; printf("请输入被删用户的邮箱:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->email,ch)==0) { while(p[i]!=p1) i++; while(p[i]!=NULL) {p[i]=p[i+1];i++;} p1->proir->next=p1->next; if(p1->next!=NULL) p1->next->proir=p1->proir; printf("此用户信息已删除!"); printf("是否继续删除<y/n>........"); man--; char tmp; done: scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {del();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next; } if(p1==NULL) { printf("查无此人!\n"); printf("是否继续删除<y/n>........"); char tmp; scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } }

a:

}} ///////////////////// void del_qq() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; int i=1; mess *p1=head->next; printf("请输入被删用户的 qq:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->qq,ch)==0) { while(p[i]!=p1) i++; while(p[i]!=NULL) {p[i]=p[i+1];i++;} p1->proir->next=p1->next; if(p1->next!=NULL) p1->next->proir=p1->proir; printf("此用户信息已删除!"); printf("是否继续删除<y/n>........"); man--; char tmp; done: scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {del();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next; } if(p1==NULL) { printf("查无此人!\n"); printf("是否继续删除<y/n>........"); char tmp; scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } } }}

a:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////查找函数 void find() { char i=find_menu(); switch(i) { case '1':find_name();break; case '2':find_adress();break; case '3':find_number();break; case '4':find_email();break; case '5':find_qq();break; case '6':break; } } /////////////////////////// char find_menu() { char i; printf("---------------查找菜单---------------\n"); printf(" | 1.按姓名查找\n | 2.按地址查找 \n"); printf(" | 3.按手机号码查找\n | 4.按邮箱查找 \n"); printf(" | 5.按 qq 号查找 \n | 6.返回主菜单\n"); printf("--------------------------------------\n"); while(1) { printf("请输入功能编号:"); scanf("%s",&i); if('0'<i&&i<'7') return i; else printf("无效指令!"); } } /////////////////////////// void find_name() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; mess *p1=head->next; printf("请输入查找用户的姓名:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->name,ch)==0) { printf("姓名\t 地址\t 手机\t 邮箱\tqq\n");

printf("%s\t%s\t%s\t%s\t%s\n",p1->name,p1->adress,p1->number,p1->email,p 1->qq); printf("是否继续查找<y/n>........"); char tmp; done: scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {find();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next; } if(p1==NULL) { printf("查无此人!\n"); printf("是否继续查找<y/n>........"); char tmp; a: scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } } }} void find_adress() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; mess *p1=head->next; printf("请输入查找用户的地址:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->adress,ch)==0) { printf("姓名\t 地址\t 手机\t 邮箱\tqq\n"); printf("%s\t%s\t%s\t%s\t%s\n",p1->name,p1->adress,p1->number,p1->email,p 1->qq); printf("是否继续查找<y/n>........"); char tmp; done: scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {find();break;} else {printf("无效指令!请重新输入:");goto done;}

} p1=p1->next; } if(p1==NULL) { printf("查无此人!\n"); printf("是否继续查找<y/n>........"); char tmp; scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } } }} void find_number() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; mess *p1=head->next; printf("请输入查找用户的手机号码:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->number,ch)==0) { printf("姓名\t 地址\t 手机\t 邮箱\tqq\n"); printf("%s\t%s\t%s\t%s\t%s\n",p1->name,p1->adress,p1->number,p1->email,p 1->qq); printf("是否继续查找<y/n>........"); char tmp; done: scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {find();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next; } if(p1==NULL) { printf("查无此人!\n"); printf("是否继续查找<y/n>........"); char tmp; a: scanf("%s",&tmp);

a:

if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } } }} void find_email() { if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; mess *p1=head->next; printf("请输入查找用户的邮箱:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->email,ch)==0) { printf("姓名\t 地址\t 手机\t 邮箱\tqq\n"); printf("%s\t%s\t%s\t%s\t%s\n",p1->name,p1->adress,p1->number,p1->email,p 1->qq); printf("是否继续查找<y/n>........"); char tmp; done: scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {find();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next; } if(p1==NULL) { printf("查无此人!\n"); printf("是否继续查找<y/n>........"); char tmp; a: scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } } }} void find_qq() {

if(man==0) printf("通讯录为空!\n\n"); else { char ch[30]; mess *p1=head->next; printf("请输入查找用户的 qq:\n"); scanf("%s",ch); while(p1!=NULL) { if(strcmp(p1->qq,ch)==0) { printf("姓名\t 地址\t 手机\t 邮箱\tqq\n"); printf("%s\t%s\t%s\t%s\t%s\n",p1->name,p1->adress,p1->number,p1->email,p 1->qq); printf("是否继续查找<y/n>........"); char tmp; done: scanf("%s",&tmp); if(tmp=='n')break; else if(tmp=='y') {find();break;} else {printf("无效指令!请重新输入:");goto done;} } p1=p1->next; } if(p1==NULL) { printf("查无此人!\n"); printf("是否继续查找<y/n>........"); char tmp; a: scanf("%s",&tmp); if(tmp=='n'); else if(tmp=='y') del(); else {printf("无效指令!请重新输入:");goto a; } } }} ///////////////////////////////////////////////////////////////////////////////////////////////////////////显示函数 void print() { char c; c=print_menu(); switch(c) { case '1':print_time();break; case '2':print_word();break; } }

////////////// char print_menu() { char c; printf("---------------显示菜单---------------\n"); printf(" | 1.按时间先后排序\n | 2.按首字母排序 printf("--------------------------------------\n"); while(1) { printf("请输入功能编号:"); scanf("%s",&c); if('0'<c&&c<'3') return c; else printf("无效指令!"); } } /////////////// void print_time() { if(man==0) printf("通讯录为空!\n"); else { printf("姓名\t 地址\t 手机\t 邮箱\tqq\n"); for(int i=1;i<=man;i++)

\n");

printf("%s\t%s\t%s\t%s\t%s\n",p[i]->name,p[i]->adress,p[i]->number,p[i]>email,p[i]->qq); } } ////////////// void print_word() { if(man==0) printf("通讯录为空!\n"); else if(man==1) { mess *p=head->next; printf("姓名\t 地址\t 手机\t 邮箱\tqq\n"); printf("%s\t%s\t%s\t%s\t%s\n",p->name,p->adress,p->number,p->email,p>qq); } else { mess *p1=head->next,*p2=p1->next; for(int i=0;i<man;i++) {

p1=head->next;p2=p1->next; while(p2->next!=NULL) { if(strcmp(p1->name,p2->name)>0) { p1->next=p2->next; p2->next->proir=p1; p2->proir=p1->proir; p1->proir->next=p2; p1->proir=p2; p2->next=p1; p2=p2->next->next; } else { p1=p1->next; p2=p2->next; } } if(strcmp(p1->name,p2->name)>0) { p2->proir=p1->proir; p1->proir->next=p2; p1->next=NULL; p2->next=p1; p1->proir=p2; } } printf("姓名\t 地址\t 手机\t 邮箱\tqq\n"); p1=head->next; for(int j=0;j<man;j++) { printf("%s\t%s\t%s\t%s\t%s\n",p1->name,p1->adress,p1->number,p1->em ail,p1->qq); p1=p1->next; } } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////文件保存 void file_save() { FILE *fp=fopen("1.txt","w+"); if(fp==NULL) printf("保存失败!\n"); else { //fputs("姓名\t 地址\t 手机\t 邮箱\tqq\n",fp); for(int i=1;i<=man;i++)

fprintf(fp,"%s\t%s\t%s\t%s\t%s\n",p[i]->name,p[i]->adress,p[i]->number,p [i]->email,p[i]->qq); //char ch[5]="结束"; //fprintf(fp,"%s",ch); int j=fclose(fp); if(j==0) printf("保存成功!\n"); else printf("保存失败!\n"); } }


更多相关文档:

c语言双链表通讯录

6、根据用户输入的联系人的首字母查找符合条件的联系人 7、退出通讯录管理系统 2.设计要点: 建立结构体并创建链表,添加删除节点,字符串的匹配。设计功能选择函数,...

c语言双链表通讯录

c语言双链表通讯录_计算机软件及应用_IT/计算机_专业资料。c语言双链表通讯录程序设计报告题目三:通讯录系统 1.实验目的和意义:利用 c 语言编写通讯录系统, 使我...

c程序 使用链表建立通讯录

c语言双链表通讯录 18页 1下载券 c++程序设计报告 电话本... 暂无评价 25页...在​c​环​境​下​ ​ ​使​用​链​表​建​立​...

通讯录管理系统(C语言)—单链表

通讯录管理系统(C语言)—单链表_计算机软件及应用_IT/计算机_专业资料。通讯录管理系统(C语言)实验报告,基于单链表实现,有文件保存等功能。(内附程序)!广州...

通讯录管理系统数据结构C语言版链表实现实验报告

通讯录管理系统数据结构C语言链表实现实验报告_调查/报告_表格/模板_实用文档。Guangxi University of Science and Technology 课程设计报告课程名称: 课题名称: 姓...

C语言双链表简单操作

用C语言实现链表的各种操... 3页 1下载券 C语言双向链表的相关操作... 5页 1下载券 c语言链表的建立与操作 5页 1下载券 C语言:文件链表操作 17页 2下载...

数据结构大作业报告_C语言通讯录系统_链表

数据结构大作业报告_C语言通讯录系统_链表_工学_高等教育_教育专区。C语言 数据结构 链表 通讯录报告通讯录管理系统报告——数据结构设计型试验 组长:秦奇辉(08463...

C语言双链表

C语言双链表_计算机软件及应用_IT/计算机_专业资料。对双链表的基本操作/...C语言中实现通用双链表 2页 1下载券 c语言双链表通讯录 39页 2下载券 c语言...

通讯录管理系统 (c 和 链表)

通讯录管理系统使用C语言程序的链表进行编写通讯录管理系统使用C语言程序的链表进行编写隐藏>> 链表) 通讯录管理系统 (c 和 链表)通讯录(add_book)中的联系人包含...

c语言数据结构双链表源代码

c语言数据结构双链表源代码_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 c语言数据结构双链表源代码_IT/计算机_专业资料。c 语言数据结构双链表源...
更多相关标签:
c语言链表通讯录 | c语言双向链表 | c语言双向链表的建立 | c语言双向循环链表 | c语言实现双向链表 | c语言双向链表排序 | c语言双链表 | c语言双向链表 源码 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com