通讯管理程序c语言版.doc

上传人:西安人 文档编号:5027722 上传时间:2020-01-29 格式:DOC 页数:20 大小:234KB
返回 下载 相关 举报
通讯管理程序c语言版.doc_第1页
第1页 / 共20页
通讯管理程序c语言版.doc_第2页
第2页 / 共20页
通讯管理程序c语言版.doc_第3页
第3页 / 共20页
通讯管理程序c语言版.doc_第4页
第4页 / 共20页
通讯管理程序c语言版.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《通讯管理程序c语言版.doc》由会员分享,可在线阅读,更多相关《通讯管理程序c语言版.doc(20页珍藏版)》请在三一文库上搜索。

1、太原理工大学计算机科学与技术学院实验二 通讯录管理一、 设计方案简介本课题旨在建立一个通讯录系统,系统中保存着各人员的姓名、电话、Email以及与本人的关系(亲戚、同学、朋友、同事等)等信息,通过该系统的简单界面可以对通讯录进行新建、浏览、查找、更新、删除等操作。二、 设计题目实现:1)需求分析采用结构体包含姓名,电话,Emali,以及与本人的关系由用户输入关系后,添加姓名,电话等用户输入完成后,会自动提示保存以便查询。2)概要设计1) 函数的调用关系图反映了演示程序的层次结构 主程序 mainmenu()newrecord() searchbyname() deletemenu() list

2、byname() writetofile() deleteall() deletebyname() deletebyname()2) 详细设计定义一个people结构体包含了姓名,电话 ,邮箱 ,关系 int num=0;/外部变量num为文件中的纪录数 FILE *fp; void mainmenu();/主菜单 void newrecord();/新添纪录 void searchbyname();/按姓名查询 void deletemenu();/删除菜单 void deleteall();/删除所有 void deleteone();/删除单个 void showall();/显示所有

3、void readfromfile();/读取文件 void writetofile();/写入文件 void deletebyid();/按分组删除 void deletebyname();/按姓名删除 void listbyname();/按姓名排序 int main(int argc, char* argv) 从文件总读入 while (1) 主菜单; void readfromfile()/从文件导入 当打开的文件为空,打印通讯文件不存在 否则提示通讯文件已建立,按任意键进入主菜单 文件位置指针移动到文件末尾*/ void mainmenu()/主菜单 printf(ntt* 主菜单

4、*); printf(ntt* 1-新添纪录 2-姓名查询 *); printf(ntt* 3-删除菜单 4-姓名排序 *); printf(ntt* 5-保存退出 6-直接退出*); printf(ntt*); printf(ntt请选择:); choic=getch(); switch (choic) case 1:调用新添函数 case 2:调用姓名查询函数 case 3:调用删除菜单函数; case 4:调用姓名排序函数 case 5:调用写入文件函数 case 6:退出 default:mainmenu(); void deletemenu()/删除菜单 if(num=0) prin

