C语言课程设计手机通信录管理系统计 .doc

上传人:laozhun 文档编号:2384814 上传时间:2023-02-17 格式:DOC 页数:29 大小:738.50KB
返回 下载 相关 举报
C语言课程设计手机通信录管理系统计 .doc_第1页
第1页 / 共29页
C语言课程设计手机通信录管理系统计 .doc_第2页
第2页 / 共29页
C语言课程设计手机通信录管理系统计 .doc_第3页
第3页 / 共29页
C语言课程设计手机通信录管理系统计 .doc_第4页
第4页 / 共29页
C语言课程设计手机通信录管理系统计 .doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《C语言课程设计手机通信录管理系统计 .doc》由会员分享,可在线阅读,更多相关《C语言课程设计手机通信录管理系统计 .doc(29页珍藏版)》请在三一办公上搜索。

1、C语言课程设计课程名称 C语言课程设计 教师姓名 本科生姓名 本科生学号 本科生专业 所在院系 类别: 日期: 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。 目 录课程设计评语.2目录.31课程论文题目. 42. 程序设计思路.43功能模块图.44数据结构设计.55算法设计.56程序代码157程序运行结果218编程中遇到的问题及解决办法289总结心得及良好建议2810致谢291课程论文题目手机通信录管理系统设计模拟手机通讯录管理系

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

3、除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。2程序设计思路根据题目要求,通讯录中的每一条信息应当是以文本文件的方式存放,所以要提供文件的输入输出等操作;在程序中需要对通讯录内容的管理,应提供查看,增加,修改,删除条目等操作;另外还应提供键盘是选择菜单实现功能的选择。3功能模块图手机通信录管理系统退 出删除功能修改功能增加功能 4数据结构设计根据题目要求,也是为了方便以后调用,我们选择应用结构体来进行该程序的编写。本程序也可以使用数组和链表完成,但是考虑到,链表对于我们还过于复杂,时间有限,且题目中有所谓“储存空间”的限制,所以没有必要应用链表。没有应用数组

4、是考虑到结构体能更好的完成调用工作。而且可以使程序看起来更有条理。程序中应用函数调用是必须的。这种程序中,应用函数调用可以使系统更具模块化。本程序的函数调用中,主函数只是对菜单函数进行了调用,这样由于子函数之间是可以相互调用的关系,所以,为后面调用菜单提供方便。5. 算法设计1、主函数主函数设计得应简单、直观,所以我应用了大量的函数调用。为了方便主菜单也可以调用,所以把菜单设计成了一个调用函数,具体方法流程可见流程图。【流程图】显示菜单列出功能输入n选择需要的功能,判断n的值是否在15之间 否 是根据n的值调用各功能模块函数【程序】 /*菜单函数*/void menu()int n,w1; d

5、o puts(ntt*欢迎使用手机通讯录管理系统*n); puts(tt*菜单*n); puts(ttt1.查看功能); puts(ttt2.增加功能); puts(ttt3.修改功能); puts(ttt4.删除功能); puts(ttt5.退出); puts(ntt*n); printf(请选择你想要的功能序号(1-5):); scanf(%d,&n); if(n5) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1); switch(n) case 1:search();break; case 2:add();b

6、reak; case 3:modify();break; case 4:del();break; case 5:exit(0);break; /*主函数*/main()menu();2、各功能模块设计(1)查看功能模块 【需求分析】 该模块的功能是选择一个查询的类别就可以显示出该类别中的所有信息条目(办公类,个人类,商务类),并且其重要考虑到该类中的内容是否有为空的情况,以及在选择类别的过程中是否有输入错误的情况。【流程图】显示已有的种类菜单输入n选择想要查看的种类,并判断n的值是否在1-3之间 根据n值输出各种类中所有成员信息是 否 返回主菜单【程序】 /*查看功能*/void search

7、()int n,w1;doputs(tt*查看类别*n);puts(tttA.办公类tn);puts(tttB.个人类tn);puts(tttC.商务类tn);puts(tt*n);printf(请输入类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”):);scanf(%d,&n);printf(n);if(n3)w1=1;getchar();printf(输入错误返回主菜单n);menu();else w1=0;while(w1=1);switch(n)case 1:putout(1);break; case 2:putout(2);break; case 3:putout(

8、3);break;(2)添加功能模块 【需求分析】 该模块的功能是要求增添一个信息条目(其中包括姓名、电话号码、分类、电子邮件),观察这种信息条目,很容易就联想到用结构体的方式来储存。在添加之前应该先检查储存器是否已满;当然在添加过程应考虑到是否有姓名或电话号码重复的情况,在这种情况下应提醒操作者并退出操作。调用加载函数n=load();并计算可以记录个数n 【流程图】 判断储存器是否已满 是 否 输入姓名判断输入的姓名是否存在 是 否输入电话号码 判断输入的电话号码是否存在 是 否通过n来输入类别,并判断n是否在1-3之间 是 输入电子邮件地址 返回主菜单 【程序】/*添加功能*/void

