




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计任务书 姓 名学 号班 级 课程名称c+课程设计课程性质c+程序设计 设计时间 2009 年 5 月 18 日2009 年 6 月 12 日 设计名称高校工资管理系统 设计要求 问题的描述(功能要求): 高校有五类职工:教师,实验员,行政人员,教师兼职实验 员,行政人员兼职教师。为了实现工资发放的自动功能,现要求 编写程序来自动完成此功能。同时注意生成的相关数据结果以文 件方式存放在硬盘中。程序应具备从键盘录入,文件的可继续录 入,任意职工的工资查询(可由职工编号和职工姓名来实现), 若有职工由于工作调动,则可进行相对应的调整动作。 设计思路 与 设计过程 本程序设计了 6 个类,其中 person 类为抽象基类,teacher 类、assistant 类、manager 类以 person 类为直接基类, teacher_assistant 类为 teacher 类和 assistant 类的派生类, manger_teacher 类为 manager 类和 teacher 类的派生类, salary_management 类为 person 类的友元类,提供实现管理功能 的相应的函数,主要实现职工信息的录入,查询、修改、添加、 删除、显示和保存退出系统的功能。 计划与进度 6 月初完成题目的分析设计,6 月 8 号完成程序代码的编写, 6 月 10 号初步调试工作基本完成。 任课教师 意 见 说 明 课程设计报告课程设计报告 课程:面向对象程序设计 学号: 姓名: 班级: 教师: 计算机科学与技术学院 课程设计名称: 高校工资管理系统 1.设计内容: 问题的描述(功能要求): 高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。 为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。同时注意生成的相关 数据结果以文件方式存放在硬盘中。程序应具备从键盘录入,文件的可继续录入,任意职 工的工资查询(可由职工编号和职工姓名来实现),若有职工由于工作调动,则可进行相 对应的调整动作。 相关信息: 每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学 期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下: 其中工资的基本构成如下: 教师: 基本工资+课时费; 实验员: 基本工资+实验室补助; 行政人员: 基本工资+行政补贴; 教师兼职实验员: 基本工资+课时费+实验室补助; 行政人员兼职教师:基本工资+行政补贴+课时费; 其中: 1.课时费:教师每一学期的基本工作量为 120,实验员每学期基本工作量为 70,行政 人员没有基本工作量,每节课时费为 20 元;课时费=(上学期工作量-基本工作量)*20; 注意:如果上学期基本工作量没完成,则其(上学期工作量-基本工作量)*20 为负值。 2.基本工资:教师 800 元,实验员 650 元,行政人员 750 元。 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两个 output()成员函数, 无参成员函数 output()用来向屏幕输出职工信息,有参成员函数 output(ofstream /在屏幕上输出: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但不能修改职工的类别信息。函数先要求用户输 入要修改的职工编号,然后调用 queryrec 函数查找到相应职工的记录,然后调用该职工所 属类的 input 函数来时用户信息的重新赋值。 3.3 基本功能要求 (1)功能选择可以用菜单来实现 例如: 请选择您的计算内容: 1、 数据录入 2、 查询职工信息 3、 查询职工信息 4、 增加职工记录 5、 删除职工信息 6、 统计职工信息 7、 显示所有信息 8、 退出系统 用户通过输入不同的数字进入不同的菜单。次级菜单主要显示本程序的功能,主要的 功能有录入职工信息、查询信息、添加职工记录、删除职工记录、统计职工信息、显 示所有信息。 (2)运行时给出明确的提示信息。 比如,在选择主功能菜单是选择范围是(1-8),如果用户输入的选项不在可选择范围之 内,程序会给出输入选项不在可选范围之内的提示,并要求用户且知道输入选项在可选范 围内才执行相应的功能。本程序有较友好的用户交互界面,每进入或离开一个功能界面时 都会有相应的提示信息,方便用户操作。 4.系统总体设计(确定程序功能模块) 本程序的类继承关系如 1 所示: person 类(抽象基类) teacher 类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 input()=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:教师 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 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 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; /行政补贴 ; 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 manager,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(); /析构函数 void addrec(); /增加职工记录 void delrec(); /删除职工记录 void modify(); /修改职工记录 void display(); /显示职工记录 void save(); /保存职工信息 void findrecid(); /按职工编号查找职工记录 void findrecname(); /按职工姓名查找职工记录 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) salary.cpp 文件中的代码 /*/ #include “salary.h“ void teacher:input() /从键盘补充其他数据 coutid; coutname; couthours; salary=incoming(); void teacher:input(ifstream infilename; infileduty; infilehourssalary; void teacher:output() cout120) return salary+(hours-120)*20; else return salary; void assitant:input() coutid; coutname; couthours; salary=incoming(); void assitant:input(ifstream void assitant:output() cout70) return salary+(hours-70)*20+allowance; else return salary+allowance; void manager:input() coutid; coutname; salary=incoming(); void manager :input(ifstream void manager:output() coutid; coutname; coutteacher:hours; salary=incoming(); void teacher_assistant:input(ifstream void teacher_assistant:output() cout120) return salary+allowance+(teacher:hours-120)*20; else return salary+allowance; void manager_teacher:input() coutid; coutname; coutteacher:hours; salary=incoming(); void manager_teacher:input(ifstream void manager_teacher:output() coutnext;delete p; p=pl; pl=0; void print_worktype_menu() coutnext)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; /找到 else p2=p1; /继续向后查找 p1=p1-next; if (!p1) 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() /按职工姓名查找相应的人员信息 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) coutoutput(); void salary_management:delrec() /删除职工信息 coutid; if (queryrec(id, /连接,准备删除接点 p1 delete p1; coutid; if(queryrec(id, /输出原来的职工信息 p1-input(); /输入新的职工信息 coutnext; if (!p) coutoutput(); coutnext; coutnext; while (p) p-output(oufile); p=p-next; oufile.close(); coutbufbufduty; 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.seekg(t); p-input(infile); else break; /关闭文件 infile.close(); void salary_management:load() char ch=y; int count; coutcount; for (int i=1;inext)p=p-next; int answer; print_worktype_menu(); cinanswer;/创建新结点,录入数据,连接到链表 teacher* pt; assitant* pa; manager* pm; teacher_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; case 5: pmt=new manager_teacher; pmt-input(); p-next=pmt; break; default: return; coutch; couta; while (a4|aa; 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; 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; coutnext; while (p) i+; p=p-next; 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_management:menuselect() /显示主菜单,接受选择,并分支调用职工工资管理类的相应功能 int ch; dis_mainmenu(); cinch; while(ch=8) coutch; return ch; void dis_mainmenu() coutselect; while(select2) coutselect; if(select=1) findrecid(); cout“nt*查询完成!*n“endl; else if(select=2) findrecname(); cout“nt*查询完成!*n“endl; else break; system(“pause“); break; case 1: system(“cls“); load();break; case 3: modify();break; case 5: delrec();break; case 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 职工信息表界面职工信息表界面 按按 8 保存信息并退出管理系统保存信息并退出管理系统 图图 8 保存并退出系统保存并退出系统 7.设计体会 试验过程中出现了很多令人意想不到的问题,首先就是拿到问题不知该如何分析问 题,可以说没啥思路。但是决不能因此就轻易放弃,于是我就上网搜集相关问题的资料, 很幸运,找到了相同问题的答案。但是有了答案不等于我就不必花时间去编代码了,我 应该做的是学习答案中的编程思想,弄懂答案中的每行代码。 抱着这种正确的态度,我开始认真体会他人的解题思路。后在将这些思想融入自 己的解题分析过程中。我花了整整两天的时间才完成代码的编写。我之前认为编写完代 码,问题不就解决了吗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国企参股公司管理制度
- 退休项目评估人员协议
- 2025-2030中国食品级固体氯化钙行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国袋装烹调行业市场发展趋势与前景展望战略研究报告
- 学校教育与培训机构合作办学协议
- 锅炉改造施工合同
- 农民与农户共同开发利用农业资源合同
- 小区物业智能收费管理系统协议
- 登鹳雀楼古诗意义探究教学教案
- 金融产品预售推广合作协议
- 成人高考成考英语(专升本)试卷与参考答案(2025年)
- DB34T 1709-2020 亚临界及以上电站锅炉外部检验技术导则
- 肺结节诊治中国专家共识(2024年版)解读
- 广东省建筑地基处理技术规范
- 创新设计前沿智慧树知到期末考试答案章节答案2024年浙江大学
- 天津市2024年中考英语真题【附真题答案】
- 平凡的世界(阅读任务三 品味小说语言)教学设计-【中职专用】高一语文(高教版2023基础模块上册)
- 2024年辽宁省中考化学试卷(含答案)
- (完整版)工匠精神课件
- 国开(浙江)2024年《领导科学与艺术》形成性考核作业1-4答案
- 江苏省南京市栖霞区2023-2024学年四年级下学期期末检测语文试卷
评论
0/150
提交评论