学校内部工资管理系统软件工程课程设计.doc_第1页
学校内部工资管理系统软件工程课程设计.doc_第2页
学校内部工资管理系统软件工程课程设计.doc_第3页
学校内部工资管理系统软件工程课程设计.doc_第4页
学校内部工资管理系统软件工程课程设计.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程设计题目: 学校工资信息管理系统 学生姓名:骆 宁 来 专 业:计算机应用技术班 级:1240301 指导教师:李 丽 华 2014年 6 月 17 日一 可行性分析1 引言1.1编写目的可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。本报告经审核后,交软件经理审查。1.2背景开发软件名称:学校内部工资管理系统。项目与其他软件,系统的关系:本项目采用客户机/服务器原理,客户端的程序是建立在Windows NT 系统上以PB9.0开发软件的应用程序,服务器端采用Linux 为操作系统的工作站,是采用SQL 2000的为开发软件的数据库服务程序。 1.3定义(1)员工考勤统计信息。包括的数据项有缺勤时间、缺勤天数、缺勤类别等。这些信息可从考勤管理系统中获取。(2)员工工种等信息。包括的数据项有工种等级、工种基本工资等。(3)员工津贴信息。包括的数据项有加班时间、加班天数、加班类别等。(4)员工医疗保险信息。包括的数据项有医疗保险时间、医疗费用保险、社会保险费用等。(5)员工基本信息。包括的数据项有员工号、员工姓名、员工工种、员工所属部门等。(6)员工月工资信息。包括的数据项有生成工资的时间、基本工资、缺勤扣除、加班费用、医疗保险费、月应发工资等。(7)员工年终奖金信息。包括的数据项有年份、员工的年终奖金数额等。2可行性研究的前提2.1要求主要功能:工资管理涉及学校管理的多个方面,如员工职务工种变化、员工考勤情况、员工加班情况、员工医疗保险等等。根据这些信息,在每个月的某个固定时间,生成企业员工的月工资。对于月工资,能够实现按照员工、部门、月、年、进行统计分析,产生相应报表。性能要求:在学校范围内统一各种原始单据的格式,统一账目和报表的格式。删除不必要的管理冗余,实现管理规范化、科学化。程序代码标准化,软件统一化,确保软件的可维护性和实用性。能够连接各个关联的数据库,获取数据库中的信息。保证各个数据库表格相关的项目之间有相同的属性。输入要求:数据完整,详实。输出要求:简捷,快速,实时。安全与保密要求:管理员享有对教职工工资信息的管理与修改。人事处只享有对教职工个人信息信息库的部分修改(写入与读出)。完成期限:预计2个月,即截止2013年1月。 3.1系统的分析 学校内部的人事的管理,从大的方面分,主要集中在学校职员的个人情况,工资细目,调入调出及用车等。所以该系统主要是实现对数据的录入,插入,删除,网上查询,统计,更新,打印等功能。其次,为了信息的保密与安全,系统还要提供一定的安全机制。根据以上系统的功能分析,该系统决定采用MDI风格,它主要分为以下几个模块。文件模块:此模块实现本系统对数据的打开,保存,打印预览,打印及用户管理等功能,并可由此推出系统。信息管理模块:此模块实现系统的信息管理,包括对职工情况一览表,职工调入调出情况表,职工工资表及其它各表的信息数据的插入,删除,修改,保存等功能。查询模块:此模块实现本系统的查询功能,能将个人的基本情况,调入调出情况,工资情况等检索出来,并可实现多条件查询和模糊查询。统计模块:此模块用于对数据库中的信息按照一定的规则进行统计。系统服务模块:此模块用来系统管理人员设置密码和对系统的功能和开发信息进行介绍等。以根据要求修改员工工资。如果系统没有检测到该员工的信息则返回上一层,管理员重新输入员工信息,直到查到该员工的信息,并进行修改位置。如果登录者不是管理员,只是普通员工的帐号,则进入普通帐号界面,输入要查询的员工号,系统自动判断该员工号是否存在,如果存在则显示该员工的工资信息。如果该员工号不存在则返回上一层界面。3.2工作负荷(1)员工每个工种基本工资的设定。(2)企业工资报表的生成。支持各种形式的报表,如单个员工工资报表的生成、部门员工工资报表的生成、按照月份统计工资报表的生成等。(3)管理员可以查询、更改任何员工的工资。(4)员工可以凭工号查询员工工资。(5)工资管理系统的使用帮助。(6)现有工资管理系统需要根据公司的经营状况以及人员变动对工作量进行分配。当公司调入新职员时,需要对系统进行职员更新即插入操作等以及随时对数据库进行不断的更新。任务繁重,工作量大。3.3 软件设计环境 C 语言二 需求分析1.1 数据流图n 1.2数据字典数据字典是软件分析过程中对数据的描述,是数据流图的必不可少的辅助资料。数据字典的定义和数据流图是同时进行的,每当完成一张数据流图时,都需要对该数据流图中的成分进行完整的定义,数据字典是需求分析阶段一个重要的工具,通过在数据字典中建立一组严密一致的数据定义可以帮助软件分析人员和用户之间交流,同时也有助于软件人员之间的交流,容易达到对数据的统一认识。 (1)外部实体的数据字典外部实体名称:各部门简述:提交职工的基本信息和出勤情况输入数据流:职工工资单输出数据流:职工基本信息外部实体名称:银行简述:对职工工资进行转账的部门输入数据流:职工工资信息外部实体名称:人事处简述:对职工添加,删除进行管理的部门输入数据流:职工出勤信息输出数据流:职工出勤报表(2)数据元素的数据字典数据项名称:员工工号类型:char 长度:10 说明:学校分发给每个职工的编号 备注:无 数据项名称:姓名 类型:char 长度:8 说明: 员工的个人姓名 备注:无 数据项名称:性别 类型:char 长度:2 说明: 员工的所拥有的性别 备注:无 数据项名称:基本工资类型:数字 长度:8 说明: 员工的得到的工资 备注:无 数据项名称:上课工资 类型:数字 长度:8 说明: 员工根据上课的课时得到工资 备注:无 数据项名称:其他费用 类型:数字 长度:8 说明: 员工在职期间的其他费用 备注:无 名称:职工基本信息简要说明:职工的个人信息 数据来源:各系部 数据流向: 职工基本信息管理子系统 数据流的组成:工号+姓名+性别 (3)数据流的数据字典名称:职工工资单简要说明:职工的工资条 数据来源:职工工资子系统 数据流向:各系部 数据流的组成:工号+姓名+工资单月份+基本工资+岗位津贴+加班工资+生活补贴+业绩奖金+上课工资+养老保险+医疗费用+失业金+公积金+缺勤扣费+房租+水电费+代扣所得税+应发工资+扣款总额+实发工资名称:基本出勤信息简要说明:每个月20号把出勤信息上报人事处 数据来源:人事处 数据流向:职工出勤子系统 数据流的组成:工号+姓名+出勤信息 名称:职工工资信息简要说明:所有职工的工资信息集合 数据来源:职工工资子系统 数据流向:银行数据流的组成:工号+姓名+实发工资 (4)处理过程的数据字典名称:职工工资信息生成说明:人事处将根据出勤情况和职工的基本信息生成的职工工资信息 输入:人事处 输出:生成职工工资信息表 处理:人事处根据出勤情况和所得奖金以及扣款情况以及职工个人的基本信息生成一个基本工资表名称:财务处处理职工信息整理发送说明:财务处根据职工工资基本信息整理后送往各系部和银行 输入:职工工资基本信息表 输出:将职工工资信息生成工资表和工资条送往银行和各系部处理:财务处通过工资表和职工基本信息表整理生成工资条和工资表送往各系部和银行.(5) 数据存储的数据字典数据存储名称:职工工资信息表说明:按职工工号给职工发的基本工资 数据存储组成:工号+姓名+工资单月份+基本工资+岗位津贴+加班工资+生活补贴+业绩奖金+上课工资+养老保险+医疗费用+失业金+公积金+缺勤扣费+房租+水电费+代扣所得税+应发工资+扣款总额+实发工资关键字:工号有关的数据流:无 数据存储名称:职工基本信息表说明:职工的个人信息 数据存储组成:工号+姓名+性别+密码关键字:工号有关的数据流:无 2输入输出要求数据描述2.1用户登录信息表字段字段名数据类型宽度(字节)1用户ID字符152用户密码字符203用户身份字符104所属部门字符205职务字符206身份证号字符187银行帐号字符20 2.2工资计算标准表字段字段名数据类型宽度(字节)1员工ID字符152部门ID字符203基本工资整型84奖金比率浮点型85罚金比率浮点型86扣税总额浮点型87工资总额浮点型88统计日期日期2.3 出勤汇总表 字段字段名数据类型宽度1员工ID字符15字节2应出勤时间整型4字节3实际出勤时间整型4字节4请假时间整型4字节5无故缺勤时间整型4字节2.4. 银行发放工资表字段字段名数据类型宽度1银行名字符30字节2工资表单号字符30字节3发放时间日期3需求规定 3.1对功能的规定 (1) 用户的登录及退出:用户登录后,可以查询当月及年度的工资信息并打印工资条,用户可以修改用户密码,完成一切任务后用、用户可以安全退出(2)系统用户管理:实现对用户数据的修改,删除等相关操作。(3)用户信息管理:实现对用户信息的添加、修改及删除等相关操作。(4)工资标准设立:根据职工的职务、职称等其他信息设定职工的工资的标准。 三 概要设计1.1 结构(由于绘图软件的问题,无法容纳这么多表,故,用户信息管理中的六个子模块合并成了三个进行书写)1.2功能需求与模块的关系(1)用户需要登录系统才能进行工资信息的查询及打印,并修改用户密码(2) 系统管理员需要对职工信息进行添加、修改、删除等操作就需要用到用户信息管理模块。(3) 工资标准要根据职称,职位等的不同进行设定。就需要用到工资标准设立模块2.1外部接口运行本软件要求处理器在奔腾III以上、内存在256MB以上的计算机。能够支持、Windows 2000、Windows XP及windows 7的运行环境2.2内部接口本系统内部元素之间主要通过数据库接口完成相应功能。 登录模块:完成对用户身份的验证。 初始化模块:在身份验证后,系统调用初始化操作,执行完毕后进入消息循环状态。 查找模块:由相应消息驱动,完成对信息进行查看功能。 删除模块:具有此权限的用户完成对信息删除功能。 打印模块:实现用户从系统打印功能。 退出模块:实现用户从系统退出功四 系统实现1.1系统登录界面系统用户在该界面输入正确的工号、密码和验证码即可登录该系统。登录模块会自动的判断用户输入的工号的权限。如果输入的工号是admin,则系统默认转向管理员主界面;如果输入的是其他的工号,系统会检查是否有该用户的工资信息,若有,则进入该用户的工资查询界面,若没有,则提示“没有您的工资单”。1.2系统管理员管理主界面及工资汇总界面系统管理员(即人事处管理员)通过该页面可以连接到其他的页面(其他页面包括:用户管理页面、添加工资单页面、查询教职工工资、修改及删除教职工工资等),该页面分页汇总显示了所有教职工的工资详细信息,管理员可以对各教职工的工资信息进行添加、修改和删除。1.3教职工查询工资主界面教职工用户通过输入正确的工号、密码和验证码即可登录自己的工资查询主页面,在此页面中,教职工可以查询自己近几个月的工资详细信息,也可以对自己的登录密码进行修改。同时,能打印出自己需要的工资单。1.4用户管理界面该页面由管理员来操作,通过系统管理员主页面可以访问该页面。主要是对教职工的个人信息进行汇总、添加、修改和删除等操作。1.5添加工资单界面该页面由管理员来操作,通过系统管理员主页面可以访问该页面。主要是对教职工的工资信息进行添加,添加时可以选择所添加工资信息的月份。1.6密码修改界面该页面主要实现的是用户密码的修改。不同的用户登录系统后,均能对自己的登录密码进行修改。1.7工资单打印界面该页面主要实现的是工资单的打印。系统管理员登录后能打印所有教职工的工资单,教职工登录后仅能打印本人的工资单。 五 课程设计总结 六 程序代码 因为我们小组成员编程的水平实在是很一般,无法全面系统的实现该软件的所有功能。所以,我们就选取一部分内容进行编程,我们主要对该软件的用户信息管理模块的六个子模块进行了编码,编码总体上由王雪峰负责。其他小组成员主要负协助工作。插入及添加模块有王雪峰和任深圳共同完成。修改及删除模块由王雪峰完成,查找及输入模块有王雪峰和杨博仁,杨科共同完成。#include #include #include #include #include #define TITLE n 月份 工号 姓名 应发工资 各种折扣 实发工资n#define DATA %2d %4ld %-10s %6.1f %6.1f %6.1fn,p1-month,p1-num,p1-name,p1-should_pay,p1-rebate,p1-actual_paytypedef struct pay long num; short month; char name20; float gw,jn,zw,zl,jt,yj; float should_pay; float fz,gj,sd,others; float rebate; float actual_pay; struct pay *next;PAY;FILE *fp;PAY *p1=NULL,*p2=NULL,*head=NULL;void menu();PAY *input();void output();void save(PAY *head);PAY *open();PAY *insert();void search();PAY *del();PAY *revise();/*菜单*/void main(void) short sel; do menu(); scanf(%d,&sel); switch(sel) case 1: head=input(); /用户数据添加模块 break; case 2: head=insert(); /用户数据插入模块 break; case 3: head=revise(); /用户数据修改模块 break; case 4: head=del(); /用户数据删除模块 break; case 5: search(); /用户数据查找模块 break; case 6: output(); /用户数据输出模块 break; case 0: break; while(sel!=0);void menu() printf(nnnnnnn); printf(tttt *主菜单选项*nn); printf(tttt1.创建职工工资信息n); printf(tttt2.添加职工工资信息n); printf(tttt3.修改职工工资信息n); printf(tttt4.删除职工工资信息n); printf(tttt5.查找职工工资信息n); printf(tttt6.信息列表分类n); printf(tttt7.保存 信息n); printf(tttt0.退 出n); printf(nnnnnnnn);/*用户数据添加模块*/PAY *input() short n=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); return 0; 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; /edit by Yan-Xingyu Class Network-021 printf(职工信息已输入,请按任意键返回,并存盘); getch(); return head;/*用户数据输出模块*/void output() short sel,flag,month; float min,max; do do printf(nn请选择您的列表方式:n); printf(tt1.全部清单n); printf(tt2.按月输出n); printf(tt3.按工资段输出n); printf(tt0.返回n); scanf(%d,&sel); while(sel!=1&sel!=2&sel!=3&sel!=0); head=open(); if(head=NULL) return; else switch(sel) case 1: printf(nttt *全部清单*n); printf(TITLE); p1=head; do printf(DATA); p1=p1-next; while(p1!=NULL); break; case 2: flag=0; printf(输入要查的月份:); scanf(%d,&month); printf(nttt*第%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; case 3: flag=0; printf(输入最低工资:); scanf(%f,&min); printf(输入最高工资:); scanf(%f,&max); printf(ntt *%5.1f到%5.1f工资的名单*n,min,max); printf(TITLE); p1=head; do if(p1-actual_paymin&p1-actual_paynext; flag=1; else p1=p1-next; while(p1!=NULL); if(flag=0) printf(没有该工资段的职工n); break; case 0: break; while(sel!=0);/*打开文件*/PAY *open() short n=1,read; fp=fopen(pay.txt,r); if(fp=NULL) printf(无法打开档案文件!); getch(); return NULL; if(p1=p2=(PAY*)malloc(sizeof(PAY)=NULL) printf(内存不足!); getch(); return NULL; read=fread(p1,sizeof(PAY),1,fp); if(!read) printf(文件读取出错!1); getch(); return NULL; 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(); return NULL; read=fread(p1,sizeof(PAY),1,fp); if(!read) printf(文件读取出错!2); getch(); return NULL; while(p1-next!=NULL); p2-next=p1; return head; fclose(fp);/*用户数据插入模块*/PAY *insert() PAY *p3=NULL; char sel; head=open(); if(head=NULL) return NULL; else do printf(请输入要插入的职工信息:n); p3=(PAY*)malloc(sizeof(PAY); if(p3=NULL) printf(内存不足,无法创建链表!); getch(); printf( 工号:); scanf(%d,&p3-num); getchar(); printf( 姓名:); gets(p3-name); printf( 工资月份:); scanf(%d,&p3-month); printf( 基本工资,级别工资,职务津贴,工龄津贴,其他津贴,绩效奖励 :n); scanf(%f,%f,%f,%f,%f,%f,&p3-gw,&p3-jn,&p3-zw,&p3-zl,&p3-jt,&p3-yj); printf( 房租扣款,公积金,水电费,其它扣款:n); scanf(%f,%f,%f,%f,&p3-fz,&p3-gj,&p3-sd,&p3-others); p3-should_pay=p3-gw+p3-jn+p3-zw+p3-zl+p3-jt+p3-yj; p3-rebate=p3-fz+p3-gj+p3-sd+p3-others; p3-actual_pay=p3-should_pay-p3-rebate; p1=head; while(p1!=NULL) p2=p1; p1=p1-next; p2-next=p3; p3-next=NULL; printf(成功插入,是否继续?是(Y) 否(N)n); sel=getch(); while(sel=Y|sel=y); printf(n任意键返回,并存盘n); getch(); return head;/*用户数据查找模块*/void search() short sel; long num; char name20,choose; head=open(); if(head=NULL) return; else do do printf(n选择查找方式:n); printf(tt1.按工号查找n); printf(tt2.按姓名查找n); scanf(%d,&sel); getchar(); while(sel!=1&sel!=2); switch(sel) case 1: printf(输入要查的工号:); scanf(%ld,&num); break; case 2: printf(输入要查的姓名:); gets(name); break; p1=head; while(p1-next!=NULL)&(p1-num!=num)&(strcmp(p1-name,name)!=0) /用成p1!=NULL有问题? p1=p1-next; if(p1-num=num)|strcmp(p1-name,name)=0) printf(您要查找的信息如下:n); printf(TITLE); printf(DATA); else printf(没有该信息!n); printf(是否继续?是(Y) 否(N)n); choose=getch(); while(choose=Y|choose=y); printf(任意键返回); getch(); /*用户数据删除模块*/PAY *del() short sel; long num; char name20,choose; head=open(); if(head=NULL) return NULL; else do do printf(n选择删除方式:n); printf(tt1.按工号删除n); printf(tt2.按姓名删除n); scanf(%d,&sel); getchar(); while(sel!=1&sel!=2); switch(sel) case 1: printf(输入要删除的工号:); scanf(%ld,&num); break; case 2: printf(输入要删除的姓名:); gets(name); break; p1=head; if(p1-num=num)|strcmp(p1-name,name)=0) head=p1-next; printf(删除信息成功!); else while(p1-next!=NULL)&(p1-num!=num)&(strcmp(p1-name,name)!=0) p2=p1; p1=p1-next; if(p1-num=num)|strcmp(p1-name,name)=0) p2-next=p1-next; free(p1); printf(n删除信息成功!n); else printf(n没有该信息!n); printf(是否继续?是(Y) 否(N)n); choose=getch(); while(choose=Y|choose=y); printf(任意键返回,并存盘); getch(); return head;/*用户数据修改模块*/PAY *revise() short sel; long num; char name20,choose; head=open(); if(head=NULL) return NULL; else do do printf(n查找要修改的对象:n); printf(tt1.按工号查找n); printf(tt2.按姓名查找n); scanf(%d,&sel); getchar(); while(sel!=1&sel!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论