淮海工学院通讯录系统课程设计报告.docx
《淮海工学院通讯录系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《淮海工学院通讯录系统课程设计报告.docx(29页珍藏版)》请在冰豆网上搜索。
淮海工学院通讯录系统课程设计报告
淮海工学院计算机工程学院
课程设计报告
设计名称:
C++程序设计课程设计
姓名:
贲新宇学号:
2013150225
专业班级:
G计算机131班
系(院):
计算机工程学院
设计时间:
2014.6.9——2014.6.20
设计地点:
计算机网络技术室
成绩:
指导教师评语:
签名:
年月日
1.课程设计目的
本课程设计是网络工程专业重要的实践性环节之一,是在学生学习完《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指向来判断用户是要回到主界面以显示主菜单继续操作还是选择结束程序。
二、模块结构图
模块结构图是结构化设计方法,采用类似于结构化分析的“由大到小”、“自顶向下,逐层分解”的基本思想描述(分解)系统。
结构化设计方法,首先以数据流图为基础导出系统模块(功能)结构图。
在导出系统模块(功能)结构图的过程中,以独立性、低耦合性、高内聚性、公共模块作为模块划分的原则。
先将系统数据流图中的加工转换成模块,再将各大模块继续划分为较小的模块,直到每一模块都是功能单一的模块。
三、系统流程图
⑴主要模块介绍
各功能模块设计思路及流程图:
1搜索功能:
该功能通过键盘输入数值j,选择调用不同的具体的搜索功能函数;在这两种功能中,分别又通过for循环和if条件判断找出符合条件的同学的信息,完成功能要求。
最后通过选择是否继续来继续搜索或者返回主函数界面。
②编辑功能:
该功能主要通过键盘首先输入需要编辑的同学姓名,然后通过一个for循环查找到,如果找到信息,则可以继续往下进一步修改信息,如果找不到,则输出没有该同学信息。
在定位到具体的对象之后,再通过一个switch语句选择具体修改的信息并修改,修改之后,调用对象的成员函数显示新的信息,然后通过if判断是否继续来选择继续修改或者返回主函数界面。
删除功能:
添加新成员功能:
排序功能:
4.课程设计成果
#include
#include
#include
#include
usingnamespacestd;
structclassmates
{
public:
charnumber;
charname;
charaddress;
chartelephone_number;
charyoubian;
chare_mail;
voiddisplay()//显示信息
{
{cout<<"学号:
"<<<"姓名:
"<<<"地址:
"<
<<"电话号码:
"<<<"邮编:
"<<<"邮箱:
"<}
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{
if(Address_list1[k].number==NUM)
{
Address_list1[k].display();
f=0;break;
}
}
if(f==1)
{cout<<"没有该同学信息!
"<}
voidsearch2()//按姓名搜索
{
intk,f=1;
stringname1;
cout<<"请输入姓名:
";
cin>>name1;
for(k=0;k{
if(name1==Address_list1[k].name)
{
Address_list1[k].display();
f=0;break;
}
}
if(f==1)cout<<"没有该同学信息!
"<}
voidSearch_information()//搜索功能
{
intj;
cout<<"**************************************"<cout<<"1.按学号搜索;"<cout<<"2.按姓名搜索;"<cout<<"3.返回;"<cout<<"请选择:
";
cin>>j;
system("cls");//清屏
switch(j)
{
case1:
search1();break;//调用按学号搜索函数
case2:
search2();break;//调用按姓名搜索函数
case3:
break;
}
j=0;
cout<<"*******************************"<cout<<"是否继续搜索(1.是/2.否)"<cin>>j;
system("cls");//清屏
if(j==1)
{
Search_information();
}
}
voidedit_display()//显示编辑成功
{
cout<<"修改成功"<cout<<"*******************************"<}
voidEdit_information()//编辑功能
{
inttemp=-1,k;
stringnam,name1,address1,e_mail1,number1,youbian1,telephone_number1;
cout<<"请输入想要修改的同学姓名:
"<cin>>nam;
for(k=0;k{
if(nam==Address_list1[k].name)
{temp=k;break;}
}
if(temp!
=-1)//编辑各个信息
{
cout<<"*******************************"<cout<<"请输入想要修改的信息(1.学号/2.姓名/3.地址/4.邮编/5.电话号码/6.e-mail)";
cout<cin>>k;
switch(k)
{
case1:
cout<";
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<<"已修改的新的同学信息:
"<Address_list1[temp].display();
}
else
{
k=0;
cout<<"没有该同学信息!
"<cout<<"*******************************"<cout<<"是否继续修改?
(1.是/2.否)"<cin>>k;
if(k==1)//选是,继续回到该函数开头
{
Edit_information();
}
else
{
system("cls");//否则,退出并清屏
}
}
}
voidDelete_information()//删除功能
{
intk;
stringnam;
cout<<"请输入想要删除的同学姓名:
"<cin>>nam;
for(k=0;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<<"该同学信息已删除!
"<}
voidAdd_information()//添加功能
{
Address_list1[n].type_information();
cout<Address_list1[n].display();
n=n+1;
cout<cout<}
voidorder1()//按学号排序(选择排序法)
{
intj,k;
stringch="f";
classmatesinformation;
for(j=0;jfor(k=j+1;k{
if(Address_list1[k].number{
information=Address_list1[j];
Address_list1[j]=Address_list1[k];
Address_list1[k]=information;
}
}
for(j=0;j{
if(Address_list1[j].number==ch)
{
}
else
Address_list1[j].display();
}
}
voidorder2()//按姓名排序(选择排序法)
{
intj,k;
stringch="f";
classmatesinformation;
for(j=0;jfor(k=j+1;k{
if(Address_list1[k].name{
information=Address_list1[j];
Address_list1[j]=Address_list1[k];
Address_list1[k]=information;
}
}
for(j=0;j{
if(Address_list1[j].number==ch)
{
}
else
Address_list1[j].display();
}
}
voidOrder_list()//排序并显示
{
intchoice;
cout<<"1.按学号排序;"<cout<<"2.按姓名排序;"<cin>>choice;
system("cls");
if(choice==1)
{
order1();
}
else
{
order2();
}
cout<cout<}
intmain()
{
fstreamoutfile("information.dat",ios:
:
out);//以输出方式打开文件
if(!
outfile)
{
cerr<<"openerror!
"<exit
(1);
}
fstreaminfile("information.dat",ios:
:
in);//以输入方式打开文件
if(!
infile)
{
cerr<<"openerror!
"<exit
(1);
}
inti;
cout<<"请先添加部分同学信息:
"<cout<<"请输入想要添加的同学人数:
"<cin>>n;
for(i=0;i{
cout<<"第"<
Address_list[i].type_information();
outfile<infile>>Address_list1[i].number;
outfile<infile>>Address_list1[i].name;
outfile<infile>>Address_list1[i].address;
outfile<infile>>Address_list1[i].telephone_number;
outfile<infile>>Address_list1[i].youbian;
outfile<infile>>Address_list1[i].e_mail;
}
system("cls");
A:
cout<<"************开发者:
贲新宇******班级:
G计算机131班******"<cout<<"********************************************************"<cout<<"G计算机131班同学通讯录"<cout<cout<cout<{
cout<<"请选择以下功能:
"<cout<<"1.搜索"<cout<<"2.编辑"<cout<<"3.删除"<cout<<"4.添加新成员"<cout<<"5.排序并显示信息"<cout<<"6.退出"<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{
outfile<outfile<outfile<outfile<outfile<outfile<}
infile.close();
outfile.close();
return0;
}
结果截图:
通讯录初始化
搜索功能
编辑功能
删除功能
添加成员功能
排序并显示信息
退出
5.课程设计心得
通过这次课程设计,巩固了c++的知识,对c++有了更深的了解,尤其是对文件操作方面,有了进一步的认识和理解。
同时增强了动手能力,感受到了c++编程的乐趣。
在本次设计中,我遇到了很多的问题,比如,首先在类的定义时,是否不用其display()成员函数,而在别的函数要显示该信息时直接调用;显然,如果用成员函数display()的话,可以使代码结构更加清晰,看起来更清爽,因此我选择了在类中定义这样的一个函数,并且在需要时方便调用。
第二,在对对象赋值时,我一开始并没有用type_information(),而是直接用for循环一个一个的对对象赋值,然而,这样一来赋值时候语句特别啰嗦,因此再后边的设计中,将赋值直接改用成员函数来对对象进行初始化。
当然,在各个模块设计时,问题也不少,例如,在搜索功能中,用for循环来逐项比对,代码如下:
for(k=0;k{
if(Address_list1[k].number==NUM)
{
Address_list1[k].display();
break;
}
}
Else
{
cout<<"没有该同学信息!
"<}
}
这样一来,一旦if中没有满足条件,就会在else中输出:
”没有该同学信息!
”一共输出n-1次或者n次,代码就出现逻辑错误,解决的方法就是再添加一个变量f,对f进行判断,代码如下:
for(k=0;k{
if(Address_list1[k].number==NUM)
{
Address_list1[k].display();
f=0;
break;
}
}
if(f==1)
{
cout<<"没有该同学信息!
"<}
}
如此,满足if的条件,就直接显示并跳出,如果不满足,就只会显示一条"没有该同学信息!
"。
问题终于顺利解决。
在删除功能中,我最初的想法是用后边的信息覆盖要删除的信息这样信息就相当于被删除了,代码如下:
for(k=0;k{
if(nam==Address_list1[k].name)
{
Address_list1[k].number=Address_list1[k+1].number;
Address_list1[k].name=Address_list1[k+1].name;
Address_list1[k].