实验名称:_实验5 综合性实验 任课教师: 高川翔__ 专 业:___信息与计算科学__ 班级:___071 姓 名:__陈钰阶____ 学 号:_200711314117__ _ 评 分:_____ ____
一、实验目的:
联系所学的管理信息系统开发的原理、技术、方法、工具和步骤,以及在各个阶段上应该完成的工作内容等理论知识,亲身体会开发一个管理信息系统的全过程及其工作内容,训练独立从事开发管理信息系统的能力。
二、实验内容:
根据以下提示信息进行一个实际管理系统的系统分析、系统设计和系统实施。
ZHK大学共有教职员工3758人。学校下设教务处、财务处和房产处等二十六处室,还设有计算机系、自动控制系和管理工程系等十八个教学系,此外还附设一个机械工厂、一个电子厂和一所校医院。该校财务处负责全校教职工的工资管理工作,其工资管理业务情况如下: 每月25日至28日,房产处将本月职工住房的房费和水电费扣款清单报送财务处,总务处将托儿费扣款和通勤职工的交通补贴费清单报送财务处。财务处按期列出一份职工借支应扣款清单。所有这些清单的格式如表SJ-l和表SJ-2所示。
表 SJ-1 ( )月份职工( )项扣款清单
职工号 姓名 扣款金额(元) 备注 制表人: 日期: 表 SJ-2 ( )月份职工交通补贴清单 职工号 姓名 补贴金额(元) 备注 制表人: 日期: 此外,学校人事部门及时向财务处提供下列信息:
1)若有职工在学校内部各部门之间调动工作情况发生,则提供这些职工的姓名、由何部门调至何部门工作、工资发放变动情况等。
2)若有校外人员调入学校工作,则应提供调入者的职工号、姓名、调入校内何部门、以及有关调入者工资方面的数据,还有他们的工资开始发放的月份,据此,财务处的工资管理会计员建立调入者的职工工资台帐帐页。 3)若有职工调离学校,则要提供调出人员的姓名、所在单位和终止发放本人工资的月份。 4)若调整工资,则应提供全校教职工工资调整变动情况清单和调整后工资从哪个月份开始发放。
1
当财务处收到各部门报送来的扣款单、补贴清单和其它有关职工工资变动通知单后,财务处的工资管理会计就可以依据上个月份的职工工资台帐制做本月职工工资台帐。职工工资台帐格式如表SJ-3所示,每名职工全年工资信息占据台帐的一页。
表SJ-3 某大学职工工资台帐帐页 第 页 职工号: 姓名: 部门代号: 部门名称: 月份 基本 工龄 副食 煤粮 交通 备补 备补 应发 房 水电 托儿 借支 工资 工资 补贴 补贴 补贴 1 2 工资 费 费 费 扣款 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 其它 扣款 实发 扣款 合计 工资 表SJ-4 某大学一月份职工工资发放单 部门名称: 姓名 基本 工龄 副食 煤粮 交通 备补 工资 工资 补贴 补贴 补贴 1 汪大伟 „„ 李 俊 合计 备补 应发 房 2 工资 费 水电 托儿 借支 其它 扣款 实发 费 费 扣款 扣款 合计 工资
工资管理会计员依据工资汇总表上的全校“实发工资”合计数字,从银行提回现金,并
于下月的5号将本月份职工工资发至职工手中。 职工工资计算处理中的几项说明: .工龄工资每人每年增加50元。
.应发工资 = 基本工资 + 工龄工资 + 各项补贴之和。
.扣款合计 = 房费 + 水电费 + 托儿费 + 借支扣款 + 其它扣款。 .实发工资 = 应发工资 - 扣款合计。
从上面的描述不难看出,该所大学现行职工工资管理业务工作量特别大,同时还时常出现差错现象。有关人员迫切要求早日开发出全校职工工资管理信息系统,用计算机代替手工记帐、计算和制作报表工作。学校主管领导也十分支持这项工作,已批准投资10万元人民币用于购置设备和软件开发。同时,学校还拥有雄厚的技术力量。
三、分析设计 (要求:
2
严格按照结构化系统分析方法,完成以下各项工作: 1)业务流程图
住房的房费房产处水电费职工扣款及补贴管理借支应扣款上个月份的职工工资台帐托儿费总务处交通补贴工资管理会计工作调动职工调入人事部职工情况管理工资核算管理职工调离工资调整扣款合计实发工资应发工资本月职工工资台帐财务处
2)数据字典
实体 数据项名 DepartmentNo 说明 部门编号 类型(长度) char(3) 注释&内容 唯一标识一个部门 部门 Department DepartmentName Telphone 部门名称 varchar2(20) 公司各部门的名称 联系电话 varchar2(14) char(3) 14位电话号码 上级部门编号 UpperDepartmentNo 上级部门
3
编号 岗位DCPost PostNo PostName EmployeeNo EmployeeName 员工Employee DepartmentNo PostNo WorkDate Id BankNo Birthday Telphone EmployeeNo 工资 Salary BalanceDate RealWage IsBalance SalItemNo 工资项 SalItem SalItemName SalItemType EmployeeNo BalanceDate 工资明细 SalDetail SalItemNo SalItemWage SalItemType 部门编号 岗位编号 工作日期 char(3) char(3) date Sex 岗位编号 char(3) 唯一标识一个岗位 岗位名称 varchar2(20) 公司所设岗位的名称 员工编号 char(8) 唯一标识一个员工 员工的名称 只能为‘男’、‘女’ 参照完整性 参照完整性 员工参加工作的日期 18位身份证号 19位银行帐号 日期类型 14位电话号码 参照员工表 员工工资结算的时间 员工实际领取的工资 只能在0和1之间取值 惟一标识工资项 工资项名称 只能在1和-1之间取值 参照完整性 员工工资结算的时间 参照完整性 工资项金额数量 只能在1和-1之间取值 员工名称 varchar2(20) 性别 char(2) 身份证号 varchar2(18) 银行帐号 varchar2(19) 生日 date 联系电话 varchar2(14) 员工编号 结算时间 实发工资 是否结算 工资项编号 工资项名称 工资项类型 员工编号 结算时间 工资项编号 工资项金额 工资项类型 4
char(5) date number number char(5) number number char(5) date char(5) number number
EmployeeNo OvertimeDate 加班记录 OvertimeRecord OTLength VerifyPerson Desrciption EmployeeNo AttendDate 考勤记录AttendanceRecord AttendType AttendPerson Desrciption
数据项条目 员工编号 加班时间 加班时长 审核人编号 备注 员工编号 考勤时间 考勤类型 审核人编号 备注 char(5) date number varchar2(20) varchar2(30) char(5) date number varchar2(20) varchar2(30) 参照完整性 员工加班发生的时间 员工加班小时数 审核加班处理人 备注记录 参照完整性 考勤发生的时间 只能在0-2之间取值 审核考勤处理人 备注记录 名称:职工编号 总编号:0001-3758 别名:无 编号:3758 说明:高校职工工资管理系统职工的编号 类型:字符 长度:20 有关数据结构:职工基本信息表
数据项条目 名称:职工姓名 总编号:0001-3758 别名:无 编号:3758 说明:高校职工工资管理系统职工的姓名 类型:字符 长度:20 有关数据结构:职工基本信息表
数据项条目 名称:职工工资名称 总编号:001-200 别名:无 编号:200 说明:高校职工工资管理系统职工的工资名称 类型:字符 长度:20 有关数据结构:职工工资明细表
数据项条目 5
名称:职工工资金额 总编号:001-200 别名:无 编号:200 说明:高校职工工资管理系统职工的工资金额 类型:字符 长度:20 有关数据结构:职工工资明细表
严格按照结构化系统设计方法,完成以下各项工作: 1)功能结构图设计
职工工资管理信息系统职工管理扣款管理补贴管理工资核算管理工作调动职工调入职工调离工资调整住房房费水电费托儿费交通补贴扣款合计应发工资实发工资
2)存储文件格式设计(数据库结构设计)
1、层次数据库结构
层次数据库结构将数据通过一对多或父结点对子结点的方式组织起来。一个层次数据库中,根表或父表位于一个类似于树形结构的最上方,它的子表中包含相关数据。层次数据库模型的结构就像是一棵倒转的树。 优点:
快速的数据查询
便于管理数据的完整性 缺点:
用户必须十分熟悉数据库结构 需要存储冗余数据 2、网状数据库结构
网状数据库结构是用连接指令或指针来组织数据的方式。数据间为多对多的关系。矢量数据描述时多用这种数据结构。 优点:
快速的数据访问
用户可以从任何表开始访问其他表数据
6
便于开发更复杂的查询来检索数据 缺点:
不便于数据库结构的修改
数据库结构的修改将直接影响访问数据库的应用程序 用户必须掌握数据库结构 3、关系数据库结构
这就目前最流行的数据库结构了。数据存储的主要载体是表,或相关数据组。有一对一、一对多、多对多三种表关系。表关联是通过引用完整性定义的,这是通过主码和外码(主键或外键)约束条件实现的。 优点:
数据访问非常快
便于修改数据库结构
逻辑化表示数据,因此用户不需要知道数据是如何存储的 容易设计复杂的数据查询来检索数据 容易实现数据完整性
数据通常具有更高的准确性 支持标准SQL语言 缺点:
很多情况下,必须将多个表的不同数据关联起来实现数据查询 用户必须熟悉表之间的关联关系 用户必须掌握SQL语言 4、面向对象数据库结构
它允许用对象的概念来定义与关系数据库交互。值得注意的是面向对象数据库设计思想与面向对象数据库管理系统理论不能混为一谈。前者是数据库用户定义数据库模式的思路,后者是数据库管理程序的思路。
面向对象数据库中有两个基本的结构:对象和字面量。对象是一种具有标识的数据结构,这些数据结构可以用来标识对象之间的相互关系。字面量是与对象相关的值,它没有标识符。 优点:
程序员只需要掌握面向对象的概念,而不要掌握与面向对象概念以及关系数据库有关的存储
对象具有继承性,可以从其他对象继承属性集 大量应用软件的处理工作可以自动完成 从理论上说,更容易管理对象
面向对象数据模型与面向对象编程工具更兼容 缺点:
由于面向对象数据库不支持传统的编程方法,所以用户必须理解面向对象概念 目前面向对象数据库模型还没有统一的标准
由于面向对象数据库出现的时间还不长,稳定性还是一个值得关注的焦点 5、另外
7
还有两种:古老的平面文件数据库结构和较新的对象关系数据库结构。当然现在还有人用纯XML文档作数据库。
两层C/S结构
由服务器、客户机在局部范围内建立局域网,数据库设置在服务器中,客户机中可存放其备份或临时表,就构成所谓两层C/S结构,如图7.6所示。
图7.6 C/S结构图
服务器中数据被众多客户机程序所共享,它们可以同时读或写服务器中的数据,如有多台客户机中程序对同一数据做读写操作,就可能发生冲突。这一问题我们已在并发控制中作了说明。在设计时,对数据可能有如下不同处理形式。
在处理时,客户机先向服务器索取数据,然后释放数据库,在客户机端处理数据,最后将结果送回服务器。这种处理方式对服务器、通信线路利用效率较高,但要注意防止并发操作错误。
在处理时,客户机接受用户要求,并发给服务器,在服务器端处理,最后将结果传回客户机显示或打印。这种处理方式网络通信量较小、能防止并发操作错误,但服务器的CPU特别繁忙, 反应速度较低,且容易出现死锁或活锁。
三层C/S结构(B/S结构)
在Internet网络支持下,系统可更大规模扩大,出现了三层客户/服务器体系结构,即Browser/server模式,其拓扑结构如图7.7所示。
8
图7.7 三层C/S网络结构
这种结构使系统从封闭的集中式主机向开放的与平台无关的环境过渡,服务器端可以不只一台主机,可采用主机的群集技术构成,客户端程序极大简化。在客户端借助Web游览器可以处理简单的客户端处理请求, 显示用户界面及服务器端运行结果, Web服务器负责接收远程或本地的数据查询请求,然后运行服务器脚本,借助于中间件把数据通过ODBC发送到数据库服务器上以获取相关数据,再把结果数据传回客户的Browser。 数据库服务器端负责管理数据库,处理数据更新及完成查询要求,运行存储过程。这种方式使应用面极大扩展,而安全问题也变得更加令人重视。
表3-1 部门表Department 数据项名 DepartmentNo DepartmentName UpperDepartmentNo Telphone 类型(长度) 是否为空 char(3) 约束说明 Department_PK varchar2(20) not null 名称唯一 char(3) null 外键/触发器 部门名称 上级部门编号 部门联系电话 说明 部门编号 not null 主键约束: varchar2(12) not null 表3-3 职工表Employee 数据项名 EmployeeNo 类型(长度) 是否为空 char(8) not null 约束说明 主键约束: Employee_PK Check约束:“F”表示为女性,“M”表示为男说明 员工编号,唯一标识一个员工 员工名称 员工性别 EmployeeName varchar2(30) not null Sex char(2) not null 9
性 DepartmentNo char(3) PostNo Workdate Id BankNo Birthday Telphone char(3) date not null not null null 外键约束: EmployeeDCPost_FK Like yyyy-mm-dd Like yyyy-mm-dd 所属部门编号,职位编号,参照岗位表 参加工作日期 18位身份证号 19位银行帐号 员工出生年月 12位联系电话 EmployeeDepartment_FK 参照部门表 varchar2(18) not null varchar2(19) not null date null varchar2(12) null 表3-4 工资表Salary 数据项名 类型(长度) 是否为空 not null not null 约束说明 主键约束: Salary_PK 外键约束: SalaryEmployee_FK RealWage IsBalance number number null not null 员工实发工资 说明 员工编号 员工工资结算日期 EmployeeNo char(8) BalanceDate date Check约束,0表示工资是否已结未结算,1表示已结算 算 表3-5 工资项表SalItem 数据项名 SalItemNo 类型(长度) char(5) 是否为空 not null 约束说明 主键约束: SalItem_PK SalItemName varchar2(20) not null SalItemType number not null Check约束: 1表示为增加工资项,-1表示为扣罚工资项 表3-6工资明细表SalDetail 数据项名 EmployeeNo BalanceDate
说明 工资项编号 工资项名称 工资项的类型 类型(长度) 是否为空 char(8) date not null not null 10
约束说明 主键约束: SalDetail_PK 说明 员工编号 结算时间 SalItemNo SalItemWage SalItemType char(5) number number not null not null not null SalItemNo参照工作项表 Check in ‘-1’or’1’ 工资项编号 工资项金额 工资项类型 表3-8 考勤记录表AttendanceRecord 数据项名 EmployeeNo AttendDate AttendType 类型(长度) 是否为空 char(8) date number not null not null 约束说明 主键约束: AttendanceRecord_PK Check约束:用0表示早not null 退,用1表示迟到,用2表示缺勤 AttendPerson Char(8) not null null 外键,参照员工表的员工编号 备注记录 审核人编号 备注 考勤类型 说明 员工编号 考勤时间 Desrciption varchar2(30) 表3-9 用户表SUsers 数据项名 UserNo UserName 类型(长度) char(8) 是否为空 not null 约束说明 主键约束 系统管理员,1表示财务人员,2表示员工,3表示人事部员工 UsertypeName varchar2(20) not null 用户类型名称
严格按照结构化程序设计方法,完成以下各项工作:
1) 程序框图
说明 用户编号 用户名称 用户密码 varchar2(20) not null UserPassword Varchar2(20) not null UserType number not null Check约束: 0表示用户类型 11
2) 部分源程序)
12
/*
* JavaApp.java */
package java;
import org.jdesktop.application.Application;
import org.jdesktop.application.SingleFrameApplication; /**
* The main class of the application. */
public class JavaApp extends SingleFrameApplication {
/**
13
* At startup create and show the main frame of the application. */
@Override protected void startup() { show(new JavaView(this)); }
/**
* This method is to initialize the specified window by injecting resources. * Windows shown in our application come fully initialized from the GUI * builder, so this additional configuration is not needed. */
@Override protected void configureWindow(java.awt.Window root) { }
/**
* A convenient static getter for the application instance. * @return the instance of JavaApp */
public static JavaApp getApplication() {
return Application.getInstance(JavaApp.class); }
/**
* Main method launching the application. */
public static void main(String[] args) { launch(JavaApp.class, args); } }
四、实验中遇到的问题及解决方法
14
因篇幅问题不能全部显示,请点此查看更多更全内容