C语言课程设计报告手机通信录管理系统设计2

上传人:仙*** 文档编号:34138662 上传时间:2021-10-20 格式:DOC 页数:26 大小:290.50KB
收藏 版权申诉 举报 下载
C语言课程设计报告手机通信录管理系统设计2_第1页
第1页 / 共26页
C语言课程设计报告手机通信录管理系统设计2_第2页
第2页 / 共26页
C语言课程设计报告手机通信录管理系统设计2_第3页
第3页 / 共26页
资源描述:

《C语言课程设计报告手机通信录管理系统设计2》由会员分享,可在线阅读,更多相关《C语言课程设计报告手机通信录管理系统设计2(26页珍藏版)》请在装配图网上搜索。

1、手机通信录管理系统设计要求 模拟手机通信录管理系统,实现对手机中的通信录进行管理。功能要求如下:(1)查看功能:选择此功能时,列出下列三类选择。a) 办公类b) 个人类c) 商务类当选中某类时,显示出此类所有数据中的姓名、电话号码和电子邮件。(2)增加功能:能录入新数据。一个结点包括:姓名、电话号码、分类(办公类、个人类、商务类)、电子邮件。例如:杨* 135896*商务类 *.com。当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,储存空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。(3)修改功能:选中某个人姓名时,可对此人的

2、相应数据进行修改。(4)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。【需求分析】根据题目要求,由于联系人信息时存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要查看联系人信息,应提供显示、查看功能;要实现修改和删除联系人功能,所以应提供对文件的修改和删除操作。【总体设计】以下分析整个系统,根据上面的需求分析,可将这个系统的设计分为四大模块(如图一):图一 系统功能模块图【详细设计】1. 主函数主函数设计比较简洁,仅有一个语句。程序main() /*主函数*/menu();2. 主菜单主菜单函数提供用户对系统功能的选择,包括浏览联系人、增加联系人

3、、修改联系人、删除联系人。该函数的流程图如图二所示。程序如下,这样编写的目的在于系统执行完每部分模块后能够方便返回到系统界面。开始显示一系列功能选项输入n,判断n是否是1-4?Y根据n的值调用各功能模块函数结束图二 主菜单流程图程序void menu() /*菜单函数*/int n=0,w1;do puts(tt*MENU*nn);puts(tttt1.Browse all);puts(tttt2.Add members);puts(tttt3.Modify information);puts(tttt4.Delete information);puts(nntt*n);printf(Choo

4、se your number(1-4): bb);scanf(%d,&n);if(n4)w1=1;getchar();elsew1=0;while(w1=1);switch(n)case 1:browse();break; /*浏览联系人模块*/case 2:add();break; /*增加联系人模块*/ case 3:modify();break; /*修改联系人模块*/case 4:del();break; /*删除联系人模块*/3数据结构设计各联系人信息包括有姓名、电话号码、联系人类型、电子邮件。可以使用结构体数组,则姓名、电话、类型和电子邮件作为结构体成员。struct member

5、 /*联系人结构体*/char name20; /*联系人姓名*/char tel11; /*联系人电话*/int type; /*联系人类型:1为办公类;2为个人类;3为商务类*/char email30; /*联系人电子邮件*/memN; /*N为全局变量,表示能够储存的联系人数量*/注意:memN中的N为联系人数目,程序中采用宏定义的方式,可以随时在源程序宏定义中修改,本程序宏定义#define N 15.4. 浏览联系人模块需求分析该模块的功能是使用户可以浏览或者分类浏览各联系人信息。如图三所示,当用户输入1、2、3、4时,分别显示办公类联系人、个人类联系人、商务类联系人和所有联系人。

