C工资管理系统设计.docx
《C工资管理系统设计.docx》由会员分享,可在线阅读,更多相关《C工资管理系统设计.docx(16页珍藏版)》请在冰豆网上搜索。
C工资管理系统设计
《C++语言程序设计》课程设计(论文)
题目:
工资管理系统
院(系):
专业班级:
学号:
学生姓名:
指导教师:
教师职称:
起止时间:
课程设计(论文)任务及评语
院(系):
教研室:
学号
学生姓名
专业班级
课程设计(论文)题目
工资管理系统
课程设计(论文)任务
程序设计的任务与要求:
(1).掌握面向对象程序设计语言C++的基本语法
(2).掌握C++面向对象设计的思想
(3).掌握VC++与DEVC++开发工具的使用
(4).运用标准C++规范设计应用程序
设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。
正确地完成上述内容,规范完整地撰写出设计报告。
指导教师评语及成绩
成绩:
指导教师签字:
年月日
第1章课程设计目的与要求
设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
实验环境
硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用:
VC++系统,或其他C++语言应用程序开发软件。
预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
设计要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
第2章课程设计内容
课题描述
工资总额预算管理,是指企业按照国家收入分配政策规定和出资人的调控要求,围绕企业发展战略目标,根据企业经济效益、人工成本承受能力和劳动力市场价位等因素,对企业职工工资总额和工资水平做出预算安排并进行规范管理的活动。
国家为了保障低收入职工家庭的基本生活,规定特大城市人均生活费收入每日不超过五十元者,大中城市不超过四十五元者,小城市和县镇不超过四十元者可予困难补助。
在社会主义公有制条件下,工资除了具膏按劳分配的经济职能外,还具有调节社会成员之间的利益关系,促进社会安定团结的社会职能。
对低收入职工家庭国家采取保障其基本生活的措施,体现了社会主义制度的优越性,促进了社会的稳定,在当前条件下是完全必要的。
工资的职能不是单一的,而是多元的。
这一点已被越来越多的人所认识。
职能是规律的外观,多元职能是多个经济规律共同作用的结果。
多元经济导致多元工资,伴随着这一必备诉求,劳动者还会以企业未足额支付加班工资为由提出解除劳动关系并要求企业支付解除劳动关系的金。
这造成了近期的劳动关系较之以往具有更大的不稳定性,在一定程度上影响了相关行业的可持续发展。
究其原因,主要是在加工制造行业,长期普遍存在着企业未依法定标准及时足额支付加班工资的情况,以及司法政策对工资保护期间的延长。
针对目前的情况,企业除了妥善处理好当下的问题,包括基本工资、补贴工资、奖励工资、扣除工资等方式,从根本上完善工资核算和发放制度,避免以后爆发更大规模的纠纷。
激励员工付出较高程度的努力的方法之一是实行严密的监督。
严密的监督需要高成本。
根据工资绩效支付工资问题,激励性工资方案面临问题,所有的工资体系都必须能够满足企业和员工双方的愿望,绩效工资应当是建立在能够将员工的努力和企业的目标很好结合起来的一系列措施基础之上的。
但是由于基类employee中使用了虚函数,用基类的指针数组来处理不同的派生类对象时,通过指针访问的便是派生类的成员函数,所以主函数中可以用循环结构,在循环体中用统一的形式调用不同派生类的成员函数,所以主函数中可以用循环结构,系统要求能够添加职工的信息工能,也就是当有新的职工加入时可以记录在系统内。
在循环体中用统一的形式调用不同派生类对象的成员函数,来完成不同功能基本工资、补贴工资、奖金工资、扣除工资、实发工资,硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用VC++系统,或其他C++语言应用程序开发软件。
系统设计
2.2.1功能分析
本系统要求有如下几种功能:
1)本系统要求能够添加职工的信息工能,也就是当有新的职工加入时可以记录在系统内。
2)本系统在这个功能在输入职工号之后,能够有基本工资、补贴工资、奖励工资、扣除工资的功能。
3)本系统要求有查询职工信息功能,我们在操作系统上可以看到所有职工的信息,并且可以查询,输入相应的职工号即可。
4)本系统有添加新职工信息及查询的功能,输入相应的职工号即可。
5)本系统要求有输出职工信息功能,可以把相应的职工工资信息输出以便查询。
6)本系统要求有退出功能,即退出系统的方法。
2.2.2面向对象设计
1.类设计
以一个小型公司的人员信息管理程序为例,用基类的指针数组来处理不同派生类对象,从而实现了多态性调用,使用动态数组类模来代替C++预定义的数组类型也可以完成同样的功能,在本实验中的类employee中,我们采用了指针形式进行传递,在主函数中,通过传递方式将数据保存到相应的对象中,通过程序的运行得出,每个职员的月薪需要进行单独的输入,而后根据每个职员的每种实际情况而输入月薪计算,包括之原应该具有的基本月薪、补贴基金、本系统采用了多文件的设计结构,采用了文件,分别为:
iostream、string、fstream、vector使用文件。
在main()函数中,建立了不同类的对象,对它们进行了类似的操作,应用需函数和抽象函数类对该程序进行改变,解决程序不够简洁的不足,只是在基类employee中将manager()设计为纯需函数,这样,在主函数中便可以依据类型兼容规则用具类employee类型的指针数组来处理不同派生类的对象,当用基类指针调用需函数时,系统会执行指针所指的对象的成员的函数。
设计类是系统实施中一个或多个类的抽象;设计类所对应的对象取决于实施语言。
例如,在面向对象的语言(如C++)中,它可以对应一个普通类。
操作可见性分为以下几种:
(1)不可访问的成员:
从基类私有继承而来的,派生类或是建立派生类对象的模块都没有办法访问到它们,如果从派生类继续派生新类,也是无法访问的。
(2)公有成员:
派生类、建立派生类的模块都可以访问,继续派生,可能是新派生类中的私有、保护、共有成员。
(3)保护成员:
可能是新增也可能是从积累继承过来的,派生类北部成员可以访问,建立派生类对象的模块无法访问,进一步派生,在新的派生类中可能为私有成员或者保护成员。
(4)私有成员:
包块从基类继承过来的成员以及新增加的成员,在派生类内部可以访问,但是建立派生类对象的模块中无法访问,继续派生,就变成了新的派生类中的不可访问成员。
我们将应用静态数据成员具有静态生存去的性质来处理本课程设计中职员编号数据成员,其功能为在类employee中增加一个静态数据成员来设置本公司职员编号目前最大值,新增加的人员编号将在创建对象的同时自动在当前最大值基础上增加,从而减少了调用成员函数的麻烦。
本系统在算法方面采用了类的概念,其中有类的定义,类的构造函数的定义,析构函数的定义,类的初始化模版。
manager作为employee的虚基类来继承,因此在最远派生类中,从不同途径继承来的基类的成员只有一份拷贝,避免了信息的复杂化,基类employee中生命这个函数的目的只是为了整个类族规定的对外接口功能。
由于各个派生类的特点不同,employee类中的这个函数并不能适用于派生类,于是派生类必须声明适用于本类的同名函数隐藏基类的函数。
本课程设计套用了C++系统自带的模版,减轻了自定义模版的繁琐操作。
派生类可以从多个基类继承,也就是多重继承。
通过继承,派生类自动得到了除基类私有成员以外的其它所有数据成员和成员函数,在派生类中可以直接访问,从而实现了代码的复用。
2.UML类图:
图系统的UML类图
3.总体流程图
图总体流程图
2.2.2类成员描述
类
(1)dataManager类数据成员描述:
dataManager类中定义了private类型的voidInput();voidSearch();voidStat();
EmployeeDataFind(intid)const;
voidAppend(EmployeeDataentry);
voidSave()const;voidLoad();
vectorentries;};
(2)dataManager类中的函数成员
public:
DataManager(){();}
~DataManager(){();}
voidDisplayMenu();
通过voidDataManager:
:
Input()}和voidDataManager:
:
Search()实现了输入员工的工资信息和入员工的职工号
通过voidDataManager:
:
Stat()函数成员实现对员工个人工资的补贴扣除等等。
2.EmployeeData类
(1)定义了数据成员
private类型的:
intid;stringname;floatsalary;floatallowance;floatbonus;floatdeduction;};
(2)EmployeeData中的函数成员
mployeeData():
id(0),name(),salary,allowance,bonus,deduction{}
voidInput();voidPrint();voidSave()const;voidLoad(ifstream&fin);
inlineintId()const{returnid;}
inlinestringName()const{returnname;}
inlinefloatSalary()const{returnsalary;}
inlinefloatAllowance()const{returnallowance;}
inlinefloatBonus()const{returnbonus;}
inlinefloatDeduction()const{returndeduction;}
inlinefloatNetPay()const{return(salary+allowance+bonus-deduction);}
voidEmployeeData:
:
Input()函数成员的功能是显示查询工资的界面。
voidEmployeeData:
:
Print()函数成员的功能实现了输出的查询结果。
程序实现
2.3.1源码分析
1.头说明
#include
#include<>
#include
#include<>
usingnamespacestd;
(1)#include
iostream实际上是一个头文件,包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std中。
(在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。
)
(2)#include<>
就是在程序中加入#include""就可以使用这个头文件里包含的库函数,而这些函数都是处理字符串的。
(3)#include
fstream是一个头文件的名字,属于c++的,主要包含文件操作的类和方法。
(4)#include<>
这个头文件包含了一些比较杂类的库函数,比如 system 等,其他头文件中的函数类型很单一,但是这个头文件不是,混合了多种类型的函数集合。
(5)usingnamespacestd;
所谓namespace,是指标识符的各种可见范围。
C++标准程序库中的所有标识符都被定义于一个名为std的命名空间内。
2.局部功能说明
(1)添加工资记录
usingnamespacestd;
constchar*filename="";
classEmployeeData
{public:
EmployeeData():
id(0),name(),salary,allowance,bonus,deduction{}
voidInput();voidPrint();voidSave()const;voidLoad(ifstream&fin);
inlineintId()const{returnid;}
inlinestringName()const{returnname;}
inlinefloatSalary()const{returnsalary;}
inlinefloatAllowance()const{returnallowance;}
inlinefloatBonus()const{returnbonus;}
inlinefloatDeduction()const{returndeduction;}
inlinefloatNetPay()const{return(salary+allowance+bonus-deduction);}
private:
intid;stringname;floatsalary;floatallowance;
floatbonus;floatdeduction;};
voidEmployeeData:
:
Input()
{cout<<"输入职工号:
";
cin>>id;
cout<<"输入姓名:
";
cin>>name;
cout<<"输入基本工资:
";
cin>>salary;
cout<<"输入补贴金额:
";
cin>>allowance;
cout<<"输入奖励金额:
";
cin>>bonus;
cout<<"输入扣除金额:
";
(2)按职工号查询工资数据
cin>>deduction;}
voidEmployeeData:
:
Print()
{cout<<"职工号:
\t"<cout<<"姓名:
\t"<cout<<"基本工资:
\t"<cout<<"补贴金额:
\t"<cout<<"奖励金额:
\t"<cout<<"扣除金额:
\t"<cout<<"实发金额:
\t"<voidEmployeeData:
:
Save()const
{ofstreamfout;
(filename,ios:
:
app);
fout<<voidEmployeeData:
:
Load(ifstream&fin)
{intnetpay(0);
fin>>id>>name>>salary>>allowance>>bonus>>deduction>>netpay;
();}
classDataManager
{public:
DataManager(){();}
~DataManager(){();}
voidDisplayMenu();
private:
voidInput();voidSearch();voidStat();
EmployeeDataFind(intid)const;
voidAppend(EmployeeDataentry);
voidSave()const;voidLoad();
private:
vectorentries;};
voidDataManager:
:
Input()
{cout<<"[职工信息录入]\n请输入员工信息"<EmployeeDataentry;();Append(entry);cout<voidDataManager:
:
Search()
{cout<<"[信息查询]\n请输入员工的职工号:
"<intid(0);cin>>id;EmployeeDatafound=Find(id);
if()==0&&()=="")
{cout<<"无此员工号:
"<(3)工资统计
voidDataManager:
:
Stat()
{floats;floata;floatb;floatd;floatp;
unsignedintcount());
for(unsignedinti(0);i{s+=(i).Salary();
a+=(i).Allowance();
b+=(i).Bonus();
d+=(i).Deduction();
p+=(i).NetPay();}
cout<<"\t\t总金额\t平均金额"<cout<<"----------------------------------"<cout<<"基本工资\t"<
cout<<"补贴金额\t"<cout<<"奖励金额\t"<
cout<<"扣除金额\t"<cout<<"实发工资\t"<
cout<EmployeeDataDataManager:
:
Find(intid)const
{EmployeeDatares;
for(unsignedinti(0);i<();i++)
{if(i).Id()==id)
{res=(i);break;}}returnres;}
voidDataManager:
:
Append(EmployeeDataentry)
{(),entry);}
voidDataManager:
:
Save()const
{ofstreamfout;(filename,ios:
:
app);();ave();}}
voidDataManager:
:
Load()
{ifstreamfin(filename);
unsignedintcount(0);fin>>count;();
for(unsignedinti(0);i{EmployeeDataentry;(fin);Append(entry);}();}
(4)主函数
voidDataManager:
:
DisplayMenu()
{intopt(0);Load();
do{cout<<"1.职工信息录入"<cout<<"2.信息查询"<cout<<"3.工资统计"<cout<<"4.退出"<>opt;
switch(opt)
{case1:
Input();Save();break;
case2:
Search();break;
case3:
Stat();break;}}while(opt!
=4);}
intmain()
{DataManagerdm;
();
return0;}
2.3.2运行结果
图编译无误后运行界面
图运行后输入数据
图运行后输入数据
图运行后输入数据
第3章总结
这次C++课设做的是工资管理系统,在这次课设中我学到了许多书本上没有的知识我们首先很好的复习和巩固了自己所学的知识,提升了我们的实际操作能力。
在这次实训中,我们学会了如何运用面向对象程序设计的思想,用C++语言编写代码,去设计程序。
在课设设计的过程中我认识到必须细致地设计程序中的每一个细节,准确的考虑程序运行时每一刻发生的事情。
在课程设计过程中我也遇到了一些问题:
1.在数据输入时,没有考虑到工资实际的情况,导致程序不完善。
2.运行时有许多我们没有加以限制的条件,导致出入不符合情况使程序出现死循环。
3.我们对程序的界面加以改观,使运行界面更加美丽。
但是通过查阅资料和请教老师和同学,终于解决了问题,使程序可以准确的运行出来。
这次课设使我对C++这门基础语言有了一定的了解,这些知识对我在今后的学习方面有很大的帮助,在这过程中不仅掌握了C++语言的编译方法,同时也了解到了在编译过程中应该注意的一些问题及其解决办法,为自己今后在其他语言的学习上做了很好的准备。
有了这些知识为基础我相信自己以后的学习将变得更加容易。
我深深体会到只是需要实践的重要性,通过实践我们进一步发现自己的不足,欠缺,进而知道我们怎样深化理解,真正吸收所学的知识。
在这个过程中我们还了解了很多原本陌生的知识。
我们深刻体会出学习C++我们还有很长的路要走,相信只要我们继续努力,多加练习,一定会更加出色。
在这个课程设计过程中,所学的专业知识有了一个较系统的综合,并对其中的许多问题进行了重新学习和加深理解,为将来实际工作的需要奠定了坚实的基础。
课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。
”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。
我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
这次课程设计真是让我受益匪浅。
参考文献
1.谭浩强编著《C++面向对象程序》北京:
清华大学出版社
2.李海文编著《C++程序设计实践教程》北京: