09黄石理工C++课程设计职工工资管理系统.docx

上传人:b****2 文档编号:1846001 上传时间:2023-05-01 格式:DOCX 页数:39 大小:251.65KB
下载 相关 举报
09黄石理工C++课程设计职工工资管理系统.docx_第1页
第1页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第2页
第2页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第3页
第3页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第4页
第4页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第5页
第5页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第6页
第6页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第7页
第7页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第8页
第8页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第9页
第9页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第10页
第10页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第11页
第11页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第12页
第12页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第13页
第13页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第14页
第14页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第15页
第15页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第16页
第16页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第17页
第17页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第18页
第18页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第19页
第19页 / 共39页
09黄石理工C++课程设计职工工资管理系统.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

09黄石理工C++课程设计职工工资管理系统.docx

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

09黄石理工C++课程设计职工工资管理系统.docx

09黄石理工C++课程设计职工工资管理系统

课程设计

 

设计题目:

职工工资管理系统

学生姓名:

刘汉

学生学号:

200940410106

专业班级:

09计科

(1)

指导教师:

祁文青

2011-12-20

一、前言

C++语言是具有面向对象特性的C语言的继承者,即是由C语言演变而来,全面兼容C语言。

C语言的优点,如语言简洁灵活,运算符和数据结构丰富,具有结构化控制语句,程序执行效率高,同时具有高级语言与汇编语言的优点,这些在C++语言中同样能够体现出来。

但是C++语言最有意义的方面是支持面向对象的程序设计,在数据类型、算法的控制结构、函数等方面都有很好的体现。

面向对象编程中,对象是程序设计的基本单位,但对象的静态属性往往需要用某种类型的数据来表示,对象的动态属性要由成员函数来实现,面向函数的实现归根到底还是算法的设计。

 

二、课题要求、课题分析

(一)课题要求

《C++课程设计》通过综合运用在《C++程序设计》和《数据结构》中所学的程序结构、流程控制语句、数组、函数、指针、结构体、数据结构等知识,以简易“管理信息系统”程序设计为载体,以C++语言为工具,使我们更深地涉足计算机专业设计领域,并使所学知识和技能得到进一步巩固、深化和扩展,以达到能用C++编写初等程度软件的目的,为继续学习后续课程及今后走上相关工作岗位打下良好的基础。

经过调查分析,决定设计职工工资管理系统。

创建存储职工工资信息的存储文件。

添加某职工的工资信息。

删除某职工的工资信息。

修改某职工的部分工资信息(当月开始增加或减少某些项工资或扣款数变化)。

输出指定编号职工的工资信息(查询用)。

输出全体职工的工资信息(发工资用)。

(二)课题分析

职工工资管理系统可定位于企业会计系统的一个子系统,该系统主要完成的工作为:

录入各职工自身及工资情况、对已经存在的数据的修改、删除、可查询、统计系统中的数据等。

为此因此职工工资管理系统的功能:

读取文件信息、数据输入、显示、排序、查找、增加、删除、修改、保存等。

 

三、课程设计内容及进度安排

(一)课题内容:

该系统在磁盘上存储了某单位全体职工的工资信息。

对于每位职工存储以下信息:

职工编号、基本工资、津贴、岗贴、补贴、应发数、个人所得税、应扣数、实发数。

个人所得税计算方法设为:

工资少于1100元的部分为0,1100—1600元部分为5%,1600—2600部分为10%,2600—3600部分为15%,5600元以上部分为20%。

(二)课题要求:

1.分析问题,给出数学模型,选择数据结构.

2.设计算法,给出算法描述

3.给出源程序清单

4.编辑、编译、调试源程序

5.撰写课程设计报告

 

四、程序功能描述与模块结构

(一)程序功能描述

通过主菜单display()函数将读取文件信息、输入、显示、统计、增加、删除、修改、查找、排序等函数结合一起,在用户通过相关操作选择其中一个功能时,调用该功能函数,完成数据处理。

在主函数中调用主菜单diplay()函数,完成操作。

用一个中间函数将主函数与各功能函数连接在一起,不仅使程序语言简洁、明了、易懂,而且在功能实现上也更加晚上。

(二)功能模块

1.主函数intmain():

设置背景颜色和字体颜色、调用设计者的相关信息函数、调用display函数,实现系统的主要功能处理;

2.主菜单dispiay()函数:

确定如何选择所需功能,调用读取文件信息、数据输入、显示、排序、查找、增加、删除、修改、保存等函数,完成职工工资管理系统的数据处理;

3.读取文件的信息read()函数:

从文件中读取职工工资的信息表并显示出来;

