c语言课程设计(通信管理系统).doc
课程设计报告正文1、 目的:1)对C各部分知识的综合应用能力2)提高程序设计的能力3)提升对于较大程序的抽象分析设计能力4)学习调试和测试的技巧2、所做题目的意义:通讯录管理系统在当今这个信息发达的社会是必不可少的,这个通讯录管理系统可以方便的为我们添加、管理联系人,不必一定要记住这些庞大的信息,可以很方便的调用出自己所需要的信息,随时的修改这些信息,这些在这个时代是非常的必要的。3、 本人所作的工作:(1)、写出了预习报告。从图书馆搜集了些这方面的资料(2)、想好思路,写出了程序代码(3)、调试程序,找出其中的错误,最终成功的运行出程序(4)、写出课程设计报告4、系统的主要功能: 该系统的是一个小型的通讯系统,它具有一般的通讯系统都具有的功能该程序具有查找、添加、修改、删除功能,其中通讯录包括:姓名,电话,街道,城市,省,邮编。5、系统的总体设计:系统的基本要求和内容:该系统要求具有查找,添加,修改,删除功能,其中通讯录包括:姓名、电话,街道,城市,省,邮编。但在实际设计中增加了一项,那就是末尾添加,可以在已有的记录末尾再次添加,不必每次都重新添加,方便用户描绘及绘制出系统的功能结构框图、程序设计组成框图,流程图等:此系统共分为九大模块,分别为以下的模块:第一模块:主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。第二模块:quitRec()的功能是:退出选单。第三模块:createRec()的功能是:创建新的通讯录。第四模块:addRec()的功能是:在通讯录的末尾写入新的信息,并返回选单。第五模块:findRec()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。第六模块:alterRec()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回。第七模块:deleteRec()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。第八模块:listRec()的功能是显示通讯录中的所有记录。第九模块:saveRec() 的功能是保存某人的信息在某一文件夹里。以上九大模块为此通信系统的就大基本模块,用此模块设计可以清楚表明通信管理系统程序的功能、格局,可以用以下组成框图来表示:(1)系统结构图(功能模块图)和数据变量说明主菜单主函数输入创建信息末尾写入查询信息修改信息删除信息显示记录保存信息退出系统 (2)功能模块说明:(1)、主函数输入模块开始输入ii=1i=2i=3查询通讯录创建通讯录添加通讯录i=4i=5I=6输入错误删除通讯录退出通讯录修改通讯录(2)quitRec函数模块 (3)createRec函数模块开始保存记录吗保存返回主函数返回主函数清屏输入返回主程序开始(4)addRec函数模块 (5)findRec函数模型开始输入想在哪个数列后面加i=-1返回主函数输入新数据保存返回主函数开始输入姓名Str=recordsj.name未找到该联系人显示数据返回主函数 (7)、deleteRec函数模型开始输入名字删除数据返回主函数(6)、alterRec函数模型开始输入数列显示数据输入数据返回主函数 (8)、listRec函数模型 (9)、saveRec函数模型开始打开文件写入数据退出主函数开始输入序列号输出数据返回主函数 (3)、详细设计模块功能说明: 第一模块:主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。第二模块:quitRec()的功能是:退出选单。第三模块:createRec()的功能是:创建新的通讯录。第四模块:addRec()的功能是:在通讯录的末尾写入新的信息,并返回选单。第五模块:findRec()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。第六模块:alterRec()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回。第七模块:deleteRec()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。第八模块:listRec()的功能是显示通讯录中的所有记录。第九模块:saveRec() 的功能是保存某人的信息在某一文件夹里。在所有的函数中,main()函数数入口函数,用户输入数据进行整个程序的执行,整个函数的出口是qiut()函数,每一个函数执行完毕后都要退到主函数中,基本每个输入、改动或者是删除的函数都要调用保存函数,而主函数调动所有的函数。(4)、调试与测试:在此次的课程设计中,做困难的一部分便是调试与测试这部分了,在此次调试中最开始是符号标点的问题,有许多都没注意,最终还是慢慢的把这些错误调试出来了;还有一种错误便是库函数的问题,在此次调试中,发现有许多别的软件里的库函数在此软件中不能用,最终还是通过再次编写被调用函数来实现了预期的功能;此外,在函数的调试中,还发现一种问题,在所绘的表格中,无法对齐表格,经过调试,移动表格的位置来实现了表格的工整;还有,在测试中,发现原本应该在两个页面的数据在同一个页面中显示出来了,经过分析,认为这是由于没有清屏的结果,加上清屏后,问题终于解决了。(5)、运行结果:1、主菜单:2、 创建新数据:首先输入创建的序号“2”,会进入以下这个界面: 输入数据后然后会依次出现下面的条目:,最后返回到先前的主菜单3、 查找数据:按了“1”以后,会出现以下菜单:会提示你输入要查找的姓名输入姓名后会出现以下的显示退出到主菜单;4、 在末尾添加数据,按了“3”之后,会出现以下: 输入想要添加的数列,会出现下面输入数据的界面:按任意键退出后,回到主菜单。5、 修改数据:输入“4”之后,会出现以下界面输入位置后,按以下流程输入数据输入Y之后,再将新的数据输入就行了6、 删除数据:按下“5”后,会出现这个显示输入姓名后,会删除数据并保存已存的结果。7、 退出数据,按下“6”以后会退出,并提示是否保存数据8、 载入数据:按下“7”后这个可以载入以前保存的数据,9.保存数据:按下“8”后,可以保存数据以备下次再用(6)源程序 #include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<ctype.h>#include<windows.h>void showTable1();void showTable2(int);void findRec(); void createRec();void addRec();void saveRec();void alterRec();void deleteRec();void quit();void LoadRec();void listRec();int search(char*,int,int);void gotoxy(int x,int y) CONSOLE_SCREEN_BUFFER_INFO csbiInfo; HANDLE hConsoleOut; hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo); csbiInfo.dwCursorPosition.X=x; csbiInfo.dwCursorPosition.Y=y; SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition); char *mulu=" *通讯管理系统*", " 1.查找 ", " 2.创建 ", " 3.添加 ", " 4.修改 ", " 5.删除 ", " 6.退出 ", " 7.载入 ", " 8.保存 ", " "typedef struct sl char no20;char name10;char score10; char street10;char city10;char province10;char postcode10;TONGXUN;int muluxuanze();int JILUSHU=0;TONGXUN records1000;void main() system("cls"); gotoxy(2,20);for(;)switch(muluxuanze() case 1:findRec();break; /*查询通讯录*/ case 2:createRec();break; /*创建通讯录*/ case 3:addRec();break; /*添加通讯录*/ case 4:alterRec();break; /*修改通讯录*/ case 5:deleteRec();break; /*删除通讯录*/ case 6:quit(); /*退出通讯录*/ case 7:LoadRec();break; /*载入通讯录*/case 8:saveRec();break; /*保存通讯录*/int muluxuanze()int i; for(i=0;i<10;i+)gotoxy(10,i+1);cprintf("%s",mului); printf("n");printf("请输入要做的选项数字(1-8):");scanf("%d",&i);return(i);void showTable1() /*表头一*/system("cls");gotoxy(10,2);printf("*具体数据*");gotoxy(1,3);printf("n");gotoxy(1,4);printf(" 数目 姓名 电话 街道 城市 省 邮编 n");gotoxy(1,5);printf("n");void showTable2(int n) /*表头二*/if (n=0)n=1;if(JILUSHU=0)n=-1;gotoxy(1,6+n);printf("n"); void quit() /*退出*/char str5;gotoxy(22,18);printf("保存记录吗?(Y/N)");scanf("%s",str);if(str0='Y'|str0='y')saveRec();exit(0);void createRec() /*创建通讯录*/int i,sum;system("cls"); printf("请输入要添加的通讯记录数目:");scanf("%d",&JILUSHU);for(i=0;i<JILUSHU;i+)system("cls");sum=0;gotoxy(20,5);printf("Please input %d number",i+1); gotoxy(20,6);printf("输入序号:");scanf("%10s",recordsi.no); gotoxy(20,7);printf("输入姓名:");scanf("%10s",recordsi.name);gotoxy(20,8);printf("输入电话:");scanf("%10s",recordsi.score);gotoxy(20,9);printf("输入街道:");scanf("%10s",recordsi.street);gotoxy(20,10);printf("输入城市:");scanf("%10s",recordsi.city);gotoxy(20,11);printf("输入省:");scanf("%10s",recordsi.province);gotoxy(20,12);printf("输入邮编:");scanf("%10s",recordsi.postcode); printf("请按任意键返回!");getch(); system("cls");void listRec() /*显示所有通讯录*/int i=0;showTable1();printf("输入所查数据的序号:");scanf("%d",&JILUSHU);for(i=0;i<JILUSHU;i+)gotoxy(1,6+i);printf(" %10s%10s%10s%10s%10s%10s%10sn",recordsi.no,recordsi.name,recordsi.score,recordsi.street,recordsi.city,recordsi.province,recordsi.postcode); showTable2(i);printf("请按任意键返回!");getch();void saveRec() /*保存通讯记录*/FILE *fp1,*fp2;if(fp1=fopen("e:cc.txt","wb")=NULL)printf("不能打开这个文件");exit(1); if(fp2=fopen("e:cc1.txt","wb")=NULL)printf("不能打开这个文件");exit(1); printf("n保存文件n"); fwrite(&JILUSHU,sizeof(JILUSHU),1,fp1); fwrite(records,sizeof(records),JILUSHU,fp2); fclose(fp1);fclose(fp2); printf("n文件保存成功!n");Sleep(1000); printf("n请按任意键退出n"); getch(); system("cls");void LoadRec() /*载入通讯记录*/FILE *fp1,*fp2;if(fp1=fopen("e:cc.txt","rb")=NULL)printf("不能打开这个文件");exit(1); if(fp2=fopen("e:cc1.txt","rb")=NULL)printf("不能打开这个文件");exit(1); printf("n载入文件n"); fread(&JILUSHU,sizeof(JILUSHU),1,fp1); fread(records,sizeof(records),JILUSHU,fp2); fclose(fp1);fclose(fp2); printf("n文件载入成功!n");Sleep(1000); printf("n请按任意键退出n"); getch(); system("cls");void findRec() /*查询通讯记录*/char str20;int i,j;system("cls");printf("请输入您要找的人的姓名:");scanf("%s",str); for(j=0,i=0;j<JILUSHU;j+)if(strcmp(str,recordsj.name)=0)showTable1();printf(" %10s%10s%10s%10s%10s%10s%10sn",recordsi.no,recordsj.name,recordsj.score,recordsj.street,recordsj.city,recordsj.province,recordsj.postcode); printf("n");showTable2(i);break;else printf("未找到该联系人");printf("Press any key to return!");getch(); system("cls");void deleteRec() /*删除通讯记录*/int i,j;char str20;system("cls");printf("请输入您想删除的人的姓名:");scanf("%s",str); for(i=0;i<JILUSHU;i+)if(strcmp(str,recordsi.name)=0)for(j=i;j<JILUSHU;j+)recordsj=recordsj+1;else printf("没有找到该联系人");JILUSHU-;saveRec(); system("cls");int search(char*target,int tarType,int from)int i;for(i=from;i<JILUSHU;i+)if(tarType=1&&strcmp(target,recordsi.no)=0)|tarType=2&&strcmp(target,recordsi.no)=0)return(i);return(-1);void alterRec() /*修改通讯录*/int i,j;char no20,str8;system("cls");printf("请输入你想要修改的数据位置数:");scanf("%d",no);i=search(no,1,0);showTable1();printf("n");printf(" %10s%10S%10s%10s%10s%10s%10s",recordsi.no,recordsi.name,recordsi.score,recordsi.street,recordsi.city,recordsi.province,recordsi.postcode); printf(" n");gotoxy(10,10);printf("你想要修改这些数据吗(Y/N):");scanf("%s",str);if(str0='y'|str0='Y') system("cls");printf("输入序号:");scanf("%10s",recordsi.no); printf("输入姓名:");scanf("%10s",recordsi.name); printf("输入电话:");scanf("%10s",recordsi.score); printf("输入街道:");scanf("%10s",recordsi.street); printf("输入城市:");scanf("%10s",recordsi.city); printf("输入省:");scanf("%10s",recordsi.province); printf("输入邮编:");scanf("%10s",recordsi.postcode); saveRec();printf("请按任意键返回!");getch(); system("cls");void addRec() /*在通讯录的末尾加上新的信息*/int i,sum=0;char str8;for(;)system("cls");printf("请输入您想要增加的序列:");scanf("%s",str);i=search(str,1,0);if(i=-1)break;else printf("这个数据是错误的!");getch();strcpy(recordsJILUSHU.no,str);printf("输入序号:");scanf("%10s",recordsi.no); printf("输入姓名:");scanf("%10s",recordsi.name); printf("输入电话:");scanf("%10s",recordsi.score); printf("输入街道:");scanf("%10s",recordsi.street); printf("输入城市:");scanf("%10s",recordsi.city); printf("输入省:");scanf("%10s",recordsi.province); printf("输入邮编:");scanf("%10s",recordsi.postcode);JILUSHU+;saveRec();(7)、使用说明:此程序的运行环境并无太大的要求,一般的电脑都能运行;使用方法:进入了主菜单后,只需按照每个功能所对应的数字按下就能操作。(8)、设计小结:此次的设计是我第一次独立的设计一个程序,并且完成了调试与测试,最终成功的运行了,在此次的设计中,也让我在运用C语言到实际生活方面的能力有了提升,同时亦提升了我的合作能力,与同学的合作让我在遇到难点时可以很快的解决。然而,虽然学到了很多,我也在此次的课程设计中认识到自身的许多不足之处,比如办事效率低,在文件的保存、读取方面也不大熟练以后需要多多加强这方面的练习总之,这次的课程设计让我认识了许多,明白了许多,学到了许多,亦是在运用编程方面提高了许多,课后还是要加强这方面的练习的。(10)参考文献:C语言程序设计基础实验教程-廖雷,罗代忠 C程序设计(第三版)-谭浩强