9、add()int i,n,m,w1;don=load();/*打开文件*/ if(n=N) printf(储存器已满返回主菜单n);menu();/*判断储存是否已满*/ if(n!=0) printf(请输入姓名:); scanf(%s,&an.name); for(i=0;in;i+) if(strcmp(ai.name,an.name)=0)printf(已存在返回主菜单n);menu();/*判断姓名是否存在*/ printf(请输入电话号码:); scanf(%s,&an.phone); for(i=0;in;i+) if(strcmp(ai.phone,an.phone)=0)pr

10、intf(已存在返回主菜单n);menu(); if(n=0) printf(请输入姓名:); scanf(%s,&an.name); printf(请输入电话号码:); scanf(%s,&an.phone); printf(请输入类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”):);scanf(%d,&an.zhonglei);m=an.zhonglei;if(m3) w1=1;getchar();printf(输入错误返回主菜单n);menu();else w1=0;while(w1=1);switch(m)case 1:strcpy(an.type,BGL);brea

11、k; case 2:strcpy(an.type,GRL);break; case 3:strcpy(an.type,SWL);break; default:printf(输入错误返回上一菜单n);menu();printf(请输入电子邮件地址:);scanf(%s,&an.mail);saveA(n); /*将新的信息添加进通讯录*/choice();(3)修改功能模块 【需求分析】 该模块的功能是先判断通讯录是否为空,不为空的前提下输入所想要修改的姓名,如果不存在则提醒操作者输入错误并返回主菜单,如果存在则显示其信息,并作出提示依次输入修改后的内容并记录保存。判断通讯录是否为空【流程图】

12、是 否 输入想要修改的姓名判断要修改的姓名是否存在 是 否 输入新的类别输入新的姓名输入新的电话号码输入新的电子邮箱地址返回主菜单 【程序】/*修改功能*/void modify()int i,n,k,w1;dochar c100; n=load();if(n=0) printf(n);printf(通讯录为空返回主菜单nn);menu();printf(请输入你要修改的人物名称:);scanf(%s,&c);for(i=0;in;i+)if(strcmp(c,ai.name)=0)break;/* 将输入的名字存入c中,在依次与文件中的名字进行比较。*/if(i=n)printf(n);pr

13、intf(查无此人返回主菜单nn);menu();printf(%-20s %-15s %-5s %sn,ai.name,ai.phone,ai.type,ai.mail);printf(请输入新的类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”,取消修改请输入“4”):);scanf(%d,&ai.zhonglei);k=ai.zhonglei;if(k5) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1);switch(k)case 1:strcpy(ai.type,BGL);break; cas

