------------------------------------------------------------------------------------------------------------计科1001赖祥燃第页1一、课程设计题目及要求题目通讯录管理系统任务:自学C语言中相关知识,设计出通讯录管理系统。要求如下所述:建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;;能够提供添加、删除和修改通讯录信息的功能;能够提供按姓名或电话等查询;将通讯录保存在文件中;能够按表格方式输出通讯录信息。二、系统设计方案(一)总体框架图:通讯录管理系统:1、录入通讯录信息2、修改通讯录信息3、查询通讯录信息4、浏览通讯录信息5、增加通讯录信息6、推出系通讯录统(二)模块设计模块一:头文件,变量定义,函数的声明对系统所使用的变量进行定义,对函数进行声明模块二:录入通讯录信息声明函数voidreadfile(),说明一个文件指针FILE*fp打开文件student.txt模块三:通讯录信息的查找声明voidseek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支模块四:通讯录信息的修改------------------------------------------------------------------------------------------------------------计科1001赖祥燃第页2声明voidmodify()为学生信息修改函数,通过switch(item)设定所要修改的项目模块五:通讯录信息按学号排序声明voidsort()将录入通讯录信息系按升序排列,用的是“冒泡排序法”实现排序模块六:加通讯录信息声明voidinsert()插入通讯录信息,先通过判断通讯录是否存在,若否则继续输入,若是跳出,重新循环模块七:通讯录信息声明voiddel()实现通讯录信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。模块八:示学生信息通过display()函数输出通讯录信息模块九;存信息通过fp=fopen(student.txt,w);写入信息模块十:界面菜单通过switch(num)调用,以上各函数,实现功能三、设计详情1.主函数主函数设计要求简洁,只提供部分提示语和函数的调用【程序】显示一系列功能选项输入n,判断n是否是1~8?根据n的值调用各功能模块函数结束开始N------------------------------------------------------------------------------------------------------------计科1001赖祥燃第页3图1.主函数流程图voidmenu()/*界面*/{intnum;printf(\n\n自动化0901通讯录管理系统\n\n);printf(*****************\n\n);printf(*制作人:翁行兴*\n\n);printf(*****************\n\n);printf(*********************系统功能菜单************************\n);printf(--------------------------------------------\n);printf(*1.刷新学生信息**2.查询学生信息*\n);printf(*3.修改学生信息**4.增加学生信息*\n);printf(*5.按学号删除信息**6.显示当前信息*\n);printf(*7.保存当前学生信息**8.退出系统*\n);printf(--------------------------------------------\n);printf(请选择菜单编号:);scanf(%d,&num);switch(num){case1:readfile();break;case2:seek();break;case3:modify();break;case4:insert();break;case5:del();break;case6:display();break;case7:save();break;case8:k=0;break;default:printf(请在1-8之间选择\n);}}------------------------------------------------------------------------------------------------------------计科1001赖祥燃第页4四、源代码#includestdio.h#includestdlib.h#includestring.h#defineBUFLEN100#defineLEN15#defineN100structrecord/*结构体*/{charcode[LEN+1];/*学号*/charname[LEN+1];/*姓名*/intage;/*年龄*/charsex[3];/*性别*/chartime[LEN+1];/*出生年月*/charadd[30];/*家庭地址*/chartel[LEN+1];/*电话号码*/charmail[30];/*电子邮件地址*/}stu[N];intk=1,n,m;/*定义全局变量*/voidreadfile();/*函数声明*/voidseek();voidmodify();voidinsert();voiddel();voiddisplay();voidsave();voidmenu();intmain(){------------------------------------------------------------------------------------------------------------计科1001赖祥燃第页5while(k)menu();system(pause);return0;}voidreadfile()/*建立信息*/{char*p=student.txt;FILE*fp;inti=0;if((fp=fopen(student.txt,r))==NULL){printf(Openfile%serror!Strikeanykeytoexit!,p);system(pause);exit(0);}while(fscanf(fp,%s%s%d%s%s%s%s%s,stu[i].code,stu[i].name,&stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8){i++;i=i;}fclose(fp);n=i;printf(录入完毕!\n);}voidseek()/*查找*/{inti,item,flag;chars1[21];/*以姓名和学号最长长度+1为准*/printf(------------------\n);------------------------------------------------------------------------------------------------------------计科1001赖祥燃第页6printf(-----1.按学号查询-----\n);printf(-----2.按姓名查询-----\n);printf(-----3.退出本菜单-----\n);printf(------------------\n);while(1){printf(请选择子菜单编号:);scanf(%d,&item);flag=0;switch(item){case1:printf(请输入要查询的学生的学号:\n);scanf(%s,s1);for(i=0;in;i++)if(strcmp(stu[i].code,s1)==0){flag=1;printf(学号姓名年龄性别出生年月地址电话E-mail\n);printf(--------------------------------------------------------------------\n);printf(%6s%7s%6d%5s%9s%8s%10s%14s\n,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);}if(flag==0)printf(该学号不存在!\n);break;case2:printf(请输入要查询的学生的姓名:\n);scanf(%s,s1);for(i=0;in;i++)if(strcmp(stu[i].name,s1)==0){------------------------------------------------------------------------------------------------------------计科1001赖祥燃第页7flag=1;printf(学号姓名年龄性别出生年月地址电话E-mail\n);printf(--------------------------------------------------------------------\n);printf(%6s%7s%6d%5s%9s%8s%10s%14s\n,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);}if(flag==0)printf(该姓名不存在!\n);break;case3:return;default:printf(请在1-3之间选择\n);}}}voidmodify()/*修改信息*/{inti,item,num;charsex1[3],s1[LEN+1],s2[LEN+1];/*以姓名和学号最长长度+1为准*/printf(请输入要要修改的学生的学号:\n);scanf(%s,s1);for(i=0;in;i++)if(strcmp(stu[i].code,s1)==0)/*比较字符串是否相等*/num=i;printf(------------------\n);printf(1.修改姓名\n);printf(2.修改年龄\n);printf(3.修改性别\n);printf(4.修改出生年月\n);printf(5.修改地址\n);printf(6.修改电话号码\n);printf(7.修改E-mail地址\n);------------------------------------------------------------------------------------------------------------计科1001赖祥燃第页8printf(8.退出本菜单\n);printf(------------------\n);while(1){printf(请选择子菜单编号:);scanf(%d,&item);switch(item){case1:printf(请输入新的姓名:\n);scanf(%s,s2);strcpy(stu[num].name,s2);break;case2:printf(请输入新的年龄:\n);scanf(%d,&stu[num].age);break;case3:printf(请输入新的性别:\n);scanf(%s,sex1);strcpy(stu[num].sex,sex1);break;case4:printf(请输入新的出生年月:\n);scanf(%s,s2);strcpy(stu[n