1、c语言通讯录专业课程设计报告模板青岛工学院C语言课程设计报告书题 目通讯录管理系统学生姓名指导教师姜琴学 院信息工程学院专业班级软件工程2012级1班 组内分工姓名主要任务占系统比例程序的总体构思,写主函数,程序的调试25%写visit函数,分析程序代码结构,调试程序25%分析程序需求功能,写modifymenu函数调试程序25%写found函数,收集资料解决难点,调试程序25%目 录1 前言12 需求分析23 模块设计图34 NS流程图清单45 存储结构及函数说明56 课程设计结果87 实践心德体验98 源代码101 前言随着互联网的蓬勃与移动设备的发展,越来越多的联系人信息需要我们储存。不
2、管是个人,还是企业,都需要一个功能齐全,稳定,快捷的通讯录系统来管理联系人资料。现在我们要用语言写一个简易的通讯录管理系统,实现通讯录的基本功能。由于我们学识浅薄,我们只能把程序简单化,太复杂的功能也无法实现。在此程序中只实现了创建、修改、删除的基本功能;在修改于删除里面带有查询功能,来查询需要修改于删除的对象。而且我们还参考了c语言程序设计与应用与百度上的一些资料。 程序功能有限,又不好的地方尽请谅解。2 需求分析 首先进入系统检测文件夹中是否有相关txt文档,有进入通讯录系统,没有创建一个txt文档用来存储联系人姓名; 建立一个通讯录,包括联系人姓名、电话号码、号,并保存在txt文档中;
3、能够根据联系人姓名来修改和删除联系人的所有信息,并修改保存在txt文档中的联系人; 可从主界面直接退出系统,下次使用时可导入上次存储的联系人信息、并进行操作。3 模块设计图此为通讯录重要函数流程: 通讯录管理系统创建、读取文件函数loadfile()创建通讯录系统found()浏览通讯录系统visit()推出通讯录系统exit(0)删除通讯录系统deleted()修改通讯录系统modifymenu() menu()Lodefile() Menu()exit(0)case5 case4 case3 case2 case1 deleted()modifymenu()visit()found()4
4、NS流程图清单: File *fp,打开该文件 是 是否有tellnfo 否导入文件里面 创建一个文件的联系人 关闭文件2. found函数 输入联系人信息 NO+ 调用savefile函数是 是否继续 否 调用found函数 getsch(); menu(); 5 存储结构及函数说明头文件有:#include#include#include #include struct record 定义一个结构体,用来存储联系人的信息 char name20; char tel20; char 20; TelInfo500;int NO; 定义变量NO,用来记入联系人的编号FILE *fp; 定义文件指
5、针int loadfile(); 创建、读取文件void savefile(); 保存创建的联系人到文件中void menu(); 主菜单函数void found(); 创建联系人函数void modifymenu(); 修改联系人信息函数void deleted(); 删除联系人函数void visit(); 游览联系人函数(1) 主函数main():调用loadfile()(/*创建文件,读取文件*/)函数;创建一个永真的条件while(1)以便循环使用;调用menu()(主菜单函数);(2) 创建、读取文件函数loadfile():定义一个文件指针,把0赋给NO;先判断电脑里是否有此文件
6、,如果没有创建一个文件,如果有导入此文件中的信息;(3) 主菜单函数menu():在住界面显示所有功能,包括创建、游览、修改、删除、退出系统;用switch语句来控制我们的选择并进入相应的函数;(4) 创建联系人函数found():输入联系人的姓名、电话号码、号码,每输入一个联系人的资料NO就加一,并调用savefile()函数存储此联系人;(5) 保存创建的联系人函数savefile():用fwrite语句来存储已建的联系人;(6) 游览联系人函数visit():先判断NO是否为0,如果为0,则没有联系人,如果不为0,则依次按存储顺序输出联系人信息;(7) 修改联系人函数modifymenu
7、():定义一个数组name20;判断NO是否为0,不为0则显示所有联系人的姓名,然后输入要修改联系人的姓名,用strcmp语句来找到你需要修改的联系人并显示出来;确定修改此联系人后用swtich语句来控制需要修改的地方,包括姓名、电话号码、号码;调用savefile()函数存储;(8) 删除联系人函数deleted():定义一个数组name20;判断NO是否为0,不为0则显示所有联系人的姓名,然后输入要删除联系人的姓名,用strcmp语句来找到你需要删除的联系人并显示出来;确定删除后,把此联系人以后的联系人的NO编号都向前移一位,从而把此联系人删除,用循环控制语句为“TelInfoj=TelI
8、nfoj+1;”;6 课程设计结果在写程序时,我们尽力做到美观、可操作性强。每一个函数都有它的功能,并做到通用函数的循环调用,减小了程序的复杂度,让程序看上去结构层次分明。我们用文件形式来存储联系人信息,并保存,方便下次的使用,认程序更稳定。程序虽然简陋,但能完美运行,一下为程序的部分界面:7 实践心得体会 通过这次通讯录的设计,我对很多的函数有了新的认识,也学会了运用多种函数,明白了写软件的基本过程和基本方法。 在设计的过程中遇到了很多的困难,有程序上的也有实验报告上的,尤其是软件在一次一次的调试失败后,对我们打击很大。但最后我们还是咬牙让自己坚持了下来,通过小组的不断试验和讨论以及同学们的
9、帮助,我们总算顺利的完成了程序设计。虽然在调试过程中遇到了许多困难,但当调试成功时那种喜悦的感觉,没有什么东西可以代替。在编写过程中我们都发现我们有许多的知识漏洞和缺陷,需要进一步努力来不断完善自己。 总之,此次过程不仅给我很多好的经验,同时加深了同学间的关系,增强了团队解决问题的能力。8 源代码#include#include#include #include struct record char name20; char tel20; char 20; TelInfo500;int NO; FILE *fp; int loadfile();void savefile();void menu
10、();void found();void modifymenu();void deleted();void visit();int main()loadfile();while(1)menu();int loadfile() /*创建文件,读取文件*/FILE *fp;if(fp=fopen(,r)=0) printf(nnnnnttt 电话簿文件不存在); if (fp=fopen(,wb)=0) printf(ntttt建立失败); exit(0); else printf(nnttt 电话簿已建立);printf(nnttt 按任意键进入主菜单); getch(); NO=0;retur
11、n(NO); exit(0); fseek(fp,0,2); /*/if (ftell(fp)0) rewind(fp); for(NO=0;!feof(fp)&fread(&TelInfoNO,sizeof(struct record),1,fp);NO+); printf(nnnnn);printf(ntt 文件导入成功! );printf(nntttt按任意键返回主菜单); getch(); return(NO); else printf(ntt 没有可以访问的数据! ); printf(nnttt 按任意键返回主菜单进行添加); getch(); NO=0; return(NO); v
12、oid menu() /*主菜单*/int choice;system(cls);printf(nnt *欢迎使用通讯录系统*n); printf(ntt *创建通讯录请按:1*n);printf(ntt *游览通讯录请按:2*n);printf(ntt *修改通讯录请按:3*n);printf(ntt *删除联系人请按:4*n); printf(ntt *退出通讯录请按:5*n);printf(nt *这是通讯录的主菜单*n);printf(nntt 请输入你的选择 bb);scanf(%d,&choice); switch(choice) case 1:found();break;case
13、 2:visit();break;case 3:modifymenu();break;case 4:deleted();break;case 5:system(cls);printf(nnnnnnntt 谢谢使用此通讯录系统,( _ )/拜拜!nnnnnnnnnnnnnn);exit(0);default:menu();void found() /*创建通讯录*/ system(cls);printf(ntt* 请输入联系人信息 *n); printf(ntt 输入姓名:); scanf(%s,&TelInfoNO.name); printf(ntt 输入联系电话:); scanf(%s,&T
14、elInfoNO.tel); printf(ntt 输入号码:); scanf(%s,&TelInfoNO.); NO+;savefile(); printf(ntt 是否继续添加(y/n): bb); if(getch()=y) found(); elsesystem(cls);printf(nnnnnnnnttt 已成功保存所有联系人nnttt 请按任意键返回主菜单);getch();menu();void savefile() int i;if(fp=fopen(,wb)=0) printf(ntt文件打开失败!n); for(i=0;iNO;i+) if(fwrite(&TelInfo
15、i,sizeof(struct record),1,fp)!=1) printf(ntt写入文件错误!n); fclose(fp); void visit() /*游览通讯录*/ int i; system(cls); if(NO!=0) printf(ntt* 以下为通讯录所有信息*); for(i=0;iNO;i+) printf(nntt %d):,i+1);printf(ntt 姓 名: %s,TelInfoi.name); printf(ntt 联系电话: %s,TelInfoi.tel); printf(ntt 号码: %s,TelInfoi.); printf(ntt*); el
16、se printf(nnnnnnnnnttt 通讯录中无任何记录);printf(nnttt 请按任意键返回主菜单进行添加); getch(); menu(); void modifymenu() /*修改通讯录*/int mark=0; int i,k; int a=0; int t=0; char choice; char name20; struct record modify; system(cls); if(NO!=0)printf(nnntt以下为所有联系人的姓名:nn);printf(tt*nn); for(i=1;i=NO;i+)printf(tt%sn,TelInfoi-1.
17、name);printf(ntt*n); printf(ntt请输入您要修改的姓名:); scanf(%s,name); system(cls); for(i=a;iNO;i+) if(strcmp(TelInfoi.name,name)=0) k=i; mark=1; modify=TelInfoi; system(cls); printf(ntt* 以下是您将修改的联系人信息 *); printf(nntt 姓 名: %s,TelInfoi.name); printf(ntt 联系电话: %s,TelInfoi.tel); printf(ntt 号码: %s,TelInfoi.); pri
18、ntf(nntt 是否继续?y/n bb); if(getch()=n)menu(); else printf(ntt 选择您要修改的选项:); printf(nnttt(1)姓 名); printf(nttt(2)联系电话); printf(nttt(3)号码); printf(nttt(4)返 回nn); choice=getch(); switch(choice) case 1:printf(nttt请输入姓 名:); scanf(%s,TelInfoi.name); break; case 2: printf(nttt请输入联系电话:); scanf(%s,TelInfoi.tel);
19、 break; case 3: printf(nttt请输入号码:); scanf(%s,TelInfoi.); break; case 4: modifymenu(); break; default: modifymenu(); system(cls); printf(ntt 您的修改结果为:); printf(nntt 姓 名: %s,TelInfoi.name); printf(ntt 联系电话: %s,TelInfoi.tel); printf(ntt 号码: %s,TelInfoi.); printf(nntt 确认修改?y/n bb); if(getch()=n) TelInfoi
20、=modify; printf(ntt 修改未保存!n); elseprintf(ntt 修改成功!n); savefile(); mark+; printf(ntt 是否继续修改(y/n)n); if(getch()=y)modifymenu();elsemenu(); if(mark=0) printf(nnntttt没有该联系人的纪录); printf(nntttt是否继续修改(y/n) bb); if(getch()=y)modifymenu(); elseprintf(nnnnnnnnnttt 通讯录中无任何记录);printf(nnttt 请按任意键返回主菜单进行添加);getch
21、();menu(); void deleted() /*删除联系人*/ int i,j; int mark=0; char name20;system(cls);if(NO!=0)printf(nnntt以下为所有联系人的姓名:nn);printf(tt*nn); for(i=1;i=NO;i+)printf(tt%sn,TelInfoi-1.name);printf(ntt*n); printf(ntt 请输入要删除联系人姓名:); scanf(%s,name); system(cls); for(i=0;iNO;i+)if(strcmp(TelInfoi.name,name)=0)prin
22、tf(ntt 以下是您要删除的联系人纪录:); printf(nntt 姓 名: %s,TelInfoi.name); printf(ntt 联系电话: %s,TelInfoi.tel); printf(ntt 号码: %s,TelInfoi.); printf(nntt 是否删除(y/n) bb); if(getch()=y) for(j=i;jNO-1;j+)TelInfoj=TelInfoj+1; NO-; mark+; printf(ntt 删除成功n); savefile(); printf(ntt 是否继续删除(y/n) bb); if(getch()=y)deleted(); elsemenu(); elsemenu(); continue; if(mark=0) printf(nnntttt没有该联系人的纪录); printf(nntttt是否继续修改(y/n) bb); if(getch()=y)deleted(); elseprintf(nnnnnnnnnttt 通讯录中无任何记录);printf(nnttt 请按任意键返回主菜单进行添加);getch();menu();