14、e 2:strcpy(ai.type,GRL);break; case 3:strcpy(ai.type,SWL);break; case 4:printf(取消操作返回上一菜单n);menu(); printf(请输入新的姓名:); scanf(%s,&(ai.name); printf(请输入新的电话号码:); scanf(%s,&(ai.phone);printf(请输入新的邮箱地址:); scanf(%s,&(ai.mail); saveB(n);choice();(4) 删除功能模块【需求分析】该模块的功能是通过输入某一姓名,判断改姓名是否存在,如果不存在,返回主菜单;如果存在则输出

15、该姓名的全部信息,再由操作者判断是否删除该条目。删除后将其他的数据保存。【流程图】判断通讯录是否为空 是 否输入想要删除的姓名判断该姓名是否存在 否 是确定删除? 是删除成功,保存数据 否返回主菜单【程序】/*删除功能*/void del()int i,n,j,w1,k;char b100;don=load();if(n=0) printf(n);printf(通讯录为空返回主菜单nn);menu();printf(请输入你要删除的人物名称:);scanf(%s,&b);for(i=0;in;i+)if(strcmp(b,ai.name)=0) break;if(i=N) printf(查无此

16、人返回主菜单n);menu;printf(%-20s%-15s%-5s %sn,ai.name,ai.phone,ai.type,ai.mail);printf(确定要删除此人吗?(“是”请输入“1”,“否”请输入“2”):);scanf(%d,&k);if(k2) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1);switch(k)case 1:for(j=i;jn;j+) aj=aj+1;saveB(j);choice();menu();break; case 2:printf(取消操作返回主菜单n);menu(

17、); 3、公共函数 下面是在每个功能模块中都有可能用到的一些公共函数。(1) 加载函数load()【说明】 该函数可以用来加载所有的记录,并且可以返回所有记录的个数。#define MAGE struct messageMAGEint zhonglei; char name20; char phone15; char type5; char mail100; ;(在整个程序的开头有声明)【程序】load()FILE *fp;int i;if(fp=fopen(file.txt,ab+)=NULL)printf(n不能打开此文件返回主菜单n); return NULL;for(i=0;!feof

18、(fp);i+) fread(&ai,sizeof(MAGE),1,fp);fclose(fp);return(i-1);(2)用于添加时的保存函数saveA()【说明】 该函数用于在将新信息添加至文件尾。【程序】void saveA(int i)FILE *fp;if(fp=fopen(file.txt,ab)=NULL)printf(n不能打开此文件n); return NULL;if(fwrite(&ai,sizeof(MAGE),1,fp)!=1)printf(读写错误n);fclose(fp);(3)用于将修改或删除之后记录的保存函数saveB()【说明】 该函数与上面的函数不同在于

19、,它是将原有的文件覆盖后重新将记录全部录入【程序】void saveB(int n)FILE *fp;int i;if(fp=fopen(file.txt,wb)=NULL)/* 以wb的方式打开时,会将原来的文件删去重建*/printf(n无法打开文件n);return NULL;for(i=0;in;i+)if(fwrite(&ai,sizeof(MAGE),1,fp)!=1)printf(读写错误返回主菜单n);menu();fclose(fp);(4)用于查看时的输出函数putout() 【说明】该函数用于查看时输出某一类别所有的信息。【程序】void putout(int m)int

20、 i,n; int k=0; n=load(); for(i=0;in;i+) if(ai.zhonglei=m) k+; if(k=0) printf(通讯录中该类别为空,返回主菜单n);printf(n);menu(); for(i=0;in;i+) if(ai.zhonglei=m) printf(%-20s %-15s %-5s %sn,ai.name,ai.phone,ai.type,ai.mail); menu();(5)操作成功函数choice()【说明】 该函数用于在执行完某一操作时让操作者选择下一步的操作。【程序】void choice()int k,w1;doprintf(

21、操作已成功,请选择下面的操作(1.返回主菜单 2.退出):); scanf(%d,&k);if(k2) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1); switch(k) case 1:menu();break; case 2:exit(0);break; 6程序代码#include stdio.h #include string.h#includemalloc.h#define MAGE struct message#define N 15MAGEint zhonglei; char name20; char

22、phone15; char type5; char mail100; aN;load();void saveA();void saveB();void menu();void choice();/*输出功能*/void putout(int m)int i,n; int k=0; n=load(); for(i=0;in;i+) if(ai.zhonglei=m) k+; if(k=0) printf(通讯录中该类别为空,返回主菜单n);printf(n);menu(); for(i=0;in;i+) if(ai.zhonglei=m) printf(%-20s %-15s %-5s %sn,

23、ai.name,ai.phone,ai.type,ai.mail); menu();/*查看功能*/void search()int n,w1;doputs(tt*查看类别*n);puts(tttA.办公类tn);puts(tttB.个人类tn);puts(tttC.商务类tn);puts(tt*n);printf(请输入类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”):);scanf(%d,&n);printf(n);if(n3) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0; while(w1=1);switch(

24、n)case 1:putout(1);break; case 2:putout(2);break; case 3:putout(3);break;/*添加功能*/void add()int i,n,m,w1;don=load();/*打开文件*/ if(n=N) printf(储存器已满返回主菜单n);menu();/*判断储存是否已满*/ if(n!=0) printf(请输入姓名:); scanf(%s,&an.name); for(i=0;in;i+) if(strcmp(ai.name,an.name)=0)printf(已存在返回主菜单n);menu(); printf(请输入电话号

25、码:); scanf(%s,&an.phone); for(i=0;in;i+) if(strcmp(ai.phone,an.phone)=0)printf(已存在返回主菜单n);menu(); if(n=0) printf(请输入姓名:); scanf(%s,&an.name); printf(请输入电话号码:); scanf(%s,&an.phone); printf(请输入类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”):);scanf(%d,&an.zhonglei);m=an.zhonglei;if(m3) w1=1;getchar();printf(输入错误返回主

26、菜单n);menu(); else w1=0;while(w1=1);switch(m)case 1:strcpy(an.type,BGL);break; case 2:strcpy(an.type,GRL);break; case 3:strcpy(an.type,SWL);break; default:printf(输入错误返回上一菜单n);menu();printf(请输入电子邮件地址:);scanf(%s,&an.mail);saveA(n); /*将新的信息添加进通讯录*/choice();/*修改功能*/void modify()int i,n,k,w1;do char c100;

