C++程序设计课程设计_第1页
C++程序设计课程设计_第2页
C++程序设计课程设计_第3页
C++程序设计课程设计_第4页
C++程序设计课程设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录第1级 1第2级 2第2级 3第1级 4第2级 5第2级 61.课程设计目的本课程设计是网络工程专业重要的实践性环节之一,是在学生学习完《C++程序设计》课程后进行的一次全面的综合练习。本课程设计的目的和任务:(1)巩固和加深学生对C++课程的基本知识的理解和掌握;(2)掌握C++编程和程序调试的基本技能;(3)利用C++进行简单软件设计的基本思路和方法;(4)提高运用C++解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。2.课程设计任务与要求:要求:1)设计题目、设计要求以及系统功能需求分析;2)总体设计:包括模块说明、模块结构图和系统流程图;3)详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;4)源程序代码及设计成果:完整源程序清单和设计成果;5)总结:调试分析过程描述:包括测试数据、测试输出结果以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等)包括课程设计过程中的学习体会与收获、对C++和本次课程设计的认识等内容;任务:以本班同学的具体数据为背景,设计一个本班同学通讯录。实现功能:1)

通讯录编辑(添加、删除)。2)

按不同的项进行查找。3)

对已存在的通讯录按不同的项排序。4)

将通讯录写入文件。5)

