




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c程序上机实习报告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商务类)、电子邮件。例如:杨春商务类 chuny 当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;当通信录中超过15条信息时,存储空间已满,不能再录入新数据;录入的新数据能按递增的顺序自动进行条目编号。 (3)修改功能:选中某个人的姓名时,可对此人的相应数据
3、进行修改 (4)删除功能:选中某个人的姓名时,可对此人的相应数据进行删除,并自动调整后续条目的编号。2程序设计思路根据题目要求,通讯录中的每一条信息应当是以文本文件的方式存放,所以要提供文件的输入输出等操作;在程序中需要对通讯录内容的管理,应提供查看,增加,修改,删除条目等操作;另外还应提供键盘是选择菜单实现功能的选择。3功能模块图手机通信录管理系统退 出删除功能修改功能增加功能 4数据结构设计根据题目要求,也是为了方便以后调用,我们选择应用结构体来进行该程序的编写。本程序也可以使用数组和链表完成,但是考虑到,链表对于我们还过于复杂,时间有限,且题目中有所谓“储存空间”的限制,所以没有必要应用
4、链表。没有应用数组是考虑到结构体能更好的完成调用工作。而且可以使程序看起来更有条理。程序中应用函数调用是必须的。这种程序中,应用函数调用可以使系统更具模块化。本程序的函数调用中,主函数只是对菜单函数进行了调用,这样由于子函数之间是可以相互调用的关系,所以,为后面调用菜单提供方便。5. 算法设计1、主函数主函数设计得应简单、直观,所以我应用了大量的函数调用。为了方便主菜单也可以调用,所以把菜单设计成了一个调用函数,具体方法流程可见流程图。【流程图】显示菜单列出功能输入n选择需要的功能,判断n的值是否在15之间 否 是根据n的值调用各功能模块函数【程序】 /*菜单函数*/void menu()in
5、t 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):); scanf(%d,&n); if(n5) w1=1;getchar();printf(输入错误返回主菜单n);menu(); else w1=0;while(w1=1); switch(n) case 1:search();break; case
6、2:add();break; case 3:modify();break; case 4:del();break; case 5:exit(0);break; /*主函数*/main()menu();2、各功能模块设计(1)查看功能模块 【需求分析】 该模块的功能是选择一个查询的类别就可以显示出该类别中的所有信息条目(办公类,个人类,商务类),并且其重要考虑到该类中的内容是否有为空的情况,以及在选择类别的过程中是否有输入错误的情况。【流程图】显示已有的种类菜单输入n选择想要查看的种类,并判断n的值是否在1-3之间 根据n值输出各种类中所有成员信息是 否 返回主菜单【程序】 /*查看功能*/vo
7、id 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(n)case 1:putout(1);break; case 2:putout(2);break; case
8、3:putout(3);break;(2)添加功能模块 【需求分析】 该模块的功能是要求增添一个信息条目(其中包括姓名、电话号码、分类、电子邮件),观察这种信息条目,很容易就联想到用结构体的方式来储存。在添加之前应该先检查储存器是否已满;当然在添加过程应考虑到是否有姓名或电话号码重复的情况,在这种情况下应提醒操作者并退出操作。调用加载函数n=load();并计算可以记录个数n 【流程图】 判断储存器是否已满 是 否 输入姓名判断输入的姓名是否存在 是 否输入电话号码 判断输入的电话号码是否存在 是 否通过n来输入类别,并判断n是否在1-3之间 是 输入电子邮件地址 返回主菜单 【程序】/*添加
9、功能*/void add()int i,n,m,w1;don=load();/*打开文件*/ if(n=n) printf(储存器已满返回主菜单n);menu();/*判断储存是否已满*/ if(n!=0) printf(请输入姓名:); scanf(%s,&); for(i=0;in;i+) if(strcmp(,)=0)printf(已存在返回主菜单n);menu();/*判断姓名是否存在*/ printf(请输入电话号码:); scanf(%s,&an.phone); for(i=0;in;i+) if(strcmp(ai.phone,an.ph
10、one)=0)printf(已存在返回主菜单n);menu(); if(n=0) printf(请输入姓名:); scanf(%s,&); 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,
11、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();(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,)=0)break;/* 将输入的名字存入c中,在依次与文件中的名字进行比较。*/if(i=n)pri
13、ntf(n);printf(查无此人返回主菜单nn);menu();printf(%-20s %-15s %-5s %sn,,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);b
14、reak; case 2:strcpy(ai.type,grl);break; case 3:strcpy(ai.type,swl);break; case 4:printf(取消操作返回上一菜单n);menu(); printf(请输入新的姓名:); scanf(%s,&(); 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,)=0) break;if(i=n) p
16、rintf(查无此人返回主菜单n);menu;printf(%-20s%-15s%-5s %sn,,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(取消操作返回主菜
17、单n);menu(); 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(
18、i=0;!feof(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(
20、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,,ai.phone,ai.type,ai.mail); menu();(5)操作成功函数choice()【说明】 该函数用于在执行完某一操作时让操作者选择下一步的操作。【程序】void choice()int k,w1;
21、doprintf(操作已成功,请选择下面的操作(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 name
22、20; char 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
23、%-5s %sn,,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
24、);switch(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,&); for(i=0;in;i+) if(strcmp(,)=0)printf(已存在返回主菜单n);menu(); prin
25、tf(请输入电话号码:); 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,&); printf(请输入电话号码:); scanf(%s,&an.phone); printf(请输入类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”):);scanf(%d,&an.zhonglei);m=an.zhonglei;if(m3) w1=1;getchar();print
26、f(输入错误返回主菜单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 c
27、har c100; n=load();if(n=0) printf(n);printf(通讯录为空返回主菜单nn);menu();printf(请输入你要修改的人物名称:);scanf(%s,&c);for(i=0;in;i+)if(strcmp(c,)=0)break;if(i=n)printf(n);printf(查无此人返回主菜单nn);menu();printf(%-20s %-15s %-5s %sn,,ai.phone,ai.type,ai.mail);printf(请输入新的类别(办公类请输入“1”,个人类请输入“2”,商务类请输入“3”,取消修改请输
28、入“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; case 2:strcpy(ai.type,grl);break; case 3:strcpy(ai.type,swl);break; case 4:printf(取消操作返回上一菜单n);menu(); printf(请输入新的姓名:); scanf(%s,&();
29、 printf(请输入新的电话号码:); 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,)=0) break;if(i=n)printf(查无此人返回
30、主菜单n);menu;printf(%-20s%-15s%-5s %sn,,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();
31、/*加载函数*/load()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
32、)printf(读写错误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=
33、1;getchar();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(请选择你想要的功
34、能序号(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();break; case 3:modify();break; case 4:del();break; case 5:exit(0);break; /*主函数*/main()menu();7程序运行结果欢迎界面:查看功能:增加功能:修改功能:删除功能:退出:输入5,再输入【enter】,即可退出。8编程中遇到的困难及解决方法此次的编程对于我而言无疑是一件巨大的挑战,因自己的能力的问题,在编程过程中可以说是困难重重,首先便是时间的问题,虽然足足有好几
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 棉花丰收科技手册
- 河北省曲周县2025年上半年公开招聘村务工作者试题含答案分析
- 河北省河间市2025年上半年公开招聘辅警试题含答案分析
- 2025版石材行业绿色供应链体系建设合同
- 2025版工业厂房使用权租赁合同
- 2025版商铺入股及物业运营管理合同
- 2025电子科技大学与知名企业联合研发项目技术合同范本
- 2025电脑绣花机产品研发与技术转移合同
- 2025版水电暖工程设计与施工总承包合同范本
- 2025年度吊装设备操作人员培训与考核合同
- 《平方根》(第1课时)示范公开课教学设计【北师大版八年级数学上册】
- 《信息检索与处理(修订版)》课件下 第2单元第二课 分析信息-第3单元 综合探究实践活动
- 楼盘融资商业计划书
- 物业费催费技巧(干货版)
- 2023-2024学年江苏省南通市如皋市重点中学八年级(上)第二次月考数学试卷(含解析)
- 脑梗塞个案护理查房
- 2013年天津公务员考试职位表
- 矿山安全供电讲义
- 小学语文阅读理解答题万能公式全套
- 公司管理程序文件模板
- 化学(医药卫生类)中职PPT完整全套教学课件
评论
0/150
提交评论