1C语言程序设计实训报告课程名称C语言程序设计实训课题名称通讯录管理专业软件工程班级K软件151学号姓名指导教师2016年1月1日2湖北汽车工业学院科技学院C语言程序设计实训任务书课程名称C语言程序设计实训课题通讯录管理专业班级软件工程学生姓名学号指导老师审批3一、设计内容与设计要求1.设计内容:设计课题:通讯录管理一、问题描述:该设计实现对通讯录得管理功能,具体包括从键盘输入通讯录的信息、从指定的文件中读入通讯录的信息、按姓名查询通讯录的信息、按分类查询通讯录的信息、删除指定姓名的通讯录的信息、将通讯录信息保存在指定的文件中等。二、功能要求:1)能从键盘输入通讯录的信息(增加,输入时需要能检查该姓名的通讯录的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输入的类型是否存在)2)能从指定的文件中读入通讯录的信息3)能按姓名查询通讯录的信息4)能按分类查询通讯录的信息5)能删除指定姓名的通讯录的信息6)能将通讯录信息保存在指定的文件中7)所有数据符合实际应用要求2.设计要求:1)设计正确,方案合理。2)界面友好,使用方便。3)程序精炼,结构清晰。4)上机演示。3.设计报告要求:课程设计报告格式如下:1)正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。2)正文的内容:课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释)。3)课程设计报告装订顺序:封面、任务书、目录、正文、评分、程序清单附件。二、进度安排4星期时间班级内容地点二6:30-8:30K软件151熟悉课题的任务和要求,查阅相关资料,做好编码准备2601三6:30-8:30K软件151程序编码、调试2601四6:30-8:30K软件151程序编码、调试和测试,书写报告2601日6:30-8:30K软件151答辩、检查、验收、提交设计报告2601湖北汽车工业学院科技学院2015年12月20日5目录1系统需求分析..............................................62概要设计..................................................63详细设计..................................................64系统测试..................................................145课程设计总结..............................................1561系统需求分析本系统首先设计出了主函数,然后根据去要实现的功能分别设计,添加、显示、删除、查找、修改功能的子函数。在现实的函数设计过程中首先运用文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。添加函数在设计时通过申请一片空间,然后通过指针将需要添加进去,从而实现添加功能。删除函数的设计是首先从文件找到要删除的人,然后通过写一个实现删除目的的for循环将人从内存里面删除,然后在用写的方式打开文件,将内存的信息写入文件,实现删除。查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。修改也大体和删除相同。2概要设计系统功能模块图:3详细设计3.1数据结构本系统主要采用链表结构类型来表示储存在“通讯录管理系统”中的信息。其中,链表结点由四个分量构成:编号、联系人姓名、电话号码、指向该结构体的指针。3.2主菜单模块:本系统设置了5个子功能菜单,5个子功能的设计描述如下。(1)通讯录信息的输入。可以一次输入多个通讯成员的信息,建立通讯录。该功能由insert()函数实现。主菜单添加查询删除修改退出编号、姓名、电话号码编号、姓名、电话号码输入姓名输入编号,重新输入编号、姓名、电话号码7(2)通讯录信息的显示。可以查看通讯录中所有的通讯录成员记录。该功能由output()函数实现。(3)通讯录信息的保存。可以将输入的通讯录成员的信息进行保存。该功能由save()函数实现。(4)通信记录的删除。可以对通讯录中不再需要的信息进行删除。该功能由del()函数实现。(要彻底删除,必须要删除counter.txt和通讯录.txt中的内容。如下图:)(5)通信记录的修改。可以将通讯录中的联系成员的信息进行修改,并保存。该功能由modify()函数实现。(6)通信记录的查找。可以通过3种方式进行对通讯信息进行查找。该功能由found(found_code()、found_name()、found_tele())函数实现。structtele//定义数据结构{charcode[8];//编号charname[20];//姓名chartele[16];//电话号码};/*********************函数声明********************/voidcreat();//创建通讯录voidload();//加载数据voidmenu();//菜单显示voidchoose_1(int);//选择功能8voidinsert();//1、通讯录信息的输入voidoutput();//2、通讯录信息的显示voidsave();//3、通讯录信息的保存voiddel();//4、通信记录的删除voidmodify();//5、通信记录的修改voidfound();//6、记录的查找(3种方式)voidchoose_2(int);//选择查询的方式voidfound_code();//6.1、按编号查询voidfound_name();//6.2、按姓名查询voidfound_tele();//6.3、按电话号码查询voidquit();//7、退出系统3.3添加模块此模块为添加信息模块,添加后再调用保存所添加的数据,支持多条信息的添加。YN【程序】/*************************通讯信息录入函数**********************//**************将函数写入内存中,由person[N]数组保存着**********/voidinsert(){开始从0~6调用insert函数k=1?保存调用save函数返回主菜单结束9structtele*p;system(cls);p=(structtele*)malloc(sizeof(structtele));//将动态分配的内存首地址赋给pprintf(\n\n\n\n\n\n);printf(\t*******************************\n\n);printf(\t编号:);scanf(%s,p-code);strcpy(person[counter+1].code,p-code);printf(\t姓名:);scanf(%s,p-name);strcpy(person[counter+1].name,p-name);printf(\t电话:);scanf(%s,p-tele);strcpy(person[counter+1].tele,p-tele);printf(\n\t************************************);counter++;free(p);//释放空间getchar();getchar();system(cls);menu();}3.4显示模块此模块为显示所有记录,流程图如下:选择显示功能显示所有记录10【程序】/**********************通讯信息显示函数****************************//***********从内存中将数据显示在屏幕上,不用打开文件***************/voidoutput(){inti=1;system(cls);if(counter){for(i=0;i=counter;i++)printf(\n\t%-8s%-20s%-16s\n,person[i].code,person[i].name,person[i].tele);printf(\t);}elseprintf(\n\n\n\n\n\t\t记录为空,请输入联系人信息!);getchar();getchar();system(cls);menu();}3.5删除模块此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到save函数。其流程图如下:返回主菜单开始输入要删除信息的姓名11YNYN【程序】/***************************信息删除函数***************************/voiddel()//根据姓名删除,根据显示选择要删除的内容{intk=1;intc=0;charm;charnamekey[20];system(cls);printf(\n\n\n\n\n\n\t\t\t请输入要删除的姓名:);scanf(%s,namekey);while(k=counter){if(!strcmp(namekey,person[k++].name)){c=k-1;break;结束没有找到信息显示找到的信息删除成功提示未删除是否找到信息是否删除12}}if(c){printf(\t\t\t已查到,记录为:\n\n\n);printf(\t%-10s%-20s%-20s\n,person[0].code,person[0].name,person[0].tele);printf(\t%-10s%-20s%-20s\n,person[c].code,person[c].name,person[c].tele);printf(\n\n\t\t\t确定要删除吗?(Y/N):);scanf(%s,&m);if(m=='y'||m=='Y'){if(c==counter){strcpy(person[counter].code,\0);strcpy(person[counter].name,\0);strcpy(person[counter].tele,\0);counter--;}else{for(k=c;k=counter;k++)//后面的信息将前面的信息覆盖掉{strcpy(person[k].code,person[k+1].code);strcpy(person[k].code,person[k+1].name);13strcpy(person[k].code,person[k+1].tele);}strcpy(person[counter].code,\0);//最后的信息为空strcpy(person[counter].name,\0);strcpy(person[counter].tele,\0);counter--;}printf(\t\t\t删除成功!);getchar();getchar();system(cls);save();//用sava()函数将删除后的信息重新保存menu();}else{system(cls);menu();}}else{printf(\n\t\t\t对不起没有此人记录!);getchar();getchar();system(cls);menu();}14}4系统测试4.1菜单显示主菜单具有所有函数的功能实现的选择功能,通过主菜单的操作进入各个功能。主菜单主要由主函数提供,其功能由子函数实现。运行结果如下图所示:4.2添加在主菜单界面,用户输入1并回车,然后按照提示建立通讯录,分别输入通讯录成员的编号,姓名,电话号码,运行结果如下图所示:154.3显示在主菜单下,用户输入2并回车,可以查看通讯录中所有成员信息。运行结果如下图所示:5课程设计总结通过这次的课程设计,我对很多的函数有了新的认识,也学会了很多,学会了运用多种函数,我也明白了编写软件的基本过程和方法。在这个过程中我学会了很