资源描述
东北大学信息科学与工程学院程序实践报告题目 工资管理系统课题组长 刘诚阳课题组成员 张鹏举 于文鑫专业名称 计算机科学与技术班 级 计算机1405指导教师 张晓红2015 年 4月目录1.课题概述- 3 -1.1课题任务:工资管理系统- 3 -1.2课题原理- 3 -1.3 课题实践目的- 3 -1.4 相关知识- 4 -2.需求分析- 4 -2.1课题调研- 4 -2.2用户需求分析- 5 -3.方案设计- 5 -3.1总体功能设计- 5 -3.2数据结构设计- 6 -3.3函数原型设计- 7 -3.4主算法设计- 12 -3.5用户界面设计- 13 -3.6程序特色设计- 13 -4.方案实践- 14 -4.1开发环境与工具- 14 -4.2程序设计关键技术- 14 -4.3个人设计实现- 14 -4.3.1刘诚阳设计实现- 14 -4.3.2张鹏举设计实现- 22 -4.3.3于文鑫设计实现255.测试与调试275.1个人测试275.1.1刘诚阳测试275.1.2张鹏举测试375.1.3于文鑫测试425.2组装与系统测试465.3系统运行496. 课题总结506.1课题评价506.2团队协作506.3个人设计小结516.3.1刘诚阳设计小结516.3.2张鹏举设计小结526.3.3于文鑫设计小结526.4参考资料537.附录A和附录B54附录A 课题任务分工54A-1 课题程序设计分工54A-2 课题报告分工55附录B 课题设计文档561.课题概述1.1课题任务:工资管理系统1) 以结构体/共用体设计数据的结构,采用动态链表、文件存储方式,结构化、模块化程序设计方法,设计一个功能完善的系统 ,要有功能菜单。2) 本系统应具有数据维护(包括数据录入、添加、修改、删除),数据查询(可按 编号、姓名、基本工资、岗位工资、绩效工资 、房改补助、奖励、应发工资、公积金、扣税、实发工资等进行查询,也可进行组合查询),排序,统计,输出,系统维护(包括数据备份、数据恢复、口令维护),帮助,退出等功能。3) 本系统要有通用性、界面美观、操作方便。要考虑系统安全。4) 可增加其他有用的功能。1.2课题原理1) 利用结构体的数据结构,采用动态链表,实现对数据的即时增删。2) 使用文件存储方式,对数据进行有效的存取。3) 采用结构化、模块化的设计方式,每个.C文件仅包含一个或一类函数,实现模块化的设计开发模式。4) 使用C语言的顺序、选择、循环三种基本语句,实现函数所需功能。5) 运用函数定义、声明和调用等基本知识,实现数值、地址的传递,进行数据计算。6) 运用C语言独特的指针功能,对数据地址进行处理,实现相应操作。1.3 课题实践目的1) 通过程序实践,强化计算机应用技能,验证、巩固和充实所学的理论知识,加深对相关内容的理解,拓宽知识面,培养创新精神和实践能力。 2) 进一步掌握C的数据类型、基本结构、结构体、文件、链表、结构化、模块化设计等知识点。3) 进一步熟悉基本流程控制结构实现分支的ifelse语句、switch语句和实现循环的for、while、dowhile语句、break、continue等。4) 掌握C语言程序设计的基本思想,了解简单的系统分析和了解数据库系统的理论。5) 掌握数据库设计的基本方法,熟悉数据库设计的步骤。6) 进一步巩固、加深所学专业课程C语言程序设计的基本理论知识,理论联系实际,进一步培养综合分析问题,解决问题的能力。7) 利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。1.4 相关知识1) C语言的数据类型、基本结构知识。2) 基本流程控制结构实现分支的ifelse语句、switch语句和实现循环的for、while、dowhile语句、break、continue等。3) 数据结构的设计。4) 系统分析和数据库系统的理论及设计知识。5) 结构体的建立和基本操作。6) 动态链表的建立与基本操作。7) 文件操作对数据进行输入和输出8) 多文件的项目管理应用。9) 开发程序所用的结构化、模块化设计等知识点。2.需求分析2.1课题调研随着企业的快速发展,企业规模越来越大,员工的数量也越来越多,企业工资管理更加的复杂。工资管理是一项琐碎、复杂而又十分细致的工作,工资计算、发放、核算的工作量很大,一般不允许出错,如果实行手工操作,每月发放工资须手工填制大量的表格,这就会耗费工作人员大量的时间和精力。通过计算机进行工资发放工作,不仅能够保证工资核算准确无误、快速输出,而且还可以利用计算机对有关工资的各种信息进行统计,服务于财务部门其他方面的核算和财务处理。同时计算机具有着手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人事工资管理的效率,也是企业科学化、正规化管理,与世界接轨的重要条件。这就对企业工资管理提出了新的要求,用计算机管理系统来管理工资已经成为目前的趋势,使用计算机可以高速,快捷地完成以上工作。工资管理系统便是以计算机为工具,通过对工资管理所需的信息管理,不仅把管理人员从繁琐的数据计算处理中解脱出来,而且优化了管理体系,使其高效化,简易化,智能化,也提高了透明度和互动性。专门的管理人员可以轻松地通过工资管理系统对员工的工资进行录入,查看与修改;而且公司高层也可以通过管理员身份了解公司的薪资情况,从而作出一些列财务方面的重要决策;普通员工也可以通过自己的用户名和密码登陆工资管理系统,对自己每个月的工资情况进行查询,一目了然,方便快捷。因此,工资管理系统是各个企业部门必不可少的工具,具有很好市场前景与用户需求。2.2用户需求分析1) 功能需求:登陆功能,显示主菜单功能,职工信息输入、输出、修改、删除功能,职工工资查询、排序、统计功能,系统备份、还原功能,数据初始化功能,帮助,退出等。2) 性能需求:此工资管理系统对工资数据精度的录入、计算、统计和储存能精确到小数点后一位小数。当用户向服务器发出命令请求(对数据更新处理、工资数据的查询检索)时,要求系统响应时间不会超过1秒。3) 安全需求:为保障系统数据的安全性,系统采用用户密码登陆机制,未授权者不能进入系统。而且登录人员分为管理员和员工,安全性能通过安全口令得以保证。由于软件运行数据放在数据库中,所以参数不容易被错改、破坏,万一参数受到破坏也不会影响源程序。4) 其他需求:系统提供了完善的数据备份与恢复功能,不会出现系统崩溃,因此具有较强健壮性。该系统是在Windows7操作系统下运行,运行可行性是很高的。5) 约束条件:硬件环境:处理器(CPU)Pentium 以上;内存容量(RAM)256M或更高。软件环境:Windows7/8/XP/Vista/2000/98操作系统。3.方案设计3.1总体功能设计该职工工资管理系统总共分为四大功能和辅助功。 四大功能:1.工资查询功能:工资排序、查找、统计2数据处理功能:工资添加、修改、删除、输出到文本文件3.系统维护功能:数据备份、恢复、清空,修改参数,修改口令4.员工编号登记功能. 辅助功能:1.帮助 2.重选年月 3.切换用户 4.安全退出职工工资管理系统双入口登陆功能年月选择功能职工工资信息输入职工工资信息输出职工工资信息添加计算职工工资信息修改职工工资信息删除生成职工工资文本工资信息排序工资信息查询工资计算工资信息统计数据恢复数据备份修改参数数据清空修改口令帮助重选年月退出3.2数据结构设计分别定义了两个结构体,一个对员工工资信息进行储存,另外一个对员工编号进行登记(只有经过管理员登记过的员工才能登陆该系统)。并使用动态链表的方式对数据进行储存和查找,员工的各类信息会被以二进制的形式写入文件内进行保存,系统从文件中以二进制形式读入数据。结构体如下:struct personchar num20; /编号char name20; /姓名char sex10;/性别int age;/年龄float postsalary;/岗位工资float basepay; /基本工资float meritpay;/绩效工资float subsidy;/住房补贴float bonus;/奖金float gotpaid;/应发工资float insurance;/社会保险公积金float tax;/税金float realpaid; /实发工资struct person *next;struct staffchar num20;/员工登记编号struct staff *latter;3.3函数原型设计AA.1 链表的建立,数据输入、输出、显示、添加、修改、删除函数1) struct person *Creat(int n)建立员工工资信息的链表,先通过传递的形式参数n来判断需要建立多少组数据,再通过键盘输入生成相应数量的动态链表数据2) struct staff *Creat_num(int n)建立员工登记编号的链表3) int Creat_number(void)向*Creat函数传递数值的函数,即需要录入几组数据4) struct person *Input(void)读取员工工资信息的函数,从文件中读取信息并以动态链表方式保存到结构体中5) struct staff *Input_num(void)读取员工登记编号的函数6) void Output(struct person *head)输出员工工资数据到文件7) void Output_num(struct staff *head)输出员工编号到文件8) void Output_txt()生成员工信息的文本文件9) void Print(void)将链表中员工的工资信息输出到屏幕上10) void Print_num(void)将链表中员工的登记编号输出到屏幕上11) int Insert(struct person *head)员工数据添加函数,使用方式:Insert(Creat(Creat_number(),先确定添加数据的组数,然后通过动态链表添加数据到结构体,最后通过该函数将数据加到文件尾部,实现数据添加。12) int Insert_num(struct staff *head)员工编号添加函数,使用方式同上,用于管理员向系统中登记员工编号,只有登记过的员工才可以登陆该系统13) int Modify()修改员工信息函数14) int Delete()删除员工工资信息的函数15) int Delete_num()删除员工登记编号的函数A.2 数据备份、清空、恢复1) struct person *Empty(void)清空该年月份所有员工工资信息数据的函数2) void Output_b(struct person *head)员工工资信息备份,输出信息到自定名称的文件3) struct person *Input_b(void)系统还原函数,将备份文件中的信息拷贝到以当前年月命名的文件中,从而还原上一次备份的数据A.3 统计函数1) void Statistics()员工工资统计函数,统计数据中所有员工工资的最小值和最大值,并计算平均数,输出到屏幕A.4 辅助函数1) int main()主函数2) int Exit()退出函数,显示感谢使用该系统,并正确结束运行3) void Choose_month()管理员登陆时用来选择年月份的函数,系统中员工各个年月份的工资分别保存在以该年月命名的不同文件下,以该函数判断系统需要打开哪个文件。4) void Choose_month_num()员工登陆时用来选择年月份的函数,功能同上,是两个不同的登陆口5) float post(int a)岗位工资获取函数,岗位级别作为参数传递到该函数,该函数返回对应的岗位工资金额6) void Return()返回主菜单的函数A.5 各类菜单函数1) void Defined()修改参数菜单2) void Help()帮助菜单,提供帮助信息、设计人员信息和版本信息3) void Menu()管理员的主菜单,内含工资查询,数据处理,系统维护,编号登记,帮助,重选年月,切换用户,退出等功能选项4) void Menu_num()员工的主菜单5) void Menu2()工资查询菜单,内含员工工资查找,工资排序,工资统计等功能选项6) void Menu3()员工工资数据处理菜单,内含数据添加,修改,删除,输出等功能选项7) void Menu4()系统维护菜单,内含数据备份,清空,恢复,修改参数、口令等功能选项8) void menu_print_out(void)输出数据时显示在最上面的表头9) void Menu_Register()修改在册员工编号的分菜单10) void Inquire()员工工资查找分菜单11) void Sort()排序菜单,内含从小到大、从大到小排序的功能选项12) int Sort_menu_down_up()排序分菜单从小到大,内含各类排序种类13) int Sort_menu_up_down()排序分菜单从大到小,内含各类排序种类BB.1 登陆判断函数1) void password()用户登录函数,通过输入的用户名检测该用户是管理员或者员工还是未登记用户,从而进行不同的登录方式B.2 修改参数、密码类函数1) int ChangePassword()密码修改函数,用于修改管理员密码2) int ChangePassword_num()密码修改函数,用于修改员工密码3) float ChangePostsalary()用于修改初始参数中的岗位工资参数,将1-5个岗位级别分别对应不同的岗位工资4) float Subsidy_in()从文件中读取住房补贴参数5) float ChangeSubsidy()用于修改初始参数中的住房补贴参数,得到一个固定的住房补贴金额,数据保存到文件B.3 计算税金的函数1) float Tax(float a)计算税金的函数,将工资做参数传递进去,返回应缴税金金额CC.1查询类函数1) int Inquire_age()查询员工信息函数,以年龄查询2) int Inquire_basepay()查询员工信息函数,以基本工资查询3) int Inquire_bonus()查询员工信息函数,以奖金查询4) int Inquire_gotpaid()查询员工信息函数,以应得工资查询5) int Inquire_meritpay()查询员工信息函数,以绩效工资查询6) int Inquire_name()查询员工信息函数,以姓名查询7) int Inquire_num()查询员工信息函数,以编号查询8) int Inquire_postsalary()查询员工信息函数,以岗位工资查询9) int Inquire_realpaid()查询员工信息函数,以实发工资查询10) int Inquire_tax()查询员工信息函数,以税金查询11) void Inquire_undefined(void)查询员工信息函数,编号、姓名、性别组合查询C.2 排序类函数1) int Neaten()数据整理,将员工信息按编号从小到大排列2) int Neaten_num()数据整理,将登记的员工编号从小到大排列3) int Sort_down_up_num()编号排序,升序4) int Sort_down_up_age()年龄排序,升序5) int Sort_down_up_basepay()基本工资排序,升序6) int Sort_down_up_bonus()奖金排序,升序7) int Sort_down_up_gotpaid()应得工资排序,升序8) int Sort_down_up_meritpay()绩效工资排序,升序9) int Sort_down_up_postsalary()岗位工资排序,升序10) int Sort_down_up_realpaid()实发工资排序,升序11) int Sort_down_up_tax()税金排序,升序12) int Sort_up_down_age()年龄排序,降序13) int Sort_up_down_basepay()基本工资排序,降序14) int Sort_up_down_bonus()奖金排序,降序15) int Sort_up_down_gotpaid()应得工资排序,降序16) int Sort_up_down_meritpay()绩效工资排序,降序17) int Sort_up_down_num()编号排序,降序18) int Sort_up_down_postsalary()岗位工资排序,降序19) int Sort_up_down_realpaid()实发工资排序,降序20) int Sort_up_down_tax()税金排序,降序3.4主算法设计用户登录1开始年月选择5432修改密码员工界面结束帮助管理员界面1234567输出工资信息1234工资排序工资查找工资统计12348工资添加工资整理工资修改56工资删除生成文本1234数据备份数据恢复数据清空56修改参数修改口令1234编号添加编号整理编号删除3.5用户界面设计1) 两个操作界面。根据登陆人员不同,分为管理员的操作界面和员工的查询界面,使界面显示项更加专门化和清晰化。2) 采用选择式的功能菜单。屏幕上显示功能菜单的功能项,根据菜单上提供的数字按相应的键去执行相应的子程序,执行后返回功能菜单。3) 用户界面采取相同的样式进行设计,主界面上会显示当前操作的是哪个年月的员工工资,菜单的选择功能利用switch函数实现。4) 通过printf函数输出各种装饰符号,Windows自带函数调节背景色和字体颜色,以达到优化操作界面的目的。3.6程序特色设计1) 多入口登陆。分成管理员登陆和员工登陆两个入口:管理员登陆之后可以查看全体员工的工资信息,并对其进行增添删改、排序、备份清空、输出打印等处理;员工登陆之后只能看到自己的个人信息和工资情况。极大地保证了管理层和员工层不同的需求,以及个人信息的安全性。2) 以文件形式输入和输出。程序中所有的数据在每次变动后都会通过输出函数以二进制形式输出到文件内,而且每次调用数据时都是从文件中输入,从而保证了系统数据的可靠性,不易丢失性。3) 自动计算功能。输入员工工资信息时不用输入全部信息,例如,输入员工的岗位级别,即可获得员工在该岗位应得的工资数,员工的应得工资、实发工资以及应该缴纳的社会保险、公积金和税金都是通过函数直接计算,无需手动输入。4) 基本参数的设置。管理员可以修改岗位级别所对应的岗位工资金额,从而实现了程序的灵活性,满足公司岗位薪资调整的需求。5) 员工注册功能。只有管理员可以对员工进行注册登记,只有经过登记的员工才可以使用自己的员工编号登陆该系统,从而防止了外部人员对公司财务情况的获取。各员工的初始登陆密码与编号相同,登陆后可以自行修改密码,从而保证了个人信息的安全性。6) 严密的非法输入检测和纠错功能。程序中任何一个地方都考虑了非法输入,以保证程序不会崩溃或跳出。例如,登陆时如果输入错误用户名会得到不存在用户名的提示,并要求重新输入;在菜单选择时,如果输入的不是数字编号,而是字母或字母与数字的组合,系统仍会提示输入错误,请重新输入,不会出现崩溃或跳出;当在屏幕中输出数据时,如果保存数据的文件丢失、不存在,系统会提示错误,文件不存在;在程序中没有任何数据的情况下选择排序、修改、删除数据的功能,会提示“没有数据,无法进行操作!”,不会出现程序崩溃。7) 工资按月份存取功能。考虑到该系统应该可以储存员工每个月的工资信息,因此建立多个以年月份命名的文件,用来储存不同月份的员工工资,用户只需要在登陆后输入相应的年月就可以获取到该年月下的工资信息。4.方案实践4.1开发环境与工具Windows 7CodeBlocksVisual C+ 6.04.2程序设计关键技术1) 建立动态链表,通过结构体对员工信息进行管理,包括员工信息的输入、输出、添加、修改、删除和统计等功能2) 以文件形式输入和输出员工信息3) 建立管理员和员工两个登陆通道,实现员工工资查询和管理员对员工工资管理的分级机制4) 将数据储存在不同月份文件下,实现工资按月录入与查询5) 员工基本信息和工资录入后,可以调用函数自动计算岗位工资,应得工资,应缴纳税金,应交保险和公积金,和实发工资6) 查找和排序算法,用来对数据进行查找和排序7) 税金计算算法,通过工资计算出应缴纳的税金金额8) 统计算法,计算各组数据的最大值、最小值和平均数据9) 登录系统,区别不同账号,并且对用户密码进行验证4.3个人设计实现4.3.1刘诚阳设计实现a) Insert(Creat(Creat_number( ) ) )开始NYnexthead=pt1Output(Pt2),i=1提示无数据!Pt1=Input( )结束i=1,Print( )Pt2!=NULL?NY输入删除编号Strcmp(Pt1-num,strnum)=0?Y指针后移i!=1?Strcmp(Pt2-num,strnum)=0?NYPt1-next=Pt2-nextOutput(head),i=1NNY提示查询不到!f) Modify()开始NYP=NULL?计算岗位工资Post(a),税金Tax(m),应发、实发工资提示无数据!P=Input( ),i=0结束Print( )i!=1?NY输入修改编号Strcmp(P-num,strnum)=0?P!=NULL?Y无相同编号修改数据!NY输入员工信息Output( ),i=1NP=P-nextg) Statistics()开始NYP=NULL?i=1i+,sum=sum+money提示无数据!P=Input( )i=0,sum=0结束P-next=NULL?NYP!=NULL?YN输出max,min,sum/iP-moneymoneyP-moneynextNNmax=P-moneymin=P-moneyYYh) Post(int a)开始NYa=1?return(fir)Open,读取数据到数组,Close结束a=2?a=3?a=4?a=5?NNNNYYYYreturn(sec)return(thi)return(fou)return(fif)4.3.2张鹏举设计实现a) Password() 开始输入用户名并判断是否为管理员是进入管理员操作系统否读出文件password并且将它存入数组key中,并关闭文件输入密码并存入数组Password中判断密码是否与数组password中是否一致是否 是进入函数Welcome和Choose_month 进入员工操作系统定义链表指针并指向数组NUM的第一个数据判断数据是否与name数组中数据相等 否 不存在该员工编号 输入密码并与Password是否相等 是是否 对不起密码错误 57b) Changepassword( ) 开始 读取文件password.text 输入原始密码password将文件中的密码读取出来并且存入数组x中 进入while循环调用strcmp函数,并且将数组x与psaaword比较是否相等 是否请重新输入密码password 输入新密码并且存入数组a中再次输入新密码并且存入数组b中 调用strcmp函数比较数组a与b是否相等否是重新读取文件password,并且将数组a中的密码存入password中输出密码修改成功 结束c) Tax( )开始NYSalary=0?Salary=a-3500结束Tax=00Salary1500?1500Salary4500?4500Salary9000?9000Salary35000?35000Salary55000?55000nextp-min-next=min-nexthead=Print()结束For循环,p=head,min=head,指针下指,!=NULL?NYStrcmpnextNfirst!=NULL?head=firstOutput(head)Print( )Ntail-next=mintail=minNYtail-next=NULL5.测试与调试5.1个人测试5.1.1刘诚阳测试1) 主界面管理人员界面:员工界面:2) 非法输入检测3) 显示函数,输出员工工资信息到屏幕4) 员工工资信息统计5) 员工工资信息添加添加前:函数通过岗位级别自动给出相应岗位工资,并计算应发工资,社保&公积金,税金和实发工资,自动输出保存到文件。添加后:6) 员工工资信息修改修改前:修改后:7) 员工工资信息删除删除前:删除后:8) 输出员工工资信息到文本文件输出前:输出后:9) 数据备份、清空与恢复对数据进行备份:以二进制形式备份成功:系统中数据清空前:清空数据:清空后:通过之前备份的文件对系统中数据进行恢复:恢复成功:5.1.2张鹏举测试1) 登陆测试输入不存在编号,会提示,并返回登陆界面:输入错误密码,提示密码输入错误和剩余尝试次数:连续输错密码三次,程序结束运行:输入正确密码,成功登陆,进入年月选择界面:2) 岗位级别与对应岗位工资修改3) 住房补贴参数修改4) 用户密码修改首先验证原始密码,密码错误系统会一直提示“原始密码输入错误,请重新输入”。原始密码正确后,请输入新密码,如两次新密码输入不一致,则会提示重新输入第二次密码,一致后,密码修改成功。修改密码之后再登陆:使用新密码登陆成功!5.1.3于文鑫测试1) 员工工资信息排序从高到低按编号排序之前:选择工资信息排序,并选择从高到低排序:选择按编号排序:排序之后:2) 员工工资信息排序从高到低按奖金3) 员工工资信息查询按员工编号查询:按奖金查询:组合模糊查询关键字查询:5.2组装与系统测试由于之前并没有进行过模块化的程序设计,所以刚开始将各个.C文件链接时出现了很多问题。最严重的问题就是在一个.C文件中没有对所调用的另一个.C文件中的函数进行声明,出现了找不到该函数的定义,程序各个模块无法连接的问题。经过查阅课本和资料,建立了一些.H头文件,并在预处理中包含这些头文件,解决了这一问题。另外一些小的问题也是层出不断,例如函数名称由于疏忽,增加或丢掉了个别字母,导致前后函数名不一致,调用时候出现错误,或者出现重复定义的问题。经过细心仔细地检查,解决了这些小的毛病,最终还算顺利地实现了各个模块的拼接,程序最终在Windows7平台上成功运行。系统测试记录操作名称操作流程操作结果和输出登录系统打开登录页面:1.输入正确用户名和正确密码,登陆;2.输入正确用户名和错误密码,登陆;3.输入错误用户名。1.成功登陆,从登录系统到系统信息显示完成,花费2秒时间,基本满足了系统显示要求;2.提示密码输入错误,请重新输入,三次输入错误后退出系统;3.提示不存在用户名,请重新输入。月份选择进入选择界面,输入年份,回车,月份,回车进入操作主界面,并在上方显示当前年月全部用户信息输出无需操作,在相应选择下自动输出到屏幕用列表的方式显示出了所有的用户记录,用时小于1秒,符合要求。查询工资信息1.选择查询方式,例如选择按编号查询,则输入编号,回车即可;2.输入不存在编号;3.系统中无数据时选择该功能。1.用列表的方式显示出了所有符合的用户记录,用时小于1秒,符合要求;2.提示查询不到信息;3.提示系统中无数据,无法使用该功能。工资信息排序1.选择排序方式,例如选择按降序、编号排序,则选择降序、按编号即可;2.系统中无数据时选择该功能。1.用列表的方式显示出了排序后的所有用户记录,用时小于1秒,符合要求;2.提示系统中无数据,无法使用该功能。工资信息统计1.选择该功能;2.无数据时选择该功能。1.从岗位工资、基本工资、绩效工资、奖金、应发工资、税金、实发工资等几个方面显示现有数据的最小值、最大值和平均值。2.提示系统中无数据,无法使用该功能。数据添加输入需要添加信息的员工个数,然后按步骤输入员工编号、姓名、性别、年龄、岗位级别、基本工资和绩效工资提示数据添加成功,并将数据写入文件。数据整理1.选择该功能;2.无数据时选择该功能。1.对数据按编号从小到大排列并输出到屏幕;2.提示系统中无数据,无法使用该功能。数据修改1.选择需要修改的员工编号,按步骤输入员工编号、姓名、性别、年龄、岗位级别、基本工资和绩效工资;2.无数据时选择该功能。1.将该员工编号的员工信息修改后输出到屏幕,并保存到文件,时间小于1秒,基本满足要求;2.提示系统中无数据,无法使用该功能。数据删除1.输入需要删除的员工编号;2.输入不存在员工编号;3.系统中无数据时选择该操作。1.删除该员工编号的员工信息,并存储,在屏幕上显示操作后的全部员工信息;2.提示系统中没有需要删除的数据;3.提示系统中无数据,无法使用该功能。输出数据到文本文件1.选择该功能;2.无数据时选择该功能。1.生成一个txt文本文件,里面有所有员工的工资信息;2. 提示系统中无数据,无法使用该功能。数据备份选择该功能将当前数据存储到一个二进制文件中数据清空选择该功能系统中所有数据被清空。数据还原选择该功能将备份的信息输出到屏幕,并存储到当前文件。修改岗位工资参数按步骤输入岗位工资将岗位级别对应的岗位工资存储到文件修改住房补贴参数输入新的住房补贴金额将住房补贴金额存储到文件修改管理员或个人密码1.输入旧密码,输入新密码,再次输入新密码;2.输入错误的旧密码;3.输入旧密码,输入新密码,再次输入不同新密码。1.提示密码修改成功,并存储到文件;2.提示密码错误,请重新输入;3.提示两次输入密码不同,请重新输入。员工编号添加输入编号进行添加编号添加成功,以列表形式显示,并存储在文件中。员工编号整理1.选择该功能;2.系统中没有数据时,选择该功能。1.将员工编号从小到大排列,并储存;2.提示系统中无数据,无法使用该功能。员工编号删除1.选择该功能,输入员工编号,回车;2.输入不存在员工编号;3.系统中没有数据时,选择该功能。1.删除该员工编号的记录,并存储,在屏幕上显示操作后的全部员工编号;2.提示系统中没有需要删除的数据;3.提示系统中无数据,无法使用该功能。重选年月选择该功能返回选择年月份的界面,用时小于1秒。切换用户选择该功能返回用户登录界面,用时小于1秒。帮助选择该功能输出系统功能介绍、制作人名单和产品信息。个人信息输出无需操作,在相应选择下自动输出到屏幕输出个人的全部信息到屏幕。5.3系统运行系统可以在Windows平台上平稳运行,各项功能都达到了预期效果,界面简洁,操作便捷。运行过程中不会出现出错崩溃的情况。对于一些需要完善的功能,我们在运行程序,并进行检测后,又再一次对相应功能进行了完善与增强,并对系统的界面进行了精心的布局,调整了各个提示语句的输出位置,使之达到最好的用户体验效果。6. 课题总结6.1课题评价 工资管理系统对于公司的管理者和员工来说,都至关重要,所以工资管理系统应该能够给使用者提供充足的信息和简单快速的查询方法。使用计算机对工资信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高工资管理的效率,也是科学化、正规化管理的重要条件。本课题就是为了满足这种需求,实现公司员工工资的计算机化管理。 该工资管理系统经过我们整个设计开发团队的不懈努力,强有力地实现了课题的基本要求和所有目标,并增设了很多切实有用的创意和功能,全方面体现了我们团队的设计思想,完全达到了预期的效果。首先,该工资管理系统具有全面细致的功能选项,可以满足用户各方面信息的管理与查询,而且分为两个入口,可以满足公司不同层级的人员需求,面向群体广泛。其次,该工资管理系统具有良好的健壮性和安全性,运行稳定,数据不易丢失,密码登陆,安全可靠。而且系统代码的每个函数中都嵌入了非法输入和非法操作检测机制,确保系统不会在运行中跳出或者崩溃。最后,该工资管理系统具有良好的界面,简单清新,使用方便,操作快捷。总体来说,经过三周的设计与实践,最终我们团队圆满地完成了本次工资管理系统的设计任务,达到了在实践中巩固并真正运用自己所学知识的目的。本次课题设计顺利实现。6.2团队协作我们团队在组团完成后,即刻就课题题目的选择问题进行了深刻的讨论,经由组长建议和组员的一致同意,我们最终选定了“职工工资管理系统”这个设计课题。选定课题之后,第二天,我们组便进行了整体框架和具体功能的讨论与研究。组长提出了该系统应该具有的功能并做记录,与组员们进行讨论,综合建议和信息,制定了总体的设计框架和系统具备的功能。回去后,组长查阅了与员工工资相关的资料,并绘制了所设计系统的功能图,以及在网上参考了别人设计的同类型的工资管理系统,并且将这些资料一并发给了组员,大家课余时间自行研究,最后再汇总交流经验与想法。隔日,大家一起进行了详细的分工明确,确定了我们的设计最终要实现什么样的功能,并进一步细致化,分类成一个个的函数,将函数的设计分配给每一个人。刘诚阳作为组长,负责整个程序的走向,函数设计包括界面的设计,与动态链表相关的一切数据设计,文件输入输出的设计,以及对链表中数据求最小值、最大值和平局数的函数设计等等;张鹏举作为重要组员,负责的函数设计包括用户的登录系统,修改密码和基本参数,计算税金并返回数值;于文鑫作为重要组员,主要负责对数据进行查找和排序的设计。任务分工完成后,大家都回去查找相关资料,潜心研究,独立完成各自的设计任务。每人都进行了自己所承担任务的研究,设计了相关的算法,绘制了实现目标函数的流程图,经过组内商讨与研究,修改纠正,最终确立了较为完善的总体程序设计样板。每次上机课的时候,我们都会在一起讨论研究,进一步明确设计所要实现的具体目标,解决代码编写过程中的编写错误或者是当时设计时出现的纰漏。经过组内人员的共同努力,最后我们顺利地完成了此次程序设计任务,设计开发出了令人满意的职工工资管理系统。更为珍贵的是,通过团队合作,我们学会了团队开发模式,注重交流,分享经验,从彼此身上学到了很多,也为自己能在团队中贡献一份力量感到由衷的开心。6.3个人设计小结6.3.1刘诚阳设计小结在开发工资管理系统的三周时光中,我深刻地体会到了自学能力的重要性。着手程序的总体设计时,我发现课堂上学习的知识还远远不够,很多东西都需要自己临时查阅并学以致用。而且第一次进行实验设计,整个设计过程并不清楚,因此很多不懂的地方都是靠自己的不断尝试与摸索,凭借老师和同学的帮助,才最终完成了这个实验设计。在该工资管理系统中,我作为组长,首要任务是组织好组员,确立工资管理系统的大体框架和主要功能,建立需要的主要函数,并进行明确的分工。我所主要负责的是工资管理系统的界面设计和用动态链表对数据进行处理的所有函数的设计以及数据输入、输出的设计。由于我们还没有学数据结构,所以使用动态链表对于我来说是一项很大的挑战,在使用动态链表进行数据添加的过程中,出现了很多错误,程序各种崩溃。经过了好几天的尝试,才最终实现了利用动态链表添加数据的功能,过程十分的曲折,好在功夫不负有心人。对于如何将动态链表中的数据输出的屏幕上,我也是做了一番研究才最终设计出了数据输出函数,现在想来只是将指针从头节点遍历到尾节点,丝毫不难理解,但是当初设计的时候也是在网上查阅了很多资料,看了很多别人的设计,才最终完成。对于数据的输入和输出设计就相对来说简单了许多,查阅课本,确定好存储方式和类型,按格式打开文件,操作后将文件关闭,这部分的设计相对来说比较容易。另外利用将数据从文件中输入和输出,我还设计了对员工编号的注册,还有按月份查询工资的功能,系统可以将用户在登陆时从键盘输入的年月保存到文件中,登陆进去后,相关函数会从文件中读取这个年月,并打开相应年月名称的文件,获取该年月的员工信息。这个按年月存取是第三周程序快要验收的时候我才加上的,因为考虑到实际情况,该管理系统不可能只进行员工一个月工资的储存,应该可以储存一个人多个月份的工资。这也算是对该系统的进一步完善了。对于多入口登陆这个功能,也是我后来思考后进行的添加修改。登录系统虽然不是我设计的,但是后来我考虑到该系统如果只能供管理员使用而员工不能使用的话,会有很大的局限性,真正更合适的系统应该是二者可以兼备。于是我在登陆系统的函数中加了一部分判断,即可以区分登录用户是管理员还是员工,或者是不存在的用户;与此同时,额外设计了一个员工登记功能,用来辅助多入口登陆的实现。这样,整个工资管理系统就显得更加完善了,也更加贴合实际情况,满足用户需求。此外,对于员工工资是如何计算的这个问题,我是经过了百度各方面资料,才进行了数据运算方面的设计,像五险一金和税金这些东西都应该是在输入基本工资等基础信息后,系统自行运算得出结果,并进行储存,而不是人工操作。对岗位工资的获取也是通过输入岗位级别后系统自动对照。这一系列的设计虽然并不复杂,但是也确实繁琐,从查阅相关资料,到最后设计出完整的数据运算,并以正确形式输入、输出,着实花了不少时间和功夫,也进一步提升了自己对数据处理的能力和加强了自己对相关知识的掌握与运用。最后感谢在程序设计中给予我帮助的同学们和老师们,有了你们的建议和指导,我们这个团队才能不断完善设计,找到程序的Bug,并最终设计出一个相对完备的工资管理系统。6.3.2张鹏举设计小结通过这个程序系统设计,我明白了C语言究竟是怎么样运用的,以及一系列函数和数据处理。就我自己做的登录界面和修改密码来说我运用到了链表和文件处理,这是我以前上机课从没有过的实践,自己也明白了许多方法的使用。从一个个函数到整体系统的运用,让我明白了它的原理,让我对程序设计有了新的认识。就我做的那些个函数来看,首先数据必然很重要,什么类型,该怎么用它,怎样用很少的代码,运行处更多的程序,是一个很有意思的问题,也是个很有挑战的问题。从这次实践我学到了,怎么更好的用选择结构来进行对输入的判断,怎样修改文件中的数据,怎样把输入的东西经过修改再存入文件中。总之这是个很好的经历,也是个很不错的实践,对我来说很有价值。6.3.3于文鑫设计小结通过这几个多星期的课程设计,我学到了很多很多。不仅是在知识上,也表现在了各个方面。首先,在设计的过程中,我发现我已经遗忘了很多上星期学习过的C语言知识,也发现了原来学习中的不少漏洞。有不少地方的树叶还是新的,那方面的知识自然还没有吃透。比如结构体的定义已经不是很熟,字符串数组也不太能熟练运用了,还有就是指向数组和字符串的指针也不是很熟了。在编写项目程序的过程中,我不断的发现自己的不足并努力提高,在原来的基础上对C语言有了更进一步的理解。 在开发这个工资管理系统过程中我深刻地体会到了自学能力的重要性。毕竟在学校学习到的知识是有限的而在开发系统的过程中仅凭原有的一点点知识是远远够的,只有翻阅大量的资料才能学到更多的知识,才能实现其预期的功能。在开发过程中,遇到困难是在所难免的,开发一个系统,恒心和 毅力也是不可缺少的,如果一遇到难题就心慌,想要放弃,那这样就不可能完成系统。同样,在开发过程当中,细心也是非常重要的,由于很多事项都要很注意才行,如果没有做到这一点,就会出错。在开发过程当中,我学到很多,明白了做任何事情都要有始有终,要敢于同困难作斗争,要养成独立思考的习惯。在以后的工作和生活当中,我将继续发扬这些好的作风。在程序编写中,出现了不少的问题,比如指针地址错误,文件无法保存;还有,经常我会忘在语句结尾处带分号,经常VC会在这方面报错;当然,图书馆也是查找资源的好地方,我也感谢那些在冬日里坐在那里的图书馆管理人员,是他们及时的借到相着图书,让我们的信息查找更为方便快捷。最后,我再一次感谢我的老师们,谢谢你们的谆谆教诲,没有你们的言传身教,就没有我课程设计的顺利完成,谢谢您们。6.4参考资料谭浩强.C程序设计.清华大学出版社.第四版谭浩强.C程序设计学习辅导.清华大学出版社.第四版Brian W.Kernighan & Dennis M.Ritchie.C程序设计语言.机械工业出版社.第2版
展开阅读全文