C语言课程设计:通讯录管理系统目录一、需求分析 (2)二、概要设计 (2)三、详细设计 (3)四、上机操作 (14)五、实习心得 (19)六、源程序 (20)一、需求分析具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。
(1)数据包括:人名、工作单位、电话号码和E-MAIL地址。
(2)可对记录中的姓名和电话号码进行修改。
(3)可增加和删除记录。
(4)可显示所有的保存记录。
(5)可按人名或电话号码进行查询。
[提示]建议采用结构体数组和文件系统实现。
结构体成员包括人名、工作单位、电话号码和E-MAIL地址。
根据题目的要求程序应该采用结构体数组和文件系统实现。
应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。
二、概要设计根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出。
三、详细设计1、主函数;主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
流程图N【程序】int main() //主函数{Man man[500],*pman=man;;char control;int size;printf("\t\t**********************************************\n"); //窗口初始化printf("\t\t********** 欢迎使用通讯录管理系统! ***********\n");printf("\t\t*--------------------------------------------*\n");printf("\t\t* 请按回车键继续! *\n");printf("\t\t**********************************************\n");scanf("%c",&control);if(control){size=Scan(pman); //判断文件是否存在printf("\t\t\t请输入相应操作数操作\n");for(;;) //菜单生成{printf("\t\t**********************************************\n");printf("\t\t* 1--插入信息*\n");printf("\t\t* 2--按姓名查找*\n");printf("\t\t* 3--按电话查找*\n");printf("\t\t* 4--删除信息*\n");printf("\t\t* 5--显示信息*\n");printf("\t\t* 6--修改信息*\n");printf("\t\t* 0--退出系统*\n");printf("\t\t**********************************************\n");scanf("%s",&control);switch(control){case '1': size=Insert(pman,size);break; //插入新的通讯录case '2': S_asname(pman,size);break; //按姓名查找case '3': S_astel(pman,size);break; //按电话查找case '4': Delete(pman,size);break; //删除信息case '5': Display(pman,size);break; //显示所有信息case '6': Modify(pman,size);break; //修改信息case '0': printf("**************谢谢使用!再见!**************\n"); //退出系统return 0;default: printf("**********输入数字有误,请重新输入**********\n");break;}}}return 0;}2、插入模块此模块为插入信息模块,插入后再调用保存函数来保存所插入的数据,支持多条信息的插入。
流程图【程序】int Insert(Man * pMan,int Size) //插入模块{int i,n;printf("\t\t***********请输入要插入数据的个数.************\n");printf("\t\t**********************************************\n");scanf("%d",&n);for(i=0;i<n;i++) //从键盘输入数据再写入文件{ printf("您将要录入第%d条记录(共有%d条)\n",i+1,n);printf("请输入姓名:\n");scanf("%s",&pMan[Size+i].Name);printf("请输入工作单位:\n");scanf("%s",&pMan[Size+i].Depart);printf("请输入电话号码:\n");scanf("%s",&pMan[Size+i].TEL);printf("请输入Email地址:\n");scanf("%s",&pMan[Size+i].Email);}if(Save(pMan,Size+n)){printf("\t\t*********** 恭喜!数据插入成功! ***********\n");}else{printf("\t\t*********** 操作失败,请稍后再试!***********\n");}return Size+n;}3、显示模块此模块为显示所有记录,流程图如下:【程序】void Display(Man * pMan,int Size) //显示所有记录{int i;printf("\t人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t************************************************************\n");for(i=0;i<=Size;i++,pMan++)//依次输出文件中的信息{printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("\t-----------------------------------------------------------\n");}}4、查找模块本模块分为按姓名查找和按电话查找两个子模块。
4.1按姓名查找模块,流程图如下:【程序】void S_asname(Man * pMan,int Size) //查找信息{int i=0;char name[8];printf("\t\t***********请输入要查询信息的姓名:***********\n");printf("\t\t**********************************************\n");scanf("%s",name);while(i<Size&&strcmp(pMan->Name,name))//查找{pMan++;i++;}if(!strcmp(pMan->Name,name))//找到后输出{printf("\t\t***************查到的信息为:***************\n");printf("\t*************************************************************\n");printf("\t人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t*************************************************************\n");printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("\t*************************************************************\n");}else{printf("\t\t***********抱歉,没有找到相关数据************\n");printf("\t\t**********************************************\n");}}4.2按电话查找模块,此模块与按姓名查找模块相似,流程图略。
【程序】void S_astel(Man * pMan,int Size) //按电话查找模块{int i=0;char tel[12];printf("\t\t***********请输入要查询信息的电话:************\n");printf("\t\t**********************************************\n");scanf("%s",tel);while(i<Size&&strcmp(pMan->TEL,tel)) //查找信息{pMan++;i++;}if(!strcmp(pMan->TEL,tel)) //输出找到的信息{printf("\t\t****************查到的信息为: ****************\n");printf("\t*******************************************************\n");printf("\t人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t*******************************************************\n");printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("\t*******************************************************\n");}else{printf("\t\t************抱歉,没有找到相关数据************\n");printf("\t\t**********************************************\n");}}5、删除模块此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到Save函数。