软件工程课程设计职工工资管理系统.docx
《软件工程课程设计职工工资管理系统.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计职工工资管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
![软件工程课程设计职工工资管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/24/a6cc9e36-51ee-465b-b614-d3399c4e6764/a6cc9e36-51ee-465b-b614-d3399c4e67641.gif)
软件工程课程设计职工工资管理系统
1问题定义
表1.1任务书表
2可行性研究
2.1项目概述
手工工资管理是一种原始的工作方法,由于手工操作出现错误的概率比较大,其工作量大,工作程序复杂,消耗大量的人力、物力、财力和时间。
而且随着时间的推移,由于人员的增加,科目的增多以及调整的频繁,这些矛盾显得尤为突出。
随着经济的发展在这种情况下单靠人工来处理员工的工资不但显得力不从心,而且极容易出错。
随着科学技术的不断提高,计算机科学日渐成熟其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对职工的工资进行管理,具有手工管理所无法比拟的优点.例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高职工的工资管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
因此,开发这样一套管理软件成为很有必要的事情。
2.2可行性分析的前提
2.2.1项目的目标
对职工工资情况进行管理,完成对职工的基本信息,工资信息,岗位信息进行录入,并能查询职工的基本信息,工信息,岗位信息,完成密码的修改,打印工资报表等功能。
这个系统可以满足现代企业对职工的工资进行管理的理念,使工资管理工作系统化,规范化,自动化,从而达到提高工资管理系统的目的。
2.2.2项目的环境
Visualc++6.0
SQLServes2000
2.3可选的方案
2.3.1方案一
该职工工资管理系统处理的事务主要有职工工资管理,职工信息管理,职工岗位信息管理。
职工基本信息,职工工资信息和职工岗位信息管理主要服务于数据管理,系统能够接受用户的请求,可以显示岗位查询信息,职工工资信息和职工基本信息并且可以打印职工工资报表以及修改密码。
2.3.2方案二
该职工工资管理系统首先对用户的信息进行管理,可以修改密码,然后进行对数据的管理,由键盘键入职工的基本信息,岗位信息和工资信息,接着可以对职工的信息进行查询,最后可以打印职工的工资报表,完成对工资的管理。
2.4所建议的系统
2.4.1系统说明
系统开发思想本着职工工资管理系统是采用面向对象的程序设计思想进行编制的,整个系统由若干个表单、类、报表以及一个主菜单组成,有项目管理器统一管理全部程序的编写和调试。
用户可以通过主菜单或总表单调用系统的各项功能。
1.面向对象设计不再是单纯的从代码的第一行一直编到最后一行,而是考虑如何创建类和对象,利用类和对象来简化程序设计,并提供代码的封装和可重用性,便于程序的维护与扩展。
2.所谓的对象是一种抽象的名称,用来对应实现世界存在的“东西”。
一个窗口、一个按钮、一个菜单都可视为一个对象,而按钮对象、菜单对象、又会出现在窗口对象中,因此按钮对象、菜单对象便是窗口的组件之一。
对象内部的数据是不能随意更改的,必须由外部向其传递信息,再由对象按其方法加以处理。
用户无需知道其他任何细节,操作是封闭的,对象之间能通过函数调用相互通信。
3.类可视为一个产品模具、一个模块。
在面向对象设计中,类是对象的原型,是对象的制作器。
类的概念是面向对象程序设计最重要的特征。
所谓类,是指由数据结构及其相关操作所形成的集合,描述该类任一对象的共同的行为特征,是对一组性质相同的对象的程序描述,概括了对象的共同性质和数据。
4.面向对象设计的核心是类的设计。
例如:
可以定义一个“工资查询表单”类,该类中可以定义查询的姓名、年龄、工资等等信息,则以此类为原型可以设计出众多的“工资查询表单”类的对象实例,这些实体都具有类中所定义的特征。
5.设计的职工工资管理系统也是建立在一系列类基础之上的,其编程的思想是:
先根据一定的需要创建一系列的子类,编制程序时,由这些类派生出相应的对象,所派生出的对象继承了其父类所有的功能,而且具有很好的封装性,这样就可利用派生出的对象像搭积木一样来设计自己的程序。
实际编程也是如此。
每个表单都是由一定数量的对象按某一种方式组合在一起的,程序编制的核心是类的设计。
2.4.2高层数据流图
图2.1高层数据流图
2.5经济可行性
1.预算费用的支出:
基建投资,这是必不可少的,而这部分的投资也是很少的,新的开发工具盒软件环境的购买和新的服务器及服务器操作系统的购买,开发人员的支出,服务器维护者的支出费用很少。
2.收益:
系统的使用会使员工内部工作流程得到优化,使得公司精简人员,节约人力资本,以及客户关系管理的资本,尤其在客户资料及售后服务方面充分减少人员,对资料的搜集可用电脑软件自动归类搜集,客户反映也可通过反馈系统进行全面反映,而不是上门走访费时费力的方式。
系统为外部顾客提供良好的服务而带来的销售等利益的增大,将会使日常的利润得以增加,总之,只要市场反映良好,长期内,收益定会大于支出,获得额外利益。
2.6技术可行性
1.硬件资源上的可行性:
该系统是一个基于B/S构架的应用系统,只要在客户端打开浏览器访问服务器即可实现软件的应用,而不必在客户端进行任何安装工作。
2.软件资源的可行性:
通过邮件手机短信电话传真等多种方式进行信息搜集,充分利用活动参与者的信息,使之转化为对客户系统有用的信息。
可视化得工作流程,实现客户关系系统对人日常行为的提示和指导,进行全方位的客户价值分析,构建客户价值金字塔模型,提高企业赢取客户的满意程度以及获取更多客户的目标。
2.7操作可行性
1.本系统采用基于c++的图形用户界面,而该系统是大家熟悉的操作系统,对于那有一般的计算机知识的人员就可以轻松上手。
2.整个工资管理系统采用较友好的交互界面,简单明了,操作方便,不需要对数据库进行深入的了解。
3需求分析
3.1需求概述
职工工资管理系统是针对系统服务对象的具体要求设计的,其主要任务是用计算机对企业内部各职工的基本信息、工资信息进行日常管理,如查询、修改、添加、删除等操作。
职工工资管理系统的目标是能迅速并且准确地完成对职工基本信息及工资信息的查询、录入、修改,以及对工资信息的统计计算及汇总工作。
3.2需求模型
3.2.1数据模型
图3.1职工实体与工资实体的E-R模型
3.2.2功能模型
图3.2功能模型图
3.2.3行为模型
图3.3职工工资系统状态图
3.2.4数据字典
系统的主要数据字典
1.名称:
职工
描述:
在公司里上班的人员
表3.1职工数据字典表
职工=职工ID+职位+姓名+性别+出生年月+工作年月
职工ID=员工编号
职位=员工在公司所干的工作
姓名=员工姓名
性别=男/女
出生年月=员工的出生日期
工作年月=员工工作的年月份
2.名称:
职位
描述:
职员在公司干的什么工作
表3.2职位数据字典表
职位=职位+基本工资+奖金+津贴
职位=员工在公司所干的工作
基本工资=员工可得的基本工资
奖金=员工获得的奖励工资、
津贴=公司给员工的补助
3.名称:
工资
描述:
员工在公司所付出劳动的报酬
表3.3工资数据字典表
工资=基本工资+特殊项金额
基本工资=员工可得的基本工资
特殊项金额=员工在公司获得的特殊奖金等
4.名称:
奖惩信息
描述:
员工在公司所得到的奖励和惩罚信息
表3.4奖惩数据字典表
奖惩信息=奖励信息和惩罚信息
奖励信息=员工在公司获得的奖励信息
惩罚信息=员工在公司获得的惩罚信息
4总体设计
4.1系统体系结构
图4.1系统体系结构图
4.2模块详细说明
1.总体IPO表
表4.1用户管理IPO表
表4.2数据管理IPO表
表4.3数据查询IPO表
表4.4打印报表IPO表
2.个人模块IPO表
表4.5查询工资信息IPO表
表4.6查询职工信息IPO表
4.3数据库设计
数据库设计是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。
数据库系统需要操作系统的支持。
数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建议中的核心技术。
由于数据库应用系统的复杂性,为了支持相关程序运行,数据库设计就变得异常复杂,因此最佳设计不可能一蹴而就,而只能是一种“反复探寻,逐步求精”的过程,也就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。
数据库是信息管理系统的后台,存储着所有的信息,在信息管理系统中有着很重要的地位。
数据库设计的好与坏,直接影响到这个系统的运行效率。
良好的数据库设计,可以提高数据信息的存储效率,确保数据信息的完整性和一致性。
本人设计的模块为销售经理工资管理系统,其数据库设计图如下:
图4.2数据库设计图
说明:
销售经理的信息包含:
销售经理工号、销售经理名字、销售经理年龄、销售经理 性别、销售经理邮箱
查询销售经理工资信息的数据库设计如图4.3所示:
图4.3查询工资表
说明:
工资信息包含:
基本工资、工时、工龄、销售额
5详细设计
5.1人机界面设计
运行程序,程序运行无错后,显示职工工资管理系统初始界面,如图5.1所示:
图5.1职工工资管理系统初始界面
本人负责模块3:
销售经理,输入3,显示结果如图5.2所示:
图5.2职工工资管理系统输入信息显示图
输入员工信息,结果显示如图5.3所示:
图5.3职工工资管理系统员工信息显示图
5.2过程设计
1.头文件
#include
#include
#include
usingnamespacestd;
2.结构体定义
structsell_manager//销售经理
{
floatbasic_income;//固定工资
floatworktime;//计时(元/小时)
floatwork_age;//工龄
floatsell_elevate;//销售提成
};
3.销售经理工资的计算
floatsell_manager_salary(float&basic_income,float&worktime,float&work_age,float&sell_elevate)
{
floatsalary;
salary=basic_income+worktime*0+work_age*50+sell_elevate*0.005;
returnsalary;
}//销售经理工资
4.输入员工信息
floata,b,c,d;
voidinput_data()
{
cout<<"请输入员工信息:
"<cout<<"**************************"<cout<<"固定工资"<<""<<"工时"<<""<<"工龄"<<""<<"销售额"<cout<<"**************************"<cin>>a>>b>>c>>d;//分别输入:
固定工资、工时、工龄、销售额
}
5.计算工资,输入3选择销售经理工资
voidcalculate()
{
inti=1;
while(i!
=0)
{
cout<<"员工工资管理系统"<cout<<"==================="<cout<<"1.*管理员*"<cout<<"2.*工人*"<cout<<"3.*销售经理*"<cout<<"4.*销售员*"<cout<<"5.查询信息"<cout<<"6.打印报表"<cout<<"0.*退出系统*"<cout<<"==================="<cout<<"请选择:
";
cin>>i;
stringss;
switch(i)
{
case1:
input_data();
floatsalary;
structmanagerManager;
Manager.basic_income=a;
Manager.worktime=d;
Manager.work_age=c;
Manager.sell_elevate=b;
salary=manager_salary(Manager.basic_income,Manager.worktime,Manager.work_age,Manager.sell_elevate);
cout<<"职称:
管理员工资总额:
"<break;//管理员工资
case2:
input_data();
structemployeeEmployee;
Employee.basic_income=a;
Employee.worktime=d;
Employee.work_age=c;
Employee.sell_elevate=b;
salary=employee_salary(Employee.basic_income,Employee.worktime,Employee.work_age,Employee.sell_elevate);
cout<<"职称:
工人工资总额:
"<break;//工人工资
case3:
input_data();
structsell_managerSell_manager;
Sell_manager.basic_income=a;
Sell_manager.worktime=d;
Sell_manager.work_age=c;
Sell_manager.sell_elevate=b;
salary=sell_manager_salary(Sell_manager.basic_income,Sell_manager.worktime,Sell_manager.work_age,Sell_manager.sell_elevate);
cout<<"职称:
销售经理工资总额:
"<break;//销售经理工资
case4:
input_data();
structmarketingMarketing;
Marketing.basic_income=a;
Marketing.worktime=d;
Marketing.work_age=c;
Marketing.sell_elevate=b;
salary=marketing_salary(Marketing.basic_income,Marketing.worktime,Marketing.work_age,Marketing.sell_elevate);
cout<<"职称:
销售员工资总额:
"<break;//销售员工资
case5:
cout<<"请输入姓名:
";
cin>>ss;
if(ss=="小明")
{
cout<<"姓名:
小明性别:
男年龄:
20邮箱:
"<}
elseif(ss=="小王")
{
cout<<"姓名:
小王性别:
男年龄:
22邮箱:
"<}
elseif(ss=="小雪")
{
cout<<"姓名:
小雪性别:
女年龄:
21邮箱:
"<}
elseif(ss=="小甲")
{
cout<<"姓名:
小甲性别:
女年龄:
19邮箱:
"<}
elseif(ss=="jack")
{
cout<<"姓名:
jack性别:
男年龄:
24邮箱:
"<}
break;
case6:
cout<<"姓名:
小明\t工资:
3000\t职位:
管理员"<cout<<"姓名:
小王\t工资:
5000\t职位:
销售经理"<break;
case0:
cout<<"退出工资管理系统!
"<break;//退出程序
}
}
}
6.主函数main.c,调用计算工资函数
voidmain()
{
calculate();//调用"计算工资"
}
6测试
6.1白盒测试
白盒测试法的前提是可以把一个程序看成装在一个透明的盒子里,也就是完全了解程序的结构和处理过程。
基本路径测试是tommccabe提出的一种白盒测试技术,使用这种技术设计测试用例时,首先计算过程设计结果的逻辑复杂度,并以该复杂度为指南定义执行路径的基本集合。
从该基本集合中导出的测试用例可以保证程序中的每条语句执行一次,而且每个条件在执行时都将分别取true(真)和false(假)值。
6.2黑盒测试
黑盒测试法是把一个程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程。
黑盒测试着重在测试软件的功能需求,也就是说,黑盒测试让软件工程师设计出能充分检查程序所有功能需求的输入条件集。
黑盒测试并不能替代白盒测试技术,它是与白盒测试互补的方法,它很可能发现白盒测试不易发现的其他不同类型的错误。
黑盒测试力图发现以下几种类型的错误:
1、功能不正确或遗漏功能;2、界面错误;3、数据结构错误或外部数据库访问错误;4、性能错误;5、初始化和终止错误。
7结论
进行课程设计,我明白了学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础. 我认为,在这学期的课程设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
由于时间的紧缺和许多课业的繁忙,并没有做到最好,但是,最起码我们没有放弃,它是我们的骄傲!
相信以后我们会以更加积极地态度对待我们的学习、对待我们的生活。
我们的激情永远不会结束,相反,我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。
只有不断的测试自己,挑战自己,才能拥有更多的成功和快乐!
更重要的是,在课程设计上,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
与队友的合作更是一件快乐的事情,只有彼此都付出,彼此都努力维护才能将作品做的更加完美。
而团队合作也是当今社会最提倡的。
我很感谢我能拥有这次机会,我学会了很多知识,也收获了很多很多。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
参考文献
[1]刘志妩,张焕君,马秀丽等著.基于VB和SQL的数据库编程技术.北京:
清华大学出版社
[2]杨志强著.VisualBasic6.0程序设计教程.北京:
高等教育出版社.2008
[3]赵斯思著.VisualBasic数据库编程与实例.北京:
人民教育出版社.2009
[4]张海藩著.软件工程导论(第五版),清华大学出版社.2008
[5]张海藩著.软件工程导论(第五版)学习辅导,清华大学出版社.2008