淮海工学院计算机工程学院课程设计报告设计名称:C++程序设计课程设计姓名:学号:专业班级:系(院):计算机工程学院设计时间:2014.6.9——2014.6.20设计地点:计算机网络技术室指导教师评语:签名:年月日成绩:C++程序设计课程设计报告第页,共30页11.课程设计目的本课程设计是网络工程专业重要的实践性环节之一,是在学生学习完《C++程序设计》课程后进行的一次全面的综合练习。本课程设计的目的和任务:(1)巩固和加深学生对C++课程的基本知识的理解和掌握;(2)掌握C++编程和程序调试的基本技能;(3)利用C++进行简单软件设计的基本思路和方法;(4)提高运用C++解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。2.课程设计任务与要求:每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。以本班同学的具体数据为背景,设计一个本班同学通讯录。实现功能:1)通讯录编辑(添加、删除)。2)按不同的项进行查找。3)对已存在的通讯录按不同的项排序。4)将通讯录写入文件5)从文件读入通讯录备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。C++程序设计课程设计报告第页,共30页23.课程设计说明书(一)需求分析(功能设计)本通讯录包括编辑、查找、排序、录入文件、读取文件和格式化六项总功能。其中编辑通讯录又包括添加联系人、修改联系人和删除联系人三项功能;查找联系人包括“按学号查找”和“按姓名查找”两项功能;排列联系人也包括“按姓名查找”和“按学号查找”两项功能。联系人的具体信息包括:学号、姓名、地址、电话、邮编、邮箱。每执行完一项功能,按相应的提示键返回主界面。具体功能模块图介绍:图(1)通讯录管理系统读取文件录入文件排列联系人查找联系人编辑通讯录格式化!添加联系人删除联系人修改联系人按姓名查找按学号查找按姓名排列按学号排列C++程序设计课程设计报告第页,共30页3图(2)系统流程图:图(3)联系人基本信息邮编电话地址姓名学号邮箱RT结束T/R开始显示主菜单同时创建对象根据不同的提示键入相应的界面编辑格式化读取录入排列查找C++程序设计课程设计报告第页,共30页4(二)详细设计(各模块流程图)(1)主函数:是通过一个多分支语句switch(select)实现的,其中有的分支语句中,又包含有一个多分支语句switch(selecti)[i=1,2,3],每一个分支语句结束通过输入T/t回到界面底部,或输入R/r回到主界面。图(4)134526Select2Select3Select4导入文件读取文件开始输出主界面Select1添加删除修改据姓名据学号据姓名据学号结束格式化1112223C++程序设计课程设计报告第页,共30页5(2)添加联系人:addition()函数利用for循环,和strcmp函数进行学号的比较,当学号不为0时,开始录入信息;当,当学号为0结束图(5)(3)删除联系人:del函数()For循环,strcmp比较,定义一个变量x,并赋值为1,如果输入的姓名与通讯录中的相同,然后就将学生的所有基本信息都赋予0,如果输入的姓名不相同,就将变量的值赋为0,再用if()判断,如果变量值为0,就输出输入姓名有错这一信息。否是开始输入学号学号为“0”结束i=0i35将输入的字符串复制给st[i]i++是否开始输入姓名i=0C++程序设计课程设计报告第页,共30页6(4)修改联系人:correct()函数图(6)For循环,strcmp比较,定义一个变量,如果输入的姓名与通讯录中已有的相同,就将改序号赋给变量,输出一个修改的内容界面,然后用switch()语句,输入相应的选项,分别修改学生的基本信息。姓名相同结束i35将0字符复制给st[i]i++是否否是12开始输入姓名姓名相同输出提示界面select修改姓名修改地址修改学号修改邮编34C++程序设计课程设计报告第页,共30页7图(7)(5)查找联系人:find()函数按学号进行查找,定义三个变量x,y,x,y,z分别赋值为1,字符串比较函数,如果输入的学号与通讯录的相同,将学生数组的序号赋给变量x,z赋值为0,如果相等,将y的值赋为0,如果z的值为0,break语句,跳出整个for循环,然后执行下面的语句,输出那个序号学生的信息,如果学号不相同,说明没有此人,则输入的学号找不到。同理按姓名查找也是这样。图(8)(6)按序排列:list()函数若按姓名排序,通过冒泡排序法,n个数从小到大排序,总共要比较n-1趟,每趟比较要比较n-1次,通过一个中间变量将两个字符串调换位置,进行排序。现将姓名排序,结束修改邮箱修改电话56否否是结束开始输入学号i=0i35学号相同i++输出是C++程序设计课程设计报告第页,共30页8然后再将对应学生的基本信息分别排序。图(9)(三)代码设计(函数主要代码及注释)(1)//头文件#includeiostream.h#includefstream.h#includestring.h#includeiomanip.h#includewindows.h(2)//结构体和类的定义structstudent{charnum[12];结束j++比较交换信息i++开始i=0j=0i34j34-i输出是是否否C++程序设计课程设计报告第页,共30页9charname[30];charaddress[100];chartel[12];charpost[7];charemail[30];};classinter{private:studentst[35];public:voidaddition(charnum[12],charname[30],charaddress[100],chartel[12],charpost[7],charemail[30]);voiddel(charname[30]);voidfind1(charnum[12]);voidfind2(charname[30]);voidlist1();voidlist2();intcorrect(charname[30]);voidformat();voidwrite();voidread();voidprint(inti);intback();};(3)//添加联系人voidinter::addition(charnum[12],charname[30],charaddress[100],chartel[12],charpost[7],charemail[30]){intx=1;//定义一个整型变量用于判断for(inti=0;i35;i++){if(!strcmp(st[i].num,0)){strcpy(st[i].num,num);strcpy(st[i].name,name);C++程序设计课程设计报告第页,共30页10strcpy(st[i].address,address);strcpy(st[i].tel,tel);strcpy(st[i].post,post);strcpy(st[i].email,email);x=0;}if(x==0)break;}}(4)//删除联系人voidinter::del(charname[30]){booltemp=0;//定义一个布尔变量用于判断for(inti=0;i35;i++){if(!strcmp(st[i].name,name))//如果姓名相同{temp=1;strcpy(st[i].address,0);//将0复制给数组strcpy(st[i].email,0);strcpy(st[i].name,0);strcpy(st[i].num,0);strcpy(st[i].post,0);strcpy(st[i].tel,0);cout*****删除成功!*******endl;}}if(!temp){cout*****查无此人!*******endl;}}(5)//修改联系人C++程序设计课程设计报告第页,共30页11intinter::correct(charname[30]){intx;for(inti=0;i35;i++){if(!strcmp(st[i].name,name)){x=i;cout*修改内容*endl;cout**************************endl;cout*(1)修改姓名:*endl;cout*(2)修改学号:*endl;cout*(3)修改地址:*endl;cout*(4)修改邮编:*endl;cout*(5)修改电话号码:*endl;cout*(6)修改email:*endl;cout**************************endl;cout***请选择:***;charselect;cinselect;switch(select)//多分支语句{case'1':cout***输入要修改的姓名:***;//选择1开始修改姓名charname1[30];cinname1;strcpy(st[x].name,name1);cout***修改成功!***endl;returnback();break;case'2':cout***输入要修改的学号:***;charnum1[12];cinnum1;strcpy(st[x].num,num1);cout***修改成功!***endl;C++程序设计课程设计报告第页,共30页12returnback();break;case'3':cout***输入要修改的地址:***;charaddress1[100];cinaddress1;strcpy(st[x].address,address1);cout***修改成功!***endl;returnback();break;case'4':cout***输入要修改的邮编:***;charpost1[7];cinpost1;strcpy(st[x].post,post1);cout***修改成功!***endl;returnback();break;case'5':cout***输入要修改的电话号码:***;chartel1[12];cintel1;strcpy(st[x].tel,tel1);cout***修改成功!***endl;returnback();break;case'6':cout***输入要修改的email:***;charemail1[30];cinemail1;strcpy(st[x].email,email1);cout***修改成功!***endl;returnback();break;}}C++程序设计课程设计报告第页,共30页13}return0;}(6)//按学号查找voidinter::find1(charnum[12]){booltemp=0;for(inti=0;i35;i++){if(!strcmp(st[i].num,num))//字符串比较如果学号相同{temp=1;print(i);}//调用print()成员函数输出基本信息}if(!temp)cout***输入的学号查找不到!!!***endl;}(7)//按学号排序voidinter::list1(){for(inti=0;i34;i++)//冒泡法排序{for(intj=0;j34-i;j++){if(strcmp(st[j].num,st[j+1].num)0)//比较两个字符串的大小{charnum[12];charname[30];charaddress[100];chartel[12];charpost[7];charemail[30];strcpy(num,st[j].num);/