实验报告 1.docx

上传人:b****6 文档编号:8720487 上传时间:2023-02-01 格式:DOCX 页数:46 大小:416.06KB
下载 相关 举报
实验报告 1.docx_第1页
第1页 / 共46页
实验报告 1.docx_第2页
第2页 / 共46页
实验报告 1.docx_第3页
第3页 / 共46页
实验报告 1.docx_第4页
第4页 / 共46页
实验报告 1.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

实验报告 1.docx

《实验报告 1.docx》由会员分享,可在线阅读,更多相关《实验报告 1.docx(46页珍藏版)》请在冰豆网上搜索。

实验报告 1.docx

实验报告1

}

C++课程设计报告

 

题目:

高校教职工信息及工资管理系统

班级:

采试1301

姓名:

学号:

指导教师:

时间:

 

课程设计任务书

 

姓名

班级

课程名称

高校教职工信息及工资管理系统

课程性质

C++程序设计

设计时间

2014年6月25日——2014年7月5日

设计名称

高校职工信息与工资管理系统

设计要求

问题的描述(功能要求):

高校有五类职工:

教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。

为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。

同时注意生成的相关数据结果以文件方式存放在硬盘中。

程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),若有职工由于工作调动,则可进行相对应的调整动作。

设计思路

设计过程

 

本程序设计了6个类,其中Person类为抽象基类,Teacher类、Assistant类、Manager类以Person类为直接基类,Teacher_Assistant类为Teacher类和Assistant类的派生类,Manger_Teacher类为Manager类和Teacher类的派生类,Salary_Management类为Person类的友元类,提供实现管理功能的相应的函数,主要实现职工信息的录入,查询、修改、添加、删除、浏览和退出系统的功能。

计划与进度

6月末完成题目的分析设计,7月1号完成程序代码的编写,7月4号初步调试工作基本完成。

任课教师

意见

说明

课程设计名称:

高校工资管理系统

1.设计内容:

问题的描述(功能要求):

高校有五类职工:

教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。

为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。

同时注意生成的相关数据结果以文件方式存放在硬盘中。

程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),若有职工由于工作调动,则可进行相对应的调整动作。

相关信息:

每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:

其中工资的基本构成如下:

教师:

基本工资+课时费;

实验员:

基本工资+实验室补助;

行政人员:

基本工资+行政补贴;

教师兼职实验员:

基本工资+课时费+实验室补助;

行政人员兼职教师:

基本工资+行政补贴+课时费;

其中:

1.课时费:

教师每一月的基本工作量为24,实验员每学期基本工作量为0,行政人员没有基本工作量,每节课时费为30元;课时费=(上学期工作量-基本工作量)*30;

注意:

如果上学期基本工作量没完成,则其(上学期工作量-基本工作量)*30为负值。

2.基本工资:

教师1000元,实验员800元,行政人员900元。

3.行政补贴:

250元。

2.设计目的与要求:

2.1设计目的

达到熟练掌握C++语言的基本知识和技能;

基本掌握面向对象程序设计的基本思路和方法;

能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2.2设计要求

要求利用面向对象的方法以及C++的编程思想来完成系统的设计;

要求在设计的过程中,建立清晰的类层次;

在系统的设计中,至少要用到面向对象的一种机制。

3.系统分析与设计

3.1主要知识点

本程序共有三个文件组成,分别是Salary.h,Salary.cpp和main.cpp;Salary.h中定义了程序所需的类,全局函数,以及要用到的标准头文件。

用到的知识主要有类的继承与派生,纯虚函数,头文件的组织,链表操作,程序菜单选择和处理函数的组织和编写,文件的读写操作。

3.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)头文件说明

本程序有一个Salary.h头文件,该头文件包含程序所需包含的标准头文件和定义的类以及全局函数。

为了防止头文件重复包含,采用如下格式:

#if!

defined(宏)

#define宏

……//头文件具体内容

#endif

这样可以使源文件中只要包含Salary.h一个头文件即可,使文件头变得简洁。

(11)程序的主要功能函数及相关算法

本程序共定义六个类,分别是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函数来时用户信息的重新赋值。

3.3基本功能要求

(1)功能选择可以用菜单来实现

例如:

请选择您的计算内容:

1、职工信息录入

2、查询职工信息

3、修改职工信息

4、增加职工记录

5、删除职工信息

6、统计职工信息

7、浏览所有信息

8、退出系统

用户通过输入不同的数字进入不同的菜单。

次级菜单主要显示本程序的功能,主要的功能有录入职工信息、查询职工信息、添加职工记录、删除职工记录、统计职工信息、浏览职工信息。

