1、 新疆大学软件学院面向对象程序设计课程设计报告课程设计 设计题目:工资管理系统 _班 级:软件12- 7 设计地点(单位)_ 软件学院 指导教师评语: 该生能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;能够用C+语言进行小型模拟管理系统的设计和实现,和小组成员协作共同完成任务。其中独立设计实现了文件输入输出、程序的调试修改等模块,达到了课程设计的要求。 课程设计任务书设计题目:工资管理系统 学生姓名迪力哈尔课程名称面向对象程序设计(c+)课程设计专业班级软件工程12-7地 点创新实验室起止时间2013.7.2-2013.7.12设计内容及要求主要利用c+语言的文件操作能力设计开
2、发一个小型的管理信息系统,至少具有如下功能:工资录入,按人名、基本工资、实发工资、个人所得税进行查询和按部门进行分类统计。操作界面要符合用户的一般习惯,图形或文本界面都可以。要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识; 提高学生用高级语言进行程序设计的能力,重点提高用C+语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤; 提高撰写技术文档的能力。设计参数文件记录的字段数量不少于6个,分类统计中统计的项不少于2个。进度要求1.布置设计题目,讲解要求和说明 2013.7.22.确定设计任务,确定具体的功能,熟悉相关知识 2013
3、.7.33.按功能需求确定程序的主要模块 2013.7.7-7.74.编程实现程序的功能 2013.7.8-7.95.调试并完善程序 2013.7.106.撰写课程设计报告 2013.7.117. 提交课程设计报告并答辩 2013.7.12参考资料面向对象程序设计 清华大学出版社 2012年3月出版 2012年10月第七次印刷其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任:孙华 指导教师:田生伟 2013年7 月 12 日1 设计内容、任务及具
4、体要求1.1设计内容工资管理查询系统主要根据课程设计要求进行设计,并了解了公司的职工的工资工作流程,该系统功能主要包括六大模块:1)职工个人说得税的计算模块,根据工资多余5000,税率5%,在10005000之间,税率3%,少余1000不交税三种情况进行计算。2)添加职工的工资信息模块,用户根据输入职工编号后,对工资信息进行录入。 3)职工工资查询模块,根据用户输入职工编号后,方可进行查询。4)职工工资修改模块,用户输入职工编号后,对以前的信息进行修改。5)数据输出模块,输出其相应的模块功能。6)职工工资统计模块,根据输入的职工信息进行统计。 1.2设计任务及具体要求主要利用c+的文件操作能力
5、设计开发一个小型的管理信息系统,至少具有如下功能:工资录入,按人名、基本工资、实发工资、个人所得税进行查询和按部门进行分类统计。操作界面要符合用户的一般习惯,图形或文本界面都可以。要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识; 提高学生用高级语言进行程序设计的能力,重点提高用C+语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤; 提高撰写技术文档的能力。目录摘 要.51设计内容、任务及具体要求.61.1设计内容.61.2设计任务及具体要求.72概要设计.82.1该系统的功能简介.82.2 总体程序框图.82.3各个模块之间的主
6、要关系.93系统功能模块的具体设计.103.1各个模块的程序流程图及运行界面.103.2对关键代码加以分析说明.154程序调试分析.455程序使用说明.456总结.46致谢.47参考文献.47附:源程序.15-44摘要工资管理系统是针对企业的工资管理业务进行计算机处理而开发的应用软件。该系统由系统维护、输入、查询、修改、输出、统计等子模块组成,功能基本涵盖普通企业的工资管理业务范围。企业应用本系统后,可以有效的提高工资管理水平。本文从需求分析、开发平台选择、系统模块建立、数据库设计、功能模块编程实现及软件测试等方面阐述了本应用系统的设计过程。为便于说明,文中绘制了程序结构框图、数据流程图和部分
7、界面图。最后附有主要的源程序代码清单。 关键词:工资管理 系统维护 数据汇总 管理系统 软件开发 链表1、1设计内容工资管理查询系统主要根据课程设计要求进行设计,并了解了公司的职工的工资工作流程,该系统功能主要包括六大模块:(1)职工个人说得税的计算模块,根据工资多余5000,税率5%,在10005000之间,税率3%,少余1000不交税三种情况进行计算。(2)添加职工的工资信息模块,用户根据输入职工编号后,对工资信息进行录入。 (3)职工工资查询模块,根据用户输入职工编号后,方可进行查询。(4)职工工资修改模块,用户输入职工编号后,对以前的信息进行修改。(5)数据输出模块,输出其相应的模块功
8、能。(6)职工工资统计模块,根据输入的职工信息进行统计。 1.2设计任务及具体要求主要利用c+的文件操作能力设计开发一个小型的管理信息系统,至少具有如下功能:工资录入,按人名、基本工资、实发工资、个人所得税进行查询和按部门进行分类统计。操作界面要符合用户的一般习惯,图形或文本界面都可以。要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识; 提高学生用高级语言进行程序设计的能力,重点提高用C+语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤; 提高撰写技术文档的能力。2、概要设计2、1该系统的功能简介该系统的主要功能是实现职工的工资信
9、息(职工基本工资、实发工资、津贴、岗贴、补贴、房帖、交通补贴、储蓄、汇费、水电费、税额等等)的录入、查询、修改、统计工资信息、删除个人信息、计算工人的个人所得税、并统计工人所有信息。2.2 总体程序框图 Main(职工工资管理系统)添加职工的工资信息计算个人所得税修改工人工资记录查询员工的工资信息统计员工的工资信息删除员工及其工资信息Main(职工 图2(2):主题函数Main() 函数很简单,但其实现依据于其上方类中的众多函数。2.3各个模块之间的主要关系该程序的功能主要是实现职工工资的录入,并对工资的相应信息进行个人所得税的计算。各个模块之间的关系是相互联系的。首先,主函数结构简单,但之前
10、的类中包含了所有的子函数。工人结构体与信息类以及主函数是整个程序的核心。子函数之间也是有联系的,对个人所得税的计算、职工工资信息的修改、删除、查询、统计,必须是在职工工资录入的情况下进行的。因此对职工工资信息的录入是非常重要的。在职工工资的修改、删除、查询、统计与个人所得税所有的子函数之间是没有多大联系的。3系统功能模块的具体设计.3.1各个模块的程序流程图及运行界面定义变量char ch;n=0; while(TRUE)ch=getchar(); switch(ch)case 0: Read The File Information.;break; 读取文件信息case 1: Employe
11、e Data Input.;break; 输入职工工资信息case2:DisplayTheWagesofWorkers;break显示职工工资信息case 3:OrderStatisticsofWages;break; 职工工资排序case 4: FindWorkers Wages.;break; 查找职工工资记录case 5: IncreaseinWages;break;加入职工工资记录case6:DeleteTheWagesofStaffAndWorkers;删除职工工资记录case 9: Safety exit system. ;退出系统default:cout(对不起,请重新选择!n)
12、;简单说明:该功能主要显示的是给用户一个进入界面,它主要的是显示该程序主要能够执行的有哪些功能。下面是显示给用户的界面。 (1)初始屏幕(图二)如下(系统正常运行的基础,源程序得以运行出现用户开始界面):(图(2)程序界面下方显示输入管理员名称,我们在此只需输入高应允即可进入密码输入阶段,而输入密码为20122501247.以后才会显示图(1)信息(图(1) (2)职工工资的输入与储存(实现第一个与第八个功能,以显示程序的正常运行情况):计算个人所得税float tgrsds(float m)定义变量:float sui1,sui2,sui3;float tmp;m=5000假 真 计算工资大
13、于等于5000时的个人所得税 1000=m5000?假 真计算工资在1000-5000之间个人所得税 MThe Structure Definition An Employee Information.struct worker char nameN; /Used to Store The Name.char sexN; /Used to Store The Staff Position.long id; /Used to Store The Gender.float paid3; /Used to Store The Wage.int total; /Used to Store The To
14、tal Wagesstruct worker *next;结构体建立,职工结构体内含职工名字(字符型)、职工性别(字符型)、职工代码(长整形)、储存职工工资的数组(浮点型)、职工总工资(整形)、职工结构体链表指针。/*/-Wage Management System/The List of Program:#include #include #include #include #include #include #include#include#include#define NULL 0int const N=20;#define LEN sizeof(struct worker)using
15、namespace std; void Menu(); void Pass();int n=0; /Define A Global Variable Statistical Number of Employees./*/-Wage Management System/The List of Program:#include #include #include #include #include #include #include#include#include#define NULL 0int const N=20;#define LEN sizeof(struct worker)using
16、namespace std; void Menu(); void Pass();int n=0; /Define A Global Variable Statistical Number of Employees.程序的头文件信息/-The Worker Class.class Information public:Information() ; /Constructed Function. Information() ; /The Destructor. worker *creat(); /The Establishment of The List.void output(worker *h
17、ead); /Display Information Workers.int count(worker *head); worker *insert(worker *head); worker *cancel(worker *head,long id); worker *find(worker *head,long id); worker *modify(worker *head,long id); void paixu(worker *head); void average(worker *head); void save(worker *head); /Save The File Info
18、rmation.worker *Read(); /Read The File Information.private:worker *p1,*p2,*p3,*head,st;信息类,这里有职工的内嵌信息由职工指针以及各种职工工资计算与职工的信息添加与显示函数,有职工工资储存函数、职工人数统计函数、职工及其工资信息构造函数、职工及其工资信息析构函数、删除职工工资与添加职工工资信息函数、修改职工工资与职工工资排序函数以及职工工资读取函数Information:Information() cout*n;cout-n; cout*n; 信息类中构造函数的实现。Information:Informati
19、on() cout*n;cout n; cout*n; 信息类中析构函数的实现。void zuozhe()coutntttTheauthoroftheprogram:nntttbanynntttTEL:15739576671; coutnntttMade By VC6.0+nnttt July sixth 2013nnttt Press the key to enter the login interface!; coutnntttIf you need to operate on the original information, you select 0 reads the file in
20、formation.nendl;此段为程序的作者信息显示,在此无详细说明,也不包含在信息类中。worker *Information:creat(void) char chN;n=0; /Used to store the names of staff p1=p2=(worker *)malloc(LEN);cout -endl;coutch;head=NULL; /The initial pointer to head Fuwhile (strcmp(ch,#)!=0) p1=(worker *)malloc(LEN); strcpy(p1-name,ch); coutp1-sex; cou
21、tp1-id;while(p1-id)id)100000) cin.clear() ;cin.ignore (1024,n);coutp1-id; coutp1-paid0;while(p1-paid0)paid0)100000) cin.clear() ;cin.ignore (1024,n);coutp1-paid0; coutp1-paid1;while(p1-paid1)paid1)100000) cin.clear() ;cin.ignore (1024,n);coutp1-paid1; coutp1-paid2;while(p1-paid2)paid2)100000) cin.cl
22、ear() ;cin.ignore (1024,n);coutp1-paid2; p1-total=p1-paid0+p1-paid1+p1-paid2; /Calculate the total amountif(n=0)head=p1; else p2-next=p1; p2=p1; n+; /The number of employees n value plus 1.coutch; /The stored input name into a character array Ch.p2-next=NULL;return (head); /-The Establishment of The
23、 List Information信息类中链表的总体信息函数,其内容详细具体而丰富。这也是程序完成的一个关键环节。void Information:output(worker *head) system(cls);if(head=NULL)cout This Is An Empty Table, Please Enter The Information Workers!n;elsecout-n; cout *Salary Information Table*n; cout-n; cout|Id |Name| |Sex| |Basic wage| |Overtime wage| |other b
24、onuses| |Total|n; cout-n; p1=head; /The head pointer is assigned to p.docoutidsetw(8)namesetw(12)sex setw(12)paid0 setw(12)paid1 setw(12)paid2 setw(12)totalendl;coutnext; while(p1!=NULL); 信息类中输出类的实现,通过指针链表将信息按一定规范性打印出来,此函数的实现使程序功能进一步完善。int Information:count(struct worker *head) if(head=NULL)return(0
25、);else return(1+count(head-next); /-Number of staff and workers in the statistical function. 职工人员的记录,用于记录公司内员工人数,以便于给工人分发工资。worker *Information:insert( worker *head) system(cls);coutt-nendl;p1=(worker *)malloc(LEN); /使p1指向插入的新结点coutp1-id;while(p1-id)id)100000)cin.clear() ;cin.ignore (1024,n);coutp1-
26、id; /将输入的编号存放到p1所指结构体的数组id中 coutp1-name; /将输入的姓名存放到结构体名为p1的数组name中coutp1-sex; coutp1-paid0;while(p1-paid0)paid0)100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid0; /将输入的基本工资存放到p1所指结构体的数组paid中coutp1-paid1;while(p1-paid1)paid1)100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid1; /将输入的加班工资存放到p1所指结构体
27、的数组paid中coutp1-paid2;while(p1-paid2)paid2)100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid2; /将输入的其他奖金存放到p1所指结构体的数组paid中 p1-total=p1-paid0+p1-paid1+p1-paid2;/计算总工资 p2=head; /将头指针赋给p2if(head=NULL) /若没调用次函数以前的头指针head为空head=p1;p1-next=NULL; /则将p1赋给头指针head并将p1所指结构体成员指针next赋空值else while( p1-id p2-id )
28、 & (p2-next !=NULL )p3=p2; /p3指向原p2指向的结点p2=p2-next; /p2后移一个结点if(p1-idid)if(head=p2)p1-next=head;head=p1; /插入到第一个结点之前else p3-next=p1;p1-next=p2; /插入到p3所指结点之后elsep2-next=p1;p1-next=NULL; /插入到尾结点之后n+; /将职工人数加1coutt-Add the wage of staff function 信息类中添加工人工资的函数的实现,此函数的实现给工厂员工的流动提供了记录依据,员工流动给公司分发工资提供保障!worker *Information:cancel(worker *head,long id) system(cls);if(head=NULL) /若调用次函数以前的头指针head为空 return(head);elsep1=head; /否则将头指针赋给p1while(id!=p1-id&p1-next!=NULL) p2=p1;p1=p1-next; /p2指向原p1指向的结点p1后移一个结点if(id=p1-id) /如果输入的职工编号是p1所指的职工编号/结点找到后删除