C++课程设计报告职工信息表系统.docx
- 文档编号:28840951
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:18
- 大小:179.67KB
C++课程设计报告职工信息表系统.docx
《C++课程设计报告职工信息表系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告职工信息表系统.docx(18页珍藏版)》请在冰豆网上搜索。
C++课程设计报告职工信息表系统
《高级语言程序设计》
课程设计报告
设计题目职工信息表系统
专业计算机科学与技术
班级软件方向
姓名
学号
2007年6月5日
目录
1.设计目标…………………………………………………3
2.设计思想…………………………………………………3
3.类及对象设计……………………………………………4
4.程序源代码………………………………………………5
5.调试记录…………………………………………………15
6.总结………………………………………………………19
职工信息表系统
1.设计目标
1)使用类和向量的方法,编写能够输入职工的信息的职工信息表,再根据这个表产生一个职工信息简表,并利用多态性实现信息的输出。
2)本设计要求实现如下功能:
(1)增加职工信息记录
(2)生成信息简表
(3)显示原始记录
(4)显示简表记录
(5)结束程序运行
在功能
(2)(3)4)中如果没有输入信息,程序会提示要先输入信息
2.设计思想
在本程序中包含一个头文件.h和两个cpp文件。
其中头文件除了对函数进行原型声明外,还定义了两个类来建立职工的信息数据。
这一点会在下一部分中作详细说明。
当然还有普通函数对信息的处理。
voidaddin();//增加职工记录
voidbrevity();//生成信息简表
voidDispwks();//显示职工信息
voidDispwk();//显示简表信息
另外,菜单是该程序的整体框架,主要通过使用控制语句用来改变程序执行的顺序,即根据用户选择的不同功能来调用不同的实现函数,这是实现结构化程序设计的基础。
如:
voidhandle_menu();//菜单设计函数
intnemu_select();//菜单选择函数
3.类及对象设计
1)类的设计
本程序通过继承的方法,定义两个类——职工简表类(worker),职工信息类(workers),这里把简表类的内容作为基类,由它派生出详表类,两个类之间的关系,可以由以下的结构图中清楚地表现出来。
workers
sex:
char
age:
int
sal:
int
setsex:
void
setage:
void
setsal:
void
*getsex:
char
getage:
int
getsal:
int
display:
void
worker
Num:
char
Name:
char
setname:
void
Setnum:
setnum:
void
*getna*getname:
char
*getnu*getnum:
char
display:
display:
virtualvoid
其中,简表主要存放职工的编号,姓名,等信息,派生类中,除了继承基类的数据成员外,还在原有的基础上添加了职工性别,年龄,工资三项数据以丰富职工记录,而这些数据成员的获取与传值主要通过类中的成员函数来实现。
如两个类中,返回类型为int与char的成员函数,是实现数据的获取,由用户输入;而返回类型为void(除display外)的函数,实现传值的功能。
在这里我想特别强调的是基类中的函数voiddisplay,将其设计为虚函数,主要是由于程序中的一个打印函数print是使用基类worker对象的引用作为参数,以便实现多态性(print(worker&))。
2)对象的设计
该程序的另一个特点是向量数组的使用,即主要通过向量的方法生成两个对象:
vector
vector
运用向量主要是考虑编程的方便;因为向量是一种容器,系统已经为用户预定义了相关操作的公有成员函数,我们可以通过调用其成员函数的方法直接完成程序设计,如在添加函数中:
voidaddin(){
workerwks;//暂存对象
……
cout<<“\t年龄”;
cin>>age;
wks.setage(age);
vwks.push_back(wks);
}
push_back()是向量的内部函数,主要用于向容器尾部插入对象,改变容器的大小,实现从向量的尾部增加记录。
4.程序源代码
//头文件cpp51.h
#if!
defined(CPP51_H)
#defineCPP51_H
#include
#include
#include
usingnamespacestd;//使用名字空间
voidhandle_menu();//菜单设计函数
intnemu_select();//菜单选择函数
voidaddin();//增加职工记录
//voidread();//从磁盘中读取记录
voidbrevity();
voidDispwks();
voidDispwk();
/***************************
*职工简表类
*****************************/
//基类:
worker
classworker{
private:
charnum[8];
charname[10];
public:
voidsetname(chars[]){strcpy(name,s);}
char*getname(){returnname;}
voidsetnum(charn[]){strcpy(num,n);}
char*getnum(){returnnum;}
virtualvoiddisplay()
/*派生类:
workers*/
classworkers:
publicworker{
private:
intage,sal;
charsex[6];
public:
voidsetage(inta){age=a;}
voidsetsex(chars[]){strcpy(sex,s);}
voidsetsal(ints){sal=s;}
intgetage(){returnage;}
char*getsex(){returnsex;}
intgetsal(){returnsal;}
voiddisplay(){
cout<<"\t"< cout< } }; #endif /*功能函数*/ #include"cpp51.h" vector vector /**************************** *显示处理函数 ******************************/ voidprinter(worker&s) {voidprinter(worker&s) { s.display(); } /**************************** *输入处理函数 ******************************/ voidaddin() { charch[10]; intage; intsal; workerswks;//暂存对象 cout<<"注意: 当编号为零时,进入主界面: "< for(inti=0;i<10;i++) { cout<<"\t编号: "; cin.getline(ch,'\n'); if(ch[0]=='0')break;//结束输入 wks.setnum(ch); cout<<"\t姓名: "; cin.getline(ch,'\n'); wks.setname(ch); cout<<"\t性别: "; cin.getline(ch,'\n'); wks.setsex(ch); cout<<"\t年龄: "; cin>>age; wks.setage(age); cout<<"\t工资: "; cin>>sal; wks.setsal(sal); vwks.push_back(wks);//从尾部追加到向量数组 getchar(); } } /**************************** *简表处理函数 ******************************/ voidbrevity() { workerwk; inttop=vwks.size(); intsize=vwk.size(); if(top==0) { cout<<"\t没有建立记录,请先建立记录信息。 "< return; } for(inti=size;i { vwk.puchback(wk); vwk[i]=vwks[i]; } cout<<”信息简表已生成,请继续< } /**************************** *显示职工信息处理函数 *****************************/ voidDispwks() { if(vwks.size()==0) { cout<<"\t没有输入信息,请先输入信息。 "< return; } cout<<"\t编号"<<"\t姓名"<<"\t性别"<<"\t年龄"<<"\t工资"< for(inti=0;i printer(vwks[i]); } /**************************** *显示简表信息处理函数 *****************************/ voidDispwk() { inttop=vwks.size(); intsize=vwk.size(); if(size==0) { cout<<"\t没有生成新的简表,请先生成新的简表"< return; } if(size! =top) {cout<<"\t没有生成新简表,"< <<"\t原来的简表内容如下: "< } elsesize=top; cout<<"\t编号"<<"\t姓名"< for(inti=0;i printer(vwk[i]); } /************************** *读取记录 ***************************/ voidread(){ charline[81]; ifstreaminfile("aaa.txt"); infile.getline(line,80); if(infile.eof()){cout<<"没有记录,请先输入信息"< } while(! infile.eof()) { cout< infile.getline(line,80); } infile.close(); }*/ /*主函数和菜单实现函数*/ #include"cpp51.h" voidmain() {cout<<"_______________________________"< cout<<""< cout<<""< cout<<"欢迎使用"< cout<<""< cout<<"职工信息表系统"< cout<<""< cout<<"________________________________"< handle_menu(); } /**************************** *菜单处理函数 ******************************/ voidhandle_menu(void) { for(;;) { switch(nemu_select()) { case1: addin(); break; case2: brevity(); break; case3: Dispwks(); break; case4: Dispwk(); break; /*case5: read(); break;*/ case5: cout<<"\t欢迎下次继续使用,再见! \n"; return; } } } /**************************** *菜单选择函数 *****************************/ intnemu_select() { chars[4]; intcn; cout<<"\t*************************\n"; cout<<"\t1.增加职工信息\n"; cout<<"\t\n"; cout<<"\t2.生成信息简表\n"; cout<<"\t\n"; cout<<"\t3.显示原始记录\n"; cout<<"\t\n"; cout<<"\t4.显示简表记录\n"; cout<<"\t\n"; cout<<"\t6.结束程序运行\n"; cout<<"\t\n"; cout<<"\t*****************************\n"; cout<<"\t选择1-5: "; for(;;) { gets(s); cn=atoi(s);//使输入的字符串转换为数字 if(cn<1||cn>5) printf("\n\t输入错误,重选1-5: "); else break; } returncn; } 5.调试记录 调试通过的结果如下: 附注: 在没有通过之前遇到了很多问题: 首先,我没有理解宏定义的该怎样使用,把宏定义的#defineCPP51_H和#defineCPP51_H直接按书上的#definecpp51_h和#define4_51打上去了;其次,没有理解名字空间usingnamespacestd的作用在#include 当然在调试通过后可读性也非常差,很少提示信息。 例如: 在没有增加信息之前就生成简表不会提示你没有记录信息,请先输入记录信息;在生成了简表后也不会提示你简表已生产;还不会提示你当你输入的编号为零时返回;而且生成的简表对应不整齐如之前代码为: cout<<"\t"< cout< 输出结果为: 编号姓名性别年龄工资 1扬西西女182000 改正后为: cout<<"\t"< cout< 输出结果为: 编号姓名性别年龄工资 1扬西西女182000 从而让我知道endl和”\t”的不同之处。 本来我还添加了从磁盘中读取记录和把记录保存到磁盘中,但是在读取是出现了死循环;在存盘中又出现读取向量信息不规范,尽管做了很大努力刚开始能从磁盘中读取出来,但后来又不能,最后没有调试通过。 由于时间的关系,最后没有把这两个功能添加进去。 6.总结 通过作课程设计,我发现自己在C++的学习上存在着很多不足.至少在很多细节问题上并没有完全弄懂.虽然一章章的学习,自我感觉基本过关,但是再学习的思路上没有一个整体的框架,不能把零碎的知识综合起来加以运用. 像我做的这个课程设计,功能很少,仅有对职工信息的增加和对职工的信息以各种方式输出;职工的信息也很简单。 并且没有对信息进行查找,删除,各种排序,统计等操作;最大的缺陷是没有对信息从磁盘中读入和读出,如果能按覆盖原有记录和追加在原有记录上的方式保存到磁盘和中那就更好了。 在做这个程序设计中我遇到了很多麻烦,无论是课本上的代码还是自己编写的代码。 特别是向量的使用,说句实在话刚开始对向量一点也不懂,像向量中的函数功能和使用;如何生成向量数组等。 还有本来想添加从磁盘中存入和读出功能,但是遇到了很多麻烦,像在读出是出现死循环跳不出来。 由于时间的关系没有改正所以没有添加上去,但是我下去有时间一定回会在做出来的。 尽管这次课程设计做的不是很成功,很多打算做出来的都没有调试成功,但是通过这次亲手操作和经过老师和同学的交流学到了挺多东西的。 最起码对向量的使用有所掌握和对磁盘的操作有更深的理解。 我做这个没有发足够的时间,做的不是很成功。 我认识到做一件事无论遇到什么困难都要坚持下去,而不要半途而废,只要你认真对待从中一定会有很大的收获。 为我们成功付出我们最大的努力吧! 参考资料: [1]刘振安等.《C++程序设计课程设计》,北京: 机械工业出版社,2004.3.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告 职工 信息 系统