职工工资管理系统设计课程设计含源代码.docx

上传人:b****6 文档编号:6760469 上传时间:2023-01-10 格式:DOCX 页数:23 大小:66.59KB
下载 相关 举报
职工工资管理系统设计课程设计含源代码.docx_第1页
第1页 / 共23页
职工工资管理系统设计课程设计含源代码.docx_第2页
第2页 / 共23页
职工工资管理系统设计课程设计含源代码.docx_第3页
第3页 / 共23页
职工工资管理系统设计课程设计含源代码.docx_第4页
第4页 / 共23页
职工工资管理系统设计课程设计含源代码.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

职工工资管理系统设计课程设计含源代码.docx

《职工工资管理系统设计课程设计含源代码.docx》由会员分享,可在线阅读,更多相关《职工工资管理系统设计课程设计含源代码.docx(23页珍藏版)》请在冰豆网上搜索。

职工工资管理系统设计课程设计含源代码.docx

职工工资管理系统设计课程设计含源代码

设计题目职工工资管理系统设计

xxx技术学院课程设计任务书

课程名称

《面向对象程序设计》课程设计

课程代码

设计题目

职工工资管理系统的设计

题目序号

设计时间

系(院)

班级

一、课程设计任务(条件)、具体技术参数(指标)

本课程设计是《面向对象程序设计》课程的后继教学环节,学好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)《面向对象程序设计----VisualC++》,刘斌等编,清华大学出版社

(4)《面向对象程序设计----C++语言描述》,RichardJohnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社,2003

1概述:

1.1基本功能

实现一个简单的工资管理系统。

系统的主要用来计算职工当月工资并存档。

由于公司内有5种不同类型的职工:

技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。

所以,此系统的基本功能是:

