




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书 姓 名学 号班 级 课程名称c+课程设计课程性质c+程序设计 设计时间 2009 年 5 月 18 日2009 年 6 月 12 日 设计名称高校工资管理系统 设计要求 问题的描述(功能要求): 高校有五类职工:教师,实验员,行政人员,教师兼职实验 员,行政人员兼职教师。为了实现工资发放的自动功能,现要求 编写程序来自动完成此功能。同时注意生成的相关数据结果以文 件方式存放在硬盘中。程序应具备从键盘录入,文件的可继续录 入,任意职工的工资查询(可由职工编号和职工姓名来实现), 若有职工由于工作调动,则可进行相对应的调整动作。 设计思路 与 设计过程 本程序设计了 6 个类,其中
2、 person 类为抽象基类,teacher 类、assistant 类、manager 类以 person 类为直接基类, teacher_assistant 类为 teacher 类和 assistant 类的派生类, manger_teacher 类为 manager 类和 teacher 类的派生类, salary_management 类为 person 类的友元类,提供实现管理功能 的相应的函数,主要实现职工信息的录入,查询、修改、添加、 删除、显示和保存退出系统的功能。 计划与进度 6 月初完成题目的分析设计,6 月 8 号完成程序代码的编写, 6 月 10 号初步调试工作基本完
3、成。 任课教师 意 见 说 明 课程设计报告课程设计报告 课程:面向对象程序设计 学号: 姓名: 班级: 教师: 计算机科学与技术学院 课程设计名称: 高校工资管理系统 1.设计内容: 问题的描述(功能要求): 高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。 为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。同时注意生成的相关 数据结果以文件方式存放在硬盘中。程序应具备从键盘录入,文件的可继续录入,任意职 工的工资查询(可由职工编号和职工姓名来实现),若有职工由于工作调动,则可进行相 对应的调整动作。 相关信息: 每一学期将学校职工的本学期任职情况及上学期
4、工作的相关情况输入计算机,则本学 期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下: 其中工资的基本构成如下: 教师: 基本工资+课时费; 实验员: 基本工资+实验室补助; 行政人员: 基本工资+行政补贴; 教师兼职实验员: 基本工资+课时费+实验室补助; 行政人员兼职教师:基本工资+行政补贴+课时费; 其中: 1.课时费:教师每一学期的基本工作量为 120,实验员每学期基本工作量为 70,行政 人员没有基本工作量,每节课时费为 20 元;课时费=(上学期工作量-基本工作量)*20; 注意:如果上学期基本工作量没完成,则其(上学期工作量-基本工作量)*20 为负值。 2.基本工
5、资:教师 800 元,实验员 650 元,行政人员 750 元。 3.行政补贴:250 元。 2.设计目的与要求: 2.1 设计目的 达到熟练掌握 c+语言的基本知识和技能; 基本掌握面向对象程序设计的基本思路和方法; 能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2.2 设计要求 要求利用面向对象的方法以及 c+的编程思想来完成系统的设计; 要求在设计的过程中,建立清晰的类层次; 在系统的设计中,至少要用到面向对象的一种机制。 3.系统分析与设计 3.1 主要知识点 本程序共有三个文件组成,分别是 salary.h, salary.cpp 和 main.cpp; salar
6、y.h 中定义了程 序所需的类,全局函数,以及要用到的标准头文件。用到的知识主要有类的继承与派生, 纯虚函数,头文件的组织,链表操作,程序菜单选择和处理函数的组织和编写,文件的读 写操作。 3.2 关键技术 程序中每一种数据类型用一个类来实现,共设计了 6 个类。人员类 person,教师类 teacher,实验员类 assistant,行政人员类 manager,教师兼实验员类 teacher_manager, 行政人员兼教师类 manager_teacher 以及工资信息管理类 salary_management。每一种类都 定义了相应的成员函数。具体定义如下所示: (1)类)类 pers
7、on 类 person 为抽象类,为另外五个类的基类,在类 person 中,成员变量 id 表示职工编 号,name 表示职工姓名,duty 表示岗位类别,salary 表示职工工资以及 next 表示 person 类 的指针域。两个 input()成员函数,无参成员函数 input()为纯虚函数用来从键盘输入职工数 据,有参成员函数 input(ifstream两个 output()成员函数, 无参成员函数 output()用来向屏幕输出职工信息,有参成员函数 output(ofstream /在屏幕上输出:press any key to quit,意思是停留,看程序的输 出结果 sy
8、stem(cls); 清屏 (10)头文件说明)头文件说明 本程序有一个 salary.h 头文件,该头文件包含程序所需包含的标准头文件和定义的类 以及全局函数。为了防止头文件重复包含,采用如下格式: #if !defined (宏) #define 宏 /头文件具体内容 #endif 这样可以使源文件中只要包含 salary.h 一个头文件即可,使文件头变得简洁。 (11)程序的主要功能函数及相关算法)程序的主要功能函数及相关算法 本程序共定义六个类,分别是 person 类、teacher 类、assistant 类、 manager 类、 teacher_assistant 类、mana
9、ger_teacher 类和 salary_management 类。person 类为抽象类作 为 teacher 类、assistant 类和 manager 类直接基类。teacher_assistant 类以 teacher 类和 assistant 类作为直接基类,多重继承,manager_teacher 类以 manager 类和 teacher 类作为 直接基类多重继承。salary_management 类是为职工信息管理提供功能函数。 salary_management 类中主要的成员函数有: addrec 函数用来提供添加职工信息的功能。该函数先调用 print_workt
10、ype_menu 函数 打印职工类别选择菜单供用户选择,程序再根据用户的不同选择分别调用 teacher 类、 assistant 类、 manager 类、 teacher_assistant 类、manager_teacher 类的 input 函数实现添 加职工信息。 build 函数的功能是从文件读取职工信息来实现程序的初始化,该函数使用文件指针操 作函数 tellg 和 seekg 函数来不断调整文件指针,以实现从文件读取职工信息供程序初始化 的功能。再该函数中,先定义 buf 临时空间,用 infilebufbufduty;语句先读取职工信 息中的 duty 的值,然后在根据 du
11、ty 的值分别调用 teacher 类、assistant 类、 manager 类、 teacher_assistant 类、manager_teacher 类的 input(ifstream但不能修改职工的类别信息。函数先要求用户输 入要修改的职工编号,然后调用 queryrec 函数查找到相应职工的记录,然后调用该职工所 属类的 input 函数来时用户信息的重新赋值。 3.3 基本功能要求 (1)功能选择可以用菜单来实现 例如: 请选择您的计算内容: 1、 数据录入 2、 查询职工信息 3、 查询职工信息 4、 增加职工记录 5、 删除职工信息 6、 统计职工信息 7、 显示所有信息
12、8、 退出系统 用户通过输入不同的数字进入不同的菜单。次级菜单主要显示本程序的功能,主要的 功能有录入职工信息、查询信息、添加职工记录、删除职工记录、统计职工信息、显 示所有信息。 (2)运行时给出明确的提示信息。 比如,在选择主功能菜单是选择范围是(1-8),如果用户输入的选项不在可选择范围之 内,程序会给出输入选项不在可选范围之内的提示,并要求用户且知道输入选项在可选范 围内才执行相应的功能。本程序有较友好的用户交互界面,每进入或离开一个功能界面时 都会有相应的提示信息,方便用户操作。 4.系统总体设计(确定程序功能模块) 本程序的类继承关系如 1 所示: person 类(抽象基类) t
13、eacher 类assistant 类manager 类 teacher_assistant 类manager_teacher 类 注意图中的箭头方向,箭头表示继承的方向,从派生类指向基类。 图 1.程序中类的继承关系 salary_management 类中成员函数调用关系如图所示: handle_menu 函数menuselect 函数 1、load 3、modify 4、addrec 5、delrec 6、statistics 7、display 8、exit 2、findrecid class person /人员信息类 (抽象基类) public: virtual void inpu
14、t()=0; /从键盘输入职工数据 virtual void input(ifstream /从文件读入职工数据 virtual void output()=0; /向屏幕输出职工信息 virtual void output(ofstream /向指定文件输出职工信息 virtual double incoming()=0; / 计算职工收入函数 person() /person 基类构造函数 next=0; /指针赋值为空 virtual person() protected: char name15; /职工姓名 string id; /职工编号 int duty; /*岗位类别 :1:教
15、师 2:实验员 3:行政人员 4:教 师兼实验员 5:行政人员兼教师*/ double salary; /职工薪水 person *next; /指针成员 friend bool isexist(string id); friend class salary_management; /将 salary_management 类声明为友员类 ; class teacher :virtual public person protected: int hours; /上学期工作量 public: teacher() salary=800; /教师基本工资 800 元 duty=1; /岗位类别为 1
16、 void input(); void input(ifstream void output(); void output(ofstream double incoming(); ; class assitant :virtual public person public: assitant() salary=650; /实验员基本工资 650 元 duty=2; /岗位类别为 2 allowance=150; /实验室补助为 150 元 ; void input(); void input(ifstream void output(); void output(ofstream double
17、 incoming(); protected: int hours; double allowance; ; class manager :virtual public person public: manager() salary=750; /行政人员基本工资为 750 元 duty=3; /岗位类别为 3 allowance=250; /行政补贴 void input(); void input(ifstream void output(); void output(ofstream double incoming(); protected: double allowance; /行政补贴
18、 ; class teacher_assistant : public teacher,public assitant public: teacher_assistant() teacher:salary=800; /基本工资 800 元 duty=4; /岗位类别为 4 assitant:allowance=150; /实验室补助 150 元 void input(); void input(ifstream void output(); void output(ofstream double incoming(); ; class manager_teacher :public manag
19、er,public teacher public: manager_teacher() salary=750; /基本工资 750 元 duty=5; /岗位类别为 5 manager:allowance=250; /行政补贴 250 元 void input(); void input(ifstream void output(); void output(ofstream double incoming(); ; class salary_management public: salary_management(); /构造函数 salary_management(); /析构函数 voi
20、d addrec(); /增加职工记录 void delrec(); /删除职工记录 void modify(); /修改职工记录 void display(); /显示职工记录 void save(); /保存职工信息 void findrecid(); /按职工编号查找职工记录 void findrecname(); /按职工姓名查找职工记录 void load(); /职工信息装入 void build(); /引导 void statistics(); /职工信息统计 int menuselect(); /菜单功能选择 void handle_menu(); /菜单处理函数 priva
21、te: 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) salary.cpp 文件中的代码 /*/ #include salary.h void teacher:input() /从键盘补充其他数据 coutid; coutname; couthours
22、; salary=incoming(); void teacher:input(ifstream infilename; infileduty; infilehourssalary; void teacher:output() coutt 编号: idendl; coutt 姓名: nameendl; coutt 人员类别: work_type(duty)endl; coutt 上学期上课课时: hoursendl; coutt 工资: salary 元endl; void teacher:output(ofstream else return salary; void assitant:in
23、put() coutid; coutname; couthours; salary=incoming(); void assitant:input(ifstream void assitant:output() coutt 编 号: idendl; coutt 姓 名: nameendl; coutt 人员类别: work_type(duty); coutt 上学期试验课时: hoursendl; coutt 工 资: salary 元endl; void assitant:output(ofstream else return salary+allowance; void manager:i
24、nput() coutid; coutname; salary=incoming(); void manager :input(ifstream void manager:output() coutt 编 号: idendl; coutt 姓 名: nameendl; coutt 人员类别: work_type(duty)endl; coutt 工 资: salary 元endl; void manager:output(ofstream double manager:incoming() return salary+allowance; void teacher_assistant:inpu
25、t() coutid; coutname; coutteacher:hours; salary=incoming(); void teacher_assistant:input(ifstream void teacher_assistant:output() coutt 编 号: id; coutt 姓 名: name; coutt 人员类别: work_type(duty); coutt 教师上学期上课课时: teacher:hours; coutt 工资: salary 元endl; void teacher_assistant:output(ofstream else return sa
26、lary+allowance; void manager_teacher:input() coutid; coutname; coutteacher:hours; salary=incoming(); void manager_teacher:input(ifstream void manager_teacher:output() coutt 编 号: idendl; coutt 姓 名: nameendl; coutt 人员类别: work_type(duty); coutt 上学期上课课时: teacher:hoursendl; coutt 工资: salary 元endl; void m
27、anager_teacher:output(ofstreamdelete 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; /创建新结点,录入数据,连接
28、到链表 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-nex
29、t=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() /清除所有的职工结点(仅保
30、留头结点) 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; /找到 else p2=p1; /继续向后查找 p1=p1-next; if (!p1) coutnt 找不到你要查找的职工信息!endl; coutt 请确认你输入
31、的编号是否正确!nendl; return; else coutoutput(); bool salary_management:queryrec(string id,person* p1,person* p2 ) /查找职工结点,找到返回 1,未找到返回 0,结点指针由 p1 返回,p2 为前看指针 *p1=pl-next; *p2=pl; while (*p1) if (*p1)-id=id) break; else *p2=*p1; *p1=(*p1)-next; return *p1?true:false; void salary_management:findrecname() /按
32、职工姓名查找相应的人员信息 string name; person* p1; person* p2; coutname; p1=pl-next; p2=pl; while (p1) if (p1-name=name) break; /找到 else p2=p1; /继续向后查找 p1=p1-next; if (!p1) coutntt 找不到你要查找的职工信息!endl; coutntt 请确认你输入的姓名是否正确!noutput(); void salary_management:delrec() /删除职工信息 coutt*删除职工信息*endl; string id; person *p
33、1,*p2; coutid; if (queryrec(id, /连接,准备删除接点 p1 delete p1; coutntt 指定要删除的人员信息已成功删除!endl; else coutntt 没找到要删除的职工信息!endl请确认您的输入无误! endl; system(pause); save(); /保存信息 void salary_management:modify() system(cls); coutnt*修改职工信息*endl; string id; person *p1,*p2; coutid; if(queryrec(id, /输出原来的职工信息 p1-input();
34、 /输入新的职工信息 coutnt*修改完成*endl; else couttt 没找到要删除的职工信息!endl请确认您的输入无误!endl; system(pause); save(); void salary_management:display() system(cls); coutnt*职工信息表*nnext; if (!p) coutnt*无职工信息记录*output(); coutnext; coutnt*信息显示完毕 !*nnext; while (p) p-output(oufile); p=p-next; oufile.close(); couttt 职工信息已成功保存到
35、salary.txt 文件中!bufbufduty; if(infile) /根据人员类型创建新结点 switch(duty) case 1: p2=new teacher; break; case 2: p2=new assitant; break; case 3: p2=new manager; break; case 3: p2=new teacher_assistant; break; case 5: p2=new manager_teacher; break; default:infile.close(); return; p-next=p2; p=p-next; infile.se
36、ekg(t); p-input(infile); else break; /关闭文件 infile.close(); void salary_management:load() char ch=y; int count; coutnt*职工信息录入 *nendl; while (ch=y|ch=y) coutcount; for (int i=1;inext)p=p-next; int answer; print_worktype_menu(); cinanswer;/创建新结点,录入数据,连接到链表 teacher* pt; assitant* pa; manager* pm; teache
37、r_assistant* pta; manager_teacher* pmt; switch(answer) 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; p-next=pta; break; cas
38、e 5: pmt=new manager_teacher; pmt-input(); p-next=pmt; break; default: return; coutn; save(); coutch; coutnt*职工信息录入完成 *n; system(pause); void salary_management:statistics() person* p1; person* p2; double sa=0; int a,b,i=0; double c,d; system(cls); char ch=y; while(ch=y|ch=y) coutnt*统计职工信息*nendl; cou
39、ttt 请选择你要统计的类别:nendl; coutttt1、职工类别endl; coutttt2、职工工资n; coutttt3、要发工资总数endl; coutttt4、总的人数nendl; couta; while (a4|a1) coutntt 您的输入有误! 请重新选择(1-4)na; switch(a) case 1: print_worktype_menu(); cinb; p1=pl-next; p2=pl; while (p1) if (p1-duty=b) i+; p2=p1; p1=p1-next; else p2=p1; p1=p1-next; coutttwork_t
40、ype(b)tt 类职工人数为: iendl; break; case 2: coutc; coutd; p1=pl-next; p2=pl; while (p1) if (p1-salary=c /找到 p2=p1; /继续查找 p1=p1-next; else p2=p1; /继续查找 p1=p1-next; break; case 3: person* p=pl-next; while (p) /遍历链表 sa=sa+p-salary; p=p-next; coutntt 工资总数是: sanext; while (p) i+; p=p-next; coutntt 总人数为: iendl
41、; break; coutnt*统计完成!*nendl; coutch; system(cls); / system(pause); string work_type(int duty) string worktype; switch(duty) case 1: worktype=教师; break; case 2: worktype=实验员;break; case 3: worktype=行政人员;break; case 4: worktype=教师兼实验员 ;break; case 5: worktype=行政人员兼教师;break; return worktype; int salary
42、_management:menuselect() /显示主菜单,接受选择,并分支调用职工工资管理类的相应功能 int ch; dis_mainmenu(); cinch; while(ch=8) coutch; return ch; void dis_mainmenu() coutnt*n; coutnt * 高校工资管理系统 * n; coutnt*n; coutnttt1、数据录入 endl; coutttt2、查询职工信息endl; coutttt3、修改职工信息endl; coutttt4、增加职工记录endl; coutttt5、删除职工信息endl; coutttt6、统计职工信息
43、endl; coutttt7、显示所有信息endl; coutttt8、退出系统endl; coutntt 请输入序号实现相应的功能: ; void salary_management:handle_menu() int select; while(1) system(cls); select=menuselect(); switch(select) case 4: system(cls); addrec();break; case 2: char ch=y; while(ch=y|ch=y) system(cls); coutnt*查询职工信息*endl; coutntt1、按职工编号查找n
44、; coutntt2、按职工姓名查找n; coutntt0、返回主功能菜单nn; coutselect; while(select2) coutselect; if(select=1) findrecid(); coutnt*查询完成!*nendl; else if(select=2) findrecname(); coutnt*查询完成!*nendl; else break; system(pause); break; case 1: system(cls); load();break; case 3: modify();break; case 5: delrec();break; case
45、 6: statistics();break; case 7: display();break; case 8: exit(0); (3)main.cpp 文件中的代码 /*/ #include salary.h int main() salary_management sm; sm.handle_menu(); return 0; 6.运行结果 程序运行时,首先出现主界面菜单,由用户进行功能选择,选择不同的数字,进入不程序运行时,首先出现主界面菜单,由用户进行功能选择,选择不同的数字,进入不 同的功能区。如图同的功能区。如图 3 所示。所示。 图图 3 程序运行主界面程序运行主界面 选择选择 1,则进入职工信息录入界面,如图,则进入职工信息录入界面,如图 4 所示。所示。 图图 4 职工信息录入界面职工信息录入界面 选择选择 2,进行职工信息查询次级菜单,如图,进行职工信息查询次级菜单,如图 5 所示。所示。 图图 5 查询职工信息界面查询职工信息界面 按按 3 进入职工信息修改界面进入职工信息修改界面 图图 6 职工信息修改界面职工信息修改界面 按按 7 进入职工信息表界面显示所有职工信息进入职工信息表界面显示所有职工信息 图图 7 职工信息表界面职工信息表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部门级安全培训材料课件
- 【高考模拟】2026届普通高等学校招生全国统一考试最 新 数学模拟试卷3(含解析)
- 海藻酸盐包装力学优化-洞察及研究
- 部署消防安全培训课件
- 遨游汉字课件
- 2023-2024学年广州市东江外语实验学校八年级(下)第一次限时训练物理试题
- 2025年广东省广州市中考物理三轮冲刺《机械运动》
- 国际标准体系差异对出口型刨刀产品认证成本的结构性挤压效应
- 口腔解剖变异区域刮治效率提升的3D打印定制化工具设计
- 反向刮水器总成在极端环境(-40℃至85℃)下的热应力变形补偿机制
- 第12课《醉翁亭记》课件2024-2025学年统编版语文九年级上册
- 《激光原理及应用》全套课件
- DB11T 1497-2017 学校及托幼机构饮水设备使用维护规范
- 九年级化学(全一册)知识点总结
- ESD基础知识培训讲义
- DB11∕T 2178-2023 城市河道边坡水土保持技术规范
- 2024-2025学年小学信息技术(信息科技)六年级全一册义务教育版(2024)教学设计合集
- 2025届高考语文一轮复习:文言文主观题答题策略+课件
- 报名学车合同(2篇)
- 新高考背景下2025届高三历史一轮复习策略讲座
- 养老机构员工宿舍管理制度
评论
0/150
提交评论