欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    课程设计报告职工工资管理系统设计.doc

    • 资源ID:3784930       资源大小:580.50KB        全文页数:19页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计报告职工工资管理系统设计.doc

    课程设计设计题目 职工工资管理系统设计 课程名称面向对象程序设计课程设计课程代码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()函数为工资计算函数,但在基类中为空,原因是各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。recordInfo()函数和recordSalary()函数分别是职工信息和职工工资的记录函数,分别将信息存入文件info.txt和salary.txt。具体的基类和派生类的定义如下图:二、对课程设计成果的要求(包括课程设计说明书、图纸、图表、实物等软硬件要求)(1) 分析职工工资管理系统程序结构: 画出程序粗略的流程图和各个模块的详细流程图,每个功能模块用文字说明他们的功能(与对应流程图放在一起);(2) 对你已经实现的功能(修改的、新编写的)做详细的说明, 并附上流程图及程序清单。(3) 自己对该职工工资管理系统的进一步设想;(4) 对于有设想但最终未实现的功能的大致编程思路的阐述;(5) 论述在设计过程中遇到的并且对你具有启发性的问题。(6) 严禁抄袭,发现雷同,双方扣分。三、课程设计工作进度计划:周一:教师布置任务,讲解本课设模块。周二:画出主程序粗略的流程图和各个模块的详细流程图。周三:设计程序及调试程序。同时着手写报告。周四:完成设计,提交报告,接受教师考评。四、主要参考资料(1)面向对象程序设计 ,郑莉,清华大学出版社, (2)面向对象程序设计C+语言,朱战立等编 西安电子科技大学出版社(3)面向对象程序设计-Visual C+,刘斌等编, 清华大学出版社 (4)面向对象程序设计-C+语言描述, Richard Johnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社, 2003目录1概述:61.1基本功能62课题分析62.1类的设计62.2类的实现63详细设计说明83.1程序主界面83.2方案83.3程序描述(输入input)84课程设计总结95软件使用说明106附录(参考文献,原代码:)10参考文献:10原代码101 概述 1.1基本功能输入职工的姓名编号以及相关信息,系统计算个职工工资。职工分别有秘书、技术经理、技术人员、销售经理、销售人员。技术人员的工资根据他当月工作的小时数来定,时薪35元;销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5%;文秘有4000元的基本工资,奖金视为当月工作情况而定;技术经理和销售经理都有6000元的固定工资,技术经理的工作业绩可分为3个等级,每级可获得1000元奖金,销售经理的奖金由他所管理的销售员的销售业绩而定,总销售额的2%。功能一目了然,方便用户使用2.课题分析类的设计及实现本课程设计有7个类,分别是employee1,secretary,technician,salesman,manager,technicianmanager,salesmanager7个类。其中technician、salesman以及manager类在继承employee1的时候用了virtual,如果不用这在调试的时候不通过。技术人员类先写公有成员函数:有读入信息的构造函数以及计算薪资的函数。再写私有型成员变量:要有工作的小时数以及单位小时工作的薪水。具体写法:class technician:virtual public employee1private:float hourlyRate;int workHours;public:technician();void SetworkHours(int wh);void pay();void promote(int); 销售人员类先写公有成员函数:有读入信息的构造函数以及计算薪资的函数。再写保护型成员变量:要有销售额以及销售额的百分比。具体写法:class salesman:virtual public employee1protected:float CommRate;float sales;public:salesman();void Setsales(float s1);void pay();void promote(int);文秘类先写公有成员函数:有读入信息的构造函数以及计算薪资的函数。再写保护型成员变量:要有固定工资以及奖金具体写法:class secretary:virtual public employee1protected:float monthlyPay;float workPay;public:secretary();void SetworkPay(int wp);void pay();void promote(int); 经理类先写公有成员函数:有读入信息的构造函数以及计算薪资的函数。再写保护型成员变量:要有固定工资具体写法:class manager:virtual public employee1protected:float monthlyPay;public:manager();void pay();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 salesmanpublic:salesmanager();void pay();void promote(int);3.详细设计说明3.1程序主界面一个单文档的界面(如右边两张图所示),以及附属一个对话框(用于用户输入信息)。3.2方案利用VC中MFC(exe)来编译此程序。划分功能,根据功能分别设计出相应的类来实现程序。设计出需要的类,即其功能,再组合在一起,并经行改进达到理想中的程序。用MFC的临一个好处则是方便编译员实现程序,并且界面比较美观,所以选用MFC来编写此程序3.3程序描述由用户输入职工的姓名、编号、以及相应信息。程序源代码清晰,一看就能明白每条代码的用处。程序的对话框简洁明了,功能清晰。对于用户的使用很方便。对于编译员日后对程序的改进升级也很方便。设计流程图开始显示选项提示输入提示输出销售人员信息秘书信息技术经理信息销售经理信息技术人员信息显示输入的相关信息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);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 软件使用说明在对话框选择Test-Input Data(如图一),出现职员信息的对话框(如图二),将相应信息输入按确定,再选择Test-Output Data就能读取用户所输入的信息了(如图三)。图二图一 6 附录(参考文献,源代码:)参考文献:C+语言程序设计(第三版)源代码:(部分)/employee1.cpp#include"stdafx.h"#include<iostream>#include<cstring>#include<fstream>#include<vector>#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;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()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 FileExceptionpublic: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 < employee1 * >vchar;vchar.push_back(&t1);vchar.push_back(&st1);vchar.push_back(&sm1);vchar.push_back(&tm1);vchar.push_back(&s1);int i;for(i=0;i<5;i+)cout<<"请输入雇员的姓名:"cin>>namestr;vchari->SetName(namestr);cout<<"请输入雇员的编号:"cin>>individualEmpNostr;vchari->SetindividualEmpNo(individualEmpNostr);vchari->promote(i);cout<<"请输入兼职技术人员"<<t1.GetName()<<"本月的工作时数:"int wh;cin>>wh;t1.SetworkHours(wh);cout<<"请输入秘书姓名"<<st1.GetName()<<"本月的奖金:"int wp;cin>>wp;st1.SetworkPay(wp);cout<<"请输入销售经理"<<sm1.GetName()<<"所管辖部门本月的销售总额:"float sl;cin>>sl;sm1.Setsales(sl);cout<<"请输入推销人员"<<s1.GetName()<<"本月的销售额:"cin>>sl;s1.Setsales(sl);cout<<"请输入技术经理"<<tm1.GetName()<<"所升等级:"float l;cin>>l;tm1.Setlevel(l);ofstream ofile("employee.txt",ios_base:out);for(i=0;i<5;i+)vchari->pay();ofile<<"职工 "<<vchari->GetName()<<" 编号 "<<vchari->GetindividualEmpNo()<<" 级别为 "<<vchari->Getgrade()<<" 级,本月工资 "<<vchari->GetaccumPay()<<endl;ofile.close();cout<<"职员信息已存入文件"<<endl;ifstream infile("employee.txt",ios:in);tryif(! infile)throw FileException();catch (FileException fe)cout<<fe.what()<<endl;exit(0);cout<<"从文件中读取信息并显示如下:"<<endl;char line101;for(i=0;i<5;i+)infile.getline(line,100);cout<<line<<endl;infile.close();return 0; /employee1.hclass employee1protected:char name20;char individualEmpNo1000;int grade;float accumPay;public:employee1();employee1();virtual void pay()=0;virtual void promote(int increment = 0);void SetName(char *);char * GetName();void SetindividualEmpNo(char *);char * GetindividualEmpNo();int Getgrade();float GetaccumPay();class secretary:virtual public employee1protected:float monthlyPay;float workPay;public:secretary();void SetworkPay(int wp);void pay();void promote(int);class technician:virtual public employee1private:float hourlyRate;int workHours;public:technician();void SetworkHours(int wh);void pay();void promote(int);class salesman:virtual public employee1protected:float CommRate;float sales;public:salesman();void Setsales(float s1);void pay();void promote(int); class manager:virtual public employee1protected:float monthlyPay;public:manager();void pay();void promote(int);class salesmanager:public manager,public salesmanpublic:salesmanager();void pay();void promote(int);class technicianmanager:public manager,public technicianprivate:int dengji;public:technicianmanager();void Setlevel(int dj);void pay();void promote(int);/employeeView.cpp(部分代码)void CEmployeeView:OnInputData() / TODO: Add your command handler code heretechnicianmanager tm1;technician t1;salesman s1;salesmanager sm1;secretary st1;vector <employee1 *> vchar;vchar.push_back(&tm1);vchar.push_back(&t1);vchar.push_back(&s1);vchar.push_back(&sm1);vchar.push_back(&st1);emp ed;ed.DoModal();vector<CString> 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);vread.push_back(ed.m_str9);vread.push_back(ed.m_str10);int i;for(i=0;i<5;i+)vchari->SetName(char*)(LPCTSTR)vreadi);vchari->SetindividualEmpNo(char*)(LPCTSTR)vreadi+5);vchari->promote(i);t1.SetworkHours(ed.m_hours);tm1.Setlevel(ed.m_level);sm1.Setsales(ed.m_ss1);s1.Setsales(ed.m_ss2);st1.SetworkPay(ed.m_ss3);ofstream ofile("employee.txt",ios:out);for(i=0;i<5;i+)vchari->pay();ofile<<vchari->GetName()<<"编号"<<vchari->GetindividualEmpNo()<<"级别为"<<vchari->Getgrade()<<"级,本月工资"<<vchari->GetaccumPay()<<endl;ofile.close();class FileExceptionpublic:FileException():message("File is not created!")const char *what() const return message;private:const char *message;void CEmployeeView:OnOutputData() / TODO: Add your command handler code hereifstream infile("employee.txt",ios:in);tryif(! infile)throw FileException();catch(FileException fe)/exceptiom handlerMessageBox(fe.what();/"<<fe.what()<<'n'exit(0);CClientDC dc(this);char line101;for(int i=0;i<5;i+)infile.getline(line,100);CString c_str;c_str.Format("%s",line);dc.TextOut(100,80,"职工信息管理系统:");dc.TextOut(100,100+30*i,c_str);infile.close();

    注意事项

    本文(课程设计报告职工工资管理系统设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开