-程序设计报告(2012/2013学年第2学期)题目:简易通讯录管理系统专业应用物理学生姓名于浩班级学号B12080507指导教师骆健指导单位计算机学院计算机科学与技术系日期2013.3.27-评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语教师签名:年月日评分等级备注评分等级有五种:优秀、良好、中等、及格、不及格-简易通讯录管理系统程序设计报告一、课题内容和要求本课题设计是对基础课《面向对象程序设计》课程知识的进一步巩固并加强解决实际问题的能力。目的是通过实习,一方面使学生加深对课内所学的有关面向对象概念的理解;另一方面,在具体的程序设计中掌握基于C语言的程序设计方法。通过进行计算机实践,更加系统地理解和掌握C语言的基本概念、语言特点和编程技巧。利用系统提供的标准函数和自定义函数进行程序设计,培养利用C语言设计综合程序的能力。通过该课程设计使学生掌握一种程序设计开发环境,提高同学们自己学习、查阅资料、独立分析问题和解决问题的能力。二、需求分析设计通讯录系统,其信息中包括姓名、电话、地址等数据项。所设计的系统要有简单的DOS界面,方便用户进行操作,显示以下功能:(1)建立通讯录。(2)插入、删除、修改通讯录记录(3)查询通讯录记录,要求可按姓名和电话号码查询(4)可按姓名或电话号码对通讯录进行排序(5)信息记录要存放在文件中,因而要实现文件的输入/输出功能三、概要设计系统功能模块图:建立:可以一次性输入多个人的相应信息显示:可以输出通讯录里所有的记录查询:可以选择用姓名、电话两种方式查询信息修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、地址即可完成修主界面-改添加:可以添加通讯录记录,依次输入姓名、电话号码、地址即可完成删除:输入欲删除的那个人的名字后,会自动删除其相应的记录内容排序:可以按姓名或电话号码对通讯录进行排序保存:将通讯录信息保存到文件四、源程序代码#defineN100#defineSIZE30#includestdio.h#includestring.h//字符函数和字符串函数#includeconio.h//字符模式函数#includeprocess.hstructstudent{charname[SIZE];chartel[SIZE];charadress[SIZE];};//函数声明voidmyprint();//显示菜单intmycreat(structstudent*p,intn);//输入通讯录voidmydisplay(structstudent*p,intn);//显示通讯录voidmysearch(structstudent*p,intn);//查找voidmymodify(structstudent*p,intn);//修改通讯录intmyadd(structstudent*p,intn);//增加通讯录intmydelete(structstudent*p,intn);//删除voidmysort(structstudent*p,intn);//排序voidsch_tel(structstudent*p,intn);//按电话号码查找voidsch_name(structstudent*p,intn);//按姓名查找intloadinfo(structstudent*p,intn);//载入通讯录信息intsaveinfo(structstudent*p,intn);//保存通讯录信息voidmain(){//文件定义charyes_no;intchoose;//定义choose为整形structstudentrecord[N];//存放通讯录信息,共100条inttotal=0,flag;//通讯录总数total=loadinfo(record,N);//从文件读取记录信息,不超过100条do{-myprint();//显示菜单printf(请选择:);scanf(%d,&choose);//输入数据switch(choose){case1:total=mycreat(record,total);break;case2:mydisplay(record,total);break;case3:mysearch(record,total);break;case4:mymodify(record,total);break;case5:total=myadd(record,total);break;case6:total=mydelete(record,total);break;case7:mysort(record,total);break;case8:flag=saveinfo(record,total);if(flag==1)printf(\n保存失败!\n);elseprintf(\n保存成功!\n);break;case0:exit(0);break;default:printf(\n%c为非法选项!\n,choose);}if(choose==0)break;printf(\n要继续选择吗(Y/N)?);do{yes_no=getchar();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');-}while(yes_no!='N'&&yes_no!='n');}voidmyprint()//显示菜单信息{printf(\n);printf(请输入选项编号(0--7)\n);printf(1---建立通讯录\n);printf(2---显示通讯录\n);printf(3---查询通讯录\n);printf(4---修改通讯录\n);printf(5---添加通讯录\n);printf(6---删除通讯录\n);printf(7---排序通讯录\n);printf(8---保存通讯录\n);printf(0---退出\n);printf(\n);}intmycreat(structstudent*p,intn)//批量输入学生信息{inti=0;intm;printf(添加前的记录,共有%d个:\n,n);printf(\n记录号姓名电话号码地址\n);i=0;while((in)&&(strcmp(p-name,)!=0)){printf(%d:%15s%15s%15s\n,i+1,p-name,p-tel,p-adress);i++;p++;}printf(\n请输入要输入的学生人数(%d):,N-n);scanf(%d,&m);i=0;while(im){printf(\n);printf(请输入第%d个记录:\n,i+1);printf(姓名:);do{gets(p-name);}while(strcmp(p-name,)==0);printf(电话号码:);gets(p-tel);printf(地址:);-gets(p-adress);p++;i++;}returnm+n;}voidmydisplay(structstudent*p,intn)//显示学生信息{//clrscr();inti=0;printf(\n记录号姓名电话号码地址\n);while(in){printf(%d:%15s%15s%15s\n,i+1,p-name,p-tel,p-adress);p++;i++;}}voidmymodify(structstudent*p,intn)//修改学生信息{charc;inti;charnam[10];mydisplay(p,n);printf(\n请输入要修改记录的姓名:);c=getchar();gets(nam);for(i=0;in;i++,p++)if(strcmp(nam,p-name)==0)break;if(i==n)printf(无此人!\n);else{printf(请输入正确的电话号码:);do{gets(p-tel);}while(strcmp(p-tel,)==0);printf(请输入正确的姓名:);gets(p-name);printf(请输入正确的地址:);gets(p-adress);}}voidmysearch(structstudent*p,intn)//查找指定学生-{charc;mydisplay(p,n);printf(\n按电话号码查询(h),还是按姓名查询(m)?);c=getchar();c=getchar();if(c=='h'||c=='H')sch_tel(p,n);elseif(c=='m'||c=='M')sch_name(p,n);elseprintf(\n非法字符!\n);}voidsch_tel(structstudent*p,intn)//按电话号码查询{charc;inti,flag=0;chartel[10];printf(\n请输入要查询记录的电话号码:);c=getchar();gets(tel);for(i=0;in;i++)if(strcmp(tel,p[i].tel)==0){printf(\n姓名电话号码地址\n);printf(%15s%15s%15s\n,p[i].name,p[i].tel,p[i].adress);flag=1;}if(flag==0)printf(无此人!\n);}voidsch_name(structstudent*p,intn)//按姓名查询{charc;inti,flag=0;charnam[10];printf(\n请输入要查询记录的姓名:);c=getchar();gets(nam);for(i=0;in;i++)if(strcmp(nam,p[i].name)==0){printf(\n姓名电话号码地址\n);printf(%15s%15s%15s\n,p[i].name,p[i].tel,p[i].adress);flag=1;-}if(flag==0)printf(无此人!\n);}intmyadd(structstudent*p,intn)//增加学生信息{inti=0;charc;structstudentt,*q;printf(添加前的记录:\n);printf(\n姓名电话号码地址\n);i=0;q=p;//显示原有记录信息while(in){printf(%15s%15s%15s\n,q-name,q-tel,q-adress);i++;q++;}do{printf(请输入新记录的姓名:\n);do{gets(t.name);}while(strcmp(t.name,)==0);//姓名不能为空printf(请输入新记录的电话号码:);gets(t.tel);printf(请输入新记录的地址:);gets(t.adress);{*(p+i)=t;printf(添加后的记录:\n);printf(\n姓名电话号码地址\n);for(i=0;in+1;i++)printf(%15s%15s%15s\n,(p+i)-name,(p+i)-tel,(p+i)-adress);break;}}while(c=='y'||c=='Y');returnn+1;}intmydelete(structstudent*p,intn)//删除学生信息{inti,x;-charc,tel[10],nam[10];printf(删除前的记录:\n);printf(\n姓名电话号码地址\n);for(i=0;in;i++)printf(%15s%15s%15s\n,p[i].name,p[i].tel,p[i].adress);printf(按电话号码删除(h),还是按姓名删除(m)?);c=getchar();c=get