(2)运行时给出明确的提示信息。

比如,在选择主功能菜单是选择范围是(1-8),如果用户输入的选项不在可选择范围之内,程序会给出输入选项不在可选范围之内的提示,并要求用户且知道输入选项在可选范围内才执行相应的功能。

本程序有较友好的用户交互界面,每进入或离开一个功能界面时都会有相应的提示信息,方便用户操作。

4.系统总体设计(确定程序功能模块)

本程序的类继承关系如1所示:

Salary_Management类中成员函数调用关系如图所示:

main函数

 

图2、Salary_Management类中成员函数调用关系图

5、程序文件组成及各文件中的源代码

(1)头文件:

#if!

defined(H_Salary_H)

#defineH_Salary_H

#include

#include

#include

#include

usingnamespacestd;

classPerson//人员信息类(抽象基类)

{

public:

virtualvoidinput()=0;//从键盘输入职工数据

virtualvoidinput(ifstream&infile)=0;//从文件读入职工数据

virtualvoidoutput()=0;//向屏幕输出职工信息

virtualvoidoutput(ofstream&outfile)=0;//向指定文件输出职工信息

virtualdoubleincoming()=0;//计算职工收入函数

Person()//Person基类构造函数

{next=0;}//指针赋值为空

virtual~Person(){}

protected:

charname[15];//职工姓名

stringID;//职工编号

intduty;/*岗位类别:

1:

教师2:

实验员3:

行政人员4:

教师兼实验员5:

行政人员兼教师*/

charaddress[150];

stringphone;

chareducation[50];//a;学士b;硕士c;博士

charsex[10];

intage;

doublesalary;//职工薪水

Person*next;//指针成员

friendboolisexist(stringid);

friendclassSalary_Management;//将Salary_Management类声明为友员类

};

classTeacher:

virtualpublicPerson

{

protected:

inthours;//上学期工作量

public:

Teacher()

{

salary=1000;//教师基本工资1000元

duty=1;//岗位类别为1

}

voidinput();

voidinput(ifstream&infile);

voidoutput();

voidoutput(ofstream&outfile);

doubleincoming();

};

classAssitant:

virtualpublicPerson

{

public:

Assitant()

{

salary=800;//实验员基本工资800元

duty=2;//岗位类别为2

allowance=150;//实验室补助为150元

};

voidinput();

voidinput(ifstream&infile);

voidoutput();

voidoutput(ofstream&outfile);

doubleincoming();

protected:

inthours;

doubleallowance;

};

classManager:

virtualpublicPerson

{

public:

Manager()

{

salary=900;//行政人员基本工资为900元

duty=3;//岗位类别为3

allowance=250;//行政补贴

}

voidinput();

voidinput(ifstream&infile);

voidoutput();

voidoutput(ofstream&outfile);

doubleincoming();

protected:

doubleallowance;//行政补贴

};

classTeacher_Assistant:

publicTeacher,publicAssitant

{

public:

Teacher_Assistant()

{

Teacher:

:

salary=1000;//基本工资1000元

duty=4;//岗位类别为4

Assitant:

:

allowance=150;//实验室补助150元

}

voidinput();

voidinput(ifstream&infile);

voidoutput();

voidoutput(ofstream&outfile);

doubleincoming();

};

classManager_Teacher:

publicManager,publicTeacher

{

public:

Manager_Teacher()

{

salary=900;//基本工资900元

duty=5;//岗位类别为5

Manager:

:

allowance=250;//行政补贴250元

}

voidinput();

voidinput(ifstream&infile);

voidoutput();

voidoutput(ofstream&outfile);

doubleincoming();

};

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();

#endif

(2)源文件:

#include"高校职工信息与工资管理系统.h"

voidTeacher:

:

input()//从键盘补充其他数据

{

cout<<"\t编号:

";cin>>ID;

cout<<"\t姓名:

";cin>>name;

cout<<"\t性别:

";cin>>sex;

cout<<"\t年龄:

";cin>>age;

cout<<"\t学历:

";cin>>education;

cout<<"\t地址:

";cin>>address;

cout<<"\t电话:

";cin>>phone;

cout<<"\t教师上学期课时:

";cin>>hours;

salary=incoming();

}

voidTeacher:

:

input(ifstream&infile)

{

infile>>ID;

infile>>sex;

infile>>age;

infile>>education;

infile>>name;

infile>>address;

infile>>phone;

infile>>duty;

infile>>hours>>salary;

}

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<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1