学校内部工资管理系统《软件工程导论》实验报告.doc
软件工程导论实验报告学 院:计算机科学与技术学院专业班级: 指导教师: 项目成员:项目课题:学校内部工资管理系统时 间:目 录小组情况1一、可行性分析报告21.1 引言21.1.1 编写目的21.1.2 背景21.2 可行性分析的前提31.2.1 要求31.2.2 开发目标31.2.3 条件、假定和限制31.2.4 可行性研究的方法41.3 技术可行性41.3.1 简要描述41.3.2 与现有系统的优越性比较41.4 经济可行性51.4.1 成本51.4.2 效益51.5 社会因素可行性分析61.5.1 法律方面的可行性61.5.2 操作可行性61.6 结论意见6二、软件需求规格说明书72.1 背景材料72.2 功能需求分析72.2.1 管理员用户设置72.2.2 普通用户创建82.2.3 用户登录82.2.4 远程信息接收与传递82.2.5 信息提醒82.2.6 职工编号的判断92.2.7 职工工资的计算92.3 性能需求分析102.3.1 运行环境102.3.2 精度102.3.3 响应时间102.3.4 内存占用112.3.5 安全与更新112.3.6 故障处理11三、数据流程图12四、功能分析图134.1 员工工资标准模块134.2 工资统计模块134.3 财务处理模块134.4 职工工资查询模块134.5 登录用户管理模块144.6 人事管理模块144.7 员工出勤管理模块14五、数据字典15六、概要设计16七、详细设计说明书177.1 编写目的177.2 背景177.3 系统的结构177.4 程序流程图187.4.1 用户注册187.4.2 用户登录207.4.3 人事管理217.4.4 员工工资查询217.4.5 员工出勤管理217.4.6 财务部管理227.5程序部分代码237.5.1 用户注册237.5.2 用户登陆297.5.3 人事部管理337.5.4 财务部管理36八、测试报告398.1 单元测试398.1.1 用户注册登陆测试398.1.2 人事部测试418.1.3 财务部测试448.2 黑盒测试458.2.1 测试用例表468.3 测试总结48九、参考资料49小组情况项目题目 :学校内部工资管理系统项目成员 :项目负责人:任务分配表任务模块人员安排可行性分析研究需求分析模型的建立结构化设计系统的编码、单元测试黑盒测试一、可行性分析报告1.1 引言1.1.1 编写目的可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解。经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排,明确开发风险及其所带来的经济效益。本报告经审核后,交项目经理审查。 1.1.2 背景工资管理是学校很重要的一个管理事项,它与学校的人事管理、财务管理有着密切的联系。目前大多学校内部工资的管理,基本上是手工操作或是基于excel或word下的应用,对于劳资关系相对复杂的学校,手工进行工资的发放工作往往需要耗费大量的人力与时间,对信息的管理者有诸多不便。由于工资发放在时间和操作上存在着一定的重复性、规律性,这使得工资管理的计算机化成为可能。因此有必要开发一个基于网络的工资管理系统,能实现数据的录入、插入、删除、查询、统计、更新、打印等功能。同时,为了信息的保密与安全,系统还要提供一定的安全机制 。开发软件名称:学校内部工资管理系统项目任务提出者:计算机工程学院 项目经理:用户:1.2 可行性分析的前提1.2.1 要求(1)功能。工资管理系统的主要功能是:月工资发放和处理、标准工资库维护、临时工资发放、查询与系统维护和系统帮助。(2)性能。 方便、快捷、有效地完成工资发放的各项任务,在工资数据统计和报表打印等方面,具有准确率高、速度快等特点。 (3)系统的输入。输入所有职工的标识,如职工的姓名、工号、所在部门、各项应发的金额和各项应扣的金额。 (4)系统的输出。输出各种报表、上报的文件等。 (5)安全和保密要求。 本系统在使用前必须正确输入密码,否则系统将不能运行。进入系统后,要想修改密码或对系统的一些信息进行修改,也必须输入高级用户密码,对数据库中的关键数据应该要求保密。服务器的管理员享有对工资数据信息库的管理与修改。用户只享有对信息的查询和部分信息修改(如个人信息)。1.2.2 开发目标 本系统开发目标应该考虑到以下几个方面的因素:人力与设备费用的相对减少,人员利用率的改进;数据处理速度的提高;数据统计精度的和准确率的提高。管理信息服务的改进;自动决策系统的改进;人员利用率的改进。1.2.3 条件、假定和限制项目开发中所具备的条件、假定和所受到的限制包括以下几个方面: (1)所建议系统运行寿命的最小值:系统运行寿命的最小值应达三年。 (2)硬件、软件、运行环境、开发环境等条件:硬件环境要求如下:奔腾II或更高档的计算机、笔记本电脑;运行时内存的要求是10MB以上;安装所需硬盘空间是150MB;打印机可选激光打印机。软件环境要求如下:中文 Windows98/Windows2000/Me/xp/7; (3)系统投入使用的最晚时间:系统投入使用的最晚时间为2011年的10月中旬。1.2.4 可行性研究的方法(1)客户调查:通过对客户调查,了解和认知客户对软件产品的需求,按照客户的要求不仅要实现月工资发放,而且要实现临时的工资发放,同时还要有数据库备份。GZGL系统的主要功能为:月工资发放和处理、标准工资库维护、临时工资发放、查询与系统维护和系统帮助。(2)同类产品调查:通过对市场中相关或同类产品的调查,笔者了解到,工资管理系统大体上都应该实现工资的统计、汇总、报表打印等功能。1.3 技术可行性 1.3.1 简要描述工资管理系统是一个数据库管理和查询的系统,本系统采用常规的数据库处理方法,根据工资信息管理的特点对数据库进行操作,如对工资发放项目的修改、人员的增删、工资数据的添加和修改、工资的统计、工资的汇总、临时发放工资的管理、上报文件、打印等给予了优化。1.3.2 与现有系统的优越性比较工资管理系统有利于工资发放的统一、有效管理。与传统的手工记账方式相比,占据空间小、易于统计工资总额、易于更新、易于数据备份;与其它工资系统相比,该系统实现了对不同类型职工的工资发放,系统功能比较全面,而且价格也比较合理。工资管理系统具有高效率的系统灵活性。当修改工资库中某个职工的工资情况或者修改某个工资发放项目时,只需在工资数据编辑状态下对该职工的工号进行锁定,或者对某个工资项目进行锁定,即可对锁定的项目进行修改,而对其它的人员或项目无权修改,这样可以提高系统的准确性。工资管理系统能够较好保证数据库的安全。户可以对后台数据库进行加密,同时还可以给系统设定密码。现有的技术已较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,利用现有技术条件完全可以达到该系统的功能目标。同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发。1.4 经济可行性 估算新系统的成本效益分析,其中包括估计项目开发的成本,开发费用和今后的运行、维护费用,估计新系统将获得的效益,估算开发成本是否会高于项目预期的全部经费。并且,分析系统开发是否会对其它产品或利润带来一定影响。1.4.1 成本(1)基本投资硬件设备:PC机软件:Windows98/Windows2000/xp/7,Delphi7,sql 2000/2005; Visual Basic 6.0、SQL Server 2000、Word 2005/2007(2) 其他一次性支出,主要是软件设计和开发费用。软件设计开发过程当中,投入设计和开发费用包括:购买书籍的资金,需求分析的费用 (其中包含技术开发上的花销、生活花销等)。 (3)经常性支出,主要是软件后期维护费用。软件开发完毕后投入使用时,对软件产品进行的后期软件维护所需要支出的费用。1.4.2 效益系统的效益可以从经济效益和社会效益两方面考虑。本系统的应用使工资管理实现科学化、规范化进一步实现学校员工工资管理的规范化和自动化本系统。减少了人力投资和办公费用的开销,极大地提高办公效率。并且该系统定会受到各学校的欢迎,拥有一定的市场,可在短时间内收回成本,并有可观的经济效益。投入使用将获得的经济效益分为直接效益和间接效益两方面。直接效益主要体现在:原来4人/周工作量将只须1人/周完成;间接效益体现在:减少支付3人工资(1200元/人月),共计3600元/月。1.5 社会因素可行性分析1.5.1 法律方面的可行性系统开发所用软件均采用正版,系统的研制和开发,将不会侵犯他人、集体和国家的利益,不会违反国家政策和法律。本小组的工资管理系统是以微软为操作平台的。但是现在在中国微软所推出的操作系统盗版非常猖獗。作为系统的开发者,我建议用户采用正版的微软操作系统。如果因为使用盗版操作系统所带来的任何损失。本开发小组概不负责。1.5.2 操作可行性本系统定位于各高校,也可以适用于各中小型企业。运用此系统进行工资管理,给各院校教职工带来极大的方便。 只要可以熟练得使用window操作系统所提的各种功能,就很方便操作本系统,而且本系统有友好的用户界面、有良好的安全性设置、有详细的操作说明书,这样更使各类用户很快地掌握系统的使用方法。1.6 结论意见由于投资效益比远大于100%, 技术、经济、操作都有可行性,可以进行开发。二、软件需求规格说明书2.1 背景材料随着信息化时代的到来,社会生活的各个方面都发生着翻天覆地的变化,当然学校这个教育的前沿阵地也发生着巨大的变化。传统的人工工资管理存在着很大的不足,如处理量随着职工人数的增多而急剧上升、靠人工来处理显得力不从心、而且极其容易出错,万一出错,将造成极大的麻烦。而以计算机代替人工执行一系列的操作,将极大地提高办事效率和准确率,并减轻了办公人员的负担。由此,学校工资管理系统就应运而生了。通过我们对学校现有的工资管理系统的调查,并对工作人员的提出的要求进行细致地分析,我们设计了一个实用的学校工资管理系统。下面我将介绍我们项目组所开发的一个学校工资管理系统。本说明书对软件的功能需求、性能需求、系统的数据处理流程、用户权限等做了详细的说明。通过阅读本说明书,开发人员能够对该系统的各个方面进行详细的了解。进而依照本说明书对系统进行高效的开发。2.2 功能需求分析本系统所应该包括的功能有:2.2.1 管理员用户设置初次使用要求用户设置至少两个管理员(分别隶属于人事部和财务部),人事部管理员的权限有:设置各个部门或系的基本工资、奖金、扣款、人事信息管理(添加、注销等),财务部管理员的权限有:接收人事处的工资、人事等信息、对工资详情进行核对、工资单的打印、传送工资详情给银行、。界面上提示输入管理员用户名和密码。2.2.2 普通用户创建由管理员根据职工的信息创建各个普通用户(即学校的职工),普通用户的权限仅限于查看工资、奖金、扣款细节等。2.2.3 用户登录请用户输入用户名和密码,判断该用户是管理员还是普通用户,根据用户类型对其所能够进行的操作进行提示和限定,若用户名不正确则输出“用户不存在的提示信息”并清空登录框,密码不正确则输出“密码错误”的提示信息并清空登录框,最多可以输入三次,三次不正确系统会自动关闭且只能在10分钟后再次登录。2.2.4 远程信息接收与传递由人事部的管理员进行职工出勤信息的接收与处理,并将出勤工资、奖金、扣款等传送给财务部的管理员,若出现职工离退休等情况,要及时修改职工信息,并通知财务部等部门。财务部的管理员负责接收人事部的工资详情,并在规定的时间内将职工的工资表传送给银行,并将工资条发给各个部门。2.2.5 信息提醒在每个月20日前2天提醒各部门、院系的负责人各个部门(包括系和部门)将出勤情况上报人事处。23日前一天提醒人事部管理员将出勤工资、奖金及扣款清单送到财务处 。每个月月底前三天提醒财务部管理员将教职工的工资表做好并将数据送银行。并且在每个月3号提醒将工资条发给每个单位。2.2.6 职工编号的判断定义每个普通用户的用户名为四位数字组成的编码:前两位是部门(或院系)的编码,后两位是个人编号。10个部门每个部门的职工数为20(其中个人编号从01到20),8个系每个系的职工数为100(其中个人编号从00到99)。各个部门、院系的编号定义如下:编号及工资定义部门编号月基本工资院系编号月基本工资教务处103800计算机学院203500学生处113500软件学院213500财务部124000土木与建筑学院223000人事部133500机械学院233000保卫处143500电气学院243200科技部154000信息学院253200招生就业处163500文学院263500后勤处173500经济管理学院273200党政部184000对外交流部1938002.2.7 职工工资的计算奖金扣款细节突出贡献等级奖金额(¥)出勤情况(天)扣款额(¥)A800>=210B60020100C30019200D20018400E100<178002.3 性能需求分析2.3.1 运行环境本系统在财务部、人事部使用,通过各个终端对服务器进行操作,还需要从各个部门(系)收集信息,打印各种表。因此要求能够适应网络环境、复杂的集成环境。运行的环境有:硬件平台:Intel 奔腾/酷睿、AMD速龙/翼龙等x86系列的平台,基于交换机的以太网;软件平台:操作系统为Windows XP/Windows7/Linux等,还有SqL server2000、辅助管理软件等;需要程序能够稳定地运行在上面所述的平台上,并且需要考虑一定的稳定性。另外要考虑到运行环境的变化:如果增强服务器的硬件配置,不仅可以增快系统的响应时间,还能足够保证系统的稳定性。2.3.2 精度要求输入的信息尽可能准确,并对输入进行限定。基本工资、扣款额、奖金额、税率等用浮点数进行存储,计算的工资精确到小数点后两位(分)。2.3.3 响应时间基于处理的实时性,要求系统能够在较短的时间内完成处理,具体要求如下:所有员工的工资计算:10秒数据传送:5秒数据库更新:8秒2.3.4 内存占用考虑到可能运行其它的程序和某些电脑配置不高,要求软件正常运行时的平均内存占用能够控制在10M以内,峰值内存占用不超过30M。2.3.5 安全与更新考虑到所涉及问题的敏感性和现有网络环境的不安全特点,要求软件有较好的安全防护措施,包括密码的安全性、用户的验证、系统的封装等。而且还要求能够与主流的杀毒软件和安全辅助软件兼容。另外在当前复杂的网络环境下应考虑到数据传输的安全性,最好使用数据加密技术。在数据检索、数据有删改机制以及软件的复用性,以便增强软件的健壮性。另外任何一款软件都不能保证没有漏洞,因此要求软件保留有限的升级接口,为打补丁和软件的升级提供便利。2.3.6 故障处理情况 1:客户端与服务器网络不能连接处理 :a. 检修本地端网络连接是否正常;b. 查看服务器端交换机端口是否被关闭;c. 查看端点间网络线路是否完好。情况2:存储空间已满处理 :a. 数据库切换到备份存储空间; b. 进行数据检索,删除日期超过4年的数据。情况3:服务器死机处理 :程序自动保存内存中的临时数据;重启机器情况 4:服务端程序报告异常处理 :保存好临时数据,关闭访问端口,关闭程序重新启动,通过临时数据初始化程序其它具体情况参照相关技术进行处理。三、数据流程图由以上的需求分析进过研讨和学习得到了如下图所示的数据流程图:N YN Y开始 输入用户名字和密码判断密码时候正确提示错误信息并重新输入判断用户标志登陆人事部界面登陆职工界面判断管理用户查看工资情况人事管理员工工资管理员工出勤管理登陆财务部界面工资统计管理财务处理结束 Y N 图3-1 数据流程图.四、功能分析图4.1 员工工资标准模块用户登录人事管理登录输入职工基本信息结束输出职工工资标准图4-1 员工工资标准查询4.2 工资统计模块用户登录财务管理登录输入职工及出勤信息结束输入职工出勤,奖金扣款图4-2 工资统计4.3 财务处理模块用户登录财务管理登录输入教职职工的信息银行账号及员工工资结束输出职工工资表、工资发放账单表图4-3财务部工作4.4 职工工资查询模块用户登录职工登录输入职工ID及登录密码结束输出职工出勤情况,工资计算标准 ,工资金额图4-4 职工工资查询4.5 登录用户管理模块用户登录输入用户角色用户ID及密码结束输出登陆结果图4-5 用户登录管理用户登录输入人事调动信息以及员工基本信息结束4.6 人事管理模块图4-5 人事管理模块图用户登录输入员工ID及出勤信息结束4.7 员工出勤管理模块图4-5 员工出勤管理模块图五、数据字典定义的变量的汇总如下:数据字典变量描述类型长度取值Personnel职工类类boo在职判断标志bool1true/falsebh职工编号 int2见需求规格说明书t出勤次数int20-31 m基本工资int2见需求规格说明书d奖金额 int2见需求规格说明书k扣款金额int2见需求规格说明书money净工资int2Huiz存储汇总表int1000*6*2account用户名charpassword密码char其它有些变量没有出现在这里,是因为它们过于复杂,不能这样分类。六、概要设计主模块判断用户登陆进入系统退出系统用户输入账户、密码人事部财务部返回出错信息出勤统计奖 金扣款计算人员异动工资计算表格派送人员异动普通用户登录工资细节查询根据前面得到的数据流程图,用面向数据流的设计方法(软件工程导论P95)导出系统结构图如下:图6-1 系统结构图七、详细设计说明书7.1 编写目的在使用程序语言编制程序之前,需要对所采用算法的逻辑关系进行进行分析,设计出全部必要的过程细节,并给予清晰的表达,使之成为编码的依据,也作为软件测试人员及软件维护人员进行测试及维护时的参照。7.2 背景项目的提出:工资管理是学校管理的重要组成部分,它与学校的人事管理、财务管理有着密切的联系。对于劳资关系相对复杂的学校,手工进行工资的发放工作往往需要耗费大量的人力与时间。由于工资发放在时间和操作上存在着一定的重复性、规律性,这使得工资管理的计算机化成为可能,该项目的提出正是为了在此基础上进一步实现企业员工工资管理的规范化和自动化。7.3 系统的结构工资管理系统是学校管理系统的一个有机组成部分,它并非一个独立的系统,需要和员工人事管理、财务管理等系统连接,能够从这些系统中正确的取得员工基本信息、基本工资、奖金、出勤状况等信息。本系统与其他系统联系紧密,那么就得通过相应的接口相联系。本工资管理系统分为四大模块,它们分别是登录模块、普通用户、人事管理员用户、财务管理用户模块。普通用户的权限非常小,所以享受的服务也非常少,只能查询自己的一些简单信息,不能修改任何信息。管理员模块最为复杂,它是工资管理系统的核心部分,所有的设置、修改、计算和对数据库的修改都在这个模块。系统帮助为普通用户和管理员用户所共有。由前面的数据流图和系统结构图进行进一步的分析和设计,得到了后面的一些程序流程图。7.4 程序流程图7.4.1 用户注册点击新用户注册注册成功可登录填写相应的信息注册P填写信息 获得确认 图7-1 顶层图点击新用户注册填写相应的信息注册 P1D添加用户信息返回用户信息 P2注册成功填写信息 获得确认 图7-2 用户注册的详细层图NY注册系统选择注册类型人事管理用户注册财务管理用户注册普通用户注册注册界面输入注册信息信息是否有效注册成功图7-3 用户注册的详细流程图7.4.2 用户登录NYNN输入账号和密码用户类型普通用户登录财务管理用户登录输入账号和密码人事管理用户登录输入账号和密码账号和密码是否正确账号和密码是否正确普通用户界面财务管理用户界面查看基本信息查看工资、奖金、加班时间等信息人事管理用户界面YYN账号和密码是否正确登陆系统图7-4 用户登录流程图YNYN选择操作功能输入职工编号显示职工的基本信息判断是否退休修改职工为退休人员填写职工调动情况7.4.3 人事管理图7-5 人事管理流程图输入职工信息输出职工本月工资情况7.4.4 员工工资查询图7-6 员工工资查询流程图输入职工编号输入职工出勤情况根据赏罚规定计算职工的工资输入职工工资情况7.4.5 员工出勤管理图7-7 员工出勤管理流程图7.4.6 财务部管理读取人事部传来的数据是否是有离退休人员用户输入信息银行发放表发给银行、工资表发给部门(系)判断是否是做工资计算NY计算员工的工资(工资+奖金-扣款)统计并生成工资表、部门汇总表、扣税款表、银行发放表,然后保存判断是否是表格派送YN清除该职工的账号,转移关系结束YN图7-8 财务部管理流程图7.5程序部分代码然后根据这些程序流程图进行实现,得到了如下的主要代码:7.5.1 用户注册用户注册的代码如下:void welcome1() printf("n=n"); printf(" | | 请输入序号 | |n"); printf(" | | 1.用户注册。 | |n"); printf(" | | 2.普通职工登陆。 | |n"); printf(" | | 3.人事管理人员登录。 | |n"); printf(" | | 4.财务管理人员登录。 | |n");printf(" | | 5.退出系统 | |n"); printf("=n"); /* 注册界面 */ void welcome2() printf("n=n"); printf(" | | 请输入序号 | |n"); printf(" | | 1.普通职工注册。 | |n"); printf(" | | 2.人事管理人员注册。 | |n"); printf(" | | 3.财务管理人员登录。 | |n"); printf("n=n"); void welcome3() printf("nntt注册须知nn"); printf("*n"); printf("* 1.请填写您的真实资料! *n"); printf("*n"); void zhuce() Registered *reg= new Registered; char chose;reg->welcome2();if(chose <='0' | chose>='4') while(chose <='0' | chose>='4') printf("您的输入有误,请重新输入:"); fflush(stdin); scanf("%c",&chose); fflush(stdin); else if(chose='1') system("cls"); reg->pzhuce();/*普通职工注册*/ else if(chose='2') system("cls"); reg->rzhuce();/*人事管理人员注册*/ else (chose='3'); system("cls"); reg->czhuce();/*财务管理人员注册*/ /* 帐户判断 */int psearch(char* user, char* pwd, char* real_pwd)/*判断帐号是否相同,不相同返回1*/ FILE* file; char user_buff256, pwd_buff256; file = fopen(cFile, "r"); if (!file) return 0; while (!feof(file) if (fscanf(file, "%s%sn", user_buff, pwd_buff) = EOF) return 0; if (!strcmp(user_buff, user) if (real_pwd) strcpy(real_pwd, pwd_buff); return 1; fclose(file); return 0; int rsearch(char* user, char* pwd, char* real_pwd)/*判断帐号是否相同,不相同返回1*/ FILE* file; char user_buff256, pwd_buff256; file = fopen(rFile, "r"); if (!file) return 0; while (!feof(file) if (fscanf(file, "%s%sn", user_buff, pwd_buff) = EOF) return 0; if (!strcmp(user_buff, user) if (real_pwd) strcpy(real_pwd, pwd_buff); return 1; fclose(file); return 0; int csearch(char* user, char* pwd, char* real_pwd)/*判断帐号是否相同,不相同返回1*/ FILE* file; char user_buff256, pwd_buff256; file = fopen(wFile, "r"); if (!file) return 0; while (!feof(file) if (fscanf(file, "%s%sn", user_buff, pwd_buff) = EOF) return 0; if (!strcmp(user_buff, user) if (real_pwd) strcpy(real_pwd, pwd_buff); return 1; fclose(file); return 0; /* 添加用户 */int padd (char* user, char* pwd, double coin_n) FILE* file; file = fopen(cFile, "a"); if (!file) return 0; fprintf(file, "%s %s n", user, pwd, coin_n); fclose(file); return 0; int radd (char* user, char* pwd, double coin_n) FILE* file; file = fopen(rFile, "a"); if (!file) return 0; fprintf(file, "%s %s n", user, pwd, coin_n); fclose(file); return 0; int cadd (char* user, char* pwd, double coin_n) FILE* file; file = fopen(wFile, "a"); if (!file) return 0; fprintf(file, "%s %s n", user, pwd, coin_n); fclose(file); return 0; int pwenjian(char* user, char* pwd,double coin) if (psearch(user, pwd, NULL) return 0; else padd(user, pwd, coin); return 1; int rwenjian(char* user, char* pwd,double coin) if (rsearch(user, pwd, NULL) return 0; else radd(user, pwd, coin); return 1; int cwenjian(char* user, char* pwd,double coin) if (csearch(user, pwd, NULL) return 0; else cadd(user, pwd, coin); return 1; void pz