6、图三 浏览联系人模块流程图程序void browse() /*浏览联系人函数*/int m,n=0,w1;m=load();doputs(nntt *BROWSR*);puts(tttt1.show clerical members); /*查询办公类联系人*/puts(tttt2.show personal members); /*查询个人类联系人*/puts(tttt3.show commercial members); /*查询商务类联系人*/puts(tttt4.show all members); /*查询所有联系人*/puts(tttt5.return to menu); /*返回

7、菜单*/printf(Choose your number(1-5): bb);scanf(%d,&n);if(n5)w1=1;getchar();elsew1=0;while(w1=1);if(n=1)printf_cle(m); /*显示办公类联系人*/puts(ninformation has been showed,Press any key to return to menun);system(pause); /*暂停系统工作*/getchar();menu();else if(n=2)printf_per(m); /*显示个人类联系人*/puts(ninformation has

8、been showed,Press any key to return to menun);system(pause); /*暂停系统工作*/getchar();menu();else if(n=3)printf_com(m); /*显示商务类联系人*/puts(ninformation has been showed,Press any key to return to menun);system(pause); /*暂停系统工作*/getchar();menu();else if(n=4)printf_all(m); /*显示商务类联系人*/puts(ninformation has be

9、en showed,Press any key to return to menun);system(pause); /*暂停系统工作*/getchar();menu();elsemenu();5. 增加联系人模块需求分析该模块的功能是使用户实现增加新联系人的功能,从键盘输入新联系人信息并加入到原文件中。该模块流程图如图四所示。程序void add()int m,w1,n,t,w2,i,j; /*m为现有联系人数量*/m=load(); /*加载联系人信息,并将联系人数量输入m*/if(m=N)运行save(int)函数,将信息保存至文件中是否保存?输入联系人姓名、电话、类型、电子邮箱判断m是

10、否小于N?运行m=load()函数,加载现有联系人信息开始返回至主菜单输出:储存空间已满,无法输入 YNNY 图四 增加联系人模块流程图printf(there is no terabytes to saven);结束printf(Press any key to return to menu .);getchar();system(pause);menu();elseputs(tplease input contracts name:); /*输入联系人姓名*/scanf(%s,memm.name); /*将联系人姓名保存至结构体*/puts(tplease input contracts

11、telephone number:);scanf(%s,memm.tel);do /*选择联系人类型语句*/puts(nnnnnplease choose contracts type:nnn);puts(1,clericalt);puts(2,personalt);puts(mercialt);puts(please choose contracts type: bb);scanf(%d,&n);if(n!=1)&(n!=2)&(n!=3)w1=1;getchar();elsew1=0;while(w1=1);switch(n) /*将联系人类型信息存入结构体中*/case 1:memm.t

12、ype=1;break;case 2:memm.type=2;break;case 3:memm.type=3;break;puts(tplease input contracts email address:);scanf(%s,memm.email);doputs(Are you sure to save? 1.yes 2.no bb);scanf(%d,&t);if(t2)w2=1;getchar();elsew2=0;while(w2=1);if(t=1)for(i=0;im;i+)if(strcmp(memi.name,memm.name)=0)puts(name has exist

13、ed!cannot save,Press any key to meun!);for(j=0;j20;j+) memm.namej=0;for(j=0;j11;j+)memm.telj=0;memm.type=0;for(i=0;i30;i+)memm.emailj=0;system(pause);menu();if(strcmp(memi.tel,memm.tel)=0)puts(telephone number has existed!cannot save,Press any key to menu!);for(j=0;j20;j+) memm.namej=0;for(j=0;j11;j

14、+)memm.telj=0;memm.type=0;for(i=0;i30;i+)memm.emailj=0;system(pause);menu();save(m); /*保存联系人信息至文本文档*/puts(information saved!n);puts(there follows all the informations:n);printf_all(m+1);getchar();puts(Press any key to return to menu);system(pause);menu();if(t=2) /*如果用户不保存,则将刚刚存入结构体中的数据删除*/for(i=0;i2

15、0;i+) memm.namei=0;for(i=0;i11;i+)memm.teli=0;memm.type=0;for(i=0;i30;i+)memm.emaili=0;puts(information not saved!n);puts(there follows all the informations:n);printf_all(m);getchar();puts(Press any key to return to menu);system(pause);menu();6. 修改联系人模块需求分析该模块的功能的功能是显示所有联系人信息。显示完后,用户输入要修改联系人的序号,系统根据

16、用户输入的序号显示用户选择的联系人,并提示用户需要修改哪部分信息,是姓名、电话、类型还是电子邮箱。根据用户的选择修改相应的信息。程序 void modify()int m,n,t,w1,w2;m=load();puts(there follows all the informations:t);printf_all(m); /*显示所有信息,以便用户确认所要修改的信息*/doputs(please input the number that you want to modify,or press 0 to exit:);scanf(%d,&n);if(nm)w1=1;getchar();els

