实验报告修改2.docx
- 文档编号:7294840
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:393.44KB
实验报告修改2.docx
《实验报告修改2.docx》由会员分享,可在线阅读,更多相关《实验报告修改2.docx(14页珍藏版)》请在冰豆网上搜索。
实验报告修改2
C++程序课程设计报告
学院:
资源与安全工程学院
专业班级:
采矿试验班1301
课题:
高校职工工资及信息管理系统
组长:
张千
组员:
张千,张洪东,马亮亮,周兴
指导教师:
毕林
设计时间:
2014年6月23日至7月3日
目录
一、程序设计目的与要求1
二、程序功能介绍1
三、设计内容1
四、系统分析与设计2
4.1主要知识点2
4.2关键技术2
五、主要流程图4
六、实验结果展示6
七、设计体会10
八、参考文献11
附录:
源程序代码1
一、程序设计目的与要求
1.1目的
达到熟练掌握C++语言的基本知识和技能;
基本掌握面向对象程序设计的基本思路和方法;
能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
1.2要求
要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
要求在设计的过程中,建立清晰的类层次;
在系统的设计中,至少要用到面向对象的一种机制。
二、程序功能介绍
功能选择可以用菜单来实现
例如:
请选择您的计算内容:
1、职工信息录入
2、查询职工信息
3、修改职工信息
4、增加职工记录
5、删除职工信息
6、统计职工信息
7、浏览所有信息
8、退出系统
用户通过输入不同的数字进入不同的菜单。
次级菜单主要显示本程序的功能,主要的功能有录入职工信息、查询职工信息、添加职工记录、删除职工记录、统计职工信息、浏览职工信息。
二、运行时给出明确的提示信息。
比如,在选择主功能菜单是选择范围是(1-8),如果用户输入的选项不在可选择范围之内,程序会给出输入选项不在可选范围之内的提示,并要求用户且知道输入选项在可选范围内才执行相应的功能。
本程序有较友好的用户交互界面,每进入或离开一个功能界面时都会有相应的提示信息,方便用户操作。
三、设计内容:
问题的描述(功能要求):
高校有五类职工:
教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。
为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。
同时注意生成的相关数据结果以文件方式存放在硬盘中。
程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),若有职工由于工作调动,则可进行相对应的调整动作。
相关信息:
每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:
其中工资的基本构成如下:
教师:
基本工资+课时费;
实验员:
基本工资+实验室补助;
行政人员:
基本工资+行政补贴;
教师兼职实验员:
基本工资+课时费+实验室补助;
行政人员兼职教师:
基本工资+行政补贴+课时费;
其中:
1.课时费:
教师每一月的基本工作量为24,实验员每学期基本工作量为0,行政人员没有基本工作量,每节课时费为30元;课时费=(上学期工作量-基本工作量)*30;
注意:
如果上学期基本工作量没完成,则其(上学期工作量-基本工作量)*30为负值。
2.基本工资:
教师1000元,实验员800元,行政人员900元。
3.行政补贴:
250元。
四、系统分析与设计
4.1、主要知识点
全局函数,以及要用到的标准头文件。
用到的知识主要有类的继承与派生,纯虚函数,头文件的组织,链表操作,程序菜单选择和处理函数的组织和编写,文件的读写操作。
4.2关键技术
程序中每一种数据类型用一个类来实现,共设计了6个类。
人员类Person,教师类Teacher,实验员类Assistant,行政人员类Manager,教师兼实验员类Teacher_Manager,行政人员兼教师类Manager_Teacher以及工资信息管理类Salary_Management。
每一种类都定义了相应的成员函数。
具体定义如下所示:
(1)类Person
类Person为抽象类,为另外五个类的基类,在类Person中,成员变量ID表示职工编号,name表示职工姓名,duty表示岗位类别,salary表示职工工资以及next表示Person类的指针域。
两个input()成员函数,无参成员函数input()为纯虚函数用来从键盘输入职工数据,有参成员函数input(ifstream&infile)用来从文件读入职工数据;两个output()成员函数,无参成员函数output()用来向屏幕输出职工信息,有参成员函数output(ofstream&outfile)向指定文件Salary.txt中输出职工信息以及成员函数incoming()用来计算职工工资。
类中还将将Salary_Management类声明为友员类,将Work_type(intduty)函数声明为友元函数,用来将职工类别标志转换为相应的类别名称,以便显示职工岗位类别名称。
(2)类Teacher
类Teacher中,在继承基类数据成员的基础上增加了成员变量hours用来存放教师的上课课时数,并重新定义了成员函数input()和output()分别用来输入和输出职工信息,incoming()用来计算教师类的人员工资。
(3)类Assistant
类Assistant中,,在继承基类数据成员的基础上增加了成员变量hours用来存放教师的上课课时数和Allowance用来存放试验室补助,并重新定义了成员函数input()和output()分别用来输入和输出职工信息,incoming()用来计算教师类的人员工资。
(4)类Manager
类Manager中,在继承基类数据成员的基础上增加了成员变量Allowance用来存放行政补贴,并重新定义了成员函数input()和output()分别用来输入和输出职工信息,incoming()用来计算教师类的人员工资。
(5)类Teacher_Assistant
类Teacher_Assistant以Teacher类和Assistant类为直接基类,重新定义了成员函数input()和output()分别用来输入和输出职工信息,incoming()用来计算教师类的人员工资。
(6)类Manager_Teacher
类Manager_Teacher以Teacher类和Assistant类为直接基类,重新定义了成员函数input()和output()分别用来输入和输出职工信息,incoming()用来计算教师类的人员工资。
(7)类Salary_Management
类Salary_Management用来为管理职工信息提供相关功能函数,有私有数据成员PL是链表的头指针,私有成员函数clear清除所有职工结点,私有成员函数QueryRec用来查询职工记录。
共有成员函数AddRec用来增加职工记录,DelRec用来删除职工记录,Modify用来修改职工记录,display用来显示职工记录,Save用来保存职工信息,FindRecID按职工编号查找职工记录,FindRecName按职工姓名查找职工记录,FindRecSalary按职工工资查找职工记录,FindRecEducation按职工学历查找职工记录,FindRecAge按职工年龄查找职工记录Load用来从键盘录入职工信息,Build用来从文件读取职工信息,Statistics提供职工信息统计功能,可以实现分别按职工类别、职工工资、要发工资总数、职工人数的统计功能,MenuSelect菜单功能选择函数,显示程序主功能菜单并接收用户的选择,返回用户选择提供给Handle_menu函数,Handle_menu菜单处理函数,用来处理用户的功能选择,并调用相应的功能函数实现用户所要求实现的功能。
(8)全局函数
duty_to_string函数用来将岗位类别标识转换为相应的名称。
print_worktype_menu函数用来显示人员类别选择菜单。
dis_mainmenu函数用来选择程序主功能菜单。
(9)调用的系统库函数
system("pause"); //在屏幕上输出:
press any key to quit,意思是停留,看程序的输出结果
system("cls"); 清屏
(10)程序的主要功能函数及相关算法
本程序共定义六个类,分别是Person类、Teacher类、Assistant类、Manager类、Teacher_Assistant类、Manager_Teacher类和Salary_Management类。
Person类为抽象类作为Teacher类、Assistant类和Manager类直接基类。
Teacher_Assistant类以Teacher类和Assistant类作为直接基类,多重继承,Manager_Teacher类以Manager类和Teacher类作为直接基类多重继承。
Salary_Management类是为职工信息管理提供功能函数。
Salary_Management类中主要的成员函数有:
AddRec函数用来提供添加职工信息的功能。
该函数先调用print_worktype_menu函数打印职工类别选择菜单供用户选择,程序再根据用户的不同选择分别调用Teacher类、Assistant类、Manager类、Teacher_Assistant类、Manager_Teacher类的input函数实现添加职工信息。
Build函数的功能是从文件读取职工信息来实现程序的初始化,该函数使用文件指针操作函数tellg和seekg函数来不断调整文件指针,以实现从文件读取职工信息供程序初始化的功能。
再该函数中,先定义buf临时空间,用infile>>buf>>buf>>Duty;语句先读取职工信息中的duty的值,然后在根据duty的值分别调用Teacher类、Assistant类、Manager类、Teacher_Assistant类、Manager_Teacher类的input(ifstream&)函数来实现从文件输入职工信息的功能。
DelRec函数的功能是根据用户输入的编号来删除指定的职工记录。
该函数先调用QueryRec函数查找与用户输入的编号相对应的职工记录,然后从链表中删除对应的结点,实现职工记录的删除,同样也会相应的输出文件中的信息。
display函数的功能是显示所用的职工记录。
Search函数功能是通过调用FindRecID函数和FindRecName函数来实现按职工编号或按姓名来查找相应的职工信息,如果能查找到则输出相应的职工信息,没找到会给出”找不到你要查找的职工信息!
”的提示信息。
该函数具有循环查找功能。
Load函数的功能是录入职工信息。
该函数先要求用户输入要录入的职工数,然后调用print_worktype_menu函数提示用户输入职工的类别,程序再根据用户输入的职工类别duty来调用相应类的input函数实现职工信息的键盘录入功能。
Handle_menu函数的功能是处理用户的功能选择。
该函数通过调用MenuSelect函数获取用户的功能选择序号来给select变量赋值,然后再用switch语句根据select的值调用相应的功能函数来实现用户选择的功能。
Save函数的功能是将职工信息已成功保存到Salary.txt文件中。
Statistics函数的是职工信息的统计。
共提供四种不同方式的统计功能:
1、统计各职工类别职工的人数
2、根据用户输入的工资范围统计并输出该范围内的职工信息
3、统计要发工资总数
4、统计职工的总人数
Modify函数的功能是修改指定职工的信息;但不能修改职工的类别信息。
函数先要求用户输入要修改的职工编号,然后调用QueryRec函数查找到相应职工的记录,然后调用该职工所属类的input函数来时用户信息的重新赋值。
五、主要流程图
Salary_Management类中成员函数调用关系如图所示:
main函数
图2、Salary_Management类中成员函数调用关系图
六、实验结果展示
图1:
录入职工信息
图2:
录入职工信息
图3:
查询职工信息
图4:
修改职工信息
图5:
增加职工
图6:
删除职工信息
图7:
统计职工信息
图8:
浏览职工信息
七.设计体会
1.心得体会
本次程序设计所用时间较长,工作量很饱满,而且所用的知识很多,但是我们平常在课堂上所学的知识很有限,这就需要我大量的自学书本和课外的其他书籍上的知识。
为了让程序容易使人看懂,我用到的知识点不是非常多,大都是一些基本知识。
毕竟很多知识没有学,能用基本知识就尽量用的基本知识。
C++设计实践是对之前学过的知识的加深和巩固,之前学得较浅,实践的机会不多,这次实践让我对C++程序有了更加入的了解,心理也由原来的不喜欢到喜欢,感觉很有意思也很有用,可也设计一些有用的或者是自己喜欢的程序。
最令我收益的是写程序的过程和调试修改的过程,因为没有把知识学习全面,因此编写起来是有难度的,在预先想好程序结构后,就开始看书,一个函数一个函数来编写,不懂的地方就上网搜或是请教一下同学和老师,当终于把程序写出来的时候,内心里又有一种说不出来的激动,我感觉这很符合大学的教育观念,是对个人自主学习能力的一个锻炼。
在接下来就是调试,虽然出了很多的错误,虽然自己也被搞的焦头烂额,但我还是很兴奋,我感觉自己就像是个侦探,一点点找线索,找到问题,再解决,每次成功都带给自己一次激动。
现在程序终于能较好的运行出来了,当然,还存在一些瑕疵,但通过这近两周的实践学习,我收获的不仅仅是这一个程序,我的自学能力,以及寻找问题解决问题的能力也得到了很好的锻炼!
但是此次课程设计还有许多问题没有解决。
我想用在菜单中输出蝴蝶飞舞,但是,这一函数与另一个函数会发生冲突,总是无法编译,为了能够使自己所得到的程序能够运行,只好把以前做的程序与该按钮连接,实现运行。
另外,本来我是想用双向链表来实现数据的输入等工作的,我设计好了双向的链表,但是由于编后面的函数的学不会使用双向链表,这个计划就搁浅了,这也是我的另外的遗憾。
但是总起来说我在这两周的课程设计中学习到了很多东西,也体会到了编程和调试程序的快感。
让我体会到了编写程序的不易,从而更加尊重那些以此为职业的人,一个简简单单的程序就可以编浩几百条命令,操作过程也极为枯燥,但是当面对自己的成果是,那种辛苦与完成后的成就感便无法相比,在写程序的过程中,通过向老师和同学询问,加强了同学间的友谊;通过网上查阅资料,锻炼了自己的自学能力。
八.参考书目
【1】《C程序设计》清华大学出版社谭浩强
【2】《C++教程》人民邮电出版社郑莉
【3】《VisualC++使用速成》清华大学出版社沈纪新
【4】MSDN
九、程序文件组成及各文件中的源代码
classSalary_Management
{
public:
Salary_Management();//构造函数
~Salary_Management();//析构函数
voidAddRec();//增加职工记录
voidDelRec();//删除职工记录
voidModify();//修改职工记录
voiddisplay();//显示职工记录
voidSave();//保存职工信息
voidFindRecID();//按职工编号查找职工记录
voidFindRecName();//按职工姓名查找职工记录
voidFindRecAge();
voidFindRecEducation();
voidFindRecSalary();
voidLoad();//职工信息装入
voidBuild();//引导
voidStatistics();//职工信息统计
intMenuSelect();//菜单功能选择
voidHandle_menu();//菜单处理函数
private:
Person*PL;//链表头指针
voidclear();//清除所有职工结点,仅保留头结点
boolQueryRec(stringID,Person**p1,Person**p2);//查找职工结点
};
stringWork_type(intduty);
voidprint_worktype_menu();
voiddis_mainmenu();
这里定义了一个新的Salary_Management类。
voidTeacher:
:
output()
{
cout<<"\t编号:
"< cout<<"\t姓名: "< cout<<"\t性别: "< cout<<"\t年龄: "< cout<<"\t学历: "< cout<<"\t地址: "< cout<<"\t电话: "< cout<<"\t人员类别: "< cout<<"\t上学期上课课时: "< cout<<"\t工资: "< } voidTeacher: : output(ofstream&outfile) { outfile< } doubleTeacher: : incoming() { if(hours>120) returnsalary+(hours-24)*30; elsereturnsalary; } 这里是一个teacher的输出函数,后面的各种教职工函数与之类似。 2014年7月3日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 修改
![提示](https://static.bdocx.com/images/bang_tan.gif)