4.数据输入函数shuru():

建立链表,完成职工信息录入;

5.数据显示函数diaplay():

将职工信息数据显示出来;

6.数据统计函数tongji():

统计职工人数;

7.数据增加函数tianjia():

添加职工信息;

8.数据删除函数shanchu():

删除职工信息数据;

9.数据修改函数xiugai():

修改职工工资等信息数据;

10.数据查找函数chazhao():

查找某一职工工资等信息情况;

11.数据保存函数save():

对系统中的数据进行相关的操作后将其保存起来;

12.作者信息函数editor():

显示设计者的相关信息;

13.登陆函数Pass():

设定使用权限。

 

(三)程序流程图

程序流程图主是对各功能模块的具体描述,以一种图表的方式简洁明了的将各模块的呈现出来,通过这些流程图可清楚的看出整个程序的运行过程,体会程序的流畅性。

1.

主函数流程图

 

开始

system(“colord”)

调用系统函数

editor()

pass()

Main()

调用作息信息函数

调用主菜单函数

调用登陆函数

结束

 

图1-1主函数的流程图

2.各子功能函数流程图

开始

定义变量

输出系统相关信息

输入sum

sum<0||sum>9

while(sum)

调用统计函数

调用显示函数

调用输入函数

调用查找函数

调用增加函数

调用删除函数

调用修改函数

调用保存函数

输出函数

结束

N

Y

图1-2Menu函数流程图

五、用户使用说明

这是一个关于职工工资管理系统,具有输入、输出、统计、删除、查询、修改数据等功能,建立了一个含有姓名、性别、编号、工资、总工资等成员的结构体数据类型的变量structxinxi。

1.用户使用时,根据提示操作,进入登陆页面。

输入登陆名ltf,登陆密码ltf,进入操作系统。

如果登陆信息输错三次,自动退出系统。

2.按显示的数字选择操作,先输入职工数据,然后进行其他操作。

所以输入“1”,开始录入相关数据。

用户录入完数据后,在姓名处键以“0”,结束操作。

3.提取文件信息,输入数字“9”,回车确定操作,将系统以前操作过的保存的文件提取出来,并显示。

4.显示职工信息,输入数字“3”,将需显示的职工信息的编号输入,回车确定操作,系统提取相关数据并显示。

5.将输入的数据进行统计排序,输入数字“7”,回车确定操作,系统显示工资统计表、及各项工资的平均值。

6.查找职工工资,输入“4”,回车确定操作,系统显示“请输入要查找的编号”,输入想要查找的职工的编号,系统提取保存的数据,并显示出来。

7.增加职工工资,输入“6”回车确定操作,系统显示输入的页面,将需增加的职工信息输入,输入完后回车确定,系统显示成功插入,并显示职工工资信息表。

8.删除职工工资,输入“5”,回车确定操作,系统显示“请输入要删除的编号”,输入要删除的职工编号,系统将保存的数据删除,并显示剩余的职工工资信息表。

9.修改职工信息,输入“2”,回车确定操作,输入要修改的编号,系统显示该职工的信息,将改后的信息输入系统。

10.将所有操作过的信息保存,输入“8”,回车确定操作,系统显示成功保存信息。

11.退出系统,输入“0”,回车确定操作,系统显示退出的页面,输入任意一个键,退出系统。