17、ew1=0;while(w1=1);if(n=0)menu();printf_one(n);doputs(tttt1,name);puts(tttt2.telephone);puts(tttt3.type);puts(tttt4.email);puts(tttt0.Exit);puts(choose which information do you want to modify,or press 0 to exit:);scanf(%d,&t);if(t4)w2=1;getchar();elsew2=0;while(w2=1);结束返回至主菜单调用相应功能模块输入t判断t是否在04中n是否等于

18、0根据n的值调用相应功能模块判断n是否在015中开始输入n运行m=load()函数,加载现有联系人信息,并显示所有用户信息NYNYNY图五 修改联系人模块流程图if(t=1)modify_name(n,m); /*修改姓名函数,n为要修改的联系人编号;m为总联系人数*/if(t=2)modify_tel(n,m); /*修改电话函数,n为要修改的联系人编号;m为总联系人数*/if(t=3)modify_type(n,m); /*修改类型函数,n为要修改的联系人编号;m为总联系人数*/if(t=4)modify_email(n,m); /*修改Email函数,n为要修改的联系人编号;m为总联系人

19、数*/if(t=0)menu();7. 删除联系人模块需求分析该模块首先显示现有所有联系人,显示完成后,用户输入要删除的联系人序号。删除方式是将数据从结构体中删除,然后将后面的记录向前移。删除之后将记录保存至文件中。程序void del()int m,n,w1,w2,t,i;m=load();puts(there follows all the informations:t);printf_all(m);doputs(please input the number that you want to delete: bb);scanf(%d,&n);if(nm)w1=1;getchar();el

20、sew1=0;while(w1=1);do /*用do while语句控制用户的输入,使用户只能输入1或者2*/puts(you want to delete this information:);printf_one(n);puts(nAre you sure to delete? 1,yes 2,no);scanf(%d,&t);开始运行m=load();加载现有联系人信息;并显示所有联系人信息输入要删除的联系人序号n判断0nm是否成立NY显示用户要删除的联系人的所有信息用户是否确认删除NY删除数据,并运行move函数,将删除位置后面的数据前移运行save函数,将信息保存至文件中返回至主菜