从文件读入通讯录。备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。3.课程设计说明书概要设计一、模块说明在我设计的程序中一共包括了六个部分,分别是:初始化通讯录、搜索(Search_information())、编辑(Edit_information())、删除(Delete_information())、排序(Order_list())、添加(Add_information())。其中搜索排序又分若干个子模块。在初始化中直接调用每个对象的成员函数通过键盘录入来对对象进行初始化,整个6大模块通过定义Switch语句来接收输入指令并执行相应模块,若干子模块同理通过定义不同的Switch函数或者if函数来达到选择功能的作用。在初始化中直接调用每个对象的成员函数通过键盘录入来对对象进行初始化,同时在每个模版中还加入了其实用户的语句。通过在每个函数里面用if选择语句和goto指向来判断用户是要回到主界面以显示主菜单继续操作还是选择结束程序。二、模块结构图模块结构图是结构化设计方法,采用类似于结构化分析的“由大到小”、“自顶向下,逐层分解”的基本思想描述(分解)系统。结构化设计方法,首先以数据流图为基础导出系统模块(功能)结构图。在导出系统模块(功能)结构图的过程中,以独立性、低耦合性、高内聚性、公共模块作为模块划分的原则。先将系统数据流图中的加工转换成模块,再将各大模块继续划分为较小的模块,直到每一模块都是功能单一的模块。班级通讯录系统班级通讯录系统搜索功能按学号搜索按姓名搜索退出编辑功能搜索功能按学号搜索按姓名搜索退出编辑功能删除功能添加功能排序功能对同学各信息修改定位到该同学添加新的信息按姓名排序按学号排序对同学各信息修改定位到该同学添加新的信息按姓名排序按学号排序显示信息显示信息删除信息显示信息显示信息删除信息三、系统流程图⑴主要模块介绍开始开始录入初始信息主函数界面键入iSwitch(i)case1case2case4case3case5case6搜索(Search_information())编辑(Edit_information())删除(Delete_information())排序(Order_list())添加(Add_information())退出通讯录系统结束=2\*GB2⑵各功能模块设计思路及流程图:搜索功能:该功能通过键盘输入数值j,选择调用不同的具体的搜索功能函数;在这两种功能中,分别又通过for循环和if条件判断找出符合条件的同学的信息,完成功能要求。最后通过选择是否继续来继续搜索或者返回主函数界面。Search_information()Search_information()键入jSwitch(j)case1case22按学号搜索(search1())按姓名搜索(search2())继续2是否主函数界面②编辑功能:该功能主要通过键盘首先输入需要编辑的同学姓名,然后通过一个for循环查找到,如果找到信息,则可以继续往下进一步修改信息,如果找不到,则输出没有该同学信息。在定位到具体的对象之后,再通过一个switch语句选择具体修改的信息并修改,修改之后,调用对象的成员函数显示新的信息,然后通过if判断是否继续来选择继续修改或者返回主函数界面。没有此信息没有此信息Edit_information()键入name是否有此姓名无有键入jSwitch(j)case1case2case3case4case5修改学号修改邮箱修改地址修改姓名修改邮编修改电话case6继续是否主函数界面删除功能:Add_information()Add_information()调用成员函数type_information()修改成功主函数是否继续是否添加新成员功能:Delete_information()Delete_information()输入姓名找到删除主函数排序功能:Order_list()Order_list()输入jSwitchjCase1Case2按学号排序order1()按姓名排序Order2()显示所有信息主函数4.课程设计成果#include<iostream>#include<fstream>#include<string>#include<iomanip>usingnamespacestd;structclassmates{public: charnumber; charname; charaddress; chartelephone_number; charyoubian; chare_mail; voiddisplay()//显示信息 { {cout<<"学号:"<<number <<"姓名:"<<name <<"地址:"<<address <<"电话号码:"<<telephone_number <<"邮编:"<<youbian <<"邮箱:"<<e_mail<<endl;} } voidtype_information() { cout<<"请输入学号:"; cin>>number; cout<<"请输入姓名:"; cin>>name; cout<<"请输入地址:"; cin>>address; cout<<"请输入电话号码:"; cin>>telephone_number; cout<<"请输入邮编:"; cin>>youbian; cout<<"请输入e-mail:"; cin>>e_mail; }};classmatesAddress_list1[50],Address_list[50];intn=0;voidsearch1()//按学号搜索{ stringNUM; intk; intf=1; cout<<"请输入学号:"; cin>>NUM; for(k=0;k<n;k++) { if(Address_list1[k].number==NUM) { Address_list1[k].display();f=0;break; } }if(f==1) {cout<<"没有该同学信息!"<<endl;}}voidsearch2()//按姓名搜索{ intk,f=1; stringname1; cout<<"请输入姓名:"; cin>>name1; for(k=0;k<n;k++) { if(name1==Address_list1[k].name) { Address_list1[k].display(); f=0;break; } } if(f==1)cout<<"没有该同学信息!"<<endl;}voidSearch_information()//搜索功能{ intj; cout<<"**************************************"<<endl; cout<<"1.按学号搜索;"<<endl; cout<<"2.按姓名搜索;"<<endl; cout<<"3.返回;"<<endl; cout<<"请选择:"; cin>>j; system("cls");//清屏 switch(j) { case1:search1();break;//调用按学号搜索函数 case2:search2();break;//调用按姓名搜索函数 case3:break; } j=0; cout<<"*******************************"<<endl; cout<<"是否继续搜索(1.是/2.否)"<<endl; cin>>j; system("cls");//清屏 if(j==1) { Search_information(); }}voidedit_display()//显示编辑成功{ cout<<"修改成功"<<endl; cout<<"*******************************"<<endl;}voidEdit_information()//编辑功能{ inttemp=-1,k; stringnam,name1,address1,e_mail1,number1,youbian1,telephone_number1; cout<<"请输入想要修改的同学姓名:"<<endl; cin>>nam; for(k=0;k<n;k++)//找到满足条件的同学姓名并记录 { if(nam==Address_list1[k].name) {temp=k;break;} } if(temp!=-1)//编辑各个信息 { cout<<"*******************************"<<endl; cout<<"请输入想要修改的信息(1.学号/2.姓名/3.地址/4.邮编/5.电话号码/6.e-mail)"; cout<<endl; cin>>k; switch(k) { case1:cout<<setw(10)<<"请输入新学号:"; cin>>number1;Address_list1[temp].number=number1; edit_display();break; case2:cout<<"请输入新姓名:";cin>>name1; Address_list1[temp].name=name1; edit_display();break; case3:cout<<"请输入新地址:";cin>>address1; Address_list1[temp].address=address1; edit_display();break;case4:cout<<"请输入新邮编:";cin>>youbian1; Address_list1[temp].youbian=youbian1; edit_display();break; case5:cout<<"请输入新电话号码:";cin>>telephone_number1; Address_list1[temp].telephone_number=telephone_number1; edit_display();break;case6:cout<<"请输入新e_mail:";cin>>e_mail1; Address_list1[temp].e_mail=e_mail1; edit_display();break; }cout<<"已修改的新的同学信息:"<<endl;Address_list1[temp].display(); } else {k=0; cout<<"没有该同学信息!"<<endl;cout<<"*******************************"<<endl;cout<<"是否继续修改?(1.是/2.否)"<<endl;cin>>k;if(k==1)//选是,继续回到该函数开头{Edit_information();} else { system("cls");//否则,退出并清屏 } }}voidDelete_information()//删除功能{intk;stringnam;cout<<"请输入想要删除的同学姓名:"<<endl;cin>>nam;for(k=0;k<n-1;k++) { if(nam==Address_list1[k].name) { Address_list1[k].number="f"; Address_list1[k].name="f"; Address_list1[k].address="f"; Address_list1[k].youbian="f"; Address_list1[k].telephone_number="f"; Address_list1[k].e_mail="f"; } }cout<<"该同学信息已删除!"<<endl;}voidAdd_information()//添加功能{Address_list1[n].type_information();cout<<endl;Address_list1[n].display(); n=n+1; cout<<endl; cout<<endl;}voidorder1()//按学号排序(选择排序法){ intj,k; stringch="f"; classmatesinformation;for(j=0;j<n-1;j++) for(k=j+1;k<n;k++) { if(Address_list1[k].number<Address_list1[j].number) { information=Address_list1[j]; Address_list1[j]=Address_list1[k]; Address_list1[k]=information; } } for(j=0;j<n;j++) { if(Address_list1[j].number==ch) { } else Address_list1[j].display(); }}voidorder2()//按姓名排序(选择排序法){ intj,k; stringch="f"; classmatesinformation;for(j=0;j<n-1;j++) for(k=j+1;k<n;k++) { if(Address_list1[k].name<Address_list1[j].name) { information=Address_list1[j]; Address_list1[j]=Address_list1[k]; Address_list1[k]=information; } } for(j=0;j<n;j++) { if(Address_list1[j].number==ch) { } else Address_list1[j].display(); }}voidOrder_list()//排序并显示{ intchoice; cout<<"1.按学号排序;"<<endl; cout<<"2.按姓名排序;"<<endl; cin>>choice; system("cls"); if(choice==1) { order1(); } else { order2(); } cout<<endl; cout<<endl;}intmain(){fstreamoutfile("information.dat",ios::out);//以输出方式打开文件 if(!outfile) { cerr<<"openerror!"<<endl; exit(1); } fstreaminfile("information.dat",ios::in);//以输入方式打开文件 if(!infile) { cerr<<"openerror!"<<endl; exit(1); } inti;cout<<"请先添加部分同学信息:"<<endl;cout<<"请输入想要添加的同学人数:"<<endl;cin>>n; for(i=0;i<n;i++) {cout<<"第"<<i+1<<"位同学"<<endl; Address_list[i].type_information(); outfile<<Address_list[i].number<<endl; infile>>Address_list1[i].number; outfile<<Address_list[i].name<<endl; infile>>Address_list1[i].name; outfile<<Address_list[i].address<<endl; infile>>Address_list1[i].address; outfile<<Address_list[i].telephone_number<<endl; infile>>Address_list1[i].telephone_number; outfile<<Address_list[i].youbian<<endl; infile>>Address_list1[i].youbian; outfile<<Address_list[i].e_mail<<endl; infile>>Address_list1[i].e_mail; } system("cls");A: cout<<"************开发者:贲新宇******班级:G计算机131班******"<<endl; cout<<"********************************************************"<<endl;cout<<"G计算机131班同学通讯录"<<endl;cout<<endl; cout<<endl;cout<<endl; { cout<<"请选择以下功能:"<<endl; cout<<"1.搜索"<<endl; cout<<"2.编辑"<<endl; cout<<"3.删除"<<endl; cout<<"4.添加新成员"<<endl;cout<<"5.排序并显示信息"<<endl; cout<<"6.退出"<<endl; cout<<"请选择:";i=0; cin>>i; system("cls");//清屏 switch(i) { case1:Search_information();break; case2:Edit_information();break; case3:Delete_information();break; case4:Add_information();break;case5:Order_list();break; case6:gotoB; } i=0; gotoA; }B:for(i=0;i<n;i++)//再次向文件中保存修改的信息{ outfile<<Address_list1[i].number<<endl;outfile<<Address_list1[i].name<<endl;outfile<<Address_list1[i].address<<endl;outfile<<Address_list1[i].telephone_number<<endl;outfile<<Address_list1[i].youbian<<endl;outfile<<Address_list1[i].e_mail<<endl;}infile.close(); outfile.close(); return0;}结果截图:通讯录初始化搜索功能编辑功能删除功能添加成员功能排序并显示信息退出5.课程设计心得通过这次课程设计,巩固了c++的知识,对c++有了更深的了解,尤其是对文件操作方面,有了进一步的认识和理解。同时增强了动手能力,感受到了c++编程的乐趣。在本次设计中,我遇到了很多的问题,比如,首先在类的定义时,是否不用其display()成员函数,而在别的函数要显示该信息时直接调用;显然,如果用成员函数display()的话,可以使代码结构更加清晰,看起来更清爽,因此我选择了在类中定义这样的一个函数,并且在需要时方便调用。第二,在对对象赋值时,我一开始并没有用type_information(),而是直接用for循环一个一个的对对象赋值,然而,这样一来赋值时候语句特别啰嗦,因此再后边的设计中,将赋值直接改用成员函数来对对象进行初始化。当然,在各个模块设计时,问题也不少,例如,在搜索功能中,用for循环来逐项比对,代码如下:for(k=0;k<n;k++) { if(Address_list1[k].number==NUM) { Address_list1[k].display();break; } }Else { cout<<"没有该同学信息!"<<endl; } }这样一来,一旦if中没有满足条件,就会在else中输出:”没有该同学信息!”一共输出n-1次或者n次,代码就出现逻辑错误,解决的方法就是再添加一个变量f,对f进行判断,代码如下:for(k=0;k<n;k++) { if(Address_list1[k].number==NUM) { Ad

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论