1、C 语言课程设计实习报告学生姓名:学生学号:所在班级:任课教师:课程成绩:中国地质大学(武汉)2009 年 7 月 4 日2009 年 7 月 11 日通讯录管理系统 beta【题目要求】具有数据插入、修改、删除、显示和查询功能的电话簿管理程序。(1) 数据包括:人名、工作单位、电话号码和 E-mail地址。(2) 可对记录中的姓名和电话号码进行修改。(3) 可增加或删除记录。(4) 可显示所有保存的记录。(5) 可按人名或电话号码进行查询。提示建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和E-mail地址。【需求分析】根据题目要求,通讯录数据以文本文件存储,故应提
2、供文件的输入、输出等操作;还应提供显示、查找、删除等操作;另外还应提供键盘式选择菜单实现功能选择。【总体设计】通过对整个系统的分析,根据上述要求,可以将这个系统的设计分为三个模块(见图 1):文件导入、通讯录编辑和退出。通讯录管理系统新建菜单 浏览菜单 修改菜单 删除菜单查找菜单图 1 系统功能模块【详细设计】 主函数主函数一般设计得比较简洁,只提供部分提示语及部分功能模块函数的调用。程序void main() printf(“ntt :)欢迎使用通讯录管理系统 beta“);printf(“ntt(_0) /*文件不为空*/ rewind(fp); /*文件位置指针移动到文件开始位置*/ f
3、or (NO=0;!feof(fp) NO+); printf(“nnnntttt :)文件导入成功“); printf(“ntttt 按任意键返回主菜单“); getch(); return(NO); printf(“nnnnttt :)文件导入成功“); printf(“nttt+_+电话簿文件中无任何纪录“); printf(“nttt 按任意键返回主菜单“); getch(); return(NO); (2) 文件保存函数程序void savefile() int i; if (fp=fopen(“student.txt“,“wb“)=0) printf(“ntt+_+文件打开失败!n
4、“); for (i=0;i #include #include #include struct record char name20; char phone20; char adress40; char e_mail30; contact500;int NO=0;FILE *fp;void mainmenu(); void newrecord();void browsemenu();void searchmenu(); void searchname(); void searchphone();void modifymenu(); void deletemenu();void deletea
5、ll(); void deletesingle();void deletename();void deletephone();int loadfile(); void savefile(); void main() printf(“ntt :)欢迎使用通讯录管理系统 beta“);printf(“ntt(_) 文件导入中请稍后nnnnn“); system(“cls“);loadfile();while (1) mainmenu(); void mainmenu() char choice; system(“cls“); printf(“ntt* 主菜单 *“); printf(“ntt* 1
6、-新建菜单 *“); printf(“ntt* 2-浏览菜单 *“);printf(“ntt* 3-查找菜单 *“); printf(“ntt* 4-修改菜单 *“);printf(“ntt* 5-删除菜单 *“); printf(“ntt* 6-退 出 *“); printf(“ntt*“); printf(“ntt请选择:“); choice=getch(); switch (choice) case 1:newrecord();break; case 2:browsemenu();break; case 3:searchmenu();break; case 4:modifymenu();
7、break; case 5:deletemenu();break;case 6:exit(0);default:mainmenu(); void newrecord() printf(“ntt* 请输入联系人信息 *n“); printf(“ntt输入姓名:“); scanf(“%s“, printf(“ntt输入电话号码:“); scanf(“%s“,printf(“ntt输入工作单位:“); scanf(“%s“,printf(“ntt输入 E-mail:“); scanf(“%s“,NO+;savefile(); printf(“ntt是否继续添加?(y/n):“); if (getch
8、()=y) newrecord();return; void browsemenu() int i; system(“cls“); if(NO!=0) printf(“ntt* 以下为通讯录所有信息*“); for (i=0;iNO;i+) printf(“ntt姓 名: %s“,contacti.name); printf(“ntt联系电话: %s“,contacti.phone); printf(“ntt工作单位: %s“,contacti.adress); printf(“ntt E-mail: %s“,contacti.e_mail); printf(“tt“); if (i+1NO)
9、 printf(“ntt_“); system(“pause“); printf(“ntt*“); else printf(“ntt+_+通讯录中无任何纪录“); printf(“ntt按任意键返回主菜单:“); getch(); return; void searchmenu() char choice; system(“cls“); printf(“ntt* 查找菜单 *“); printf(“ntt* 1-按姓名查找 *“); printf(“ntt* 2-按电话查找 *“); printf(“ntt* 3-返回主菜单 *“); printf(“ntt*“); printf(“ntt请选
10、择:“); choice=getch(); switch (choice) case 1:searchname();break; case 2:searchphone();break; case 3:mainmenu();break; void searchname() int mark=0; int i; int a=0;char name20; printf(“ntt* 按姓名查找 *“); printf(“ntt请输入姓名:“); scanf(“%s“,name); for(i=a;iNO;i+) if (strcmp(contacti.name,name)=0) printf(“ntt
11、* 以下是您查找的联系人信息 *“); printf(“ntt姓 名: %s“,contacti.name); printf(“ntt联系电话: %s“,contacti.phone);printf(“ntt工作单位: %s“,contacti.adress); printf(“ntt E-mail: %s“,contacti.e_mail); printf(“ntt*“);printf(“ntt按任意键返回主菜单:“); mark+; getch(); return; return;if(mark=0) printf(“ntt没有该姓名的联系人纪录“); printf(“ntt按任意键返回主
12、菜单“); getch(); return; void searchphone() int mark=0; int i; int a=0; char phone10; printf(“ntt* 按电话查找 *“); printf(“ntt请输入电话:“); scanf(“%s“,phone); for(i=0;iNO;i+) if (strcmp(contacti.phone,phone)=0) printf(“ntt* 以下是您查找的联系人信息 *“); printf(“ntt姓 名: %s“,contacti.name); printf(“ntt联系电话: %s“,contacti.pho
13、ne); printf(“ntt工作单位: %s“,contacti.adress); printf(“ntt E-mail:%s“,contacti.e_mail); printf(“ntt*“); printf(“ntt按任意键返回主菜单:“); mark+; getch(); return; if (mark=0) printf(“ntt没有该联系人信息“); printf(“ntt按任意键返回主菜单“); getch(); return; void modifymenu() int mark=0; int i,k; int a=0;int t=0;char choice;char na
14、me20;struct record modify;system(“cls“);printf(“ntt请输入您要修改的姓名:“); scanf(“%s“,name); for(i=a;iNO;i+) if (strcmp(contacti.name,name)=0) k=i;mark=1;modify=contacti;printf(“ntt* 以下是您将修改的联系人信息 *“); printf(“ntt姓 名: %s“,contacti.name); printf(“ntt联系电话: %s“,contacti.phone);printf(“ntt工作单位: %s“,contacti.adre
15、ss); printf(“ntt E-mail: %s“,contacti.e_mail); printf(“ntt是否继续?y/n“);if(getch()=n)modifymenu();elseprintf(“ntt选择您要修改的选项:“);printf(“nttt(1).姓 名“);printf(“nttt(2).联系电话“);printf(“nttt(3).工作单位“);printf(“nttt(4). E-mail“);printf(“nttt(5).返 回“);printf(“ntt请选择: “);choice=getch();switch(choice) case 1: prin
16、tf(“姓 名:“); scanf(“%s“,contacti.name); break;case 2: printf(“联系电话:“); scanf(“%s“,contacti.phone); break;case 3: printf(“工作单位:“); scanf(“%s“,contacti.adress); break;case 4: printf(“ E-mail:“); scanf(“%s“,contacti.e_mail); break;case 5: mainmenu(); break;default: modifymenu();printf(“ntt您的修改结果为:“);pri
17、ntf(“ntt姓 名: %s“,contacti.name); printf(“ntt联系电话: %s“,contacti.phone);printf(“ntt工作单位: %s“,contacti.adress); printf(“ntt E-mail: %s“,contacti.e_mail); printf(“ntt确认修改?y/n“);if(getch()=n)contacti=modify;printf(“ntt修改未保存!“);else printf(“ntt+_+修改成功!“);savefile();mark=0;printf(“ntt是否继续修改?(y/n)“); if (ge
18、tch()=y) modifymenu(); if (mark=0) printf(“ntt+_+没有该联系人的纪录“); printf(“ntt是否继续修改?(y/n)“); if (getch()=y) modifymenu(); return;void deletemenu() char choice; if(NO=0) printf(“ntt对不起,文件中无任何纪录“); printf(“ntt按任意键返回主菜单“); getch(); return; system(“cls“); printf(“ntt* 删除菜单 *“); printf(“ntt* 1-删除所有 *“); prin
19、tf(“ntt* 2-删除单个 *“); printf(“ntt* 3-返回主菜单 *“); printf(“ntt*“); printf(“ntt请选择:“); choice=getch(); switch(choice) case 1:deleteall();break; case 2:deletesingle();break; case 3:mainmenu();break; default:mainmenu(); void deleteall() printf(“ntt确认删除?(y/n)“); if (getch()=y) if (fp=fopen(“contact“,“w“)=0)
20、 printf(“ntt+_+不能打开文件,删除失败“); loadfile(); NO=0; printf(“ntt_纪录已删除,按任意键返回主菜单“); getch(); fclose(fp);return; else return; void deletesingle() char choice; printf(“nttt1-按姓名删除“); printf(“nttt2-按号码删除“);printf(“nttt3-返回删除菜单“);printf(“ntt请选择:“); choice=getch(); switch (choice) case 1:deletename();break; c
21、ase 2:deletephone();break; case 3:deletemenu();break; void deletename() int i,j; int mark=0; char name20; printf(“ntt请输入要删除联系人姓名:“); scanf(“%s“,name); if(NO=0) printf(“ntt对不起,文件中无任何纪录“); printf(“ntt按任意键返回主菜单“); getch(); return; for (i=0;iNO;i+) if (strcmp(contacti.name,name)=0) printf(“ntt以下是您要删除的联系
22、人纪录:“); printf(“ntt姓 名: %s“,contacti.name); printf(“ntt联系电话: %s“,contacti.phone); printf(“ntt工作单位: %s“,contacti.adress); printf(“ntt E-mail: %s“,contacti.e_mail); printf(“ntt是否删除?(y/n)“); if (getch()=y) for (j=i;jNO-1;j+) contactj=contactj+1; NO-; mark+; printf(“ntt_删除成功“); savefile();printf(“ntt是否继续删除?(y/n)“); if (getch()=y) deletename(); return; else return; continue; if (mark=0) printf(“ntt没有该联系人的纪录“); printf(“ntt是否继续删除?(y/n)“); if (getch()=y) deletename(); return; void deletephone() int i,j; int mark=0; char phone20; printf(“ntt请输入要删除联系电话:“); scanf(“%s“,phone);