课程设计C++之职工工资管理系统.docx

上传人:b****8 文档编号:11342759 上传时间:2023-02-28 格式:DOCX 页数:15 大小:109.47KB
下载 相关 举报
课程设计C++之职工工资管理系统.docx_第1页
第1页 / 共15页
课程设计C++之职工工资管理系统.docx_第2页
第2页 / 共15页
课程设计C++之职工工资管理系统.docx_第3页
第3页 / 共15页
课程设计C++之职工工资管理系统.docx_第4页
第4页 / 共15页
课程设计C++之职工工资管理系统.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

课程设计C++之职工工资管理系统.docx

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

课程设计C++之职工工资管理系统.docx

课程设计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++面向对象编程,让我们对面向对象编程有了更深刻的认知,对已学知识有了更进一步的巩固。

也谢谢我的搭档任小雨同学,给予我许多帮助。

能够见证互相的成长,共同完成了这个课程设计。

总之,通过这次课程设计,我获益良多。

 

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

当前位置:首页 > 高等教育 > 哲学

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

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