21、单结束图六 删除联系人模块if(t2)w2=1;getchar();elsew2=0;while(w2=1);if(t=2)puts(information not deleted!Press any key to back to menun);getchar();system(pause);menu();if(t=1)for(i=0;i20;i+)memn-1.namei=0;for(i=0;i11;i+)memn-1.teli=0;memn-1.type=0;for(i=0;i30;i+)memn-1.emaili=0;move(n,m);puts(information deleted!

22、Press any key to back to menun);getchar();system(pause);menu();8. 公共函数一下为各模块中可能用到的一些公共函数。(1) 加载联系人信息函数:int load()说明该函数用于将文件中的数据加载至结构体中,并且可以返回现有联系人的数目。程序int load()FILE *fp;int i,j;if(fp=fopen(E:vc programmesmembers.txt,rb)=NULL)/*以只读方式打开一个二进制文件*/printf(ncannot find information);for(i=0;(!feof(fp)&(iN

23、);i+)fread(&memi,sizeof(struct member),1,fp);/*将文件中的数据加载至结构体中*/fclose(fp); /*关闭文件*/for(j=0;(strcmp(memj.name,0)!=0)&(j0时,首先进入save_1函数,新建一个文件,同时把mem0的数据保存;然后进入save_2函数,将mem1到memm的数据追加至文件中*/ save_2(m);该包含两个子函数:void save_1()和void save_2(int m),当结构体中只有一个元素,即m=0时,只执行第一个函数,新建一个文件并将数据存入文件中;如果结构体中多于一个元素,即m0

24、时,首先执行第一个函数新建一个文件,然后执行第二个函数,将结构体中下标大于0的数据存入文件中。程序void save_1()FILE *fp;if(fp=fopen(E:vc programmesmembers.txt,wb)=NULL)printf(ncannot find information);fwrite(&mem0,sizeof(struct member),1,fp);fclose(fp);程序void save_2(int m)int i;FILE *fp;if(fp=fopen(E:vc programmesmembers.txt,ab)=NULL)printf(ncanno

25、t find information);for(i=1;i=m;i+)fwrite(&memi,sizeof(struct member),1,fp);fclose(fp);(3) 显示所有联系人函数:void printf_all(int m)说明形参m表示现有联系人的数目。用以控制输出联系人的数量。该函数用于输出所有的联系人信息。程序void printf_all(int m)int i;printf(nntt all the contracts as follows:);printf(nnNO. name telephone type email n);for(i=0;im;i+) /*

26、判断联系人类别并输出*/if(memi.type=1)printf(%2d %-20s %-11s clerical %-30sn,i+1,memi.name,memi.tel,memi.email);if(memi.type=2)printf(%2d %-20s %-11s personal %-30sn,i+1,memi.name,memi.tel,memi.email);if(memi.type=3)printf(%2d %-20s %-11s commercial %-30sn,i+1,memi.name,memi.tel,memi.email);(4) 显示办公类联系人函数:void

27、 printf_cle(int m)说明形参m表示现有联系人数目。用以控制循环终点。该函数用于输出所有办公类联系人信息。程序void printf_cle(int m)int i;printf(nntt clerical contracts as follows:);printf(nnname telephone type email n);for(i=0;im;i+)if(memi.type=1) /*判断联系人是否属于办公类*/printf(%-20s %-11s clerical %-30sn,memi.name,memi.tel,memi.email);(5) 显示个人类联系人函数:v

28、oid printf_per(int m)说明形参m表示现有联系人数目。用以控制循环终点。该函数用于输出所有个人联系人信息。程序void printf_per(int m)int i;printf(nntt personal contracts as follows:);printf(nnname telephone type email n);for(i=0;im;i+)if(memi.type=2) /*判断联系人是否属于个人类*/printf(%-20s %-11s personal %-30sn,memi.name,memi.tel,memi.email);(6) 显示商务类联系人函数

29、:void printf_com(int m)说明形参m表示现有联系人数目。用以控制循环终点。该函数用于输出所有商务类联系人信息。程序void printf_com(int m)int i;printf(nntt commercial contracts as follows:);printf(nnname telephone type email n);for(i=0;im;i+)if(memi.type=3) /*判断联系人是否属于商务类*/printf(%-20s %-11s commercial %-30sn,memi.name,memi.tel,memi.email);(7) 显示某

30、一联系人函数:void printf_one(int m)说明形参m表示现有联系人数目。用以控制循环终点。该函数用于输出某一指定联系人信息。程序void printf_one(int m)printf(name telephone type email n);if(memm-1.type=1) /*三个if语句判断联系人类型*/printf(%-20s %-11s clerical %-30sn,memm-1.name,memm-1.tel,memm-1.email);if(memm-1.type=2)printf(%-20s %-11s personal %-30sn,memm-1.name

31、,memm-1.tel,memm-1.email);if(memm-1.type=3)printf(%-20s %-11s commercial %-30sn,memm-1.name,memm-1.tel,memm-1.email);(8) 修改姓名函数:void modify_name(int n,int m)说明该函数用于修改联系人姓名。形参n为用户输入的要修改的联系人序号;m表示现有联系人数量。程序void modify_name(int n,int m)char mod_name20; /*用于暂存用户输入的更改后的联系人姓名*/int i,t,w1;puts(please input

32、 the new name:);scanf(%s,mod_name);doputs(Are you sure to save? 1.yes 2.no bb);scanf(%d,&t);if(t2)w1=1;getchar();elsew1=0;while(w1=1);if(t=1)/*当用户输入1,即确认修改时,将原来存在结构体中联系人的姓名删除,并将新的联系人姓名赋到结构体中*/for(i=0;i20;i+)memn-1.namei=0;strcpy(memn-1.name,mod_name);save(m-1);puts(saved successfully!Press any key t

33、o continue.);getchar();system(pause);modify();if(t=2)for(i=0;i20;i+)mod_namei=0;puts(information not saved!Press any key to continue.);getchar();system(pause);modify();(9) 修改电话函数:void modify_tel(int n,int m)说明该函数用于修改联系人电话。形参n为用户输入的要修改的联系人序号;m表示现有联系人数量。程序void modify_tel(int n,int m)char mod_tel11;int

34、 i,t,w1;puts(please input the new telephone number:);scanf(%s,mod_tel);doputs(Are you sure to save? 1.yes 2.no bb);scanf(%d,&t);if(t2)w1=1;getchar();elsew1=0;while(w1=1);if(t=1)for(i=0;i11;i+)memn-1.teli=0;strcpy(memn-1.tel,mod_tel);save(m-1);puts(saved successfully!Press any key to continue.);getch

35、ar();system(pause);modify();if(t=2)for(i=0;i11;i+)mod_teli=0;puts(information not saved!Press any key to continue.);getchar();system(pause);modify();(10) 修改联系人类型函数:void modify_type(int n,int m)说明该函数用于修改联系人电话。形参n为用户输入的要修改的联系人序号;m表示现有联系人数量。程序void modify_type(int n,int m)int t1,t2,w1;do /*用do while语句控制

36、用户的输入,使用户只能输入13*/puts(tttt1,clerical);puts(tttt2,personal);puts(tttmercial);puts(ttttplease choose the type: bb);scanf(%d,&t1);if(t13)w1=1;getchar();elsew1=0;while(w1=1);doputs(Are you sure to save? 1.yes 2.no bb);scanf(%d,&t2);if(t22)w1=1;getchar();elsew1=0;while(w1=1);if(t2=1) /*当用户确认保存时,t2的值为1,修改

37、后的数据保存至结构体中,运行save函数后保存在文件中*/memn-1.type=t1;save(m-1);puts(saved successfully!Press any key to continue.);getchar();system(pause);modify();if(t2=2) /*当用户确认不保存时,t2值为2,用户输入的修改信息被清空*/t1=0;puts(information not saved!Press any key to continue.);getchar();system(pause);modify();(11) 修改email函数:void modify_

38、email(int n,int m)说明该函数用于修改联系人电话。形参n为用户输入的要修改的联系人序号;m表示现有联系人数量。程序void modify_email(int n,int m)char mod_email30;int i,t,w1;puts(please input the new email:);scanf(%s,mod_email);doputs(Are you sure to save? 1.yes 2.no bb);scanf(%d,&t);if(t2)w1=1;getchar();elsew1=0;while(w1=1);if(t=1)for(i=0;i30;i+)me

39、mn-1.emaili=0;strcpy(memn-1.email,mod_email);save(m-1);puts(saved successfully!Press any key to continue.);getchar();system(pause);modify();if(t=2)for(i=0;i30;i+)mod_emaili=0;puts(information not saved!Press any key to continue.);getchar();system(pause);modify();(12) 移动函数:void move(int n,int m)说明形参n

40、表示移动的起点;m为移动的终点。该函数用于用户将某一联系人信息删除后,排在该联系人之后的数据向前移动。程序void move(int n,int m) /*n是移动的起点;m是移动的终点*/int i,j;for(i=n;i=m;i+) /*采用循环赋值方法,将后面的数据向前移,并将后面的数据删除*/strcpy(memi-1.name,memi.name); /*将后面的数据赋给前面*/for(j=0;j20;j+) /*将后面的数据删除,准备下一次的赋值*/memi.namej=0;strcpy(memi-1.tel,memi.tel);for(j=0;j11;j+)memi.telj=0

41、;memi-1.type=memi.type;memi.type=0;strcpy(memi-1.email,memi.email);for(j=0;j30;j+)memi.emailj=0;save(m);9. 声明运行程序前,应对用到的头文件、全局变量和函数进行声明,声明如下:#include#include#include#define N 15void browse();void add();void modify();void del();int load();void printf_cle(int);void printf_per(int);void printf_com(int)

42、;void printf_all(int);void save(int);void printf_one(int);void modify_name(int,int);void modify_tel(int,int);void modify_type(int,int);void modify_email(int,int);void move(int,int);void save_1();void save_2(int);10. 上机操作下面是各个模块的界面图:(1) 主菜单函数:如图七所示。图七 主菜单(2) 浏览联系人模块:在主界面出现后输入1并按【Enter】键,结果如图八所示。图八 浏览联系人模块输入要浏览的联系人类型,然后按【Enter】键进入。例如:选择2,则显示所有个人类联系人,如图九:图九 显示个人类联系人按任意键返回至主菜单,如图十。图十 返回主菜单(3) 增加联系人模块:如图十一至图十三所示。图十一图十二图十三(4) 修改联系人模块,如图十四所示。图十四 修改联系人模块(5)删除联系人模块,如图十五所示:图十五 删除联系人模块

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!