5、tf(ntt对不起,文件中无任何纪录); printf(ntt按任意键返回主菜单); system(cls); printf(ntt* 删除菜单 *); printf(ntt* 1-删除所有 2-删除单个 *); printf(ntt* 3-返回主菜单 *); printf(ntt*); printf(ntt请选择:); choic=getch(); switch (choic) case 1调用删除全部函数 case 2:调用按姓名删除函数 否则返回主菜单 void deleteall()/删除所有 printf(ntt确认删除?(y/n); if (getch()=y) fclose(fp

6、); if (fp=fopen(people.bin,wb)=NULL) printf(ntt不能打开文件,删除失败); readfromfile(); num=0; printf(ntt纪录已删除,按任意键返回主菜单); getch(); return; else return; /按姓名删除 char name20; printf(ntt请输入要删除姓名:); 如果输入的姓名与存储的姓名一致 printf(ntt以下是您要删除的纪录:); findmark+; printf(ntt_); printf(ntt关系: %s, people i.id); printf(ntt姓名: %s, p

7、eople i.name); printf(ntt电话: %s, people i.phone); printf(ntte-mail:%s, people i.e_mail); printf(ntt_); printf(ntt是否删除?(y/n); if (getch()=y) 删除相关记录 返回主菜单 void newrecord()/添加纪录 printf(ntt* 请输入信息 *n); 输入分组输入姓名输入电话号码输入e-mail 是否继续添加 void showall()/显示所有 printf(ntt* 以下为通讯录所有信息*); for (i=0;inum;i+) 打印所有人的关系

8、,姓名,电话,邮箱 else printf(ntt通讯录中无任何纪录); printf(ntt按任意键返回主菜单:); getch(); return; void searchbyname()/按姓名查询 printf(ntt* 按姓名查找 *); printf(ntt请输入姓名:); for(i=a;inum;i+) if (输入的姓名与记录的姓名一致) printf(ntt* 以下是您查找的信息 *); printf(ntt关系: %s,studenti.id); printf(ntt姓名: %s,studenti.name); printf(ntt电话: %s,studenti.phon

9、e); printf(ntte-mail:%s,studenti.e_mail); void writetofile()/写入文件 int i; if (fp=fopen(student.bin,wb)=NULL) printf(ntt文件打开失败); for (i=0;inum;i+) if (fwrite(&studenti,sizeof(struct record),1,fp)!=1) printf(ntt写入文件错误!n); fclose(fp); printf(ntt通讯录文件已保存); printf(ntt按任意键退出程序ntt); exit(0); void listbyname

10、()/按姓名排序 int i,j; struct record tmp; for (i=1;inum;i+) if(strcmp(studenti.name,studenti-1.name)0) tmp=studenti; j=i-1; do studentj+1=studentj; j-; while (strcmp(tmp.name,studentj.name)=0); studentj+1=tmp; printf(ntt排序成功,是否显示?(y/n); if (getch()=y) 显示全部 4) 测试分析1 改进方案系统还有部分漏洞未能修复、不够绝对的稳定、还需改进!改进的地方:进行姓

11、名查询时,可以实现只输入名字的第一个字母就可以显示相关记录;可以实现跳过输入邮箱直接进行下一步操作; 本次课程设计仅完成了要求的基本功能、由于平时掌握的不够好以及时间关系未能完成选作功能、这是一大缺陷!另外通过本次课程设计也更好的掌握了平时所学的知识、通过实践学到了许多课本上没有的知识!2 体会以后要加强动手时间能力、多与同学交流算法精髓!在编写程序中尽量做到独立完成、对于自己想要完成的问题要主动编程完成、这样自己是一个很大的提升、也能学到很多的知识、熟练编程!5) 使用说明主菜单新添记录显示全部信息按姓名查找按姓名排序删除菜单附录一:参考资料 数据结构(严蔚敏版) C语言程序设计(谭浩强版)

12、附录二:源程序/ sd.cpp : Defines the entry point for the console application./#include stdafx.h#include #include #include #include struct record char name20; char phone20; char e_mail30; char id20;people500; int num=0;/外部变量num为文件中的纪录数 FILE *fp; void mainmenu();/主菜单 void newrecord();/新添纪录 void searchbyname(

13、);/按姓名查询 void deletemenu();/删除菜单 void deleteall();/删除所有 void deleteone();/删除单个 void showall();/显示所有 void readfromfile();/读取文件 void writetofile();/写入文件 void deletebyid();/按分组删除 void deletebyname();/按姓名删除 void listbyname();/按姓名排序 int main(int argc, char* argv) readfromfile(); while (1) mainmenu(); ret

14、urn 0;void readfromfile()/从文件导入 if(fp=fopen(people.bin,rb)=NULL) printf(ntt通讯录文件不存在); if (fp=fopen(people.bin,wb)=NULL) printf(ntt建立失败); exit(0); else printf(ntt通讯录文件已建立); printf(ntt按任意键进入主菜单); getch(); return; exit(0); fseek(fp,0,2); /*文件位置指针移动到文件末尾*/ if (ftell(fp)0) /*文件不为空*/ rewind(fp); /*文件位置指针移

15、动到文件开始位置*/ for (num=0;!feof(fp) & fread(&peoplenum,sizeof(struct record),1,fp);num+); printf(ntt文件导入成功); printf(ntt按任意键返回主菜单); getch(); return; printf(ntt文件导入成功); printf(ntt通讯录文件中无任何纪录); printf(ntt按任意键返回主菜单); getch(); return; void mainmenu()/主菜单 char choic; system(cls); printf(ntt* 主菜单 *); printf(nt

16、t* 1-新添纪录 2-姓名查询 *); printf(ntt* 3-删除菜单 4-姓名排序 *); printf(ntt* 5-保存退出 6-直接退出*); printf(ntt*); printf(ntt请选择:); choic=getch(); switch (choic) case 1:newrecord();break; case 2:searchbyname();break; case 3:deletemenu();break; case 4:listbyname();break; case 5:writetofile();break; case 6:exit(0); defaul

17、t:mainmenu(); void deletemenu()/删除菜单 char choic; if(num=0) printf(ntt对不起,文件中无任何纪录); printf(ntt按任意键返回主菜单); getch(); return; system(cls); printf(ntt* 删除菜单 *); printf(ntt* 1-删除所有 2-删除单个 *); printf(ntt* 3-返回主菜单 *); printf(ntt*); printf(ntt请选择:); choic=getch(); switch (choic) case 1:deleteall();break; ca

