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