课程设计C++之职工工资管理系统.docx
- 文档编号:4371974
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:13
- 大小:111.70KB
课程设计C++之职工工资管理系统.docx
《课程设计C++之职工工资管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计C++之职工工资管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
课程设计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< 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< 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< 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++面向对象编程,让我们对面向对象编程有了更深刻的认知,对已学知识有了更进一步的巩固。 也谢谢我的搭档任小雨同学,给予我许多帮助。 能够见证互相的成长,共同完成了这个课程设计。 总之,通过这次课程设计,我获益良多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 C+ 职工工资 管理 系统