27、 n=load();if(n=0) printf(n);printf(通讯录为空返回主菜单nn);menu();printf(请输入你要修改的人物名称:);scanf(%s,&c);for(i=0;in;i+)if(strcmp(c,ai.name)=0)break;if(i=n)printf(n);printf(查无此人返回主菜单nn);menu();printf(%-20s %-15s %-5s %sn,ai.name,ai.phone,ai.type,ai.mail);printf(请输入新的类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”,取消修改请输入“4”):);s

28、canf(%d,&ai.zhonglei);k=ai.zhonglei;if(k5) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1);switch(k)case 1:strcpy(ai.type,BGL);break; case 2:strcpy(ai.type,GRL);break; case 3:strcpy(ai.type,SWL);break; case 4:printf(取消操作返回上一菜单n);menu(); printf(请输入新的姓名:); scanf(%s,&(ai.name); printf(请

29、输入新的电话号码:); scanf(%s,&(ai.phone);printf(请输入新的邮箱地址:); scanf(%s,&(ai.mail); saveB(n);choice();/*删除功能*/void del()int i,n,j,w1,k;char b100;don=load();if(n=0) printf(n);printf(通讯录为空返回主菜单nn);menu();printf(请输入你要删除的人物名称:);scanf(%s,&b);for(i=0;in;i+)if(strcmp(b,ai.name)=0) break;if(i=N)printf(查无此人返回主菜单n);men

30、u;printf(%-20s%-15s%-5s %sn,ai.name,ai.phone,ai.type,ai.mail);printf(确定要删除此人吗?(“是”请输入“1”,“否”请输入“2”):);scanf(%d,&k);if(k2) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1);switch(k)case 1:for(j=i;jn;j+) aj=aj+1;saveB(j);choice();menu();break; case 2:printf(取消操作返回主菜单n);menu(); /*加载函数*/l

31、oad()FILE *fp;int i;if(fp=fopen(file.txt,ab+)=NULL)printf(n不能打开此文件返回主菜单n); return NULL;for(i=0;!feof(fp);i+) fread(&ai,sizeof(MAGE),1,fp);fclose(fp);return(i-1);/*保存函数*/void saveA(int i)FILE *fp;if(fp=fopen(file.txt,ab)=NULL)printf(n不能打开此文件n); return NULL;if(fwrite(&ai,sizeof(MAGE),1,fp)!=1)printf(读

32、写错误n);fclose(fp);void saveB(int n)FILE *fp;int i;if(fp=fopen(file.txt,wb)=NULL)printf(n无法打开文件n);return NULL;for(i=0;in;i+)if(fwrite(&ai,sizeof(MAGE),1,fp)!=1)printf(读写错误返回主菜单n);menu();fclose(fp);/*操作成功函数*/void choice()int k,w1;doprintf(操作已成功,请选择下面的操作(1.返回主菜单 2.退出):); scanf(%d,&k);if(k2) w1=1;getchar

33、();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1); switch(k) case 1:menu();break; case 2:exit(0);break; /*菜单函数*/void menu()int n,w1; do puts(ntt*欢迎使用手机通讯录管理系统*n); puts(tt*菜单*n); puts(ttt1.查看功能); puts(ttt2.增加功能); puts(ttt3.修改功能); puts(ttt4.删除功能); puts(ttt5.退出); puts(ntt*n); printf(请选择你想要的功能序号(1-5):

34、); scanf(%d,&n); if(n5) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1); switch(n) case 1:search();break; case 2:add();break; case 3:modify();break; case 4:del();break; case 5:exit(0);break; /*主函数*/main()menu();7程序运行结果欢迎界面:查看功能:增加功能:修改功能:删除功能:退出:输入5,再输入【enter】,即可退出。8编程中遇到的困难及解决方法此次的编程对于我而言无疑是一件巨大的挑战,因自己的能力的问题,在编程过程中可以说是困难重重,首先便是时间的问题,虽然足足有好几天的时间让我们在完成一个程序,但是水平确实比较水,在程序中发现,由于函数过多,链接的问题自己无法解决。在运行程序的时候发现了其中的一些问题,并且得以解决,如运行中使用查看的时候,排版因为字数问题产生错位,这个可以通过转移字符来纠正。该程序应用了文件的储存、调用。文件在载入和保存的使用上可以应用不同的函数来完成,在此我使用了wb的方式来打开文件,并且用fwrite及fread进行文件的读写。文件在进行调用或打开时应注意

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号