(温馨提示:

因时间的限制等原因,本程序内存设置还不够很完善,所以对于整个系统的使用应按照系统设置的顺序,一项项完成下来,方可不出现漏洞。

如果没按照顺序操作,可能会在使用的过程出现一些小差错。

六、测试结果

1.开始运行程序,进入系统页面,显示制作者的信息。

图2-1显示制作者信息的页面

2.任意键继续操作,进入登陆页面。

图2-2登陆系统的页面

输错管理员名字或者密码进入到的页面如下

图2-3登陆系统出错的页面

3.成功进入操作系统,按照使用说明进行操作,进入的是总系统的提示页面。

图2-4系统操作的页面

图2-5输入数据的页面

图2-6显示数据的页面

图2-7文件提取信息的页面

图2-8排序统计的页面

图2-9查找职工信息的页面

图2-10查找不到职工信息的页面

图2-11增加职工信息的页面

图2-12增加职工信息后并显示职工工资信息表的页面

图2-13删除职工信息并显示剩余职工信息的页面

图2-14修改职工信息的页面

图2-15成功修改职工信息的页面

图2-16修改没有编号职工信息的页面

图2-17保存所有数据的页面

图2-18退出系统的页面

 

七﹑程序经验教训总结

通过这个程序设计,我不仅提高了动手操作能力,对C++语言有了更深的认识,能够更好地运用C++语言进行编程设计,同时在思维、看待问题的全面性等方面也有了很大的提高。

不过由于时间、经验不够、对语言的掌握程度不深等问题,在这个系统设计还存在一些问题,比如内存设计还不够完善,整个系统的流畅性等,希望可以在今后的设计上能够解决这些问题,做的更好。

 

九﹑附录

//职工成绩管理系统

#include

#include

#include

#include

#include

#include

#defineNULL0

intconstN=20;

#defineLENsizeof(structepployee)

usingnamespacestd;

intn=0;//定义一个全局变量统计职工人数

 

//定义一个职工信息的结构体

structepployee

{

charname[N];//用来存放姓名

charsex[N];//用来存放性别

longid;//用来存放编号

floatpaid[3];//用来存放工资

inttotal;//用来存放总工资

structepployee*next;

};

//职工类

classInformation

{

public:

Information();//构造函数.

~Information();//析构函数.

epployee*creat();//建立链表

voidoutput(epployee*head);//显示职工信息

intcount(epployee*head);//定义函数count()统计职工总数

epployee*insert(epployee*head);//指针函数*insert()用来添加职工信息.

epployee*cancel(epployee*head,longid);//指针函数*cancel()用来删除职工信息.

epployee*find(epployee*head,longid);//指针函数*find()用来查找职工信息.

epployee*modify(epployee*head,longid);//指针函数*modife()用来修改职工的信息.

voidsort(epployee*head);//定义paixu()函数将职工的总额从大到小排列并输出

voidaverage(epployee*head);//定义职工工资平均值的函数

voidsave(epployee*head);//保存文件信息

epployee*Read();//读取文件信息

private:

epployee*p1,*p2,*p3,*head,st;

};

Information:

:

Information()

{cout<<"******************************************************************************\n";

cout<<"------------------------<<欢迎您使用职工工资管理系统>>------------------------\n";

cout<<"******************************************************************************\n\n";

}

//作者的信息和提示

voideditor()

{

cout<<"\n\t\t\t本程序制作者:

\n\n\t\t\tIdon'tknow\n\n\t\t\tQQ:

895026504";

cout<<"\n\n\t\t\tMadeByVC6.0++\n\n\t\t\t2008年9月30日\n\n\t\t\t按键进入登陆界面!

!

";

cout<<"\n\n\t\t\t如果需要对原来的信息进行操作,则先选择0读取文件信息\n"<

}

Information:

:

~Information()

{cout<<"******************************************************************************\n";

cout<<"------------------------<<谢谢您使用职工工资管理系统>>------------------------\n";

cout<<"******************************************************************************\n";

}

 

//建立链表信息

epployee*Information:

:

creat(void)

{//定义一个指向structepployee的结构体指针函数*creat()用来录入职工信息.

charch[N];n=0;//用来存放职工姓名

p1=p2=(epployee*)malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元

cout<<"-------------<<请建立职工信息表,在姓名处键以#结束输入!

>>--------------"<

cout<<"姓名:

";

cin>>ch;

head=NULL;//给指针head赋初值

while(strcmp(ch,"#")!

=0)//调用字符比较函数strcmp()用来判断是否继续输入

{

p1=(epployee*)malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元

strcpy(p1->name,ch);//将循环结构前面输入的姓名复制到结构体名为p1的数组name中

cout<<"性别:

";

cin>>p1->sex;

cout<<"编号:

";

cin>>p1->id;

while((p1->id)<0||(p1->id)>100000)//判断输入的编号是否有效(100000个)

{

cout<<"对不起,您的输入错误!

请重新输入(>0<1000000):

";

cin>>p1->id;

}

cout<<"基本工资:

";

cin>>p1->paid[0];

while((p1->paid[0])<0||(p1->paid[0])>100000)//判断输入的分数是否有效(>=0<=100000)

{

cout<<"对不起,您的输入错误!

请重新输入(>0<100000):

";

cin>>p1->paid[0];

}

cout<<"加班工资:

";

cin>>p1->paid[1];

while((p1->paid[1])<0||(p1->paid[1])>100000)//判断输入的分数是否有效(>=0<=100000)

{

cout<<"对不起,您的输入错误!

请重新输入(>0<100000):

";

cin>>p1->paid[1];

}

cout<<"其他奖金:

";

cin>>p1->paid[2];

while((p1->paid[2])<0||(p1->paid[2])>100000)//判断输入的分数是否有效(>=0<=100000)

{

cout<<"对不起,您的输入错误!

请重新输入(>0<100000):

";

cin>>p1->paid[2];

}

p1->total=p1->paid[0]+p1->paid[1]+p1->paid[2];//计算总额

if(n==0)head=p1;//如果是输入第一组职工信息就将指针p1赋给指针head

elsep2->next=p1;//否则将p1赋给p2所指结构体的next指针

p2=p1;//将指针p1赋给指针p2

n++;//将职工人数n的值加1

cout<<"\n姓名:

";

cin>>ch;//将输入的姓名存放到字符数组ch中

}

p2->next=NULL;//将p2所指结构体的next指针重新赋空值

return(head);//将输入的第一组职工信息返回

}

//定义output()函数将职工的信息从头指针所指内容开始输出

voidInformation:

:

output(epployee*head)

{

//system("cls");

if(head==NULL)cout<<"这是一个空表,请先输入职工信息!

\n";

else{

cout<<"-------------------------------------------------------------------------------\n";

cout<<"*职工工资信息表*\n";

cout<<"-------------------------------------------------------------------------------\n";

cout<<"|编号||姓名||性别||基本工资||加班工资||其他奖金||总额|\n";

cout<<"-------------------------------------------------------------------------------\n";

p1=head;//将头指针赋给p

do

{

cout<id

<name

<sex

<paid[0]

<paid[1]

<paid[2]

<total<

cout<<"-------------------------------------------------------------------------------\n";

p1=p1->next;//将下一组职工信息的next指针赋给p

}while(p1!

=NULL);//若指针p非空则继续,目的是把所有的职工信息都传给指针p然后输出.

}

}

//统计职工人数的函数

intInformation:

:

count(structepployee*head)//定义函数count()统计职工总数

{

if(head==NULL)return(0);//若指针head为空返回值为0

elsereturn(1+count(head->next));//函数的递归调用

}

//添加职工的成绩的函数

epployee*Information:

:

insert(epployee*head)

//插入新结点定义一个指向structepployee的结构体指针函数*insert()用来添加职工信息.

{

//system("cls");

cout<<"\t----------------<<请输入新增职工成绩信息>>----------------\n"<

p1=(epployee*)malloc(LEN);//使p1指向插入的新结点

cout<<"编号:

";

cin>>p1->id;

while((p1->id)<0||(p1->id)>100000)

{

cout<<"对不起,您的输入错误!

请重新输入(>0<100000):

";

cin>>p1->id;//将输入的编号存放到p1所指结构体的数组id中

}

cout<<"姓名:

";

cin>>p1->name;//将输入的姓名存放到结构体名为p1的数组name中

cout<<"性别:

";

cin>>p1->sex;

cout<<"基本工资:

";

cin>>p1->paid[0];

while((p1->paid[0])<0||(p1->paid[0])>100000)

{

cout<<"对不起,您的输入错误!

请重新输入(>0<100000):

";

cin>>p1->paid[0];//将输入的基本工资存放到p1所指结构体的数组paid中

}

cout<<"加班工资:

";

cin>>p1->paid[1];

while((p1->paid[1])<0||(p1->paid[1])>100000)

{

cout<<"对不起,您的输入错误!

请重新输入(>0<100000):

";

cin>>p1->paid[1];//将输入的加班工资存放到p1所指结构体的数组paid中

}

cout<<"其他奖金:

";

cin>>p1->paid[2];

while((p1->paid[2])<0||(p1->paid[2])>100000)

{

cout<<"对不起,您的输入错误!

请重新输入(>0<100000):

";

cin>>p1->paid[2];//将输入的其他奖金存放到p1所指结构体的数组paid中

}

p1->total=p1->paid[0]+p1->paid[1]+p1->paid[2];//计算总分

p2=head;//将头指针赋给p2

if(head==NULL)//若没调用次函数以前的头指针head为空

{

head=p1;p1->next=NULL;

}//则将p1赋给头指针head并将p1所指结构体成员指针next赋空值

else

{

while((p1->id>p2->id)&&(p2->next!

=NULL))

{

p3=p2;//p3指向原p2指向的结点

p2=p2->next;

}//p2后移一个结点

if(p1->id<=p2->id)

{

if(head==p2)

{

p1->next=head;

head=p1;

}//插入到第一个结点之前

else

{

p3->next=p1;

p1->next=p2;

}//插入到p3所指结点之后

}

else

{

p2->next=p1;

p1->next=NULL;

}//插入到尾结点之后

}

n++;//将职工人数加1

cout<<"\t----------------<<你输入的职工信息已经成功插入>>----------------"<

return(head);

}

//删除职工信息

epployee*Information:

:

cancel(epployee*head,longi

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2