C语言课程设计工资管理系统Word格式.docx
《C语言课程设计工资管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计工资管理系统Word格式.docx(55页珍藏版)》请在冰豆网上搜索。
9)开发程序所用的结构化、模块化设计等知识点。
2.需求分析
2.1课题调研
随着企业的快速进展,企业规模越来越大,职员的数量也越来越多,企业工资治理更加的复杂。
工资治理是一项琐碎、复杂而又十分细致的工作,工资运算、发放、核算的工作量专门大,一样不承诺出错,假如实行手工操作,每月发放工资须手工填制大量的表格,这就会耗费工作人员大量的时刻和精力。
通过运算机进行工资发放工作,不仅能够保证工资核算准确无误、快速输出,而且还能够利用运算机对有关工资的各种信息进行统计,服务于财务部门其他方面的核算和财务处理。
同时运算机具有着手工治理所无法比拟的优点。
例如:
检索迅速、查找方便、可靠性高、储备量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高人事工资治理的效率,也是企业科学化、正规化治理,与世界接轨的重要条件。
这就对企业工资治理提出了新的要求,用运算机治理系统来治理工资差不多成为目前的趋势,使用运算机能够高速,快捷地完成以上工作。
工资治理系统便是以运算机为工具,通过对工资治理所需的信息治理,不仅把治理人员从繁琐的数据运算处理中解脱出来,而且优化了治理体系,使其高效化,简易化,智能化,也提高了透亮度和互动性。
专门的治理人员能够轻松地通过工资治理系统对职员的工资进行录入,查看与修改;
而且公司高层也能够通过治理员身份了解公司的薪资情形,从而作出一些列财务方面的重要决策;
一般职员也能够通过自己的用户名和密码登陆工资治理系统,对自己每个月的工资情形进行查询,一目了然,方便快捷。
因此,工资治理系统是各个企业部门必不可少的工具,具有专门好市场前景与用户需求。
2.2用户需求分析
1)功能需求:
登陆功能,显示主菜单功能,职工信息输入、输出、修改、删除功能,职工工资查询、排序、统计功能,系统备份、还原功能,数据初始化功能,关心,退出等。
2)性能需求:
此工资治理系统对工资数据精度的录入、运算、统计和储存能精确到小数点后一位小数。
当用户向服务器发出命令要求〔对数据更新处理、工资数据的查询检索〕时,要求系统响应时刻可不能超过1秒。
3)安全需求:
为保证系统数据的安全性,系统采纳用户密码登陆机制,未授权者不能进入系统。
而且登录人员分为治理员和职员,安全性能通过安全口令得以保证。
由于软件运行数据放在数据库中,因此参数不容易被错改、破坏,万一参数受到破坏也可不能阻碍源程序。
4)其他需求:
系统提供了完善的数据备份与复原功能,可不能显现系统崩溃,因此具有较强健壮性。
该系统是在Windows
7操作系统下运行,运行可行性是专门高的。
5)约束条件:
硬件环境:
处理器〔CPU〕PentiumⅢ以上;
内存容量〔RAM〕256M或更高。
软件环境:
Windows7/8/XP/Vista/2000/98操作系统。
3.方案设计
3.1总体功能设计
该职工工资治理系统总共分为四大功能和辅助功。
→四大功能:
1.工资查询功能:
工资排序、查找、统计
2数据处理功能:
工资添加、修改、删除、输出到文本文件
3.系统爱护功能:
数据备份、复原、清空,修改参数,修改口令
4.职员编号登记功能.
→辅助功能:
1.关心2.重选年月3.切换用户4.安全退出
职工工资治理系统
双入口登陆功能
年月选择功能
职工工资信息输入
职工工资信息输出
职工工资信息添加
运算
职工工资信息修改
职工工资信息删除
生成职工工资文本
工资信息排序
工资信息查询
工资运算
工资信息统计
数据复原
数据备份
修改参数
数据清空
修改口令
关心
重选年月
退出
3.2数据结构设计
分别定义了两个结构体,一个对职职员资信息进行储存,另外一个对职员编号进行登记〔只有通过治理员登记过的职员才能登陆该系统〕。
并使用动态链表的方式对数据进行储存和查找,职员的各类信息会被以二进制的形式写入文件内进行储存,系统从文件中以二进制形式读入数据。
结构体如下:
structperson
{
charnum[20];
//编号
charname[20];
//姓名
charsex[10];
//性别
intage;
//年龄
floatpostsalary;
//岗位工资
floatbasepay;
//差不多工资
floatmeritpay;
//绩效工资
floatsubsidy;
//住房补贴
floatbonus;
//奖金
floatgotpaid;
//应发工资
floatinsurance;
//社会保险公积金
floattax;
//税金
floatrealpaid;
//实发工资
structperson*next;
};
structstaff
charnum[20];
//职员登记编号
structstaff*latter;
3.3函数原型设计
A
A.1链表的建立,数据输入、输出、显示、添加、修改、删除函数
1)structperson*Creat(intn)
建立职职员资信息的链表,先通过传递的形式参数n来判定需要建立多少组数据,再通过键盘输入生成相应数量的动态链表数据
2)structstaff*Creat_num(intn)
建立职员登记编号的链表
3)intCreat_number(void)
向*Creat函数传递数值的函数,即需要录入几组数据
4)structperson*Input(void)
读取职职员资信息的函数,从文件中读取信息并以动态链表方式储存到结构体中
5)structstaff*Input_num(void)
读取职员登记编号的函数
6)voidOutput(structperson*head)
输出职职员资数据到文件
7)voidOutput_num(structstaff*head)
输出职员编号到文件
8)voidOutput_txt()
生成职员信息的文本文件
9)voidPrint(void)
将链表中职员的工资信息输出到屏幕上
10)voidPrint_num(void)
将链表中职员的登记编号输出到屏幕上
11)intInsert(structperson*head)
职员数据添加函数,使用方式:
Insert(Creat(Creat_number())),先确定添加数据的组数,然后通过动态链表添加数据到结构体,最后通过该函数将数据加到文件尾部,实现数据添加。
12)intInsert_num(structstaff*head)
职员编号添加函数,使用方式同上,用于治理员向系统中登记职员编号,只有登记过的职员才能够登陆该系统
13)intModify()
修改职员信息函数
14)intDelete()
删除职职员资信息的函数
15)intDelete_num()
删除职员登记编号的函数
A.2数据备份、清空、复原
1)structperson*Empty(void)
清空该年月份所有职职员资信息数据的函数
2)voidOutput_b(structperson*head)
职职员资信息备份,输出信息到自定名称的文件
3)structperson*Input_b(void)
系统还原函数,将备份文件中的信息拷贝到以当前年月命名的文件中,从而还原上一次备份的数据
A.3统计函数
1)voidStatistics()
职职员资统计函数,统计数据中所有职职员资的最小值和最大值,并运算平均数,输出到屏幕
A.4辅助函数
1)intmain()
主函数
2)intExit()
退出函数,显示感谢使用该系统,并正确终止运行
3)voidChoose_month()
治理员登陆时用来选择年月份的函数,系统中职员各个年月份的工资分别储存在以该年月命名的不同文件下,以该函数判定系统需要打开哪个文件。
4)voidChoose_month_num()
职员登陆时用来选择年月份的函数,功能同上,是两个不同的登陆口
5)floatpost(inta)
岗位工资猎取函数,岗位级别作为参数传递到该函数,该函数返回对应的岗位工资金额
6)voidReturn()
返回主菜单的函数
A.5各类菜单函数
1)voidDefined()
修改参数菜单
2)voidHelp()
关心菜单,提供关心信息、设计人员信息和版本信息
3)voidMenu()
治理员的主菜单,内含工资查询,数据处理,系统爱护,编号登记,关心,重选年月,切换用户,退出等功能选项
4)voidMenu_num()
职员的主菜单
5)voidMenu2()
工资查询菜单,内含职职员资查找,工资排序,工资统计等功能选项
6)voidMenu3()
职职员资数据处理菜单,内含数据添加,修改,删除,输出等功能选项
7)voidMenu4()
系统爱护菜单,内含数据备份,清空,复原,修改参数、口令等功能选项
8)voidmenu_print_out(void)
输出数据时显示在最上面的表头
9)voidMenu_Register()
修改在册职员编号的分菜单
10)voidInquire()
职职员资查找分菜单
11)voidSort()
排序菜单,内含从小到大、从大到小排序的功能选项
12)intSort_menu_down_up()
排序分菜单——从小到大,内含各类排序种类
13)intSort_menu_up_down()
排序分菜单——从大到小,内含各类排序种类
B
B.1登陆判定函数
1)voidpassword()
用户登录函数,通过输入的用户名检测该用户是治理员或者职员依旧未登记用户,从而进行不同的登录方式
B.2修改参数、密码类函数
1)intChangePassword()
密码修改函数,用于修改治理员密码
2)intChangePassword_num()
密码修改函数,用于修改职员密码
3)floatChangePostsalary()
用于修改初始参数中的岗位工资参数,将1-5个岗位级别分别对应不同的岗位工资
4)floatSubsidy_in()
从文件中读取住房补贴参数
5)floatChangeSubsidy()
用于修改初始参数中的住房补贴参数,得到一个固定的住房补贴金额,数据储存到文件
B.3运算税金的函数
1)floatTax(floata)
运算税金的函数,将工资做参数传递到里面去,返回应缴税金金额
C
C.1查询类函数
1)intInquire_age()
查询职员信息函数,以年龄查询
2)intInquire_basepay()
查询职员信息函数,以差不多工资查询
3)intInquire_bonus()
查询职员信息函数,以奖金查询
4)intInquire_gotpaid()
查询职员信息函数,以应得工资查询
5)intInquire_meritpay()
查询职员信息函数,以绩效工资查询
6)intInquire_name()
查询职员信息函数,以姓名查询
7)intInquire_num()
查询职员信息函数,以编号查询
8)intInquire_postsalary()
查询职员信息函数,以岗位工资查询
9)intInquire_realpaid()
查询职员信息函数,以实发工资查询
10)intInquire_tax()
查询职员信息函数,以税金查询
11)voidInquire_undefined(void)
查询职员信息函数,编号、姓名、性别组合查询
C.2排序类函数
1)intNeaten()
数据整理,将职员信息按编号从小到大排列
2)intNeaten_num()
数据整理,将登记的职员编号从小到大排列
3)intSort_down_up_num()
编号排序,升序
4)intSort_down_up_age()
年龄排序,升序
5)intSort_down_up_basepay()
差不多工资排序,升序
6)intSort_down_up_bonus()
奖金排序,升序
7)intSort_down_up_gotpaid()
应得工资排序,升序
8)intSort_down_up_meritpay()
绩效工资排序,升序
9)intSort_down_up_postsalary()
岗位工资排序,升序
10)intSort_down_up_realpaid()
实发工资排序,升序
11)intSort_down_up_tax()
税金排序,升序
12)intSort_up_down_age()
年龄排序,降序
13)intSort_up_down_basepay()
差不多工资排序,降序
14)intSort_up_down_bonus()
奖金排序,降序
15)intSort_up_down_gotpaid()
应得工资排序,降序
16)intSort_up_down_meritpay()
绩效工资排序,降序
17)intSort_up_down_num()
编号排序,降序
18)intSort_up_down_postsalary()
岗位工资排序,降序
19)intSort_up_down_realpaid()
实发工资排序,降序
20)intSort_up_down_tax()
税金排序,降序
3.4主算法设计
用户登录
1
开始
年月选择
5
4
3
2
修改密码
职员界面
终止
治理员界面
6
7
输出工资信息
工资排序
工资查找
工资统计
8
工资添加
工资整理
工资修改
工资删除
生成文本
编号添加
编号整理
编号删除
3.5用户界面设计
1)两个操作界面。
依照登陆人员不同,分为治理员的操作界面和职员的查询界面,使界面显示项更加专门化和清晰化。
2)采纳选择式的功能菜单。
屏幕上显示功能菜单的功能项,依照菜单上提供的数字按相应的键去执行相应的子程序,执行后返回功能菜单。
3)用户界面采取相同的样式进行设计,主界面上会显示当前操作的是哪个年月的职职员资,菜单的选择功能利用switch函数实现。
4)通过printf函数输出各种装饰符号,Windows自带函数调剂背景色和字体颜色,以达到优化操作界面的目的。
3.6程序特色设计
1)多入口登陆。
分成治理员登陆和职员登陆两个入口:
治理员登陆之后能够查看全体职员的工资信息,并对其进行增加删改、排序、备份清空、输出打印等处理;
职员登陆之后只能看到自己的个人信息和工资情形。
极大地保证了治理层和职员层不同的需求,以及个人信息的安全性。
2)以文件形式输入和输出。
程序中所有的数据在每次变动后都会通过输出函数以二进制形式输出到文件内,而且每次调用数据时差不多上从文件中输入,从而保证了系统数据的可靠性,不易丢失性。
3)自动运算功能。
输入职职员资信息时不用输入全部信息,例如,输入职员的岗位级别,即可获得职员在该岗位应得的工资数,职员的应得工资、实发工资以及应该缴纳的社会保险、公积金和税金差不多上通过函数直截了当运算,无需手动输入。
4)差不多参数的设置。
治理员能够修改岗位级别所对应的岗位工资金额,从而实现了程序的灵活性,满足公司岗位薪资调整的需求。
5)职员注册功能。
只有治理员能够对职员进行注册登记,只有通过登记的职员才能够使用自己的职员编号登陆该系统,从而防止了外部人员对公司财务情形的猎取。
各职员的初始登陆密码与编号相同,登陆后能够自行修改密码,从而保证了个人信息的安全性。
6)严密的非法输入检测和纠错功能。
程序中任何一个地点都考虑了非法输入,以保证程序可不能崩溃或跳出。
例如,登陆时假如输入错误用户名会得到不存在用户名的提示,并要求重新输入;
在菜单项选择择时,假如输入的不是数字编号,而是字母或字母与数字的组合,系统仍会提示输入错误,请重新输入,可不能显现崩溃或跳出;
当在屏幕中输出数据时,假如储存数据的文件丢失、不存在,系统会提示错误,文件不存在;
在程序中没有任何数据的情形下选择排序、修改、删除数据的功能,会提示〝没有数据,无法进行操作!
〞,可不能显现程序崩溃。
7)工资按月份存取功能。
考虑到该系统应该能够储存职员每个月的工资信息,因此建立多个以年月份命名的文件,用来储存不同月份的职职员资,用户只需要在登陆后输入相应的年月就能够猎取到该年月下的工资信息。
4.方案实践
4.1开发环境与工具
Windows7
CodeBlocks
VisualC++6.0
4.2程序设计关键技术
1)建立动态链表,通过结构体对职员信息进行治理,包括职员信息的输入、输出、添加、修改、删除和统计等功能
2)以文件形式输入和输出职员信息
3)建立治理员和职员两个登陆通道,实现职职员资查询和治理员对职职员资治理的分级机制
4)将数据储存在不同月份文件下,实现工资按月录入与查询
5)职员差不多信息和工资录入后,能够调用函数自动运算岗位工资,应得工资,应缴纳税金,应交保险和公积金,和实发工资
6)查找和排序算法,用来对数据进行查找和排序
7)税金运算算法,通过工资运算出应缴纳的税金金额
8)统运算法,运算各组数据的最大值、最小值和平均数据
9)登录系统,区别不同账号,同时对用户密码进行验证
4.3个人设计实现
4.3.1刘诚阳设计实现
a)Insert(Creat(Creat_number()))
N
Y
<
i?
运算岗位工资Post〔a〕,税金Tax〔m〕,应发、实发工资
指针指到表头
指向下一个节点
输入添加数据个数i
输入职工信息
调用Print()
显示信息
Output()函数输出
b)Print()
(Pt=Input())==NULL?
提示许多据!
输出信息到屏幕
c)Output()
许多据?
向文件写入数据
提示储备失败!
打开文件读取当前年月,关闭
打开以年月命名的文件,写入
链表不为空?
d)Input()
存在?
打开以年月命名的文件
指针未到末尾?
内容不为空?
读取数据
返回表头指针,关闭文件
e)Delete()
NULL?
Pt2=Pt1->
next
head=pt1
Output(Pt2),i=1
Pt1=Input()
i=1,Print()
Pt2!
=NULL?
输入删除编号
Strcmp(Pt1->
num,strnum)==0?
指针后移
i!
=1?
Strcmp(Pt2->
Pt1->
next=Pt2->
Output(head),i=1
提示查询不到!
f)Modify()
P==NULL?
P=Input(),i=0
Print()
输入修改编号
Strcmp(P->
P!
无相同编号修改数据!
输入职员信息
Output(),i=1
P=P->
g)Statistics()
P==NULL?
i=1
i++,sum=sum+money
P=Input()
i=0,sum=0
P->
next==NULL?
输出max,min,sum/i
money>
money
mone