已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c+程序设计报告 1 课 程 设计 设计题目设计题目 职工工资管理系统设计职工工资管理系统设计 c+程序设计报告 2 课程名称面向对象程序设计课程设计课程代码 b704210 设计题目职工工资管理系统的设计题目序号 设计时间2010 年 1 月 11 日 2010 年 1 月 14 日 系(院) 计算机科学与信息工 程系 专业计算机科学与技术班级 081041a2 一、课程设计任务(条件)一、课程设计任务(条件) 、具体技术参数(指标)、具体技术参数(指标) 本课程设计是面向对象程序设计课程的后继教学环节,学好 c+语言就必须坚 持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写 c+实际应 用程序。 根据教材中人事管理应用程序框架,在此基础上按要求完成以下实际应用程序。 职工工资管理系统课程设计题目: 实现一个简单的工资管理系统。系统的主要功能是计算职工当月工资并存档。公司 内有 5 种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的 工资计算方式各不相同。 技术人员的工资根据他当月工作的小时数来定,时薪 35 元;销售人员的工资则是 根据本人当月销售额来确定,工资为销售额的 5%;文秘有 4000 元的基本工资,奖金视 为当月工作情况而定;技术经理和销售经理都有 6000 元的固定工资,技术经理的工作 业绩可分为 3 个等级,每级可获得 1000 元奖金,销售经理的奖金由他所管理的销售员 的销售业绩而定,总销售额的 2% 职工工资管理系统的设计: 对于整个系统的设计思路是,首先,由员工输入用户信息,包括编号、姓名和职务; 然后,在计算某职工的当月工资时,系统先从已输入的职工信息文件中获取职工的工作 类型,接着调用不同的处理程序进行计算;最后将结果存档。 从用户需求中,可以发现 5 种类型的职员都可以分别设计为一个类。首先,他们都 属于雇员,因此可以设计一个基类 employee(雇员) ,然后从中派生出 technician(技术 人员)类,salesman(销售人员)类、secretary(文秘)类。对于技术经理和销售经理 来说,他们都属于经理,所以设计时可以从 employee 类中派生出一个 manager(经理) 类作为 techmanager(技术经理)和 salesman(销售经理)类的父类。而经理类本身并 不对应实际的员工类型,由于技术经理有技术人员和经理的双重特点,因此 techmanager 类同时继承 technician 类和 manger 类;销售经理有销售人员和经理的双重 特点,因此 salesmanager 类同时继承 salesman 类和 manager 类。 根据用户需要 employee 类应该拥有的属性有:编号、姓名、职务、月份和工资。 employee 类的服务可以包括 info() 、 search() 、countsalary() 、recordinfo()和 recordsalary() 。其中,info()函数用于接收用户输入的职工信息;search()函数用来根据 职工名查找职工信息;countsalary()函数为工资计算函数,但在基类中为空,原因是各 类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。 c+程序设计报告 3 recordinfo()函数和 recordsalary()函数分别是职工信息和职工工资的记录函数,分别将信 息存入文件 info.txt 和 salary.txt。 具体的基类和派生类的定义如下图: 二、对课程设计成果的要求(包括课程设计说明书、图纸、图表、实物等软硬件要求)二、对课程设计成果的要求(包括课程设计说明书、图纸、图表、实物等软硬件要求) (1)分析职工工资管理系统程序结构: 画出程序粗略的流程图和各个模块的 详细流程图,每个功能模块用文字说明他们的功能(与对应流程图放在 一起) ; (2)对你已经实现的功能(修改的、新编写的)做详细的说明, 并附上流程 图及程序清单。 (3)自己对该职工工资管理系统的进一步设想; (4)对于有设想但最终未实现的功能的大致编程思路的阐述; (5)论述在设计过程中遇到的并且对你具有启发性的问题。 (6)严禁抄袭,发现雷同,双方扣分严禁抄袭,发现雷同,双方扣分。 三、课程设计工作进度计划:三、课程设计工作进度计划: 周一:教师布置任务,讲解本课设模块。 周二:画出主程序粗略的流程图和各个模块的详细流程图。 周三:设计程序及调试程序。同时着手写报告。 周四:完成设计,提交报告,接受教师考评。 c+程序设计报告 4 四、主要参考资料四、主要参考资料 (1) 面向对象程序设计 ,郑莉,清华大学出版社, (2) 面向对象程序设计 c+语言,朱战立等编 西安电子科技大学出版社 (3) 面向对象程序设计-visual c+,刘斌等编, 清华大学出版社 (4) 面向对象程序设计-c+语言描述, richard johnsonbaugh(美)等著,蔡宇辉 等译,机械工业出版社, 2003 c+程序设计报告 5 目录目录 1概述:概述:.6 1.1基本功能6 2课题分析课题分析.6 2.1类的设计6 2.2类的实现6 3详细设计说明详细设计说明.8 3.1程序主界面8 3.2方案8 3.3程序描述(输入input) 8 4课程设计总结课程设计总结.9 5软件使用说明软件使用说明.10 6附录(参考文献,原代码:)附录(参考文献,原代码:).10 参考文献:.10 原代码.10 c+程序设计报告 6 1 1概述概述 1.1 基本功能 输入职工的姓名编号以 及相关信息,系统计算个职 工工资。职工分别有秘书、 技术经理、技术人员、销售 经理、销售人员。技术人员 的工资根据他当月工作的小 时数来定,时薪 35 元;销售 人员的工资则是根据本人当 月销售额来确定,工资为销 售额的 5%;文秘有 4000 元 的基本工资,奖金视为当月 工作情况而定;技术经理和 销售经理都有 6000 元的固定工资,技术经理的工作业绩可分为 3 个等级,每级 可获得 1000 元奖金,销售经理的奖金由他所管理的销售员的销售业绩而定,总 销售额的 2%。 功能一目了然,方便用户使用 2.2.课题分析课题分析 类的设计及实现 本课程设计有 7 个类,分别是 employee1,secretary,technician,salesman,manager,technicianmanager,salesmanager7 个类。其中 technician、salesman 以及 manager 类在继承 employee1 的时候用了 virtual,如果不用这在调试的时候不通过。 技术人员类技术人员类 先写公有成员函数: 有读入信息的构造函数以及计算薪资的函数。 再写私有型成员变量:要有工作的小时数以及单位小时工作的薪水。 具体写法: class technician:virtual public employee1 private: float hourlyrate; int workhours; public: technician(); void setworkhours(int wh); void pay(); void promote(int); ; 销售人员类销售人员类 先写公有成员函数: c+程序设计报告 7 有读入信息的构造函数以及计算薪资的函数。 再写保护型成员变量:要有销售额以及销售额的百分比。 具体写法: class salesman:virtual public employee1 protected: float commrate; float sales; public: salesman(); void setsales(float s1); void pay(); void promote(int); ; 文秘类 先写公有成员函数: 有读入信息的构造函数以及计算薪资的函数。 再写保护型成员变量:要有固定工资以及奖金 具体写法: class secretary:virtual public employee1 protected: float monthlypay; float workpay; public: secretary(); void setworkpay(int wp); void pay(); void promote(int); ; 经理类 先写公有成员函数:有读入信息的构造函数以及计算薪资的函数。 再写保护型成员变量:要有固定工资 具体写法: class manager:virtual public employee1 protected: float monthlypay; public: manager(); void pay(); c+程序设计报告 8 void promote(int); ; 技术经理类 先写公有成员函数:有读入信息的构造函数以及计算薪资的函数。 再写保护型成员变量:要有级别以及此级别的奖金。 具体写法: class techmanager:virtual public manager,public technician /技术经理类 public:techmanager(float x=1000); /技术经理类的 构造函数 void countsalary(); /计算薪资的函 数 protected:float gradebonus; /此级别的奖 金 int grade; /级别 ; 销售经理类 先写公有成员函数:有读入信息的构造函数以及计算薪资的函数。 再写保护型成员变量:要有级别以及此级别的奖金。 具体写法: class salesmanager:public manager,public salesman public: salesmanager(); void pay(); void promote(int); ; 3.3.详细设计说明详细设计说明 3.1 程序主界面 一个单文档的界面(如右边 两张图所示) ,以及附属一个对 话框(用于用户输入信息) 。 3.2 方案 利用 vc 中 mfc(exe)来编 译此程序。划分功能,根据功能 分别设计出相应的类来实现程序。 设计出需要的类,即其功能,再 组合在一起,并经行改进达到理 想中的程序。 用 mfc 的临一个好处则是方 便编译员实现程序,并且界面比 较美观,所以选用 mfc 来编写此 程序 c+程序设计报告 9 3.3 程序描述 由用户输入职工的姓名、编号、以及相应信息。程序源代码清晰,一看就 能明白每条代码的用处。程序的对话框简洁明了,功能清晰。对于用户的使用 很方便。对于编译员日后对程序的改进升级也很方便。 设计流程图设计流程图 开始 显示选项 提示输入提示输出 销 售 人 员 信 息 秘 书 信 息 技 术 经 理 信 息 销 售 经 理 信 息 技 术 人 员 信 息 显示输入的相关 信息 4 4 课程设计总结课程设计总结 在编译此程序时总体还是比较顺利的,但难免会遇到个别问题。 比如一开始 technician 与 salesman 类在继承 employee1 类的时候并未用 virtual 来继承,编译不通过,于是改用 virtual 来公共继承 employee1 类。 刚开始的时候有用户输入的编号无法显示,问题出在对话框中 edit 的控件弄错 而倒是一系列的问题。之后又发现在销售经理与销售人员的工资上发生错乱。 开始并未发现是两者工资错乱,只是一味的以为是销售经理的工资计算出了问 题,进行多次改编以后依然毫无进展。于是与老师进行讨论发现了两个问题, 一个是两者工资互换并且 commrate 无法提取数据 salesmanager:salesmanager() monthlypay=6000; commrate=2/100; void salesmanager:pay() accumpay=(sales*commrate)+monthlypay; void salesmanager:promote(int) employee1:promote(2); c+程序设计报告 10 salesman:salesman() commrate=5/100; void salesman:setsales(float s1) sales=s1; void salesman:pay() accumpay=(sales*commrate); 并且经行多次改编依然无效,于是将 commrate 全部改成数据编译通过。 而两者的工资问题则在 emp 中 ddx_text(pdx, idc_edit13, m_ss1); ddx_text(pdx, idc_edit14, m_ss2); 将 ss1 与 ss2 互换问题得以解决。 至此程序完成。 5 5 软件使用说明软件使用说明 在对话框选择 test-input data(如图一) ,出现职员信息的对话框(如 图二) ,将相应信息输入按确定,再选择 test-output data 就能读取用户所 输入的信息了(如图三) 。 6 6 附录(参考文献,源代码:)附录(参考文献,源代码:) 参考文献:c+语言程序设计(第三版) 源代码:(部分) /employee1.cpp #include“stdafx.h“ #include #include #include 图一 图二 c+程序设计报告 11 #include #include“wenjian.h“ #include“employee1.h“ using namespace std; employee1:employee1() grade=1; accumpay=0.0; employee1:employee1() void employee1:promote(int increment) grade+=increment; void employee1:setname(char * names) strcpy(name,names); char* employee1:getname() return name; void employee1:setindividualempno(char * individualempnos) strcpy(individualempno,individualempnos); char* employee1:getindividualempno() return individualempno; int employee1:getgrade() return grade; float employee1:getaccumpay() return accumpay; technician:technician() hourlyrate=35; void technician:setworkhours(int wh) workhours=wh; void technician:pay() accumpay=hourlyrate*workhours; 图三 c+程序设计报告 12 void technician:promote(int) employee1:promote(2); manager:manager() monthlypay=6000; void manager:pay() accumpay=monthlypay; void manager:promote(int) employee1:promote(3); salesmanager:salesmanager() monthlypay=6000; commrate=2/100; void salesmanager:pay() accumpay=(sales*0.02)+6000; void salesmanager:promote(int) employee1:promote(2); salesman:salesman() commrate=5/100; void salesman:setsales(float s1) sales=s1; void salesman:pay() accumpay=(sales*0.05); void salesman:promote(int) employee1:promote(0); technicianmanager:technicianmanager() monthlypay=6000; void technicianmanager:setlevel(int dj) dengji=dj; void technicianmanager:pay() c+程序设计报告 13 accumpay=monthlypay+(1000*dengji); void technicianmanager:promote(int) employee1:promote(2); secretary:secretary() monthlypay=4000; void secretary:setworkpay(int wp) workpay=wp; void secretary:pay() accumpay=workpay+monthlypay; void secretary:promote(int) employee1:promote(0); class fileexception public: fileexception() :message(“file is not created !“) const char *what() constreturn message; private: const char *message; ; int main() technician t1; secretary st1; salesmanager sm1; technicianmanager tm1; salesman s1; char namestr20; char individualempnostr1000; vector vchar; vchar.push_back( vchar.push_back( vchar.push_back( vchar.push_back( vchar.push_back( int i; c+程序设计报告 14 for(i=0;inamestr; vchari-setname(namestr); coutindividualempnostr; vchari-setindividualempno(individualempnostr); vchari-promote(i); coutwh; t1.setworkhours(wh); coutwp; st1.setworkpay(wp); coutsl; sm1.setsales(sl); coutsl; s1.setsales(sl); coutl; tm1.setlevel(l); ofstream ofile(“employee.txt“,ios_base:out); for(i=0;ipay(); ofilegetname()getindividualempno()getgrade()getaccumpay() vchar; vchar.push_back( vchar.push_back( vchar.push_back( vchar.push_back( vchar.push_back( emp ed; ed.domodal(); vector vread; vread.push_back(ed.m_str1); vread.push_back(ed.m_str2); vread.push_back(ed.m_str3); vread.push_back(ed.m_str4); vread.push_back(ed.m_str5); vread.push_back(ed.m_str6); vread.push_back(ed.m_str7); vread.push_back(ed.m_str8); c+程序设计报告 18 vread.push_back(ed.m_str9); vread.push_back(ed.m_str10); int i; for(i=0;isetname(char*)(lpctstr)vrea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玉溪师范学院《网球主项》2021-2022学年第一学期期末试卷
- 玉溪师范学院《社会体育指导员培训》2021-2022学年第一学期期末试卷
- 化学第十章烃教案
- 测量仪器账务处理实例-记账实操
- 水泥基渗透结晶防水涂料施工指南
- 欣赏竹子课件
- 2024年电子、通信产品及软件批发服务项目成效分析报告
- 2024年羟丙纤维素项目评估分析报告
- 2019粤教版 高中美术 选择性必修2 中国书画《第四单元 意境深邃的山水画》大单元整体教学设计2020课标
- 财务部协调营运部合同
- DS18B20温度传感器实验Word版
- 基底节区解剖位置关系.ppt
- 家庭装修施工流程及施工工艺ppt课件
- GB_T 17166-2019 能源审计技术通则(高清版)
- 娄底市集体土地上房屋拆迁补偿安置办法娄政发〔2008〕3号
- 叉车事故案例及其分析
- 桥面混凝土铺装层施工方案
- 安安全全坐火车PPT课件
- 交通事故责任划分图例
- 钻井常用计算公式
- 混凝土浇筑监理旁站记录(完整)
评论
0/150
提交评论