C语言课程设计报告题目:学院专业年级班别学号学生姓名指导教师成绩2009年12月1.课程设计题目,内容,要求设计一个《学生通讯录管理系统》,在动态链表程序的基础上,设计要求如下(必须使用结构体和链表等数据结构)1建立文件存储文件使用指定文件名或默认文件名;可以不保存输入记录,但需要确认是否保存输入记录如果已有文件,只能在其后追加;新增记录可以不存入原文件中,以可以用原来的文件覆盖内存的内容;可以将多个个文件记录合并到一个文件中;2文件的存取和显示可以单独存取文件;可以随时显示内存中记录的全部内容;可以直接存取默认文件或指定文件;3删除记录可以按“姓名”或“电话”方式删除记录并更新内存链表内容;能给出被删除的信息,输出没有找到的信息;如果已经是空表,上出时应给出信息并返回主菜单;如果没有要删除的信息,输出没有找到的信息;删除操作仅限于内存,只有执行记录时,才能覆盖原记录;4查询记录可以按“姓名”或“电话”或“宿舍”方式查询记录能给出查询记录的信息;如果查询的信息不存在,输出没有找到的信息;5整体功能a可以随时检索、删除、或增加新记录,保存或取消新的记录b使姓名可由16位字符和数字的混合编码组成c使电话号码可由18位字符和数字组成d将输出信息加上输出信息信息栏,例如姓名电话性别年龄生日宿舍李四1234男217月1日东二333e使用菜单实现功能的正确的选择f所有节点信息都是动态生成。6测试程序应列出测试大纲对程序进行测试;应保证测试用例测试到程序的各种边缘情况二.总体设计系统包括的函数有Main.c:整个系统的主函数Menu.c:系统的主界面Creat.c:创建链表Add.c:追加记录Del.c:删除记录Modify.c:修改记录Read.c:从外部文件读取记录Save.c:保存记录到外部文件Search.c:查找记录Skim.c:浏览记录Headyy.h:头文件系统功能模块结构图:Main—menu—Creat.cAdd.cDel.cModify.cRead.cSave.cSearch.cSkim.c三.详细设计程序清单:----------------------------------------------headyy.h----------------------------------------------#ifndefNULL#defineNULL0#endif#includestdio.h#includemalloc.h#includeconio.h#includestring.h#includestdlib.h#defineLENsizeof(structaddbok)#definePRprintf(%-12s%-12s%-12s%-10s%-10s%-10s%-12s\n,Num.,Name,Tel.,Sex,Age,Birtday,Dormitory);structaddbok/*声明结构体类型*/{longnum;charnam[16];/*储存编号*/chartel[18];/*储存电话*/charsex[4];/*学生性别*/intage;/*学生年龄*/charbir[10];/*学生生日*/chardor[13];/*学生宿舍*/structaddbok*next;};voidprint(structaddbok*);具体实现:创建了结构体变量addbok----------------------------------------------main.c----------------------------------------------#includeheadyy.hexternintn=0;voidmain(){intc,color,i=0;structaddbok*head;head=NULL;for(color=0;color6;color++){textcolor(color);/*字体颜色*/textbackground(color+2);/*屏幕颜色*/clrscr();printf(\n\n\n\n\n\n\n\n\n\n\t\t\tWelcometoStudents'AddressSystem);printf(\n\n);printf(\t\t\t\t\t\tDesignbyYangYing);sleep(1);/*延时1秒*/clrscr();}while(i==0){system(cls);printf(============================Students'AddressSystem============================);printf(****************************************\n);printf(*NO.:3207006371Name:YangYingClass:ScienceOfComputerClass1*\n);printf(****************************************\n);printf(================================================================================);c=meun();switch(c){case1:head=creat();break;/*指向creat.c*/case2:head=add(head);break;/*指向add.c*/case3:skim(head);break;/*指向skim.c*/case4:head=modify(head);break;/*指向modify.c*/case5:search(head);break;/*指向search.c*/case6:head=del(head);break;/*指向del.c*/case7:head=read();break;/*指向read.c*/case8:save(head);break;/*指向save.c*/case0:exit(0);/*退出系统*/default:printf(\Discorrect!Pleaseenteragain.\n\n);}}getch();}具体实现:设置了开始的欢迎词,并且对照参考书设置了背景色和字体颜色,每种颜色延时1秒,在此函数中输入了自己的学号班级姓名,并且用switch语句实验了选择功能操作的函数指向。----------------------------------------------menu.c----------------------------------------------#includeheadyy.hexternintn;intmeun(void){inti;printf(\n\n);printf(#####menu#####\n);printf(************************************************************\n);printf(|1:Creat2:Additem3:Skimitems|\n);printf(|4:Modifyitem5:Searchitem6:Deleteitem|\n);printf(|7:Readfile8:Saveitem0:Exitsystem|\n);printf(************************************************************\n);printf(\n\tPleasechoosethenumberwhichyouWANT:);scanf(%d,&i);return(i);}具体实现:主要表现了主函数的菜单,供用户选择。1选项是建立链表并且创建多个新记录2选项是在链表后面追加若干个记录3选项是浏览存储的记录4选项是修改已有的记录5选项是查找记录6选项是删除系统中的记录7选项是从外部文件读取记录8选项是保存记录到外部文件0选项是推出系统----------------------------------------------creat.c----------------------------------------------#includeheadyy.hexternintn;structaddbok*creat(void)/*引用结构体addbok*/{inti=2;structaddbok*p1,*p2,*head;floata;p1=p2=(structaddbok*)malloc(LEN);head=NULL;system(cls);printf(\n========================Enteranewrecord,STOPby\0\===========================);printf(\n);printf(NO.1:\n);printf(Num.:);scanf(%ld,&p1-num);if(p1-num==0){printf(\n\n);printf(\n----------------------------------Writtenover-------------------------------\n);getch();system(cls);return(head);}printf(Name:);scanf(%s,p1-nam);printf(Tel.:);scanf(%s,p1-tel);printf(Sex:);scanf(%s,p1-sex);printf(Age:);scanf(%d,&p1-age);printf(Birthday:);scanf(%s,p1-bir);printf(Dormitory:);scanf(%s,p1-dor);while(p1-num!=0){n=n+1;if(n==1){head=p1;}elsep2-next=p1;p2=p1;p1=(structaddbok*)malloc(LEN);printf(\n);printf(NO.%d:\n,i);i=i+1;printf(Num.:);scanf(%ld,&p1-num);if(p1-num==0){p2-next=NULL;printf(\n\n);printf(\n----------------------------------Writtenover-------------------------------\n);getch();system(cls);return(head);}printf(Name:);scanf(%s,p1-nam);printf(Tel.:);scanf(%s,p1-tel);printf(Sex:);scanf(%s,p1-sex);printf(Age:);scanf(%d,&p1-age);printf(Birthday:);scanf(%s,p1-bir);printf(Dormitory:);scanf(%s,p1-dor);}p2-next=NULL;printf(\n\n);printf(\n----------------------------------Writtenover-------------------------------\n);getch();system(cls);return(head);}具体实现:创建链表并且输入若干个记录,返回菜单使用“0”。----------------------------------------------add.c----------------------------------------------#includeheadyy.hexternintn;structaddbok*add(structaddbok