课程设计C++之职工工资管理系统.docx
《课程设计C++之职工工资管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计C++之职工工资管理系统.docx(15页珍藏版)》请在冰豆网上搜索。
![课程设计C++之职工工资管理系统.docx](https://file1.bdocx.com/fileroot1/2023-2/26/f4744003-0a4c-49d3-813c-c894dcf55727/f4744003-0a4c-49d3-813c-c894dcf557271.gif)
课程设计C++之职工工资管理系统
课程设计C++之职工工资管理系统
1前言
某公司内有5种不同类型的职工:
技术人员(technician)、销售人员(salesman)、文秘(secretary)、技术经理(tech-manager)、销售经理(sales-manager)。
他们的工资计算方式各不相同:
1)技术人员的工资根据他当月工作的小时数来定,时薪为35元;
2)销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5%;
3)文秘有4000元的基本工资,奖金视当月工作情况而定;
4)技术经理和销售经理都有6000元的固定工资,技术经理的工作业绩可分为3个等级,每级可以获得1000元奖金,
5)销售经理除有6000元的固定工资外,销售经理的奖金由他所管理的销售员的销售业绩而定,为总销售额的0.2%。
为此设计一个工资管理系统管理职工的信息。
2需求分析
2.1任务和要求
使用C++面向对象程序设计一个简易的工资管理系统。
,系统的主要功能是:
根据不同的职工,计算职工当月工资。
确定程序至少应该具备如下功能:
.输入职工,添加职工,删除职工,结算工资,等基本模块。
1)输入职工:
用classperson*creat(void)函数创建链表。
2)添加职工:
用classperson*insert(classperson*head,classperson*pe)函数添加。
3)删除职工:
用classperson*del(classperson*head,doublenum)函数删除。
4)结算工资:
用voidselary(classperson*head)函数计算。
2.2运行环境
(1)WINDOWS2000/XP系统
(2)VisualC++6.0编译环境或DEVC++5.0编译环境
2.3开发工具
C++语言
3分析和设计
3.1系统分析及设计思路
首先公司有五类人,各类之间又有相同的部分例如:
姓名、职工号等,所以定义一个基类Person,四类人相同部分为基类数据成员。
由基类Person再派生出各类:
技工类Technician类、售货员类Salesman、文秘类Secretary、技术经理类Tech-manager、销售经理类Sales-manager。
(1)Person类:
包含:
num,wage,year,name[10],post[10],sex等数据成员等。
要完成结算工资操作,需要设计virtualvoidpay()作为成员函数。
(2)Technician类:
继承Person类,增加hours数据。
(3)Salesman类:
继承Person类,增加sales数据。
(4)Secretary类:
继承Person类,增加bonus数据。
(5)Tech-manager类:
继承Person类,增加bonus数据
(6)Sales-manager类:
继承Person类,增加sumsales数据。
然后分析系统管理需要有几个功能,分别是输入职工,添加职工,删除职工以及结算工资。
我们为这几个功能分别建立对应的函数来实现:
classperson*creat(void)、classperson*insert(classperson*head,classperson*pe)、classperson*del(classperson*head,doublenum)、voidselary(classperson*head)。
并且还有输出函数print()以及保存信息函数save()
最后主函数的实现。
由于是有选择的菜单,首先想到了switch选择语句。
当输入不同值时,进入不同的case部分以实现不同的功能。
case1的功能是实现数据的输入。
用creat()函数创建职工信息,按照提示分别输入职工的信息:
编号、姓名、性别、出生年份,并用save()函数保存信息。
case2的功能是实现数据的添加。
用malloc动态分配内存空间,然后输入要添加的职工信息。
用insert()函数添加进去。
用print()函数输出并保存。
case3的功能是实现数据的删除。
根据提示输入你要删除的职工编号。
按照你输入的编号,用del()函数输出该职工的所有信息。
case4的功能是计算职工的工资。
根据不同的职工类别计算工资。
3.2主要类图
图3.1主要类图
3.3函数流程图
(1)主函数流程
图3.2主函数流程图
4具体代码实现
#include
#include
#include
#include
#include
#defineNULL0
#defineLENsizeof(classperson)
classperson
{public:
virtualvoidpay(){}
doublenum,wage,year;charname[10],post[10],sex;classperson*next;
};intn;
classTechnician:
publicperson
{public:
voidpay(){cout<<"工时:
";cin>>hours;wage=35*hours;cout<<"工资:
"<protected:
doublehours;
};
classSalesman:
publicperson
{public:
voidpay(){cout<<"销售额:
";cin>>sales;
wage=0.05*sales;cout<<"工资:
"<doublesales;};
classSecretary:
publicperson
{public:
Voidpay(){cout<<"奖金:
";cin>>bonus;wage=4000+bonus;cout<<"工资:
"<protected:
doublebonus;
};
classTechmanager:
publicperson
{public:
voidpay(){cout<<"奖金:
";cin>>bonus;wage=6000+bonus;cout<<"工资:
"<protected:
doublebonus;
};
classSalesmanager:
publicperson
{public:
voidpay(){cout<<"总销售额:
"<cout<<"工资:
"<doublesumsales;
};
classperson*creat(void)//创建链表,输入职工
{
classperson*head,*p1,*p2;
n=0;
p1=p2=(classperson*)malloc(LEN);
cin>>p1->post>>p1->num>>p1->name>>p1->sex>>p1->year;
head=NULL;
while(p1->num!
=0)
{n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;p1=(classperson*)malloc(LEN);
cin>>p1->post>>p1->num>>p1->name>>p1->sex>>p1->year;}
p2->next=NULL;
return(head);
}
voidprint(classperson*head)//输出职工
{classperson*p;
cout<"<p=head;
if(head!
=NULL)
do{
cout<post<<""<num<<""<name<<""<sex<<""<year<p=p->next;
}while(p!
=NULL);
}
classperson*del(classperson*head,doublenum)//删除职工
{classperson*p1,*p2;
if(head==NULL){cout<<"listnull!
"<p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{if(p1==head)head=p1->next;
elsep2->next=p1->next;
cout<<"delete:
"<elsecout<"<end:
return(head);
}
classperson*insert(classperson*head,classperson*pe)//添加职工
{classperson*p0,*p1,*p2;
p1=head;p0=pe;
if(head==NULL)
{head=p0;p0->next=NULL;}
else{while((p0->num>p1->num)&&(p1->next!
=NULL))
{p2=p1;p1=p1->next;}
if(p0->num<=p1->num)
{if(head==p1)head=p0;
elsep2->next=p0;p0->next=p1;}
else{p1->next=p0;p0->next=NULL;}
}n=n+1;
return(head);
}
voidsave(classperson*head)//保存文件
{classperson*p;
ofstreamoutfile("职工.txt",ios:
:
out);
if(!
outfile){cerr<<"openerror!
"<(1);}
p=head;
if(head!
=NULL)
do{
outfile<post<<""<num<<""<name<<""<sex<<""<year<p=p->next;
}while(p!
=NULL);outfile.close();
}
voidselary(classperson*head)//计算工资
{classperson*p;
Techniciante;Salesmansa;Secretaryse;Techmanagertm;Salesmanagersm;sm.sumsales=0;
ifstreaminfile("职工.txt",ios:
:
in);
if(!
infile){cerr<<"openerror!
"<(1);}
p=head;
if(head!
=NULL)
do{
infile>>p->post>>p->num>>p->name>>p->sex>>p->year;
cout<post<<""<num<<""<name<<""<sex<<""<year<<""<if(p->num<200){te.pay();}
if(p->num<300&&p->num>200){sa.pay();sm.sumsales=sa.sales+sm.sumsales;}
if(p->num<400&&p->num>300){se.pay();}
if(p->num<500&&p->num>400){tm.pay();}
if(p->num<600&&p->num>500){sm.pay();}
p=p->next;
}while(p!
=NULL);infile.close();
}
intmain()
{classperson*head,*pe;doubledelnum;
intmenu;
while
(1)
{cout<<"*****************************************************"<cout<<"*====================菜单选顶=======================*"<cout<<"*===================================================*"<cout<<"*1.输入职工2.添加职工3.删除职工4.结算工资*"<cout<<"*****************************************************"<cout<<"编号:
技工(101-199)售货员(201-299)文秘(301-399)"
<cout<";
cin>>menu;
switch(menu)
{case1:
cout<"<cout<<"职务"<<"编号"<<"姓名"<<"性别"<<"出生年份"<head=creat();print(head);save(head);
break;
case2:
cout<"<cout<<"职务"<<"编号"<<"姓名"<<"性别"<<"出生年份"<pe=(classperson*)malloc(LEN);
cin>>pe->post>>pe->num>>pe->name>>pe->sex>>pe->year;
while(pe->num!
=0)
{head=insert(head,pe);
print(head);save(head);
pe=(classperson*)malloc(LEN);
cin>>pe->post>>pe->num>>pe->name>>pe->sex>>pe->year;}
break;
case3:
cout<";
cin>>delnum;
while(delnum!
=0)
{head=del(head,delnum);
print(head);save(head);
cout<";
cin>>delnum;}
break;
case4:
selary(head);break;
}
}return0;
}
5课程设计总结
5.1程序运行结果或预期运行结果
图5.1实验结果图
图5.2实验结果图
图5.3实验结果图
图5.2实验结果图
5.2设计结论
本次设计我们组的题目是职工工资管理系统,因为事先老师的细心指导,我们才得以的完成这次课程设计。
在系统分析和设计的部分仍然花了比较多的时间,特别是源代码的编写和调试,经过反复的改写、调试、再改写、调试,我们最终完成了任务。
经过对职工信息管理系统的分析与编写,我们得到了很大的收获。
自主学习的必要性更是解决问题的基础,我们二个人一组,在设计的过程中,我们相互讨论,相互学习,发挥出各自的优势,发现自己的不足,取长补短,增强了团队意识。
更重要的是这次设计让我们对C++面向对象设计编程有了更深刻的认识和更全面的掌握,也提升了我们分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。
对面向对象编程有了深刻的理解,对软件工程有了了解。
在以后的学习中我们会更加的努力,深刻的钻研,增强团队意识。
通过这次课程设计,我们加深了对类与派生的理解。
类与派生类之间的关系,通过上机实践得到了进一步的深化。
从数据成员的继承到派生类对象对基类成员函数的调用。
整个实习过程让我的C++知识得到了应用,体验了程序员编程时的喜怒哀乐,知识、心智,得到全方位提升,收获颇丰。
参考文献
[1]龚晓庆,付丽娜,朱心懿.《C++面向对象程序设计》.北京:
清华大学出版社,201
[2]揣锦华等编.《C++程序设计语言》.西安:
西安电子科技大学出版社,2003
[3]吕凤翥著.《C++语言基础教程》.北京:
清华大学出版社,2001
[4]张国峰编著.《C++语言及其程序设计教程》.北京:
电子工业出版社,1996.
[6]郑莉,董渊,张瑞丰.《C++语言课程设计》(第三版).北京:
清华大学出版社,2004
[7]钱能.《C++程序设计实验指导》.北京:
清华大学出版社,2005
[8]罗建军等编.《C++程序设计教程学习指导》.北京
致谢
感谢我们的指导老师柳小文老师,谢谢她在我们的课程设计过程中提出了指导性的方案和架构,并指引我们阅读相关的资料和书籍,使我们在不熟悉的领域中仍能迅速掌握新的方法和技术。
感谢校领导给我们这次难得的锻炼机会,让我们能更好的理解和实践C++面向对象编程,让我们对面向对象编程有了更深刻的认知,对已学知识有了更进一步的巩固。
也谢谢我的搭档任小雨同学,给予我许多帮助。
能够见证互相的成长,共同完成了这个课程设计。
总之,通过这次课程设计,我获益良多。