已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+课程设计报告 课程: 学号: 姓名: 班级: 教师: 课程设计任务书姓 名班 级课程名称高校工资管理系统课程性质C+程序设计设计时间2013 年6月25 日2013年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(int duty)函数声明为友元函数,用来将职工类别标志转换为相应的类别名称,以便显示职工岗位类别名称。(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临时空间,用infilebufbufDuty;语句先读取职工信息中的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函数Person类(抽象基类)Teacher类Assistant类Manager类Teacher_Assistant类Manager_Teacher类注意图中的箭头方向,箭头表示继承的方向,从派生类指向基类。图1.程序中类的继承关系Handle_menu函数MenuSelect函数1、Load3、Modify4、AddRec5、DelRec6、Statistics7、display8、exit2、FindRecID & FindRecName.图2、Salary_Management类中成员函数调用关系图5、程序文件组成及各文件中的源代码(1)头文件:#if !defined (H_Salary_H)#define H_Salary_H#include #include #include #include using namespace std;class Person /人员信息类 (抽象基类)public:virtual void input()=0; /从键盘输入职工数据virtual void input(ifstream& infile)=0; /从文件读入职工数据virtual void output()=0; /向屏幕输出职工信息virtual void output(ofstream& outfile)=0; /向指定文件输出职工信息virtual double incoming()=0; / 计算职工收入函数Person() /Person基类构造函数next=0; /指针赋值为空 virtual Person()protected:char name15; /职工姓名string ID; /职工编号 int duty; /*岗位类别 :1:教师 2:实验员 3:行政人员 4:教师兼实验员 5:行政人员兼教师*/char address150 ;string phone;char education50; /a;学士 b;硕士 c;博士char sex10;int age;double salary; /职工薪水Person *next; /指针成员 friend bool isexist(string id); friend class Salary_Management; /将Salary_Management类声明为友员类;class Teacher :virtual public Personprotected: int hours; /上学期工作量public:Teacher()salary=1000; /教师基本工资1000元duty=1; /岗位类别为1void input();void input(ifstream& infile);void output();void output(ofstream& outfile);double incoming();class Assitant :virtual public Personpublic:Assitant()salary=800; /实验员基本工资800元duty=2; /岗位类别为2allowance=150; /实验室补助为150元;void input();void input(ifstream& infile);void output();void output(ofstream& outfile);double incoming();protected: int hours;double allowance;class Manager :virtual public Personpublic:Manager() salary=900; /行政人员基本工资为900元 duty=3; /岗位类别为3 allowance=250; /行政补贴 void input();void input(ifstream& infile);void output();void output(ofstream& outfile);double incoming();protected:double allowance; /行政补贴;class Teacher_Assistant : public Teacher,public Assitantpublic:Teacher_Assistant()Teacher:salary=1000; /基本工资1000元duty=4; /岗位类别为4Assitant:allowance=150; /实验室补助150元void input();void input(ifstream& infile);void output();void output(ofstream& outfile);double incoming();class Manager_Teacher :public Manager,public Teacherpublic:Manager_Teacher()salary=900; /基本工资900元duty=5; /岗位类别为5Manager:allowance=250; /行政补贴250元void input();void input(ifstream& infile);void output();void output(ofstream& outfile);double incoming();class Salary_Managementpublic: Salary_Management(); /构造函数 Salary_Management(); /析构函数void AddRec(); /增加职工记录void DelRec(); /删除职工记录void Modify(); /修改职工记录void display(); /显示职工记录void Save(); /保存职工信息void FindRecID(); /按职工编号查找职工记录void FindRecName();/按职工姓名查找职工记录void FindRecAge();void FindRecEducation();void FindRecSalary();void Load(); /职工信息装入void Build(); /引导void Statistics(); /职工信息统计int MenuSelect(); /菜单功能选择void Handle_menu(); /菜单处理函数private:Person *PL; /链表头指针 void clear(); /清除所有职工结点,仅保留头结点 bool QueryRec(string ID,Person* p1,Person* p2 ); /查找职工结点;string Work_type(int duty);void print_worktype_menu();void dis_mainmenu();#endif(2)源文件:#include 高校职工信息与工资管理系统.hvoid Teacher:input() /从键盘补充其他数据 coutID; coutname; coutsex; coutage; couteducation; coutaddress; coutphone; couthours; salary=incoming();void Teacher:input(ifstream& infile)infileID;infilesex;infileage;infileeducation;infilename;infileaddress;infilephone;infileduty;infilehourssalary;void Teacher:output()coutt编 号: IDendl;coutt姓 名: nameendl; coutt性 别: sexendl; coutt年 龄: ageendl;coutt学 历:educationendl;coutt地 址:addressendl;coutt电 话:phoneendl;coutt人员类别: Work_type(duty)endl;coutt上学期上课课时: hoursendl;coutt工 资: salary 元endl;void Teacher:output(ofstream& outfile)outfileIDtnametsextageteducationtaddresstphonetdutythourstsalary120) return salary+(hours-24)*30;else return salary;void Assitant:input()coutID;coutname;coutsex; coutage; couteducation; coutaddress; coutphone;salary=incoming();void Assitant:input(ifstream& infile)infileIDnamesexageeducationaddressphonedutysalary;void Assitant:output()coutt编 号: IDendl;coutt姓 名: nameendl; coutt性 别: sexendl; coutt年 龄: ageendl;coutt学 历:educationendl;coutt地 址:addressendl;coutt电 话:phoneendl;coutt人员类别: Work_type(duty);coutt工 资: salary 元endl;void Assitant:output(ofstream& outfile)outfileIDtnametsextageteducationtaddresstphonetdutytsalaryendl;double Assitant:incoming() return salary+allowance;void Manager:input()coutID;coutname;coutsex; coutage; couteducation; coutaddress; coutphone; salary=incoming();void Manager :input(ifstream& infile)infileIDnamesexageeducationaddressphonedutysalary;void Manager:output() coutt编 号: IDendl;coutt姓 名: nameendl; coutt性 别: sexendl; coutt年 龄: ageendl;coutt学 历:educationendl;coutt地 址:addressendl;coutt电 话:phoneendl;coutt人员类别: Work_type(duty)endl;coutt工 资: salary 元endl;void Manager:output(ofstream& outfile)outfileIDtnametsextageteducationtaddresstphonetdutytsalaryendl;double Manager:incoming()return salary+allowance;void Teacher_Assistant:input()coutID;coutname;coutsex; coutage; couteducation; coutaddress; coutphone;coutTeacher:hours;salary=incoming();void Teacher_Assistant:input(ifstream& infile)infileIDnamesexageeducationaddressphonedutyTeacher:hourssalary;void Teacher_Assistant:output()coutt编 号: IDendl;coutt姓 名: nameendl; coutt性 别: sexendl; coutt年 龄: ageendl;coutt学 历:educationendl;coutt地 址:addressendl;coutt电 话:phoneendl;coutt人员类别: Work_type(duty);coutt教师上学期上课课时: Teacher:hours;coutt工资: salary 元endl;void Teacher_Assistant:output(ofstream& outfile)outfileIDtnametsextageteducationtaddresstphonetdutytTeacher:hourstsalary12)return salary+allowance+(Teacher:hours-12)*30;else return salary+allowance;void Manager_Teacher:input()coutID;coutname;coutsex; coutage; couteducation; coutaddress; coutphone; coutTeacher:hours;salary=incoming();void Manager_Teacher:input(ifstream& infile)infileIDnamesexageeducationaddressphonedutyTeacher:hourssalary;void Manager_Teacher:output()coutt编 号: IDendl;coutt姓 名: nameendl; coutt性 别: sexendl; coutt年 龄: ageendl;coutt学 历:educationendl;coutt地 址:addressendl;coutt电 话:phoneendl;coutt人员类别: Work_type(duty);coutt上学期上课课时: Teacher:hoursendl; coutt工资: salary 元endl;void Manager_Teacher:output(ofstream& outfile)outfileIDtnametsextageteducationtaddresstphonetdutytTeacher:hourstsalarynext;delete p;p=PL;PL=0;void print_worktype_menu()couttt请选择人员类别: endl;coutttt1、教 师: endl;coutttt2、实 验 员: endl;coutttt3、行 政 人 员: endl;coutttt4、教师兼实验员: endl;coutttt5、行政 兼 教师: endl;coutntt请选择要添加的相应的人员类别分类码: ;void Salary_Management:AddRec()char ch=y;/创建新结点,录入数据,连接到链表Teacher* pt;Assitant* pa;Manager* pm;Teacher_Assistant* pta;Manager_Teacher* pmt;while (ch=y|ch=Y)coutt*增加职工*next)p=p-next; /查找尾结点print_worktype_menu();char select;cinselect; switch(select) case 1: pt=new Teacher; pt-input(); p-next=pt; break; case 2 : pa=new Assitant; pa-input(); p-next=pa; break; case 3 : pm=new Manager; pm-input(); p-next=pm; break; case 4 : pta=new Teacher_Assistant; pta-input(); p-next=pta; break; case 5 : pmt=new Manager_Teacher; pmt-input(); p-next=pmt; break; default : return; coutch;system(cls);system(pause);void Salary_Management:clear() /清除所有的职工结点(仅保留头结点) Person* p=PL-next; while (p) PL-next=p-next; delete p; p=PL-next; void Salary_Management:FindRecID()/按职工编号查找相应的人员信息 string id;Person* p1;Person* p2;coutid;p1=PL-next;p2=PL;while (p1)if (p1-ID=id)break; /找到elsep2=p1; /继续向后查
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 住院医师规范化培训《中医全科》模拟练习题与参考答案解析
- 2025年入党积极分子党校培训考试必考60个重点知识汇编
- 2025年患者身份识别管理制度高频考题100题及答案(共三套)
- 幼儿园元旦安全教育课件
- 大班食品安全我懂得课件
- 关涛注册安全工程师课件
- 广东省江门市江海区礼乐中学2026届化学高二第一学期期中统考模拟试题含解析
- 四川省遂宁市射洪中学2025-2026学年高二上学期11月期中考试物理试卷
- 土建安全教育培训课件
- 盒装牛肉卷供货合同
- 冷作钣金工培训课件
- 青岛网约车人证考试题库及答案
- 2025至2030真空灭弧室行业产业运行态势及投资规划深度研究报告
- 2025年贵州综合评标专家库评标专家考试综合能力测试题及答案二
- 2025年四川省公职招录考试(省情时政)历年参考题库含答案详解(5套)
- GB/T 5028-2025金属材料薄板和薄带拉伸应变硬化指数(n值)的测定
- 乡镇工会费管理办法
- 【中国出口信用保险公司】2025稳外贸新兴市场开发指南
- 2025深圳辅警考试真题
- 2025年采购工程师笔试题及答案
- 基层支部联建活动方案
评论
0/150
提交评论