C++实验报告书.docx
《C++实验报告书.docx》由会员分享,可在线阅读,更多相关《C++实验报告书.docx(28页珍藏版)》请在冰豆网上搜索。
C++实验报告书
中南大学
本科生课程设计(实践)任务书、设计报告
(C++程序设计)
题目
学生管理系统
学生姓名
蔡云伟
指导教师
李大扬
学院
材料科学与工程
专业班级
材料国际1401班
学生学号
0605140118
计算机基础教学实验中心
2015年6月4日
人员信息管理系统
摘要通过设计程序实现对人员的快速信息化管理
关键词输入输出,数据化,智能查询
一程序设计目的
针对本学期C++课程,运用MicrosoftVisualC++6.0完成对设计题目的编写、调试、运行,进一步掌握面向进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,同时使理论与实践结合,提高查阅资料、独立思考、团队合作的能力。
二程序功能介绍
本组课程设计的课题是“人员信息管理系统设计”,本系统以菜单方式工作,有一名管理员可以进行人员编号、、年龄、性别、出生年月、地址、、E-mail等信息的录入,并对人员信息进行浏览,还有按编号和姓名查询删除及修改人员信息的功能。
三程序设计
设计思路:
将人员信息定义为一个student类,在类中包含私有数据成员intnum、stringname、stringsex、stringpolitic、stringaddress,分别表示编号,,年龄,性别,出生年月,地址,,E-mail等。
公有成员函数包括:
set(),add(),del(),change(),research(),show(),分别用来实现对人员信息的数据初始录入、增加数据、删除数据、修改数据、查询数据、显示所有数据功能。
然后定义了一个menu()菜单函数,使功能菜单显示在运行窗口以提示用户如何进行操作。
主函数是一个程序必不可少的,在主函数中,使用一个switch语句来选择调用主菜单中的各个功能函数。
1)程序结构
结构框图
信息管理系统
信息输入
信息删除
信息查询
信息添加
信息修改
显示
结构流程
该人员信息管理系统包括信息输入、添加、删除、修改、查询和显示功能。
所包含的人员信息包括编号,,年龄,性别,出生年月,地址等。
所以程序中包括公有成员函数set();voidadd();voiddel();voidchange();voidsearch();voiddisplay();其作用分别为初始化信息,第一次对信息的录入;添加人员信息;删除某人员信息;修改某人员信息;查询某人员信息;显示全部学生信息。
同时定义menu()菜单函数,作用为使系统以菜单方式工作。
最后定义主函数,使用一个switch语句来选择调用主菜单中的各个功能函数。
2)模块说明
(1)、set()函数,初始化信息,第一次对信息的录入。
内容包括输入编号、、性别、年龄、、地址、电子邮件、出生年月。
首先定义可以存信息总量为200。
然后从1开始依次录入相应个数人员的信息。
当人员姓名为“0”时停止输入。
(2)、change();函数,修改某人员信息,选择要修改人员信息的对象,即第k个数据,然后依次对intnum[k];stringname[k],sex[k],age[k],number[k],address[k],e_mail[k],birth[k]等数据进行修改,结束修改后,系统将提示“已完成修改”。
(3)、add()函数,添加人员信息,以追加的方式录入信息,直接将信息追加到以前文件的末尾。
具体操作依次输入相应的数据,并且追加到之前的文件中去。
完成后系统将进行提示。
(4)、del()函数,删除人员信息,选择要删除的信息,系统将进行将数组储存的数据取出到文件中的操作。
(5)、menu()菜单函数。
菜单函数将对系统使用者进行提示,显示内容为系统的功能以及各功能相对应的数字键。
例如,在菜单下输入“4”,系统将进入信息修改界面,并且出现“你想修改第几个数据”的提示。
输入“0”可返回。
(6)、search()函数,查询人员信息,查询人员信息可以通过编号和姓名两种方式进行。
在此系统使用了选择语句功能,输入“a”进入编号查询,输入“b”则进入姓名查询,输入其他内容系统将进行提示“没有此选项”。
操作完成后,系统将显示该名人员的全部信息。
(7)、display()函数,显示全部人员的所有信息。
(8)、switch()函数,程序主函数。
使用者在对主函数进行相应操作后,该函数将调用上述函数,case“1”至“6”分别对应信息的输入、添加、删除、修改、查询和显示功能。
Case“0”对应功能为中止当前操作。
工作进程
22
23
24
25
26
27
28
29
30
1
2
蔡云伟
分配工作
主函数以及声明
调试添加文件
主界面的设计
调试添加、显示、删除文件
调试修改文件
整合全部程序及初步调试
最终调试及答辩
刘嘉雪
初始化文件
显示文件
添加文件
删除文件
修改文件
四调试与分析
1)程序调试过程:
所谓程序调试是指对程序的查错和排错。
我们调试程序经过以下几个步骤:
1.先进行人工检查。
在程序以后,我们对程序进行人工检查,发现程序设计人员由于疏忽而造成的多数错误。
为了更有效地进行人工检查,我们所编的程序力求做到以下几点
A、应当采用结构化程序方法编程
B、并尽可能多加注释,以帮助理解每段程序的作用
C、在编写复杂的程序时不将全部语句都写在main函数中,而多利用函数,用一个函数来实现一个单独的功能。
2.在人工检查无误后,进行上机调试。
在编译时给出语法错误的信息,根据提示的信息具体找出程序中出错之处并改正之。
并注意的是有时提示的出错并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。
3.在改正语法错误后,程序经过连接就得到可执行的目标程序。
运行程序,输入程序所需数据,就可得到运行结果。
应当对运行结果作分析,看它是否符合要求。
4.运行结果不对,大多属于逻辑错误。
对这类错误往往需要仔细检查和分析才能发现。
可以采用以下办法
A、将程序与流程图仔细对照,如果流程图是正确的话,程序写错了,是很容易发现的。
B、如果实在找不到错误,可以采用“分段检查”的方法。
在程序不同的位置设几个printf函数语句,输出有关变量的值,往下检查。
直到找到在哪一段中数据不对为止。
这时就已经把错误局限在这一段中了。
不断减小“查错区”,就可能发现错误所在。
总之,程序调试是一项细致、较为繁琐的工作,需要下功夫,动脑子,善于累积经验。
2)程序的不足
本程序设计存在的不足在于:
存储信息时会会出现以下问题:
1)在程序设计时,由于将数据定义为字符串等操作,在其中需要使用到循环语句时,会出现一些小问题,如系统无法成功提取相应组数据。
2)添加或修改信息时,之前已储存的信息可能会被新进信息所覆盖,而出现无法调用之前的数据的情况。
五课程设计总结
经过了一个学期的学习和上机实践,使我们对C++语言有了更深的认识和了解。
通过对本程序的编写,我们基本掌握了软件的运用,同时也学会了如何分析设计调试等过程中遇到的问题,并耐心细心对待问题,一步步去解决它。
学会了如何将繁杂的工作细化处理,合理分配到每个人。
在共同编写程序的过程中,我们发扬团队合作精神,一起查阅资料编写代码,探讨编程方法和技巧,相互学习。
当然设计中还遇到很多棘手的技术性问题,面对这些以我们自身能力无法解决的问题,我们积极寻求其他同学还有老师的帮助,最终完成了设计。
总的来说,我们运用了自己的知识,凭借团队的力量完成了理论到实践的结合,使我们受益良多,同时激发了我们日后深入学习C++语言的兴趣。
参考文献[1]《C++语言程序设计(第三版)》,郑莉,清华大学出版社,2004[2]《C++语言程序设计案例教程》,郑莉,清华大学出版社,2005[3]《C++程序设计教程》,钱能主编,清华大学出版社,1999.4[4]《C++程序设计》,谭浩强,清华大学出版社,2004[5]《C++程序设计实践指导》,谭浩强,清华大学出版社[6]《C++程序设计课程设计》,刘振安,机械工业出版社,2004.8
程序代码:
#include
#include
#include
#include
usingnamespacestd;
#defineM200//可以存信息总量
intN=0;//人员总量
classstudent
{
public:
student();
voidset();//初始化信息,第一次对信息的录入
voidadd();//添加人员信息
voiddel();//删除某人员信息
voidchange();//修改某人员信息
voidsearch();//查询某人员信息
voiddisplay();//显示全部人员信息
intCountLines(char*filename);
private:
staticintnum;
stringname,sex,number,address,e_mail,age,birth;
};
intstudent:
:
num=110;
student:
:
student(){}
///初始化文件
intstudent:
:
CountLines(char*filename)
{
ifstreamReadFile;
intn=0;
charline[512];
stringtemp;
ReadFile.open(filename,ios:
:
in);//ios:
:
in表示以只读的方式读取文件
if(ReadFile.fail())//文件打开失败:
返回0
{
return0;
}
else//文件存在
{
while(getline(ReadFile,temp))
{
n++;
}
returnn;
}
ReadFile.close();
}
voidstudent:
:
set()
{
inti;
stringsetname,setsex,setnumber,setaddress,sete_mail,setage,setbirth;
ofstreamoutfile;
outfile.open("student.txt",ios:
:
out);//----打开文件----
if(!
outfile)
{
cerr<<"openerror"<exit
(1);
}
//----依次录入相应个数的人员信息----
for(i=0;i{
cout<<"当姓名输入为'0'时,停止输入!
~"<cout<<"请输入姓名:
"<cin>>setname;
if(setname=="0")break;
if(setname!
="0")
{
num++;
outfile<outfile<cout<<"请输入性别:
"<cin>>setsex;
outfile<cout<<"请输入年龄:
"<cin>>setage;
outfile<cout<<"请输入电话:
"<cin>>setnumber;
outfile<cout<<"请输入住址:
"<cin>>setaddress;
outfile<cout<<"请输入E-mail:
"<cin>>sete_mail;
outfile<cout<<"请输入出生年月:
"<cin>>setbirth;
outfile<}
}
outfile.close();//----关闭文件----
}
///添加文件
voidstudent:
:
add()
{
stringaddname,addsex,addnumber,addaddress,adde_mail,addbirth,addage;
//----以追加的方式录入信息,直接将信息追加到以前文件的末尾----
ofstreamoutfile("student.txt",ios:
:
app);
if(!
outfile)
{
cerr<<"openerror"<exit
(1);
}
N=N+1;
//----依次输入相应的数据,并且追加到之前的文件中去----
cout<<"请输入您要添加的数据"<num++;
outfile<cout<<"请输入姓名:
"<cin>>addname;
outfile<cout<<"请输入性别:
"<cin>>addsex;
outfile<cout<<"请输入年龄:
"<cin>>addage;
outfile<cout<<"请输入电话:
"<cin>>addnumber;
outfile<cout<<"请输入住址:
"<cin>>addaddress;
outfile<cout<<"请输入E-mail:
"<cin>>adde_mail;
outfile<cout<<"请输入出生年月:
"<cin>>addbirth;
outfile<outfile.close();
cout<<"已添加成功!
"<}
///删除文件
voidstudent:
:
del()
{
N=CountLines("student.txt");
intk,i;
intnum[M];
stringname[M],sex[M],age[M],number[M],address[M],e_mail[M],birth[M];
ifstreaminfile("student.txt",ios:
:
in);
if(!
infile)
{
cerr<<"openerror"<exit
(1);
}
cout<<"======================================================================="<cout<<"编号性别年龄住址E-mail出生年月"<for(i=0;i{
infile>>num[i];
cout<infile>>name[i];
cout<<'\t'<infile>>sex[i];
cout<<'\t'<infile>>age[i];
cout<<'\t'<infile>>number[i];
cout<<'\t'<infile>>address[i];
cout<<'\t'<
infile>>e_mail[i];
cout<<'\t'<infile>>birth[i];
cout<<'\t'<}
cout<<"======================================================================="<cout<<"你想删除第几个?
"<cin>>k;
k=k-1;
infile.close();
ofstreamoutfile("student.txt",ios:
:
out);
if(!
outfile)
{
cerr<<"openerror"<exit
(1);//退出程序
}
//----将数组存取的信息输出到文件中去----
for(i=0;i{
if(i!
=k)
{
outfile<outfile<outfile<outfile<outfile<outfile<
outfile<outfile<}
}
outfile.close();
N=N-1;
cout<<"已删除成功!
"<}
///修改文件
voidstudent:
:
change()
{
N=CountLines("student.txt");
inti,k;
intnum[M];
stringname[M],sex[M],number[M],address[M],age[M],e_mail[M],birth[M];
ifstreaminfile("student.txt",ios:
:
in);
if(!
infile)
{
cerr<<"openerror"<exit
(1);
}
cout<<"======================================================================="<cout<<"编号性别年龄住址E-mail出生年月"<for(i=0;i<=N;i++)
{
infile>>num[i];
cout<infile>>name[i];
cout<<'\t'<infile>>sex[i];
cout<<'\t'<infile>>age[i];
cout<<'\t'<infile>>number[i];
cout<<'\t'<infile>>address[i];
cout<<'\t'<
infile>>e_mail[i];
cout<<'\t'<infile>>birth[i];
cout<<'\t'<}
cout<<"======================================================================="<infile.close();
ofstreamoutfile("student.txt",ios:
:
out);
if(!
outfile)
{
cerr<<"openerror"<exit
(1);
}
cout<<"你想修改第几个数据?
"<cin>>k;
k=k-1;
if(k<=N)
{
cout<<"请输入新的数据:
"<cout<<"请输入编号:
"<cin>>num[k];
cout<<"请输入姓名:
"<cin>>name[k];
cout<<"请输入性别:
"<cin>>sex[k];
cout<<"请输入年龄:
"<cin>>age[k];
cout<<"请输入电话:
"<cin>>number[k];
cout<<"请输入住址:
"<cin>>address[k];
cout<<"请输入E-mail:
"<cin>>e_mail[k];
cout<<"请输入出生年月:
"<cin>>birth[k];
for(i=0;i<=N;i++)
{
outfile<outfile<outfile<outfile<outfile<outfile<
outfile<outfile<}
outfile.close();
cout<<"已修改成功!
"<}
else
cout<<"没有该学生"<}
///查询文件
voidstudent:
:
search()
{
N=CountLines("student.txt");
inti,n,w=0,num[M],a[M];charch;
stringsearchname,name[M],sex[M],age[M],number[M],address[M],b[M][7],e_mail[M],birth[M];
cout<<"a.按编号查找b.按姓名查找"<ifstreaminfile("student.txt",ios:
:
in);
if(!
infile)
{
cerr<<"openerror"<exit
(1);
}
for(i=0;i{
infile>>num[i];a[i]=num[i];
infile>>name[i];b[i][0]=name[i];
infile>>sex[i];b[i][1]=sex[i];
infile>>age[i];b[i][2]=age[i];
infile>>number[i];b[i][3]=number[i];
infile>>address[i];b[i][4]=address[i];
infile>>e_mail[i];b[i][5]=e_mail[i];