学校内部工资管理系统软件工程课程设计.docx
《学校内部工资管理系统软件工程课程设计.docx》由会员分享,可在线阅读,更多相关《学校内部工资管理系统软件工程课程设计.docx(36页珍藏版)》请在冰豆网上搜索。
学校内部工资管理系统软件工程课程设计
课程设计报告
课程设计题目:
学校工资信息管理系统
*********
专业:
计算机应用技术
班级:
1240301
**********
2014年6月17日
一可行性分析
1引言
编写目的
可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解
经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。
明确开发风险及其所带来的经济效益。
本报告经审核后,交软件经理审查。
背景
开发软件名称:
学校内部工资管理系统。
项目与其他软件,系统的关系:
本项目采用客户机/服务器原理,客户端的程序是建立在WindowsNT系统上以开发软件的应用程序,服务器端采用Linux为操作系统的工作站,是采用SQL2000的为开发软件的数据库服务程序。
定义
(1)员工考勤统计信息。
包括的数据项有缺勤时间、缺勤天数、缺勤类别等。
这些信息可从考勤管理系统中获取。
(2)员工工种等信息。
包括的数据项有工种等级、工种基本工资等。
(3)员工津贴信息。
包括的数据项有加班时间、加班天数、加班类别等。
(4)员工医疗保险信息。
包括的数据项有医疗保险时间、医疗费用保险、社会保险费用等。
(5)员工基本信息。
包括的数据项有员工号、员工姓名、员工工种、员工所属部门等。
(6)员工月工资信息。
包括的数据项有生成工资的时间、基本工资、缺勤扣除、加班费用、医疗保险费、月应发工资等。
(7)员工年终奖金信息。
包括的数据项有年份、员工的年终奖金数额等。
2可行性研究的前提
要求
主要功能:
工资管理涉及学校管理的多个方面,如员工职务工种变化、员工考勤情况、员工加班情况、员工医疗保险等等。
根据这些信息,在每个月的某个固定时间,生成企业员工的月工资。
对于月工资,能够实现按照员工、部门、月、年、进行统计分析,产生相应报表。
性能要求:
在学校范围内统一各种原始单据的格式,统一账目和报表的格式。
删除不必要的管理冗余,实现管理规范化、科学化。
程序代码标准化,软件统一化,确保软件的可维护性和实用性。
能够连接各个关联的数据库,获取数据库中的信息。
保证各个数据库表格相关的项目之间有相同的属性。
输入要求:
数据完整,详实。
输出要求:
简捷,快速,实时。
安全与保密要求:
管理员享有对教职工工资信息的管理与修改。
人事处只享有对教职工个人信息信息库的部分修改(写入与读出)。
完成期限:
预计2个月,即截止2013年1月。
系统的分析
学校内部的人事的管理,从大的方面分,主要集中在学校职员的个人情况,工资细目,调入调出及用车等。
所以该系统主要是实现对数据的录入,插入,删除,网上查询,统计,更新,打印等功能。
其次,为了信息的保密与安全,系统还要提供一定的安全机制。
根据以上系统的功能分析,该系统决定采用MDI风格,它主要分为以下几个模块。
文件模块:
此模块实现本系统对数据的打开,保存,打印预览,打印及用户管理等功能,并可由此推出系统。
信息管理模块:
此模块实现系统的信息管理,包括对职工情况一览表,职工调入调出情况表,职工工资表及其它各表的信息数据的插入,删除,修改,保存等功能。
查询模块:
此模块实现本系统的查询功能,能将个人的基本情况,调入调出情况,工资情况等检索出来,并可实现多条件查询和模糊查询。
统计模块:
此模块用于对数据库中的信息按照一定的规则进行统计。
系统服务模块:
此模块用来系统管理人员设置密码和对系统的功能和开发信息进行介绍等。
以根据要求修改员工工资。
如果系统没有检测到该员工的信息则返回上一层,管理员重新输入员工信息,直到查到该员工的信息,并进行修改位置。
如果登录者不是管理员,只是普通员工的帐号,则进入普通帐号界面,输入要查询的员工号,系统自动判断该员工号是否存在,如果存在则显示该员工的工资信息。
如果该员工号不存在则返回上一层界面。
工作负荷
(1)员工每个工种基本工资的设定。
(2)企业工资报表的生成。
支持各种形式的报表,如单个员工工资报表的生成、部门员工工资报表的生成、按照月份统计工资报表的生成等。
(3)管理员可以查询、更改任何员工的工资。
(4)员工可以凭工号查询员工工资。
(5)工资管理系统的使用帮助。
(6)现有工资管理系统需要根据公司的经营状况以及人员变动对工作量进行分配。
当公司调入新职员时,需要对系统进行职员更新即插入操作等以及随时对数据库进行不断的更新。
任务繁重,工作量大。
软件设计环境
C语言
二需求分析
数据流图
数据字典
数据字典是软件分析过程中对数据的描述,是数据流图的必不可少的辅助资料。
数据字典的定义和数据流图是同时进行的,每当完成一张数据流图时,都需要对该数据流图中的成分进行完整的定义,数据字典是需求分析阶段一个重要的工具,通过在数据字典中建立一组严密一致的数据定义可以帮助软件分析人员和用户之间交流,同时也有助于软件人员之间的交流,容易达到对数据的统一认识。
(1)外部实体的数据字典
(2)数据元素的数据字典
数据项名称:
员工工号
类型:
char
长度:
10
说明:
学校分发给每个职工的编号
备注:
无
数据项名称:
姓名
类型:
char
长度:
8
说明:
员工的个人姓名
备注:
无
数据项名称:
性别
类型:
char
长度:
2
说明:
员工的所拥有的性别
备注:
无
数据项名称:
基本工资
类型:
数字
长度:
8
说明:
员工的得到的工资
备注:
无
数据项名称:
上课工资
类型:
数字
长度:
8
说明:
员工根据上课的课时得到工资
备注:
无
数据项名称:
其他费用
类型:
数字
长度:
8
说明:
员工在职期间的其他费用
备注:
无
名称:
职工基本信息
简要说明:
职工的个人信息
数据来源:
各系部
数据流向:
职工基本信息管理子系统
数据流的组成:
工号+姓名+性别
(3)数据流的数据字典
名称:
职工工资单
简要说明:
职工的工资条
数据来源:
职工工资子系统
数据流向:
各系部
数据流的组成:
工号+姓名+工资单月份+基本工资+岗位津贴+加班工资+生活补贴+业绩奖金+上课工资+养老保险+医疗费用+失业金+公积金+缺勤扣费+房租+水电费+代扣所得税+应发工资+扣款总额+实发工资
名称:
基本出勤信息
简要说明:
每个月20号把出勤信息上报人事处
数据来源:
人事处
数据流向:
职工出勤子系统
数据流的组成:
工号+姓名+出勤信息
名称:
职工工资信息
简要说明:
所有职工的工资信息集合
数据来源:
职工工资子系统
数据流向:
银行
数据流的组成:
工号+姓名+实发工资
(4)处理过程的数据字典
名称:
职工工资信息生成
说明:
人事处将根据出勤情况和职工的基本信息生成的职工工资信息
输入:
人事处
输出:
生成职工工资信息表
处理:
人事处根据出勤情况和所得奖金以及扣款情况以及职工个人的基本信息生成一个基本工资表
名称:
财务处处理职工信息整理发送
说明:
财务处根据职工工资基本信息整理后送往各系部和银行
输入:
职工工资基本信息表
输出:
将职工工资信息生成工资表和工资条送往银行和各系部
处理:
财务处通过工资表和职工基本信息表整理生成工资条和工资表送往各系部和银行.
(5)数据存储的数据字典
数据存储名称:
职工工资信息表
说明:
按职工工号给职工发的基本工资
数据存储组成:
工号+姓名+工资单月份+基本工资+岗位津贴+加班工资+生活补贴+业绩奖金+上课工资+养老保险+医疗费用+失业金+公积金+缺勤扣费+房租+水电费+代扣所得税+应发工资+扣款总额+实发工资
关键字:
工号
有关的数据流:
无
数据存储名称:
职工基本信息表
说明:
职工的个人信息
数据存储组成:
工号+姓名+性别+密码
关键字:
工号
有关的数据流:
无
2输入输出要求
数据描述
用户登录信息表
字段
字段名
数据类型
宽度(字节)
1
用户ID
字符
15
2
用户密码
字符
20
3
用户身份
字符
10
4
所属部门
字符
20
5
职务
字符
20
6
身份证号
字符
18
7
银行帐号
字符
20
工资计算标准表
字段
字段名
数据类型
宽度(字节)
1
员工ID
字符
15
2
部门ID
字符
20
3
基本工资
整型
8
4
奖金比率
浮点型
8
5
罚金比率
浮点型
8
6
扣税总额
浮点型
8
7
工资总额
浮点型
8
8
统计日期
日期
出勤汇总表
字段
字段名
数据类型
宽度
1
员工ID
字符
15字节
2
应出勤时间
整型
4字节
3
实际出勤时间
整型
4字节
4
请假时间
整型
4字节
5
无故缺勤时间
整型
4字节
.银行发放工资表
字段
字段名
数据类型
宽度
1
银行名
字符
30字节
2
工资表单号
字符
30字节
3
发放时间
日期
3需求规定
对功能的规定
(1)用户的登录及退出:
用户登录后,可以查询当月及年度的工资信息并打印工资条,用户可以修改用户密码,完成一切任务后用、用户可以安全退出
(2)系统用户管理:
实现对用户数据的修改,删除等相关操作。
(3)用户信息管理:
实现对用户信息的添加、修改及删除等相关操作。
(4)工资标准设立:
根据职工的职务、职称等其他信息设定职工的工资的标准。
三概要设计
结构
(由于绘图软件的问题,无法容纳这么多表,故,用户信息管理中的六个子模块合并成了三个进行书写)
功能需求与模块的关系
(1)用户需要登录系统才能进行工资信息的查询及打印,并修改用户密码
(2)系统管理员需要对职工信息进行添加、修改、删除等操作就需要用到用户信息管理模块。
(3)工资标准要根据职称,职位等的不同进行设定。
就需要用到工资标准设立模块
外部接口
运行本软件要求处理器在奔腾III以上、内存在256MB以上的计算机。
能够支持、Windows2000、WindowsXP及windows7的运行环境
内部接口
本系统内部元素之间主要通过数据库接口完成相应功能。
登录模块:
完成对用户身份的验证。
初始化模块:
在身份验证后,系统调用初始化操作,执行完毕后进入消息循环状态。
查找模块:
由相应消息驱动,完成对信息进行查看功能。
删除模块:
具有此权限的用户完成对信息删除功能。
打印模块:
实现用户从系统打印功能。
退出模块:
实现用户从系统退出功
四系统实现
系统登录界面
系统用户在该界面输入正确的工号、密码和验证码即可登录该系统。
登录模块会自动的判断用户输入的工号的权限。
如果输入的工号是admin,则系统默认转向管理员主界面;如果输入的是其他的工号,系统会检查是否有该用户的工资信息,若有,则进入该用户的工资查询界面,若没有,则提示“没有您的工资单”。
系统管理员管理主界面及工资汇总界面
系统管理员(即人事处管理员)通过该页面可以连接到其他的页面(其他页面包括:
用户管理页面、添加工资单页面、查询教职工工资、修改及删除教职工工资等),该页面分页汇总显示了所有教职工的工资详细信息,管理员可以对各教职工的工资信息进行添加、修改和删除。
教职工查询工资主界面
教职工用户通过输入正确的工号、密码和验证码即可登录自己的工资查询主页面,在此页面中,教职工可以查询自己近几个月的工资详细信息,也可以对自己的登录密码进行修改。
同时,能打印出自己需要的工资单。
用户管理界面
该页面由管理员来操作,通过系统管理员主页面可以访问该页面。
主要是对教职工的个人信息进行汇总、添加、修改和删除等操作。
添加工资单界面
该页面由管理员来操作,通过系统管理员主页面可以访问该页面。
主要是对教职工的工资信息进行添加,添加时可以选择所添加工资信息的月份。
密码修改界面
该页面主要实现的是用户密码的修改。
不同的用户登录系统后,均能对自己的登录密码进行修改。
工资单打印界面
该页面主要实现的是工资单的打印。
系统管理员登录后能打印所有教职工的工资单,教职工登录后仅能打印本人的工资单。
五课程设计总结
六程序代码
因为我们小组成员编程的水平实在是很一般,无法全面系统的实现该软件的所有功能。
所以,我们就选取一部分内容进行编程,我们主要对该软件的用户信息管理模块的六个子模块进行了编码,编码总体上由王雪峰负责。
其他小组成员主要负协助工作。
插入及添加模块有王雪峰和任深圳共同完成。
修改及删除模块由王雪峰完成,查找及输入模块有王雪峰和杨博仁,杨科共同完成。
#include<>
#include<>
#include<>
#include<>
#include<>
#defineTITLE"\n月份工号姓名应发工资各种折扣实发工资\n"
#defineDATA"%2d%4ld%-10s%%%\n",p1->month,p1->num,p1->name,p1->should_pay,p1->rebate,p1->actual_pay
typedefstructpay
{
longnum;
shortmonth;
charname[20];
floatgw,jn,zw,zl,jt,yj;
floatshould_pay;
floatfz,gj,sd,others;
floatrebate;
floatactual_pay;
structpay*next;
}PAY;
FILE*fp;
PAY*p1=NULL,*p2=NULL,*head=NULL;
voidmenu();
PAY*input();
voidoutput();
voidsave(PAY*head);
PAY*open();
PAY*insert();
voidsearch();
PAY*del();
PAY*revise();
/*菜单*/voidmain(void)
{
shortsel;
do
{
menu();
scanf("%d",&sel);
switch(sel)
{
case1:
head=input();建职工工资信息\n");
printf("\t\t\t\t2.添加职工工资信息\n");
printf("\t\t\t\t3.修改职工工资信息\n");
printf("\t\t\t\t4.删除职工工资信息\n");
printf("\t\t\t\t5.查找职工工资信息\n");
printf("\t\t\t\t6.信息列表分类\n");
printf("\t\t\t\t7.保存信息\n");
printf("\t\t\t\t0.退出\n");
printf("\n\n\n\n\n\n\n\n");
}
/*用户数据添加模块*/
PAY*input()
{
shortn=1;
p1=(PAY*)malloc(sizeof(PAY));
if(p1==NULL)
{
printf("内存不足,无法创建链表!
");
getch();
}
printf("\n请输入第%d位职工的信息(以工号为0结束):
\n",n);
printf("工号:
");
scanf("%d",&p1->num);
if(p1->num==0)
{
printf("按任意键返回!
");
getch();
free(p1);
return0;
}
getchar();
printf("姓名:
");
gets(p1->name);
printf("工资月份:
");
scanf("%d",&p1->month);
printf("基本工资,级别工资,职务津贴,工龄津贴,其他津贴,绩效奖励:
\n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf("房租扣款,公积金,水电费,其它扣款:
\n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
while(p1!
=NULL)
{
if(n==1)
head=p1;
else
p2->next=p1;
n++;
p2=p1;
p1=(PAY*)malloc(sizeof(PAY));
if(p1==NULL)
{
printf("内存不足,无法创建链表!
");
getch();
}
printf("请输入第%d位职工的信息(以工号为0结束):
\n",n);
printf("工号:
");
scanf("%d",&p1->num);
getchar();
if(p1->num==0)
{
p1=NULL;
break;
}
printf("姓名:
");
gets(p1->name);
printf("工资月份:
");
scanf("%d",&p1->month);
printf("基本工资,级别工资,职务津贴,工龄津贴,其他津贴,绩效奖励:
\n");
scanf("%f,%f,%f,%f,%f,%f",&p1->gw,&p1->jn,&p1->zw,&p1->zl,&p1->jt,&p1->yj);
printf("房租扣款,公积金,水电费,其它扣款:
\n");
scanf("%f,%f,%f,%f",&p1->fz,&p1->gj,&p1->sd,&p1->others);
p1->should_pay=p1->gw+p1->jn+p1->zw+p1->zl+p1->jt+p1->yj;
p1->rebate=p1->fz+p1->gj+p1->sd+p1->others;
p1->actual_pay=p1->should_pay-p1->rebate;
}
p2->next=NULL;
部清单\n");
printf("\t\t2.按月输出\n");
printf("\t\t3.按工资段输出\n");
printf("\t\t0.返回\n");
scanf("%d",&sel);
}while(sel!
=1&&sel!
=2&&sel!
=3&&sel!
=0);
head=open();
if(head==NULL)
return;
else
switch(sel)
{
case1:
printf("\n\t\t\t******全部清单******\n");
printf(TITLE);
p1=head;
do
{
printf(DATA);
p1=p1->next;
}while(p1!
=NULL);
break;
case2:
flag=0;
printf("输入要查的月份:
");
scanf("%d",&month);
printf("\n\t\t\t******第%d月工资清单******\n",month);
printf(TITLE);
p1=head;
do
{
if(p1->month==month)
{
printf(DATA);
p1=p1->next;
flag=1;
}
else
p1=p1->next;
}while(p1!
=NULL);
if(flag==0)
printf("没有该月清单\n");
break;
case3:
flag=0;
printf("输入最低工资:
");
scanf("%f",&min);
printf("输入最高工资:
");
scanf("%f",&max);
printf("\n\t\t******%到%工资的名单******\n",min,max);
printf(TITLE);
p1=head;
do
{
if(p1->actual_pay>min&&p1->actual_pay{
printf(DATA);
p1=p1->next;
flag=1;
}
else
p1=p1->next;
}while(p1!
=NULL);
if(flag==0)
printf("没有该工资段的职工\n");
break;
case0:
break;
}
}while(sel!
=0);
}
/*打开文件*/
PAY*open()
{
shortn=1,read;
fp=fopen("","r");
if(fp==NULL)
{
printf("无法打开档案文件!
");
getch();
returnNULL;
}
if((p1=p2=(PAY*)malloc(sizeof(PAY)))==NULL)
{
printf("内存不足!
");
getch();
returnNULL;
}
read=fread(p1,sizeof(PAY),1,fp);
if(!
read)
{
printf("文件读取出错!
1");
getch();
returnNULL;
}
if(p1->next==NULL)
head=p1;
else
{
do
{
if(n==1)
head=p1;
else
p2->next=p1;
n++;
p2=p1;
if((p1=(PAY*)malloc(sizeof(PAY)))==NULL)
{
printf("内存不足!
");
getch();
returnNULL;
}
read=fread(p1,sizeof(PAY),1,fp);
if(!
read)
{
printf("文件读取出错!
2");
getch();
returnNULL;
}
}while(p1->next!
=NULL);
p2->next=p1;
}
returnhead;
fclose(fp);
}
/*用户数据插入模块*