首先,由员工输入用户信息(包括编号、姓名和职务;然后,计算某职工的当月工资(系统先从已输入的职工信息文件中获取职工的工作类型;

接着调用不同的处理程序进行计算);

最后,可以选择将结果(所有员工的编号、姓名、职位、工资等信息)存档。

1.2拓展功能

1.设定好5种职位各不相同的工资计算方式:

技术人员的工资根据他当月工作的小时数来定,时薪35元;

销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5%;

文秘有4000元的基本工资,奖金视为当月工作情况而定;

技术经理和销售经理都有6000元的固定工资,技术经理的工作业绩可分为3个等级,PS:

每级可获得1000元奖金(¥1000、¥2000、¥3000);

销售经理的奖金由他所管理的销售员的销售业绩而定,总销售额的2%。

2.添加某个职工信息的查询功能:

只要输入一个已经存在数据库内的雇员名字,即可查到该雇员的编号、姓名、职位和工资的信息。

3.清屏功能:

为了保护雇员个人信息不外露。

4.警报功能:

在查询职员工资信息的时候,会发出警报音“滴——”的一声。

5.退出确定功能

退出程序时,会让用户再次确定是否真的要退出的界面。

2课题分析

2.1类的设计

从用户需求中,可以发现5种类型的职员都可以分别设计为一个类。

首先,他们都属于雇员,因此可以设计一个基类employee(雇员),然后从中派生出technician(技术人员)类,salesman(销售人员)类、secretary(文秘)类、techmanager(技术经理)类和manager(销售经理)类。

根据用户需要employee类应该拥有的属性有:

编号、姓名、职务、月份和工资。

Employee类的服务可以包括input(),print(),find(),save()。

其中,input()函数用于接收用户输入的职工信息;print()函数用于输出用户输入的职工信息;find()函数用来根据职工名查找职工信息;save()函数为将职工信息写入文本。

由于各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。

2.2类的实现

classTechnician:

publicEmployee//技术员类(公有继承雇员类)

{

public:

voidinput()

{

cout<<"技术员的";

Employee:

:

input();

cout<<"工作时间:

";

cin>>worktime;

}

voidprint()

{pay=worktime*hourpay;

Employee:

:

print();

}

voidfind()

{

pay=worktime*hourpay;

Employee:

:

find();

}

voidsave()

{pay=worktime*hourpay;其他类,类似形成。

Employee:

:

save();

}

protected:

doubleworktime;//工作时间(小时)

};

3详细设计说明

3.1程序主界面

图表1主菜单目录

3.2方案

在明确了整个程序基本的功能目的后,接着,便是思考如何具体实现:

问题1:

存入的数据放在哪里?

constintn1=1,n2=1,n3=1,n4=1,n5=1;

/*定义公司各类职工人数(可修改)

(n1:

技术员人数;n2:

经理人数;n3:

销售员人数;n4:

销售经理人数)*/

事先设定好可修改的全局变量。

然后确定好全局对象数组。

如此便可以按照所需存入员工信息

问题2:

如何程序要求,落实?

派生类

派生类

派生类

派生类

基类

派生类

问题3:

怎样处理2个菜单关系?

(输入职员信息菜单、目录菜单)

让目录菜单作为主菜单,输入职员信息的菜单成为二级菜单。

并运用清屏的功能,及时清除输入的职员信息,作为一种安全保护。

3.3程序描述(输入input)

*由主菜单选择进入“1”的数据输入菜单,进行数据输入(进入二级菜单后会自动清屏)。

图表2子菜单(程序中的menu3)

*根据需要选择输入要输入的职员信息。

(只需按照中文提示,依次输入英语或数字信息)

图表3子菜单中选择输入技术经理信息的一个状态

*一个职员的信息全部输入完成后,会自动清屏,回到“财务部门输入数据系统”主菜单

图表4子菜单

*以此类推,随意输入你要输入的职员信息。

若输入全部完成,可以回到主菜单

*然后,在主菜单中选择数据查询,可以根据你填入的职工姓名,查到他的所有信息

图表5由主菜单选择查询一操作时,反馈信息的状态

*也可选择数据备份,会自动清屏。

并让所有已输入过的职工信息,全打印在所在磁盘的一个txt文档里。

图表6由主菜单选择数据备份一操作后的状态

*如果想要退出系统,可以选择主菜单的退出系统,选择过后,会清屏,显示以下界面,警告用户,是否真的要推出。

图表7选择主菜单退出系统一操作后的状态

4课程设计总结

通过此次面向对象程序设计的实践课程学习,本人受益匪浅。

经过一系列的编程,本人更加体会到纸上得来终觉浅,绝知此事要躬行。

实践是检验真理的唯一标准。

这两句话说的真切。

遇到的难关1.

在编写销售经理的类的时候,由于思维混乱,继承乱用,以致真个程序一片混乱,运行不出,且外加几十个错误警告。

经过回顾自己先前写的流程图,本人得到了很大的顿悟。

关系捋清楚了,思路也豁然开朗了,下笔如有神。

遇到的难关2.

五种职员在计算工资的时候,先前一直查询不到正确的工资数额。

在反复检查、测试的过程中,才发现那些计算公式,继承没有问题,问题出在查询的那个函数忘记将重新计算工资的公式写上。

所以一直显示的是employee的工资数,而不是各个职位员工的工资数。

遇到的难关3.

在增加清屏这一功能时,本以为这很简单。

可在具体操作时,才发现,这也考验一个人思维逻辑的严谨。

曾设想,为了不泄密,将清屏这一函数放在查询函数后。

结果没想到,这导致测试时:

工资信息一显示,立刻被擦掉,根本来不及看的窘境。

存在的不足1.

本程序设计上还有明显的不妥,就是查询工资信息的时候,要求输入的仅仅为用户姓名。

由于还是英语输入,难免有同名同姓的状况出现,容易混乱与出错,还需改进。

存在的不足2.

原本思路是将程序分为两个入口:

管理员入口和职员入口。

管理员入口:

需要输入通行账户和密码。

进入后,有两个功能——输入所有职工信息(编号、姓名、岗位、月份、业绩奖励等等基本信息)和数据备份。

职员入口:

则面向所有员工。

进入后,只有一个功能——根据自己的名字和编号查询自己的工资等信息。

可是由于实际精力有限,时间的不足。

只能不分入口,直接将所有功能放在一个界面内——主菜单内。

这样不能很好的起到原先设想的保护功能。

实乃缺失。

总之,这不到一周的实践课,让本人的对于知识的应用能力有了显著的提升。

本人也明白了,想要真正会编程,就要课后下功夫,多“实战”。

这样的进步才更大。

5软件使用说明

1.主菜单中,先输入1,按回车。

进入输入数据职员的菜单界面。

2.按文字提示信息,依次输入5种职员的各个信息。

EG:

编号姓名职位

101zhaotechmanager

202qiantechnician

303sunsalesman

404limanager

505zhousecretary

3.输入完毕后,输入0,按回车。

再次回到主菜单。

4.输入2,按回车。

可以输入你想查看的职工姓名,按回车,查看其信息。

5.输入3,按回车。

可以将所有职工的信息,做成文本。

6.输入0,按回车。

可以通过输入y或n选择,是否退出程序。

友情提示:

1.由于语言局限,输入的信息仅限26个字母和阿拉伯数字。

2.自动清屏是出于对雇员信息的保护和界面整洁。

并非出错,请勿恐慌。

3.备份资料时,电脑发出的“滴”的警报声,只是提示用户,备份已完成。

6附录(参考文献,原代码:

6.1参考文献:

(1)《面向对象程序设计》,郑莉,清华大学出版社,

(2)《面向对象程序设计C++语言》,朱战立等编西安电子科技大学出版社

(3)《面向对象程序设计----VisualC++》,刘斌等编,清华大学出版社

(4)《面向对象程序设计----C++语言描述》,RichardJohnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社,2003

6.2原代码

#include

#include

#include

#include

#include

usingnamespacestd;

//常变量(供修改用):

constintn1=1,n2=1,n3=1,n4=1,n5=1;/*定义公司各类职工人数(可修改)

(n1:

技术员人数;n2:

经理人数;n3:

销售员人数;n4:

销售经理人数)*/

constdoublem_salary=6000;//经理固定月工资

constdoublehourpay=35;//技术员小时工资

constdoublebasicpay=6000;//销售经理的底薪

constdoublesecretarypay=4000;//文秘的底薪

constdoubles_proportion=5.0/100;//销售员的工资提成比例

constdoublesm_proportion=2.0/100;//销售经理的提成比例

doublesold_amount;

//声明部分:

voidmenu();//主菜单(1/2/3/0)

voidmenu3();//数据打印二级菜单(1/2/3/4/5/0)

voiddata_input();//数据输入函数

doublesm_salary();//销售经理工资计算

voiddata_find();//数据查询

voiddata_save();//数据备份(做到txt中)

voidclear();

ofstreamoutfile;//打开磁盘文件流对象

stringf_name;//全局变量(查询用)

//定义类:

classEmployee//雇员类(基类)

{

public:

voidinput()//数据输入函数

{

cout<<"编号:

";

cin>>num;

cout<<"其姓名:

";

cin>>name;

cout<<"职位:

";

cin>>status;

cout<<"月份:

";

cin>>month;

}

voidprint()//打印数据函数

{

cout<<"编号\t姓名\t职位\t\t月份\t工资"<

cout<

}

voidfind()//查询函数

{

if(f_name==name)

{

print();

cout<

}

}

voidsave()//备份数据函数

{

outfile<

}

protected:

intnum;//职工号

stringname;//职工姓名

stringstatus;//职工职位

intmonth;//工资月份

doublepay;//职工工资

};

classTechnician:

publicEmployee//技术员类(公有继承)

{

public:

voidinput()

{

cout<<"技术员的";

Employee:

:

input();

cout<<"工作时间:

";

cin>>worktime;

}

voidprint()

{pay=worktime*hourpay;

Employee:

:

print();

}

voidfind()

{

pay=worktime*hourpay;

Employee:

:

find();

}

voidsave()

{pay=worktime*hourpay;

Employee:

:

save();

}

protected:

doubleworktime;//工作时间(小时)

};

classManager:

publicEmployee//技术经理类

{

public:

voidinput()

{

cout<<"技术经理的";

Employee:

:

input();

cout<<"业绩奖励(输入金额数:

1000、2000或3000):

";

cin>>m_expay;

}

voidprint()

{pay=m_salary+m_expay;

Employee:

:

print();

}

voidfind()

{pay=m_salary+m_expay;

Employee:

:

find();

}

voidsave()

{pay=m_salary+m_expay;

Employee:

:

save();

}

protected:

intm_expay;

};

classSell_Manager:

publicEmployee//销售经理类

{

public:

voidinput()

{cout<<"销售经理的";

Employee:

:

input();

}

intsm_number()//调用销售经理职工号

{

returnnum;

}

stringsm_name()//调用销售经理姓名

{

returnname;

}

voidprint()

{pay=basicpay+sold_amount*sm_proportion;

cout<<"编号\t姓名\t职位\t\t月份\t工资"<

cout<

}

voidsave()

{

pay=basicpay+sold_amount*sm_proportion;

outfile<

}

voidfind()

{

if(f_name==name)

{

print();

cout<

}

}

};

classSeller:

publicEmployee//销售员类

{

public:

Seller(){sold_amount=0;}//构造函数,销售额初始化为0

voidinput()

{

cout<<"销售员的";

Employee:

:

input();

cout<<"销售额:

";

cin>>sold_amount;

cout<<"所属销售经理的编号:

";

cin>>nu;

}

voidprint()

{pay=sold_amount*s_proportion;

cout<

<<"\t"<

}

ints_number()//调用销售员所属销售经理职工号

{

returnnu;

}

doubleamount()//调用销售员销售额

{

returnsold_amount;

}

voidfind()

{if(f_name==name)

{

cout<<"编号\t姓名\t职位\t\t月份\t工资\t所属部门经理编号"<

print();

}

}

voidsave()

{pay=sold_amount*s_proportion;

outfile<

<<"\t"<

}

protected:

doublesold_amount;//销售额

intnu;//所属销售经理职工号

};

classSecretary:

publicEmployee//文秘类

{

public:

voidinput()

{

cout<<"文秘的";

Employee:

:

input();

cout<<"附加奖励(输入本月奖金数额):

";

cin>>sy_expay;

}

voidprint()

{pay=secretarypay+sy_expay;

Employee:

:

print();

}

voidfind()

{

pay=secretarypay+sy_expay;

Employee:

:

find();

}

voidsave()

{pay=secretarypay+sy_expay;

Employee:

:

save();

}

protected:

intsy_expay;

};

//定义全局对象数组

Techniciant[n1];//技术员

Managerm[n2];//经理

Sellers[n3];//销售员

Sell_Managersm[n4];//销售经理(下属若干销售员)

Secretarysy[n5];//文秘

//主函数部分:

intmain()

{

charn;

menu();

for(inti=0;i<1000;i++)//设定循环次数(便于各项操作的切换及方便查询)

{cin>>n;

switch(n)

{

case'1':

//数据输入

clear();

cout<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1