1、c语言通讯录管理实验报告及源程序代码之欧阳音创编C语言程序设计实训报告时间:2021.03.11创作:欧阳音课程名称 C语言程序设计实训 课题名称 通讯录管理 专 业 软件工程 班 级 K软件151 学 号姓 名指导教师2016年 1 月 1 日湖北汽车工业学院科技学院C语言程序设计实训任务书课程名称 C语言程序设计实训 课 题 通讯录管理 专业班级 软件工程学生姓名 学 号 指导老师 审 批 一、设计内容与设计要求1设计内容:设计课题:通讯录管理 一、问题描述:该设计实现对通讯录得管理功能,具体包括从键盘输入通讯录的信息、从指定的文件中读入通讯录的信息、按姓名查询通讯录的信息、按分类查询通讯
2、录的信息、删除指定姓名的通讯录的信息、将通讯录信息保存在指定的文件中等。二、功能要求:1)能从键盘输入通讯录的信息(增加,输入时需要能检查该姓名的通讯录的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输入的类型是否存在)2)能从指定的文件中读入通讯录的信息3)能按姓名查询通讯录的信息4)能按分类查询通讯录的信息5)能删除指定姓名的通讯录的信息6)能将通讯录信息保存在指定的文件中7)所有数据符合实际应用要求2设计要求:1)设计正确,方案合理。2)界面友好,使用方便。3)程序精炼,结构清晰。4)上机演示。3设计报告要求:课程设计报告格式如下:1)正文的格式:一级标题用3号黑体,二
3、级标题用四号宋体加粗,正文用小四号宋体,行距为22。 2)正文的内容:课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释)。3)课程设计报告装订顺序:封面、任务书、目录、正文、评分、程序清单附件。二、进度安排星期时间班级内容地点二6:30-8:30K软件151熟悉课题的任务和要求,查阅相关资料,做好编码准备2601三6:30-8:30K软件151程序编码、调试2601四6:30-8:30K软件151程序编码、调试和测试,书写报告2601日6:30-8:30K软件151答辩、检查、验收、提交设计报告2601 湖北汽车工业学院科技
4、学院2015年12月 20 日1 系统需求分析本系统首先设计出了主函数,然后根据去要实现的功能分别设计,添加、显示、删除、查找、修改功能的子函数。在现实的函数设计过程中首先运用文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。添加函数在设计时通过申请一片空间,然后通过指针将需要添加进去,从而实现添加功能。删除函数的设计是首先从文件找到要删除的人,然后通过写一个实现删除目的的for循环将人从内存里面删除,然后在用写的方式打开文件,将内存的信息写入文件,实现删除。查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。修改也大体和删除相同。2 概要设计系统功能模块图
5、:3 详细设计3.1数据结构本系统主要采用链表结构类型来表示储存在“通讯录管理系统”中的信息。其中,链表结点由四个分量构成:编号、联系人姓名、电话号码、指向该结构体的指针。3.2 主菜单模块:本系统设置了5个子功能菜单,5个子功能的设计描述如下。(1)通讯录信息的输入。可以一次输入多个通讯成员的信息,建立通讯录。该功能由insert()函数实现。(2)通讯录信息的显示。可以查看通讯录中所有的通讯录成员记录。该功能由output()函数实现。(3)通讯录信息的保存。可以将输入的通讯录成员的信息进行保存。该功能由save()函数实现。(4)通信记录的删除。可以对通讯录中不再需要的信息进行删除。该功
6、能由del()函数实现。(要彻底删除,必须要删除counter.txt和通讯录.txt中的内容。如下图:)(5)通信记录的修改。可以将通讯录中的联系成员的信息进行修改,并保存。该功能由modify()函数实现。(6)通信记录的查找。可以通过3种方式进行对通讯信息进行查找。该功能由found(found_code()、found_name()、found_tele()函数实现。struct tele /定义数据结构char code8; /编号char name20; /姓名char tele16; /电话号码;/*函数声明*/void creat(); /创建通讯录 void load();
7、/加载数据void menu(); /菜单显示void choose_1(int); /选择功能void insert(); /1、通讯录信息的输入void output(); /2、通讯录信息的显示void save(); /3、通讯录信息的保存void del(); /4、通信记录的删除void modify(); /5、通信记录的修改void found(); /6、记录的查找(3种方式)void choose_2(int); /选择查询的方式void found_code(); /6.1、按编号查询void found_name(); /6.2、按姓名查询void found_tele
8、(); /6.3、按电话号码查询 void quit(); /7、退出系统3.3 添加模块此模块为添加信息模块,添加后再调用保存所添加的数据,支持多条信息的添加。YN【程序】/*通讯信息录入函数*/*将函数写入内存中,由personN数组保存着*/void insert()struct tele*p;system(cls);p=(struct tele*)malloc(sizeof(struct tele); /将动态分配的内存首地址赋给pprintf(nnnnnn);printf(t *nn);printf(t 编号:);scanf(%s,p-code);strcpy(personcount
9、er+1.code,p-code);printf(t 姓名:);scanf(%s,p-name);strcpy(personcounter+1.name,p-name);printf(t 电话:);scanf(%s,p-tele);strcpy(personcounter+1.tele,p-tele);printf(nt *);counter+;free(p); /释放空间getchar();getchar();system(cls);menu();3.4 显示模块此模块为显示所有记录,流程图如下:【程序】/*通讯信息显示函数*/*从内存中将数据显示在屏幕上,不用打开文件*/void outp
10、ut()int i=1;system(cls);if(counter)for(i=0;i=counter;i+)printf(nt%-8s%-20s%-16sn,personi.code,personi.name,personi.tele);printf(t);elseprintf(nnnnntt记录为空,请输入联系人信息!);getchar();getchar();system(cls);menu();3.5 删除模块此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到save函数。其流程图如下:YNYN【程序】/*信息删除函数*/void del() /
11、根据姓名删除,根据显示选择要删除的内容int k=1;int c=0;char m;char namekey20;system(cls);printf(nnnnnnttt请输入要删除的姓名:);scanf(%s,namekey);while(k=counter)if(!strcmp(namekey,personk+.name)c=k-1;break;if(c)printf(ttt已查到,记录为:nnn);printf(t%-10s%-20s%-20sn,person0.code,person0.name,person0.tele);printf(t%-10s%-20s%-20sn,person
12、c.code,personc.name,personc.tele);printf(nnttt确定要删除吗?(Y/N):);scanf(%s,&m);if(m=y|m=Y)if(c=counter)strcpy(personcounter.code,0);strcpy(personcounter.name,0);strcpy(personcounter.tele,0);counter-;elsefor(k=c;k=counter;k+) /后面的信息将前面的信息覆盖掉strcpy(personk.code,personk+1.code);strcpy(personk.code,personk+1
13、.name);strcpy(personk.code,personk+1.tele);strcpy(personcounter.code,0); /最后的信息为空 strcpy(personcounter.name,0);strcpy(personcounter.tele,0);counter-;printf(ttt删除成功!);getchar();getchar();system(cls);save(); /用sava()函数将删除后的信息重新保存menu();elsesystem(cls);menu();elseprintf(nttt对不起没有此人记录!);getchar();getcha
14、r();system(cls);menu();4 系统测试4.1 菜单显示主菜单具有所有函数的功能实现的选择功能,通过主菜单的操作进入各个功能。主菜单主要由主函数提供,其功能由子函数实现。运行结果如下图所示:4.2 添加 在主菜单界面,用户输入1并回车,然后按照提示建立通讯录,分别输入通讯录成员的编号,姓名,电话号码,运行结果如下图所示:4.3 显示在主菜单下,用户输入2并回车,可以查看通讯录中所有成员信息。运行结果如下图所示:5课程设计总结通过这次的课程设计,我对很多的函数有了新的认识,也学会了很多,学会了运用多种函数,我也明白了编写软件的基本过程和方法。在这个过程中我学会了很多平时编程不会
15、使用的函数,还有编写的方法。特别是文件的开启和关闭,读与写,总的来说,这次课程设计让我受益匪浅啊!其实在编写软件的过程中也遇到了很多的困难,每一个自定义函数都是经过多次的调试和改正错误,曾经想过要放弃的,但是为了完成这个任务还是拼命的坚持了下来,毫不畏惧困难才是真正的我,还有就是编写和改错的过程中受到许多同学的帮助,在一番折腾之后,我总算是顺利的完成了这次的通讯录管理的程序设计。虽然在调试程序的过程中,遇到过很多很多的困难,但是当软件调试成功时那种喜悦的感觉没有什么东西可以代替。在程序的编写过程中我发现我自己有很多的知识漏洞和缺陷,以至于编写完后,一经过编译,发现了好多的错误,所以我需要进一步
16、的来完善我自己。在这几天的编写过程中,对我而言,我的C语言是有了很大的进步和了解。在此次的编写过程中,我知道和掌握了很多的经验,它们肯定是能够促进我学习的。此次的课程设计不仅给了我很多很好的经验,也让我体会到了失败时的焦虑、无助和难受,当然我更喜欢成功后的兴奋和喜悦咯啦啦啦附录:源程序代码:#include#include#include#include#define N 35 /改变N的值,就可以改变记录的联系人个数struct tele /定义数据结构char code8; /编号char name20; /姓名char tele16; /电话号码;/*定义全局变量*/FILE*fp; /
17、文件指针struct tele personN; /记录联系人信息int counter; /统计记录个数(联系人个数)/*函数声明*/void creat(); /创建通讯录 void load(); /加载数据void menu(); /菜单显示void choose_1(int); /选择功能void insert(); /1、通讯录信息的输入void output(); /2、通讯录信息的显示void save(); /3、通讯录信息的保存void del(); /4、通信记录的删除void modify(); /5、通信记录的修改void found(); /6、记录的查找(3种方式
18、)void choose_2(int); /选择查询的方式void found_code(); /6.1、按编号查询void found_name(); /6.2、按姓名查询void found_tele(); /6.3、按电话号码查询 void quit(); /7、退出系统/*MAIN函数*/int main() system(cls); /清屏creat(); /为程序创建文件fp=fopen(counter.txt,r); /r 只读(打开)fscanf(fp,%d,&counter); /将数据赋值给counterfclose(fp); /关闭打开的文件load(); /数据装载至内
19、存中menu();return 0;/*创建通讯录*/void creat()if(fp=fopen(通讯录.txt,r)=NULL) /r 只读(打开)fp=fopen(通讯录.txt,w); /w 为只写建立一个新的文件fprintf(fp,%-10s%-20s%-20sn,编号,姓名,电话); /写入基本信息person【0】fclose(fp);if(fp=fopen(counter.txt,r)=NULL) /r 只读(打开)fp=fopen(counter.txt,w);fprintf(fp,%d,0); /写入初值(自有文件新建时才有)fclose(fp);void load()
20、int i;if(fp=fopen(通讯录.txt,r)!=NULL) /r 只读(打开),打开文件成功 for(i=0;icode);strcpy(personcounter+1.code,p-code);printf(t 姓名:);scanf(%s,p-name);strcpy(personcounter+1.name,p-name);printf(t 电话:);scanf(%s,p-tele);strcpy(personcounter+1.tele,p-tele);printf(nt *);counter+;free(p); /释放空间getchar();getchar();system
21、(cls);menu();/*通讯信息显示函数*/*从内存中将数据显示在屏幕上,不用打开文件*/void output()int i=1;system(cls);if(counter)for(i=0;i=counter;i+)printf(nt%-8s%-20s%-16sn,personi.code,personi.name,personi.tele);printf(t);elseprintf(nnnnntt记录为空,请输入联系人信息!);getchar();getchar();system(cls);menu();/*保存、修改、删除只针内存中的数组进行操作*/*通讯信息保存函数*/void save()int i;system(cls);if(fp=fopen(counter.txt,w)=NULL) /w 只写覆盖原来的数据pri
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1