手机通信录标准管理专业系统设计C语言专业课程设计.doc
《手机通信录标准管理专业系统设计C语言专业课程设计.doc》由会员分享,可在线阅读,更多相关《手机通信录标准管理专业系统设计C语言专业课程设计.doc(36页珍藏版)》请在咨信网上搜索。
手机通信录管理系统设计 [要求] 模拟手机通信录管理系统,实现对手机中通信录进行管理。功效要求以下: (1)查看功效:选择此功效时,列出下列三类选择。 a) 办公类 b) 个人类 c) 商务类 当选中某类时,显示出这类全部数据中姓名、电话号码和电子邮件。 (2)增加功效:能录入新数据。 一个结点包含:姓名、电话号码、分类(办公类、个人类、商务类)、电子邮件。比如:杨** 135896********商务类 *****@***.com。 当录入了反复姓名和电话号码时,则提醒数据录入反复并取消录入;当通信录中超出15条信息时,储存空间已满,不能再录入新数据;;录入新数据能按递增次序自动进行条目编号。 (3)修改功效:选中某个人姓名时,可对此人对应数据进行修改。 (4)删除功效:选中某个人姓名时,可对此人对应数据进行删除,并自动调整后续条目标编号。 【需求分析】 依据题目要求,因为联络人信息时存放在文件中,所以应提供文件输入、输出等操作;在程序中需要查看联络人信息,应提供显示、查看功效;要实现修改和删除联络人功效,所以应提供对文件修改和删除操作。 【总体设计】 以下分析整个系统,依据上面需求分析,可将这个系统设计分为四大模块(图一): 图一 系统功效模块图 【具体设计】 1. 主函数 主函数设计比较简练,仅有一个语句。 [程序] main() /*******************主函数********************/ { menu(); } 2. 主菜单 主菜单函数提供用户对系统功效选择,包含浏览联络人、增加联络人、修改联络人、删除联络人。该函数步骤图图二所表示。程序以下,这么编写目标在于系统实施完每部分模块后能够方便返回到系统界面。 开始 显示一系列功效选项 输入n,判定n是否是1-4? Y 依据n值调用各功效模块函数 结束 图二 主菜单步骤图 [程序] void menu() /******************菜单函数*****************/ { int n=0,w1; do { puts("\t\t***********************MENU***********************\n\n"); puts("\t\t\t\t1.Browse all"); puts("\t\t\t\t2.Add members"); puts("\t\t\t\t3.Modify information"); puts("\t\t\t\t4.Delete information"); puts("\n\n\t\t***************************************************\n"); printf("Choose your number(1-4):[ ]\b\b"); scanf("%d",&n); if(n<1||n>4) { w1=1; getchar(); } else w1=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 /*联络人结构体*/ { char name[20]; /*联络人姓名*/ char tel[11]; /*联络人电话*/ int type; /*联络人类型:1为办公类;2为个人类;3为商务类*/ char email[30]; /*联络人电子邮件*/ }mem[N]; /*N为全局变量,表示能够储存联络人数量*/ 注意:mem[N]中N为联络人数目,程序中采取宏定义方法,能够随时在源程序宏定义中修改,本程序宏定义#define N 15. 4. 浏览联络人模块 [需求分析] 该模块功效是使用户能够浏览或分类浏览各联络人信息。图三所表示,当用户输入1、2、3、4时,分别显示办公类联络人、个人类联络人、商务类联络人和全部联络人。 图三 浏览联络人模块步骤图 [程序] void browse() /*********浏览联络人函数**********/ { int m,n=0,w1; m=load(); do { puts("\n\n\t\t ******************BROWSR********************"); puts("\t\t\t\t1.show clerical members"); /*查询办公类联络人*/ puts("\t\t\t\t2.show personal members"); /*查询个人类联络人*/ puts("\t\t\t\t3.show commercial members"); /*查询商务类联络人*/ puts("\t\t\t\t4.show all members"); /*查询全部联络人*/ puts("\t\t\t\t5.return to menu"); /*返回菜单*/ printf("Choose your number(1-5):[ ]\b\b"); scanf("%d",&n); if(n<1||n>5) { w1=1; getchar(); } else w1=0; }while(w1==1); if(n==1) { printf_cle(m); /*显示办公类联络人*/ puts("\ninformation has been showed,Press any key to return to menu\n"); system("pause"); /*暂停系统工作*/ getchar(); menu(); } else if(n==2) { printf_per(m); /*显示个人类联络人*/ puts("\ninformation has been showed,Press any key to return to menu\n"); system("pause"); /*暂停系统工作*/ getchar(); menu(); } else if(n==3) { printf_com(m); /*显示商务类联络人*/ puts("\ninformation has been showed,Press any key to return to menu\n"); system("pause"); /*暂停系统工作*/ getchar(); menu(); } else if(n==4) { printf_all(m); /*显示商务类联络人*/ puts("\ninformation has been showed,Press any key to return to menu\n"); system("pause"); /*暂停系统工作*/ getchar(); menu(); } else { menu(); } } 5. 增加联络人模块 [需求分析] 该模块功效是使用户实现增加新联络人功效,从键盘输入新联络人信息并加入到原文件中。该模块步骤图图四所表示。 [程序] void add() { int m,w1,n,t,w2,i,j; /*m为现有联络人数量*/ m=load(); /*加载联络人信息,并将联络人数量输入m*/ if(m==N) {运行save(int)函数,将信息保留至文件中 是否保留? 输入联络人姓名、电话、类型、电子邮箱 判定m是否小 于N? 运行m=load()函数,加载现有联络人信息 开始 返回至主菜单 输出:储存空间已满,无法输入 Y N N Y 图四 增加联络人模块步骤图 printf("there is no terabytes to save\n"); 结束 printf("Press any key to return to menu ..."); getchar(); system("pause"); menu(); } else { puts("\tplease input contract's name:"); /*输入联络人姓名*/ scanf("%s",mem[m].name); /*将联络人姓名保留至结构体*/ puts("\tplease input contract's telephone number:"); scanf("%s",mem[m].tel); do /*选择联络人类型语句*/ { puts("\n\n\n\n\nplease choose contract's type:\n\n\n"); puts("1,clerical\t"); puts("2,personal\t"); puts("mercial\t"); puts("please choose contract's type:[ ]\b\b"); scanf("%d",&n); if((n!=1)&&(n!=2)&&(n!=3)) { w1=1; getchar(); } else w1=0; }while(w1==1); switch(n) /*将联络人类型信息存入结构体中*/ { case 1:mem[m].type=1;break; case 2:mem[m].type=2;break; case 3:mem[m].type=3;break; } puts("\tplease input contract's email address:"); scanf("%s",mem[m].email); } do { puts("Are you sure to save? 1.yes 2.no[ ]\b\b"); scanf("%d",&t); if(t<1||t>2) { w2=1; getchar(); } else w2=0; }while(w2==1); if(t==1) { for(i=0;i<m;i++) { if(strcmp(mem[i].name,mem[m].name)==0) { puts("name has existed!cannot save, Press any key to meun!"); for(j=0;j<20;j++) mem[m].name[j]='\0'; for(j=0;j<11;j++) mem[m].tel[j]='\0'; mem[m].type=0; for(i=0;i<30;i++) mem[m].email[j]='\0'; system("pause"); menu(); } if(strcmp(mem[i].tel,mem[m].tel)==0) { puts("telephone number has existed!cannot save, Press any key to menu!"); for(j=0;j<20;j++) mem[m].name[j]='\0'; for(j=0;j<11;j++) mem[m].tel[j]='\0'; mem[m].type=0; for(i=0;i<30;i++) mem[m].email[j]='\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;i<20;i++) mem[m].name[i]='\0'; for(i=0;i<11;i++) mem[m].tel[i]='\0'; mem[m].type=0; for(i=0;i<30;i++) mem[m].email[i]='\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. 修改联络人模块 [需求分析] 该模块功效功效是显示全部联络人信息。显示完后,用户输入要修改联络人序号,系统依据用户输入序号显示用户选择联络人,并提醒用户需要修改哪部分信息,是姓名、电话、类型还是电子邮箱。依据用户选择修改对应信息。 [程序] void modify() { int m,n,t,w1,w2; m=load(); puts("there follows all the informations:\t"); printf_all(m); /*显示全部信息,方便用户确定所要修改信息*/ do { puts("please input the number that you want to modify,or press '0' to exit:"); scanf("%d",&n); if(n<0||n>m) { w1=1; getchar(); } else w1=0; }while(w1==1); if(n==0) menu(); printf_one(n); do { puts("\t\t\t\t1,name"); puts("\t\t\t\t2.telephone"); puts("\t\t\t\t3.type"); puts("\t\t\t\t4.email"); puts("\t\t\t\t0.Exit"); puts("choose which information do you want to modify,or press '0' to exit:"); scanf("%d",&t); if(t<0||t>4) { w2=1; getchar(); } else w2=0; }while(w2==1); 结束 返回至主菜单 调用对应功效模块 输入t 判定t是否在0~4中 n是否等于0 依据n值调用对应功效模块 判定n是否在0~15中 开始 输入n 运行m=load()函数,加载现有联络人信息,并显示全部用户信息 N Y N Y N Y 图五 修改联络人模块步骤图 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为总联络人数*/ 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); do { puts("please input the number that you want to delete:[ ]\b\b"); scanf("%d",&n); if(n<0||n>m) { w1=1; getchar(); } else w1=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 判定0﹤n≤m是否成立 N Y 显示用户要删除联络人全部信息 用户是否确定 删除 N Y 删除数据,并运行move函数,将删除位置后面数据前移 运行save函数,将信息保留至文件中 返回至主菜单 结束 图六 删除联络人模块 if(t<1||t>2) { w2=1; getchar(); } else w2=0; }while(w2==1); if(t==2) { puts("information not deleted!Press any key to back to menu\n"); getchar(); system("pause"); menu(); } if(t==1) { for(i=0;i<20;i++) mem[n-1].name[i]='\0'; for(i=0;i<11;i++) mem[n-1].tel[i]='\0'; mem[n-1].type=0; for(i=0;i<30;i++) mem[n-1].email[i]='\0'; move(n,m); puts("information deleted!Press any key to back to menu\n"); getchar(); system("pause"); menu(); } } 8. 公共函数 一下为各模块中可能用到部分公共函数。 (1) 加载联络人信息函数:int load() [说明] 该函数用于将文件中数据加载至结构体中,而且能够返回现有联络人数目。 [程序] int load() { FILE *fp; int i,j; if((fp=fopen("E:\\vc programmes\\members.txt","rb"))==NULL)/*以只读方法打开一个二进制文件*/ { printf("\ncannot find information"); } for(i=0;(!feof(fp))&&(i<N);i++) fread(&mem[i],sizeof(struct member),1,fp);/*将文件中数据加载至结构体中*/ fclose(fp); /*关闭文件*/ for(j=0;((strcmp(mem[j].name,"\0"))!=0)&&(j<N);j++);/*经过检测联络人姓名否为空来判定联络人数量*/ return(j); /*返回现有联络人数量*/ } (2) 保留全部联络人函数:void save(int m) [说明] 该函数形参m表示现有结构体中最终一个元素下标。该函数主体以下 [程序] void save(int m) /*m表示现有结构体中最终一个元素下标*/ { if(m==0) /*当m=0,即只有一个元素时,进入save_1函数,对文件进行只写操作*/ save_1(); else { save_1(); /*当m>0时,首优异入save_1函数,新建一个文件,同时把mem[0]数据保留;然后进入save_2函数,将mem[1]到mem[m]数据追加至文件中*/ save_2(m); } } 该包含两个子函数:void save_1()和void save_2(int m),当结构体中只有一个元素,即m=0时,只实施第一个函数,新建一个文件并将数据存入文件中;假如结构体中多于一个元素,即m>0时,首先实施第一个函数新建一个文件,然后实施第二个函数,将结构体中下标大于0数据存入文件中。 [程序] void save_1() { FILE *fp; if((fp=fopen("E:\\vc programmes\\members.txt","wb"))==NULL) { printf("\ncannot find information"); } fwrite(&mem[0],sizeof(struct member),1,fp); fclose(fp); } [程序] void save_2(int m) { int i; FILE *fp; if((fp=fopen("E:\\vc programmes\\members.txt","ab"))==NULL) { printf("\ncannot find information"); } for(i=1;i<=m;i++) fwrite(&mem[i],sizeof(struct member),1,fp); fclose(fp); } (3) 显示全部联络人函数:void printf_all(int m) [说明] 形参m表示现有联络人数目。用以控制输出联络人数量。该函数用于输出全部联络人信息。 [程序] void printf_all(int m) { int i; printf("\n\n\t\t all the contracts as follows:"); printf("\n\nNO. name telephone type email \n"); for(i=0;i<m;i++) /*判定联络人类别并输出*/ { if(mem[i].type==1) printf("%2d %-20s %-11s clerical %-30s\n",i+1,mem[i].name,mem[i].tel,mem[i].email); if(mem[i].type==2) printf("%2d %-20s %-11s personal %-30s\n",i+1,mem[i].name,mem[i].tel,mem[i].email); if(mem[i].type==3) printf("%2d %-20s %-11s commercial %-30s\n",i+1,mem[i].name,mem[i].tel,mem[i].email); } } (4) 显示办公类联络人函数:void printf_cle(int m) [说明] 形参m表示现有联络人数目。用以控制循环终点。该函数用于输出全部办公类联络人信息。 [程序] void printf_cle(int m) { int i; printf("\n\n\t\t clerical contracts as follows:"); printf("\n\nname telephone type email \n"); for(i=0;i<m;i++) if(mem[i].type==1) /*判定联络人是否属于办公类*/ printf("%-20s %-11s clerical %-30s\n",mem[i].name,mem[i].tel,mem[i].email); } (5) 显示个人类联络人函数:void printf_per(int m) [说明] 形参m表示现有联络人数目。用以控制循环终点。该函数用于输出全部个人联络人信息。 [程序] void printf_per(int m) { int i; printf("\n\n\t\t personal contracts as follows:"); printf("\n\nname telephone type email \n"); for(i=0;i<m;i++) if(mem[i].type==2) /*判定联络人是否属于个人类*/ printf("%-20s %-11s personal %-30s\n",mem[i].name,mem[i].tel,mem[i].email); } (6) 显示商务类联络人函数:void printf_com(int m) [说明] 形参m表示现有联络人数目。用以控制循环终点。该函数用于输出全部商务类联络人信息。 [程序] void printf_com(int m) { int i; printf("\n\n\t\t commercial contracts as follows:"); printf("\n\nname telephone type email \n"); for(i=0;i<m;i++) if(mem[i].type==3) /*判定联络人是否属于商务类*/ printf("%-20s %-11s commercial %-30s\n",mem[i].name,mem[i].tel,mem[i].email); } (7) 显示某一联络人函数:void printf_one(int m) [说明] 形参m表示现有联络人数目。用以控制循环终点。该函数用于输出某一指定联络人信息。 [程序] void printf_one(int m) { printf("name telephone type email \n"); if(mem[m-1].type==1) /*三个if语句判定联络人类型*/ printf("%-20s %-11s clerical %-30s\n",mem[m-1].name,mem[m-1].tel,mem[m-1].email); if(mem[m-1].type==2) printf("%-20s %-11s personal %-30s\n",mem[m-1].name,mem[m-1].tel,mem[m-1].email); if(mem[m-1].type==3) printf("%-20s %-11s commercial %-30s\n",mem[m-1].name,mem[m-1].tel,mem[m-1].email); } (8) 修改姓名函数:void modify_name(int n,int m) [说明] 该函数用于修改联络人姓名。形参n为用户输入要修改联络人序号;m表示现有联络人数量。 [程序] void modify_name(int n,int m) { char mod_name[20]; /*用于暂存用户输入更改后联络人姓名*/ int i,t,w1; puts("please input the new name:"); scanf("%s",mod_name); do { puts("Are you sure to save? 1.yes 2.no[ ]\b\b"); scanf("%d",&t); if(t<1||t>2) { w1=1; getchar(); } else w1=0; }while(w1==1); if(t==1)/*当用户输入1,即确定修改时,将原来存在结构体中联络人姓名删除,并将新联络人姓名赋到结构体中*/ { for(i=0;i<20;i++) mem[n-1].name[i]='\0'; strcpy(mem[n-1].name,mod_name); save(m-1);- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手机 通信 标准 管理 专业 系统 设计 语言 专业课程
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文