18、se 2:deletebyname();break; case 3:mainmenu();break; default:mainmenu();break; void deleteall()/删除所有 printf(ntt确认删除?(y/n); if (getch()=y) fclose(fp); if (fp=fopen(people.bin,wb)=NULL) printf(ntt不能打开文件,删除失败); readfromfile(); num=0; printf(ntt纪录已删除,按任意键返回主菜单); getch(); return; else return; void deleteb

19、yname()/按姓名删除 int a=0; int findmark=0; int j; int deletemark=0; int i; char name20; printf(ntt请输入要删除姓名:); scanf(%s,name); for (i=a;inum;i+) if (strcmp(peoplei.name,name)=NULL) printf(ntt以下是您要删除的纪录:); findmark+; printf(ntt_); printf(ntt关系: %s,peoplei.id); printf(ntt姓名: %s,peoplei.name); printf(ntt电话:

20、 %s,peoplei.phone); printf(ntte-mail:%s,peoplei.e_mail); printf(ntt_); printf(ntt是否删除?(y/n); if (getch()=y) for (j=i;jnum-1;j+) /*纪录移动,从stud数组中删除之*/ peoplej=peoplej+1; num-; deletemark+; printf(ntt删除成功); if(i+1)num) printf(ntt是否继续删除相同姓名的信息?(y/n); if (getch()=y) a=i; continue; printf(ntt是否继续删除?(y/n);

21、 if (getch()=y) deletebyname(); return; if(i+1)num) printf(ntt是否继续删除相同姓名的信息?(y/n); if (getch()=y) a=i; continue; else mainmenu(); if (deletemark=0)&(findmark=0) printf(ntt没有该同学的纪录); printf(ntt是否继续删除?(y/n); if (getch()=y) deletebyid(); return; return; else if (findmark!=0) printf(ntt没有重名信息); printf(n

22、tt没有该的纪录); printf(ntt是否继续删除?(y/n); if (getch()=y) deletebyid(); return; return; void deletebyid()/按分组删除 void newrecord()/添加纪录 printf(ntt* 请输入信息 *n); printf(ntt输入分组:); scanf(%s,&peoplenum.id); printf(ntt输入姓名:); scanf(%s,&peoplenum.name); printf(ntt输入电话号码:); scanf(%s,&peoplenum.phone); printf(ntt输入e-m

23、ail:); scanf(%s,&peoplenum.e_mail); num+; printf(ntt是否继续添加?(Y/N):); if (getch()=y) newrecord(); return; void showall()/显示所有 int i; system(cls); if(num!=0) printf(ntt* 以下为通讯录所有信息*); for (i=0;inum;i+) printf(ntt关系: %s,peoplei.id); printf(ntt姓名: %s,peoplei.name); printf(ntt电话: %s,peoplei.phone); printf

24、(ntte-mail:%s,peoplei.e_mail); printf(tt); if (i+1num) printf(ntt_); system(pause); printf(ntt*); else printf(ntt通讯录中无任何纪录); printf(ntt按任意键返回主菜单:); getch(); return; void searchbyname()/按姓名查询 int mark=0; int i; int a=0; printf(ntt* 按姓名查找 *); char name20; printf(ntt请输入姓名:); scanf(%s,name); for(i=a;inu

25、m;i+) if (strcmp(peoplei.name,name)=0) printf(ntt* 以下是您查找的信息 *); printf(ntt关系: %s,peoplei.id); printf(ntt姓名: %s,peoplei.name); printf(ntt电话: %s,peoplei.phone); printf(ntte-mail:%s,peoplei.e_mail); printf(ntt*); mark+; if (i+1)num) printf(ntt是否继续查找相同名字的人的信息:(y/n); if (getch()=y) a=i; continue; else r

26、eturn; else printf(ntt按任意键返回主菜单); getch(); return; if(mark!=0) printf(ntt没有相同姓名的人的纪录); printf(ntt按任意键返回主菜单); getch(); return; else printf(ntt没有相同姓名的纪录); printf(ntt按任意键返回主菜单); getch(); return; void writetofile()/写入文件 int i; if (fp=fopen(people.bin,wb)=NULL) printf(ntt文件打开失败); for (i=0;inum;i+) if (fw

27、rite(&peoplei,sizeof(struct record),1,fp)!=1) printf(ntt写入文件错误!n); fclose(fp); printf(ntt通讯录文件已保存); printf(ntt按任意键退出程序ntt); exit(0); void listbyname()/按姓名排序 int i,j; struct record tmp; for (i=1;inum;i+) if(strcmp(peoplei.name,peoplei-1.name)0) tmp=peoplei; j=i-1; do peoplej+1=peoplej; j-; while (strcmp(tmp.name,peoplej.name)=0); peoplej+1=tmp; printf(ntt排序成功,是否显示?(y/n); if (getch()=y) showall(); return; 2012年 01 月

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1