1、课程设计C+之职工工资管理系统课程设计C+之职工工资管理系统1 前言某公司内有5种不同类型的职工: 技术人员(technician)、销售人员(salesman)、文秘(secretary)、技术经理(tech-manager)、销售经理(sales-manager)。他们的工资计算方式各不相同:1) 技术人员的工资根据他当月工作的小时数来定,时薪为35元;2) 销售人员的工资则是根据本人当月销售额来确定,工资为销售额的5%;3) 文秘有4000元的基本工资,奖金视当月工作情况而定;4) 技术经理和销售经理都有6000元的固定工资,技术经理的工作业绩可分为3个等级,每级可以获得1000元奖金,
2、5) 销售经理除有6000元的固定工资外,销售经理的奖金由他所管理的销售员的销售业绩而定,为总销售额的0.2%。为此设计一个工资管理系统管理职工的信息。2 需求分析2.1 任务和要求使用C+面向对象程序设计一个简易的工资管理系统。,系统的主要功能是:根据不同的职工,计算职工当月工资。确定程序至少应该具备如下功能:.输入职工, 添加职工,删除职工,结算工资,等基本模块。1) 输入职工: 用class person *creat(void) 函数创建链表。2) 添加职工: 用class person *insert(class person *head,class person *pe) 函数添加
3、。3) 删除职工:用class person *del(class person *head,double num) 函数删除。4) 结算工资:用void selary(class person *head) 函数计算。2.2 运行环境(1)WINDOWS2000/XP系统(2)Visual C+ 6.0编译环境或DEV C+ 5.0编译环境2.3 开发工具C+语言3 分析和设计3.1 系统分析及设计思路首先公司有五类人,各类之间又有相同的部分例如:姓名、职工号等,所以定义一个基类Person,四类人相同部分为基类数据成员。由基类Person再派生出各类:技工类Technician类、售货员类
4、Salesman、文秘类Secretary、技术经理类Tech-manager、销售经理类Sales-manager。(1) Person类:包含: num,wage,year, name10,post10,sex等数据成员等。要完成结算工资操作,需要设计virtual void pay()作为成员函数。(2) Technician类:继承Person类,增加hours数据。(3) Salesman类:继承Person类,增加sales数据。(4) Secretary类:继承Person类,增加bonus数据。(5) Tech-manager类:继承Person类,增加bonus数据(6) S
5、ales-manager类:继承Person类,增加sumsales数据。然后分析系统管理需要有几个功能,分别是输入职工,添加职工,删除职工以及结算工资。我们为这几个功能分别建立对应的函数来实现:class person *creat(void) 、 class person *insert(class person *head,class person *pe) 、class person *del(class person *head,double num) 、void selary(class person *head) 。并且还有输出函数print()以及保存信息函数save()最后主
6、函数的实现。由于是有选择的菜单,首先想到了switch选择语句。当输入不同值时,进入不同的case部分以实现不同的功能。case1的功能是实现数据的输入。用creat()函数创建职工信息,按照提示分别输入职工的信息:编号、姓名、性别、出生年份,并用save()函数保存信息。case2的功能是实现数据的添加。用malloc动态分配内存空间,然后输入要添加的职工信息。用insert()函数添加进去。用print()函数输出并保存。case3的功能是实现数据的删除。根据提示输入你要删除的职工编号。按照你输入的编号,用del()函数输出该职工的所有信息。case4的功能是计算职工的工资。根据不同的职工
7、类别计算工资。3.2 主要类图 图3.1 主要类图3.3 函数流程图(1)主函数流程图3.2 主函数流程图 4 具体代码实现#include#include#include#include#include#define NULL 0#define LEN sizeof(class person)class personpublic: virtual void pay() double num,wage,year;char name10,post10,sex;class person *next; int n;class Technician:public personpublic: void
8、pay()couthours;wage=35*hours;cout工资:wageendl;protected: double hours; ;class Salesman:public personpublic: void pay()coutsales; wage=0.05*sales;cout工资:wageendl; double sales; ;class Secretary:public personpublic: Void pay()coutbonus;wage=4000+bonus;cout工资:wageendl;protected: double bonus; ;class Tec
9、hmanager:public personpublic: void pay()coutbonus;wage=6000+bonus;cout工资:wageendl;protected: double bonus; ;class Salesmanager:public personpublic: void pay()cout总销售额:sumsalesendl;wage=6000+sumsales*0.002; cout工资:wagep1-postp1-nump1-namep1-sexp1-year; head=NULL;while(p1-num!=0)n=n+1;if(n=1)head=p1;e
10、lse p2-next=p1;p2=p1;p1=(class person *)malloc(LEN);cinp1-postp1-nump1-namep1-sexp1-year;p2-next=NULL;return(head);void print(class person *head) / 输出职工class person *p;coutn个职工信息:endl;cout职务 编号 姓名 性别 出生年份 endl;p=head;if(head!=NULL)do coutpost num name sex yearnext;while(p!=NULL);class person *del(cl
11、ass person *head,double num) / 删除职工class person *p1,*p2;if(head=NULL)coutlist null!num&p1-next!=NULL)p2=p1;p1=p1-next;if(num=p1-num)if(p1=head)head=p1-next;else p2-next=p1-next;coutdelete:numendl; n=n-1;else cout num not been found!next=NULL;elsewhile(p0-nump1-num)&(p1-next!=NULL)p2=p1;p1=p1-next;if
12、(p0-numnum)if(head=p1)head=p0;else p2-next=p0; p0-next=p1; elsep1-next=p0; p0-next=NULL; n=n+1;return(head);void save(class person *head) / 保存文件class person *p;ofstream outfile(职工.txt,ios:out);if(!outfile)cerropen error!endl;exit(1);p=head;if(head!=NULL)do outfilepost num name sex yearnext; while(p!
13、=NULL);outfile.close();void selary(class person *head) / 计算工资class person *p;Technician te;Salesman sa;Secretary se; Techmanager tm; Salesmanager sm;sm.sumsales=0;ifstream infile(职工.txt,ios:in);if(!infile)cerropen error!p-postp-nump-namep-sexp-year;coutpost num name sex year numnumnum200)sa.pay();sm
14、.sumsales=sa.sales+sm.sumsales; if(p-numnum300)se.pay(); if(p-numnum400)tm.pay(); if(p-numnum500)sm.pay(); p=p-next;while(p!=NULL);infile.close();int main() class person *head,*pe; double delnum;int menu; while(1) cout*endl; cout*=菜单选顶=*endl; cout*=*endl; cout* 1.输入职工 2.添加职工 3.删除职工 4.结算工资 *endl; cou
15、t*endl; cout编号:技工(101-199) 售货员(201-299) 文秘(301-399) endl 技术经理(401-499)销售经理(501-599)endl; coutendlmenu; switch(menu) case 1: coutendl输入职工:endl; cout职务 编号 姓名 性别 出生年份 endl; head=creat();print(head);save(head); break; case 2: coutendl添加职工:endl; cout职务 编号 姓名 性别 出生年份 pe-postpe-numpe-namepe-sexpe-year; whi
16、le(pe-num!=0) head=insert(head,pe); print(head);save(head); pe=(class person *)malloc(LEN); cinpe-postpe-numpe-namepe-sexpe-year; break;case 3: coutendldelnum; while(delnum!=0) head=del(head,delnum); print(head);save(head); coutendldelnum; break;case 4:selary(head);break; return 0;5 课程设计总结5.1 程序运行结果
17、或预期运行结果 图5.1 实验结果图 图5.2 实验结果图图5.3 实验结果图图5.2 实验结果图5.2 设计结论本次设计我们组的题目是职工工资管理系统,因为事先老师的细心指导,我们才得以的完成这次课程设计。在系统分析和设计的部分仍然花了比较多的时间,特别是源代码的编写和调试,经过反复的改写、调试、再改写、调试,我们最终完成了任务。经过对职工信息管理系统的分析与编写,我们得到了很大的收获。自主学习的必要性更是解决问题的基础,我们二个人一组,在设计的过程中,我们相互讨论,相互学习,发挥出各自的优势,发现自己的不足,取长补短,增强了团队意识。更重要的是这次设计让我们对C面向对象设计编程有了更深刻的
18、认识和更全面的掌握,也提升了我们分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。对面向对象编程有了深刻的理解,对软件工程有了了解。在以后的学习中我们会更加的努力,深刻的钻研,增强团队意识。通过这次课程设计,我们加深了对类与派生的理解。类与派生类之间的关系,通过上机实践得到了进一步的深化。从数据成员的继承到派生类对象对基类成员函数的调用。整个实习过程让我的C+知识得到了应用,体验了程序员编程时的喜怒哀乐,知识、心智,得到全方位提升,收获颇丰。参考文献1 龚晓庆,付丽娜,朱心懿.C+面向对象程序设计.北京:清华大学出版社,2012 揣锦华等编.C+程序设计语言.西安:西安电子科技大学出
19、版社,20033 吕凤翥著.C+语言基础教程.北京:清华大学出版社,20014张国峰编著.C+语言及其程序设计教程.北京:电子工业出版社,1996.6 郑莉,董渊,张瑞丰.C+语言课程设计(第三版).北京:清华大学出版社,20047 钱能.C+程序设计实验指导.北京:清华大学出版社,20058 罗建军等编.C+程序设计教程学习指导.北京致 谢感谢我们的指导老师柳小文老师,谢谢她在我们的课程设计过程中提出了指导性的方案和架构,并指引我们阅读相关的资料和书籍,使我们在不熟悉的领域中仍能迅速掌握新的方法和技术。感谢校领导给我们这次难得的锻炼机会,让我们能更好的理解和实践C+面向对象编程,让我们对面向对象编程有了更深刻的认知,对已学知识有了更进一步的巩固。也谢谢我的搭档任小雨同学,给予我许多帮助。能够见证互相的成长,共同完成了这个课程设计。总之,通过这次课程设计,我获益良多。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1