票据管理系统设计与实现

石家庄经济学院

课程设计报告

课程名称: 数据库原理课程设计 专 业: 计算机科学与技术 姓 名: 班 级: 学 号:

指导教师:

2015年 06 月30日

票据管理系统

引言

随着计算机时代的飞速发展,我们的日常生活开始跟计算机变得密不可分,如今硬件的成熟使得家家都有一台PC 机,而相对于传统的报表统计,会计的工作量也在随着时代的变化,脱离了传统的算盘,开始跟计算机接轨。相应的以前一些管理软件也不再是一些大型的企业的专属,小户小家也开始学着使用完善的管理系统来减少自己的工作量。

通过管理系统的分析统计,可以获取自己需求的有效信息,从而化繁为简使枯燥的对接工作变得简单。因此小型家用软件的诞生也应运而生,进入到千家万户的数据管理工作当中来。

1 需求分析

本系统的使用用户为重型罐车、货车等行业的从业者。根据寒假对于货运票据的整理核对以及跟父母的沟通,得出以下的实际需求。

1.1票据的基本情况

票据的由司机填写,最后交给货车的所有人进行收纳保管。 1.1.1司机的基本信息

入职的时候填写入职表,填写基本信息保存,如姓名,籍贯,身份证号,联系电话。并为每一名司机分配一个员工号。

1.1.2发货地的基本信息

对于发货地需要清楚其地址,联系方式即可。 1.1.3收货地的基本信息

对于收货地需要清楚其地址,联系方式即可。 1.1.4货物的基本信息

货物都有相应的货物编号,名称,所属地,价格 1.1.5运输的基本信息

司机去接收货物的时候要称量装载重量,接货日期,送到收货地还要在一次称重(运输途中有不部分损耗), 收货日期。运输途中会产生消费。

1.2用户对系统的要求

1.2.1处理要求

用户应该具有对上述票据的基本情况可以相应增加、删除、修改。 1.2.2 信息要求

用户应具备对上述票据的基本情况可以查询具体的数据,比如年底需要核对票据,应该有相应的票据信息查询,同时应具备票据部分(运输产生的票据)可以统计查询,如一段时间的总车数,实送吨数等等。

1.2.3安全性和完整性

应设置相应的用户登录保证非合法用户不能登录,并且对密码进行MD5加密,

也可通过权限来给他人添加用户,比如普通用户有添加数据的权限,但无法修改以及删除,以防止他人通过数据库获取篡改票据信息,带来不必要的麻烦,数据项不能为空值。

1.3功能模块划分

按照基本模块来划分功能则可分为用户管理、司机管理、收货地管理、发货地管理、货物管理、票据管理六大模块。功能设计如图1-1所示。

图1-1 票据管理功能图

1.3.1用户管理

以管理员身份登录的用户可以添加新的用户、删除用户、修改用户信息、查询用户信息功能,以普通用户身份登录的用户只可以修改自己的账号信息。

1.3.2司机管理

具有司机信息的录入、修改、删除、查询功能。 1.3.3收货地管理

对收货地的信息进行录入、修改、删除、查询功能。 1.3.4发货地管理

对发货地的信息进行录入、修改、删除、查询功能。 1.3.5货物管理

对货物的信息进行录入、修改、删除、查询功能。 1.3.6票据管理

最基本的对票据进行录入、修改、删除(软删除)、查询功能,同时具备票据核查、票据统计、消费统计等基本功能。

2 概念结构设计

由上述需求分析可知系统中包含如下实体:

用户实体,其属性为用户编号、用户名称、用户密码。

权限实体,其属性为权限编号、权限名称。

司机实体,其属性为司机编号、司机姓名、电话、身份证号、籍贯。 取货地实体,其属性为取货地编号、取货地名称、电话、取货地地址。 送货地实体,其属性为送货地编号、送货地名称、电话、送货地地址。 货物实体,其属性为货物编号,货物名称,价格。 一个用户只有一个权限所以是一对一关系,通过对应可以获取对于本系统不同的操作权限。

多名司机可以去多个取货地取货,取货时需要登记日期、称量货重,他们之间的关系是多对多关系。

多个司机可以送货到多个收货地也要登记日期,称量货重,他们之间的关系也是多对多关系。

一个取货地可以有多个货物,所以他们之间的关系为一对多关系。

一个收货地接收多个货物,他们之间的关系为一对多关系。 其整体的E-R 图如2-1所示。

图 2-1票据管理系统E_R图

3 逻辑结构设计

概念设计是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R 图转换为与选用DBMS 产品所支持的数据模型相符合的逻辑结构。

从理论上讲,设计逻辑结构应该选择最适用于相应概念结构的数据模型,然后对支持这种数据模型的各种DBMS 进行比较,从中选出最适合的DBMS 。但实际情况往往是已给定了某种DBMS ,设计人员没有选择的余地。目前DBMS 产品一般支持关系,网状,层次三种模型中的某一种。对某一种数据模型,各个机器系统又有许多不同的限制,提供不同环境与工具,所以设计逻辑结构时,一般要分3步进行:

(1) 将概念模型转换为一般的关系、网状、层次模型;

(2) 将转换来的关系、网状、层次模型向特定DBMS 支持下的数据模型转换;

(3) 对数据模型进行优化。

根据上述步骤,将图2-1所示的E-R 图转换为关系数据库模式。

用户(用户编号,用户名,密码,权限编号);其中用户编号为主码,权限编号为外码。

权限(权限编号,权限名);其中权限编号为主码。

司机(司机编号,司机名,身份证号,籍贯,联系方式);其中司机编号为主码。

取货地(取货地编号,取货地名,地址,联系方式);其中取货地编号为主码。

收货地(收货地编号,收货地名,地址,联系方式);其中收货地编号为主码。

货物(货物编号,货物名,价格,取货地编号);其中货物编号为主码,取货地编号为外码。

票据(票据号,司机编号,货物编号,取货地编号,收货地编号,装载重量,卸载重量,出发时间,返回时间,登记时间);其中主码为票据号。

给出每一个关系的数据结构定义如下: 1. 用户

用户实体跟权限实体是一对一关系,由此可以得出用户的关系模式:(用户编号,用户名,密码,权限编号)。其中用户编号为主码,权限编号为外码。如表3-1所示。

表3-1 用户表属性

2. 权限

权限实体的关系模式:权限编号,权限名)。其中权限编号为主码。如表3-2所示。

3,司机

司机实体的关系模式:(司机编号,司机名,身份证号,籍贯,联系方式)。其中司机编号为主码。如表3-3所示。

表3-3 司机表属性

4. 取货地

取货地实体的关系模式:(取货地编号,取货地名,地址,联系方式)。其中取货地编号为主码。如表3-4所示。

5. 收货地

收货地实体的关系模式:(收货地编号,收货地名,地址,联系方式)。其中收货地编号为主码。如表3-5所示。

6. 货物

货物实体的关系模式:(货物编号,货物名,价格,取货地编号)。其中货物编号为主码,取货地编号为外码。如表3-6所示。

7. 票据

票据实体的关系模式:(票据号,司机编号,货物编号,取货地编号,收货地编号,装载重量,卸载重量,出发时间,返回时间,登记时间)。其中主码为票据号。如表3-7所示。

表3-7 票据表属性

每个实体属性都满足:

(1)所有非主属性对每一个码都是完全函数依赖。

(2)所有的主属性对每一个不包含它的码,也是完全依赖函。 (3)没有任何属性完全函数依赖于非码的任何一组属性。

由此可知,每个实体都满足BCNF ,但为了提高数据的存取速度等,在此可以降低实体的范式。

4 数据库物理设计

数据库物理设计是将给定的逻辑结构实施到具体的环境中,逻辑数据模型要选取一个具体的工作环境,这个工作环境提供了数据存储结构与存取方法。 首先,确定数据库的存储结构,因为人事管理的关系相对比较简单,而且不变,综合考虑了存取时间,存储空间利用率和维护代价,所以,我选择了HASH 存取方法。

其次,确定数据的存取路径是双向的,是指请求和数据存储系统中传递的通道,存取路径就是从数据到物理存储设备之间的交互通道,在人事管理中数据库就担任这个交互的通道。

再次,确定数据的存放位置,我将表存放在磁盘上,以加快数据的存取速度,将日志文件和数据库对象,包括表等,存放在磁盘上。

最后,确定系统配置,DBMS 产品一般都提供了一些系统配置变量,存储分配参数。初始化情况下,系统都为这些变量赋予了合理的默认值,在这里我也采用系统赋予了默认值。

票据管理系统是采用SQL Server2008进行实施的,数据库创建语句如下:

CREATE DATABASE [Home] ON PRIMARY ( NAME = N'Home', FILENAME =

N'D:\sql\MSSQL10.MSSQLSERVER\MSSQL\DATA\Home.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

LOG ON

( NAME = N'Home_log', FILENAME =

N'D:\sql\MSSQL10.MSSQLSERVER\MSSQL\DATA\Home_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

其次是对表的创建,票据管理系统共需创建7个表,分别是:用户表、权限表、司机表、货物表、收货地表、取货地表、票据表。

权限表的创建语句如下:

CREATE TABLE [dbo].[T_Authority]( [authorityId] [char](10) NOT NULL, [authorityName] [char](10) NOT NULL,

CONSTRAINT [PK_T_Authority] PRIMARY KEY CLUSTERED

)

[authorityId] ASC

用户表的创建语句如下:

CREATE TABLE [dbo].[T_User]( [userId] [char](30) NOT NULL, [userName] [char](10) NOT NULL, [userPassword] [char](30) NOT NULL, [authorityId] [char](10) NOT NULL,

CONSTRAINT [PK_T_User] PRIMARY KEY CLUSTERED

( [userId] ASC

)

WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 司机表的创建语句如下:

CREATE TABLE [dbo].[T_Driver] (

[driverId] [char](10) NOT NULL, [driverName] [char](10) NOT NULL, [carId] [char](20) NOT NULL, [address] [char](30) NOT NULL, [Tel] [char](15) NOT NULL,

CONSTRAINT [PK_T_Driver] PRIMARY KEY CLUSTERED

( [driverId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

货物表的创建语句如下:

CREATE TABLE [dbo].[T_Cargo]( [cargoId] [char](10) NOT NULL, [cargoName] [char](10) NOT NULL, [price] [decimal](18, 2) NOT NULL, [addressId] [char](10) NOT NULL,

CONSTRAINT [PK_T_Cargo] PRIMARY KEY CLUSTERED

(

[cargoId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, I GNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 收货地表的创建语句如下:

CREATE TABLE [dbo].[T_startAddress]( [startAddressId] [char](10) NOT NULL, [startAddressName] [char](10) NOT NULL, [address] [char](30) NOT NULL, [Tel] [char](15) NOT NULL,

CONSTRAINT [PK_T_startAddress] PRIMARY KEY CLUSTERED

(

[startAddressId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 取货地表的创建语句如下:

CREATE TABLE [dbo].[T_endAddress]( [endAddressId] [char](10) NOT NULL, [endAddressName] [char](10) NOT NULL, [address] [char](20) NOT NULL, [Tel] [char](15) NOT NULL,

CONSTRAINT [PK_T_endAddress] PRIMARY KEY CLUSTERED

(

[endAddressId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

票据表的创建语句如下:

CREATE TABLE [dbo].[T_Bill](

[billId] [uniqueidentifier] NOT NULL, [driverId] [char](10) NOT NULL, [cargoId] [char](10) NOT NULL,

[loadWeight] [decimal](18, 2) NOT NULL, [unloadWeight] [decimal](18, 2) NOT NULL, [startAddressId] [char](10) NOT NULL,

[endAddressId] [char](10) NOT NULL, [beginTime] [datetime] NOT NULL, [backTime] [datetime] NOT NULL, [registerTime] [datetime] NOT NULL, [isdelete] [char](2) NOT NULL,

CONSTRAINT [PK_T_Bill] PRIMARY KEY CLUSTERED ( [billId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

5 数据库的实施

用数据库语句对数据库进行测试

1.用户表数据录入如下:

insert into T_User values('111','韩子飞','123','2')

insert into T_User values('666','韩增利','123','1')

成功插入数据后,可看到用户表中的数据,如图5-1所示。

图5-1 用户表成功录入数据

2.权限表数据录入如下:

insert into T_Authority values('1','管理员') insert into T_Authority values('2','用户')

成功插入数据后,可看到用户表中的数据,如图5-2所示。

图5-2 权限表成功录入数据

3.货物表数据录入如下:

insert into T_Cargo values('200101' , '粉煤灰' , 25.60,'3001') insert into T_Cargo values('200102' , '水泥' , 25.60,'3002') 成功插入数据后,可看到货物表中的数据,如图5-3所示。

图5-3 货物表成功录入数据

4.取货地表数据录入如下:

insert into T_startAddress values('3002', ' 鼎鑫',' 鹿泉市鼎鑫水泥厂','[1**********]')

insert into T_startAddress values('3001','徐水',' 保定市徐水市','[1**********]')

成功插入数据后,可看到取货地表中的数据,如图5-4所示。

图5-4 取货地表成功录入数据

5.收货地表数据录入如下:

insert into T_endAddress values('2001','徐水',' 河北省保定市徐水县','[1**********]8')

insert into T_endAddress values('2002','望都',' 河北省保定市望都县','[1**********]5')

insert into T_endAddress values('2003','鹿泉',' 石家庄市鹿泉市','[1**********]6')

成功插入数据后,可看到收货地表中的数据,如图5-5所示。

图5-5 收货地表成功录入数据

6.司机表数据录入如下:

insert into T_Driver values('1002','韩小鹏','[***********]',' 鹿泉市黄壁庄镇上吕村','[1**********]')

insert into T_Driver values('1001','大明','[***********]',' 鹿泉市黄壁庄镇上吕村','[1**********]')

成功插入数据后,可看到司机表中的数据,如图5-6所示。

图5-6 司机表成功录入数据

6 系统运行结果

票据管理系统运行过程及截图如下:

1.程序开始,先进入用户登录界面,输入正确的用户名和密码,才能进入系统。否则会弹出输入错误的提示框。登录界面如图6-1(a)所示。

图6-1 (a )用户登录界面

如果输入了错误的用户名,会弹出提示框,如图6-1 (b)所示,只有用户名正确,密码正确才能成功登录票据管理系统。

图6-1 (b ) 用户名输入错误

2.若管理员成功登录后,即可进入窗体主界面,且可以使用该系统所有功能,管理员主界面窗体如图6-2(a )所示。若用户成功登陆后,只能使用该系统的部分功能,用户主界面窗体如图6-2(b )所示。

图6-2(a ) 管理员主窗体界面

图6-2(b ) 用户主窗体界面

3.进入主窗体界面可以其进行操作,通过主窗体的功能按钮可以打开对应的子窗体,如用户管理窗体、司机管理窗体、货物管理窗体、收货地管理窗体、取货地管理窗体。分别如图6-3(a)所示,如图6-3(b)所示,如图6-3(c)所示,如图6-3(d)所示,如图6-3(e)所示。

图6-3(a ) 用户管理子窗体

图6-3(b )司机管理子窗体

图6-3(c )货物管理子窗体

图6-3(d )收货地管理子窗体

图6-3(e )取货地管理子窗体

4. 在每一个子窗体中都可以对其中的数据进行增、删、改的数据操作,因本系统需求问题,除了票据管理系统外,其他数据都不会太多,所以不设置查询功能,可直接在子窗体的表格中看到。对数据进行增加的数据操作是,需要进行查重处理,因为各个子窗体表现特征一致,故选择货物管理子窗体进行添加功能演示,查重表现如图6-4(a )所示。

图6-4(a ) 查重表现

对于添加的功能的演示,因为涉及级联删除的功能显示,故我们通过取货地子窗体新增一条数据、对于货物子窗体也新增一条相应的数据,取货地子窗体如图6-4(b )所示,货物子窗体添加数据如图6-4(c )所示。

图6-4(b ) 取货地子窗体添加

图6-4(c ) 货物子窗体添加

通过刚才添加的级联关系验证数据的级联删除,删除取货地中关于“望都”的数据,则刚添加的货物会级联删除。取货地管理中删除功能如图6-4(d )所示。查看货物管理中的数据会发现已经级联删除,如图6-5(e )所示。

图6-4(d ) 取货地删除功能演示

此时货物管理中的级联数据已经不存在。

图6-4(e )级联数据删除

如果录入数据之后需要修改数据,则可双击表格里需要修改的数据,该数据会相应的显示在窗体之中,如图6-4(f )所示。修改完成,点击修改按钮即可。

图6-4(f ) 修改功能演示

5. 因为该系统中票据数据会是一个较为大量的数据,故不设置全部显示的表格,而是通过票据搜索来显示,在主窗体中单击票据查询按钮会在主窗体中显示出相应的搜索条件,如图6-5(a )所示。

图6-5(a ) 票据搜索

通过勾选搜索条件里边的选项,可以选定要查询的条件,如没有任何勾选则显示全部票据(不建议使用),此处展示勾选司机条件的查询结果界面,如图

6-5(b )所示。

图6-5(b )搜索结果

如果要增加新的票据信息则可在主界面选择票据新增按钮,对要添加的票据信息进行录入。如图6-6(c )所示。

图6-6(c ) 票据添加子窗体

关于票据修改则需要选定查询结果,然后单击票据修改按钮,会弹出相应的

票据修改界面,修改完成后点击更新即可。如图6-6(d )所示。

图6-6(d ) 票据修改界面

对于票据统计可单击主窗体的票据统计按钮打开,分为总车数、货物种类统计,通过勾选可以分布统计,如总车数统计结果如图6-6(e )所示。而货物种类统计结果则如图6-6(f )所示。

图6-6(e) 总车数统计

图6-6(f ) 货物种类统计

至此,单击主窗体用户退出或关闭按钮即可退出系统。功能演示到此结束。

7 实习总结

1.票据管理系统实现的功能

票据管理系统完成了对司机信息的管理,对货物信息的管理,对取货地信息的管理,对收货地信息的管理,对票据信息的管理,且实现了相应的添加、修改、删除功能,票据信息则实现了符合搜索,以及票据统计等功能。

2.票据管理系统的不足之处

功能上总的只是实现了一些对于数据的基本操作,其本质的核心功能还需要在后期的版本中不断更新,不断增强功能,如后续版本要涉及报表打印,复杂数据统计等核心功能。

3.总结学习

通过本次课程设计,使自己对于WPF 的数据绑定模式更加的熟练,通过手写XAML 对于控件的布局,构造等各个方面有了更加深层的学习,同时应用了很多WPF 的特性,比如动画、窗体背景颜色的重构,这些封装好的类,或者较为底层的东西,在界面的构造上对自己的能力有了一次长足的进步。

石家庄经济学院

课程设计报告

课程名称: 数据库原理课程设计 专 业: 计算机科学与技术 姓 名: 班 级: 学 号:

指导教师:

2015年 06 月30日

票据管理系统

引言

随着计算机时代的飞速发展,我们的日常生活开始跟计算机变得密不可分,如今硬件的成熟使得家家都有一台PC 机,而相对于传统的报表统计,会计的工作量也在随着时代的变化,脱离了传统的算盘,开始跟计算机接轨。相应的以前一些管理软件也不再是一些大型的企业的专属,小户小家也开始学着使用完善的管理系统来减少自己的工作量。

通过管理系统的分析统计,可以获取自己需求的有效信息,从而化繁为简使枯燥的对接工作变得简单。因此小型家用软件的诞生也应运而生,进入到千家万户的数据管理工作当中来。

1 需求分析

本系统的使用用户为重型罐车、货车等行业的从业者。根据寒假对于货运票据的整理核对以及跟父母的沟通,得出以下的实际需求。

1.1票据的基本情况

票据的由司机填写,最后交给货车的所有人进行收纳保管。 1.1.1司机的基本信息

入职的时候填写入职表,填写基本信息保存,如姓名,籍贯,身份证号,联系电话。并为每一名司机分配一个员工号。

1.1.2发货地的基本信息

对于发货地需要清楚其地址,联系方式即可。 1.1.3收货地的基本信息

对于收货地需要清楚其地址,联系方式即可。 1.1.4货物的基本信息

货物都有相应的货物编号,名称,所属地,价格 1.1.5运输的基本信息

司机去接收货物的时候要称量装载重量,接货日期,送到收货地还要在一次称重(运输途中有不部分损耗), 收货日期。运输途中会产生消费。

1.2用户对系统的要求

1.2.1处理要求

用户应该具有对上述票据的基本情况可以相应增加、删除、修改。 1.2.2 信息要求

用户应具备对上述票据的基本情况可以查询具体的数据,比如年底需要核对票据,应该有相应的票据信息查询,同时应具备票据部分(运输产生的票据)可以统计查询,如一段时间的总车数,实送吨数等等。

1.2.3安全性和完整性

应设置相应的用户登录保证非合法用户不能登录,并且对密码进行MD5加密,

也可通过权限来给他人添加用户,比如普通用户有添加数据的权限,但无法修改以及删除,以防止他人通过数据库获取篡改票据信息,带来不必要的麻烦,数据项不能为空值。

1.3功能模块划分

按照基本模块来划分功能则可分为用户管理、司机管理、收货地管理、发货地管理、货物管理、票据管理六大模块。功能设计如图1-1所示。

图1-1 票据管理功能图

1.3.1用户管理

以管理员身份登录的用户可以添加新的用户、删除用户、修改用户信息、查询用户信息功能,以普通用户身份登录的用户只可以修改自己的账号信息。

1.3.2司机管理

具有司机信息的录入、修改、删除、查询功能。 1.3.3收货地管理

对收货地的信息进行录入、修改、删除、查询功能。 1.3.4发货地管理

对发货地的信息进行录入、修改、删除、查询功能。 1.3.5货物管理

对货物的信息进行录入、修改、删除、查询功能。 1.3.6票据管理

最基本的对票据进行录入、修改、删除(软删除)、查询功能,同时具备票据核查、票据统计、消费统计等基本功能。

2 概念结构设计

由上述需求分析可知系统中包含如下实体:

用户实体,其属性为用户编号、用户名称、用户密码。

权限实体,其属性为权限编号、权限名称。

司机实体,其属性为司机编号、司机姓名、电话、身份证号、籍贯。 取货地实体,其属性为取货地编号、取货地名称、电话、取货地地址。 送货地实体,其属性为送货地编号、送货地名称、电话、送货地地址。 货物实体,其属性为货物编号,货物名称,价格。 一个用户只有一个权限所以是一对一关系,通过对应可以获取对于本系统不同的操作权限。

多名司机可以去多个取货地取货,取货时需要登记日期、称量货重,他们之间的关系是多对多关系。

多个司机可以送货到多个收货地也要登记日期,称量货重,他们之间的关系也是多对多关系。

一个取货地可以有多个货物,所以他们之间的关系为一对多关系。

一个收货地接收多个货物,他们之间的关系为一对多关系。 其整体的E-R 图如2-1所示。

图 2-1票据管理系统E_R图

3 逻辑结构设计

概念设计是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R 图转换为与选用DBMS 产品所支持的数据模型相符合的逻辑结构。

从理论上讲,设计逻辑结构应该选择最适用于相应概念结构的数据模型,然后对支持这种数据模型的各种DBMS 进行比较,从中选出最适合的DBMS 。但实际情况往往是已给定了某种DBMS ,设计人员没有选择的余地。目前DBMS 产品一般支持关系,网状,层次三种模型中的某一种。对某一种数据模型,各个机器系统又有许多不同的限制,提供不同环境与工具,所以设计逻辑结构时,一般要分3步进行:

(1) 将概念模型转换为一般的关系、网状、层次模型;

(2) 将转换来的关系、网状、层次模型向特定DBMS 支持下的数据模型转换;

(3) 对数据模型进行优化。

根据上述步骤,将图2-1所示的E-R 图转换为关系数据库模式。

用户(用户编号,用户名,密码,权限编号);其中用户编号为主码,权限编号为外码。

权限(权限编号,权限名);其中权限编号为主码。

司机(司机编号,司机名,身份证号,籍贯,联系方式);其中司机编号为主码。

取货地(取货地编号,取货地名,地址,联系方式);其中取货地编号为主码。

收货地(收货地编号,收货地名,地址,联系方式);其中收货地编号为主码。

货物(货物编号,货物名,价格,取货地编号);其中货物编号为主码,取货地编号为外码。

票据(票据号,司机编号,货物编号,取货地编号,收货地编号,装载重量,卸载重量,出发时间,返回时间,登记时间);其中主码为票据号。

给出每一个关系的数据结构定义如下: 1. 用户

用户实体跟权限实体是一对一关系,由此可以得出用户的关系模式:(用户编号,用户名,密码,权限编号)。其中用户编号为主码,权限编号为外码。如表3-1所示。

表3-1 用户表属性

2. 权限

权限实体的关系模式:权限编号,权限名)。其中权限编号为主码。如表3-2所示。

3,司机

司机实体的关系模式:(司机编号,司机名,身份证号,籍贯,联系方式)。其中司机编号为主码。如表3-3所示。

表3-3 司机表属性

4. 取货地

取货地实体的关系模式:(取货地编号,取货地名,地址,联系方式)。其中取货地编号为主码。如表3-4所示。

5. 收货地

收货地实体的关系模式:(收货地编号,收货地名,地址,联系方式)。其中收货地编号为主码。如表3-5所示。

6. 货物

货物实体的关系模式:(货物编号,货物名,价格,取货地编号)。其中货物编号为主码,取货地编号为外码。如表3-6所示。

7. 票据

票据实体的关系模式:(票据号,司机编号,货物编号,取货地编号,收货地编号,装载重量,卸载重量,出发时间,返回时间,登记时间)。其中主码为票据号。如表3-7所示。

表3-7 票据表属性

每个实体属性都满足:

(1)所有非主属性对每一个码都是完全函数依赖。

(2)所有的主属性对每一个不包含它的码,也是完全依赖函。 (3)没有任何属性完全函数依赖于非码的任何一组属性。

由此可知,每个实体都满足BCNF ,但为了提高数据的存取速度等,在此可以降低实体的范式。

4 数据库物理设计

数据库物理设计是将给定的逻辑结构实施到具体的环境中,逻辑数据模型要选取一个具体的工作环境,这个工作环境提供了数据存储结构与存取方法。 首先,确定数据库的存储结构,因为人事管理的关系相对比较简单,而且不变,综合考虑了存取时间,存储空间利用率和维护代价,所以,我选择了HASH 存取方法。

其次,确定数据的存取路径是双向的,是指请求和数据存储系统中传递的通道,存取路径就是从数据到物理存储设备之间的交互通道,在人事管理中数据库就担任这个交互的通道。

再次,确定数据的存放位置,我将表存放在磁盘上,以加快数据的存取速度,将日志文件和数据库对象,包括表等,存放在磁盘上。

最后,确定系统配置,DBMS 产品一般都提供了一些系统配置变量,存储分配参数。初始化情况下,系统都为这些变量赋予了合理的默认值,在这里我也采用系统赋予了默认值。

票据管理系统是采用SQL Server2008进行实施的,数据库创建语句如下:

CREATE DATABASE [Home] ON PRIMARY ( NAME = N'Home', FILENAME =

N'D:\sql\MSSQL10.MSSQLSERVER\MSSQL\DATA\Home.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

LOG ON

( NAME = N'Home_log', FILENAME =

N'D:\sql\MSSQL10.MSSQLSERVER\MSSQL\DATA\Home_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

其次是对表的创建,票据管理系统共需创建7个表,分别是:用户表、权限表、司机表、货物表、收货地表、取货地表、票据表。

权限表的创建语句如下:

CREATE TABLE [dbo].[T_Authority]( [authorityId] [char](10) NOT NULL, [authorityName] [char](10) NOT NULL,

CONSTRAINT [PK_T_Authority] PRIMARY KEY CLUSTERED

)

[authorityId] ASC

用户表的创建语句如下:

CREATE TABLE [dbo].[T_User]( [userId] [char](30) NOT NULL, [userName] [char](10) NOT NULL, [userPassword] [char](30) NOT NULL, [authorityId] [char](10) NOT NULL,

CONSTRAINT [PK_T_User] PRIMARY KEY CLUSTERED

( [userId] ASC

)

WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 司机表的创建语句如下:

CREATE TABLE [dbo].[T_Driver] (

[driverId] [char](10) NOT NULL, [driverName] [char](10) NOT NULL, [carId] [char](20) NOT NULL, [address] [char](30) NOT NULL, [Tel] [char](15) NOT NULL,

CONSTRAINT [PK_T_Driver] PRIMARY KEY CLUSTERED

( [driverId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

货物表的创建语句如下:

CREATE TABLE [dbo].[T_Cargo]( [cargoId] [char](10) NOT NULL, [cargoName] [char](10) NOT NULL, [price] [decimal](18, 2) NOT NULL, [addressId] [char](10) NOT NULL,

CONSTRAINT [PK_T_Cargo] PRIMARY KEY CLUSTERED

(

[cargoId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, I GNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 收货地表的创建语句如下:

CREATE TABLE [dbo].[T_startAddress]( [startAddressId] [char](10) NOT NULL, [startAddressName] [char](10) NOT NULL, [address] [char](30) NOT NULL, [Tel] [char](15) NOT NULL,

CONSTRAINT [PK_T_startAddress] PRIMARY KEY CLUSTERED

(

[startAddressId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 取货地表的创建语句如下:

CREATE TABLE [dbo].[T_endAddress]( [endAddressId] [char](10) NOT NULL, [endAddressName] [char](10) NOT NULL, [address] [char](20) NOT NULL, [Tel] [char](15) NOT NULL,

CONSTRAINT [PK_T_endAddress] PRIMARY KEY CLUSTERED

(

[endAddressId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

票据表的创建语句如下:

CREATE TABLE [dbo].[T_Bill](

[billId] [uniqueidentifier] NOT NULL, [driverId] [char](10) NOT NULL, [cargoId] [char](10) NOT NULL,

[loadWeight] [decimal](18, 2) NOT NULL, [unloadWeight] [decimal](18, 2) NOT NULL, [startAddressId] [char](10) NOT NULL,

[endAddressId] [char](10) NOT NULL, [beginTime] [datetime] NOT NULL, [backTime] [datetime] NOT NULL, [registerTime] [datetime] NOT NULL, [isdelete] [char](2) NOT NULL,

CONSTRAINT [PK_T_Bill] PRIMARY KEY CLUSTERED ( [billId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

5 数据库的实施

用数据库语句对数据库进行测试

1.用户表数据录入如下:

insert into T_User values('111','韩子飞','123','2')

insert into T_User values('666','韩增利','123','1')

成功插入数据后,可看到用户表中的数据,如图5-1所示。

图5-1 用户表成功录入数据

2.权限表数据录入如下:

insert into T_Authority values('1','管理员') insert into T_Authority values('2','用户')

成功插入数据后,可看到用户表中的数据,如图5-2所示。

图5-2 权限表成功录入数据

3.货物表数据录入如下:

insert into T_Cargo values('200101' , '粉煤灰' , 25.60,'3001') insert into T_Cargo values('200102' , '水泥' , 25.60,'3002') 成功插入数据后,可看到货物表中的数据,如图5-3所示。

图5-3 货物表成功录入数据

4.取货地表数据录入如下:

insert into T_startAddress values('3002', ' 鼎鑫',' 鹿泉市鼎鑫水泥厂','[1**********]')

insert into T_startAddress values('3001','徐水',' 保定市徐水市','[1**********]')

成功插入数据后,可看到取货地表中的数据,如图5-4所示。

图5-4 取货地表成功录入数据

5.收货地表数据录入如下:

insert into T_endAddress values('2001','徐水',' 河北省保定市徐水县','[1**********]8')

insert into T_endAddress values('2002','望都',' 河北省保定市望都县','[1**********]5')

insert into T_endAddress values('2003','鹿泉',' 石家庄市鹿泉市','[1**********]6')

成功插入数据后,可看到收货地表中的数据,如图5-5所示。

图5-5 收货地表成功录入数据

6.司机表数据录入如下:

insert into T_Driver values('1002','韩小鹏','[***********]',' 鹿泉市黄壁庄镇上吕村','[1**********]')

insert into T_Driver values('1001','大明','[***********]',' 鹿泉市黄壁庄镇上吕村','[1**********]')

成功插入数据后,可看到司机表中的数据,如图5-6所示。

图5-6 司机表成功录入数据

6 系统运行结果

票据管理系统运行过程及截图如下:

1.程序开始,先进入用户登录界面,输入正确的用户名和密码,才能进入系统。否则会弹出输入错误的提示框。登录界面如图6-1(a)所示。

图6-1 (a )用户登录界面

如果输入了错误的用户名,会弹出提示框,如图6-1 (b)所示,只有用户名正确,密码正确才能成功登录票据管理系统。

图6-1 (b ) 用户名输入错误

2.若管理员成功登录后,即可进入窗体主界面,且可以使用该系统所有功能,管理员主界面窗体如图6-2(a )所示。若用户成功登陆后,只能使用该系统的部分功能,用户主界面窗体如图6-2(b )所示。

图6-2(a ) 管理员主窗体界面

图6-2(b ) 用户主窗体界面

3.进入主窗体界面可以其进行操作,通过主窗体的功能按钮可以打开对应的子窗体,如用户管理窗体、司机管理窗体、货物管理窗体、收货地管理窗体、取货地管理窗体。分别如图6-3(a)所示,如图6-3(b)所示,如图6-3(c)所示,如图6-3(d)所示,如图6-3(e)所示。

图6-3(a ) 用户管理子窗体

图6-3(b )司机管理子窗体

图6-3(c )货物管理子窗体

图6-3(d )收货地管理子窗体

图6-3(e )取货地管理子窗体

4. 在每一个子窗体中都可以对其中的数据进行增、删、改的数据操作,因本系统需求问题,除了票据管理系统外,其他数据都不会太多,所以不设置查询功能,可直接在子窗体的表格中看到。对数据进行增加的数据操作是,需要进行查重处理,因为各个子窗体表现特征一致,故选择货物管理子窗体进行添加功能演示,查重表现如图6-4(a )所示。

图6-4(a ) 查重表现

对于添加的功能的演示,因为涉及级联删除的功能显示,故我们通过取货地子窗体新增一条数据、对于货物子窗体也新增一条相应的数据,取货地子窗体如图6-4(b )所示,货物子窗体添加数据如图6-4(c )所示。

图6-4(b ) 取货地子窗体添加

图6-4(c ) 货物子窗体添加

通过刚才添加的级联关系验证数据的级联删除,删除取货地中关于“望都”的数据,则刚添加的货物会级联删除。取货地管理中删除功能如图6-4(d )所示。查看货物管理中的数据会发现已经级联删除,如图6-5(e )所示。

图6-4(d ) 取货地删除功能演示

此时货物管理中的级联数据已经不存在。

图6-4(e )级联数据删除

如果录入数据之后需要修改数据,则可双击表格里需要修改的数据,该数据会相应的显示在窗体之中,如图6-4(f )所示。修改完成,点击修改按钮即可。

图6-4(f ) 修改功能演示

5. 因为该系统中票据数据会是一个较为大量的数据,故不设置全部显示的表格,而是通过票据搜索来显示,在主窗体中单击票据查询按钮会在主窗体中显示出相应的搜索条件,如图6-5(a )所示。

图6-5(a ) 票据搜索

通过勾选搜索条件里边的选项,可以选定要查询的条件,如没有任何勾选则显示全部票据(不建议使用),此处展示勾选司机条件的查询结果界面,如图

6-5(b )所示。

图6-5(b )搜索结果

如果要增加新的票据信息则可在主界面选择票据新增按钮,对要添加的票据信息进行录入。如图6-6(c )所示。

图6-6(c ) 票据添加子窗体

关于票据修改则需要选定查询结果,然后单击票据修改按钮,会弹出相应的

票据修改界面,修改完成后点击更新即可。如图6-6(d )所示。

图6-6(d ) 票据修改界面

对于票据统计可单击主窗体的票据统计按钮打开,分为总车数、货物种类统计,通过勾选可以分布统计,如总车数统计结果如图6-6(e )所示。而货物种类统计结果则如图6-6(f )所示。

图6-6(e) 总车数统计

图6-6(f ) 货物种类统计

至此,单击主窗体用户退出或关闭按钮即可退出系统。功能演示到此结束。

7 实习总结

1.票据管理系统实现的功能

票据管理系统完成了对司机信息的管理,对货物信息的管理,对取货地信息的管理,对收货地信息的管理,对票据信息的管理,且实现了相应的添加、修改、删除功能,票据信息则实现了符合搜索,以及票据统计等功能。

2.票据管理系统的不足之处

功能上总的只是实现了一些对于数据的基本操作,其本质的核心功能还需要在后期的版本中不断更新,不断增强功能,如后续版本要涉及报表打印,复杂数据统计等核心功能。

3.总结学习

通过本次课程设计,使自己对于WPF 的数据绑定模式更加的熟练,通过手写XAML 对于控件的布局,构造等各个方面有了更加深层的学习,同时应用了很多WPF 的特性,比如动画、窗体背景颜色的重构,这些封装好的类,或者较为底层的东西,在界面的构造上对自己的能力有了一次长足的进步。


相关内容

  • 构建全国一体化票据交易市场的路径设计
  • 构建全国一体化票据交易市场的路径设计 评论 邮件 纠错 2016-04-12 09:18:42 来源: 作者:赵慈拉 摘要:商业汇票对企业短期融资的贡献率已达30%,随着利率市场化的加快和电票账户的普及,商业汇票对实体经济的融资作用还将提升.票据以其标准化金融工具,已成为信贷市场--同业市场--理财 ...

  • 2010电力十大管理创新
  • D EPTH 本刊特稿 主持:张晓京[email protected] ."电力十大管理创新 ■中电联行业与企业文化部 中国电力企业管理杂志社 2010电力十大管理创新 1.河北省电力公司:"自下而上"的标准化建设 2.国电科技环保集团有限公司:集约化.专 ...

  • 财务信息化
  • 财务信息化不等于出纳信息化 悬赏分:0 - 提问时间2009-5-1 01:22 我国财务软件经过20 年的发展,已经得到普及.财务信息化规范了财务管理,提高了财务工作效率,降低了财务风险.但是所有的财务软件都是围绕" 会计" 展开,而忽略了" 出纳" .出纳 ...

  • 快递管理系统
  • <软件工程实习> 说明书 题目: 快递公司管理系统 系 别: 计算机科学与工程 指导教师: 2010年 9 月 1 日 天津大学仁爱学院软件工程实习成绩评定表 目 录 1项目管理....................................................... ...

  • 连续打印设置教程
  • 财 会票 据 连 续 打 印 设 置 教 程 武汉市第二十六中学 张亮 前 言 财务票据连续打印是笔者根据工作需要逐渐摸索出来的,目的是为了每学期收学费时能减轻工作压力.提高工作效率,而非商业用途. 该方法经区教育财政部门认可后,进行了推广.笔者为支持该工作的顺利开展,特编写此教程,愿自己的一点心得 ...

  • 中信银行-制造行业服务方案
  • 目录 中信汽车金融 ........................................................................................................................... 1 中信船舶金融 ....... ...

  • 中小企业区域集优直接债务融资模式创新十议
  • 第26卷第6期Journal of Yunnan Finance &Economics University Vol.26,No.6 中小企业区域集优直接债务融资模式创新十议 陈支农 (中国农业银行 淮安支行,江苏 淮安223005) 摘要:中小企业是国民经济的重要组成部分,对经济发展和社会 ...

  • 海尔资金管理
  • 海尔财务公司成立之初,海尔集团CEO张瑞敏先生提出"财务公司应成为集团的提速机,而不是提款机."成立七年以来,财务公司始终立足于企业集团,通过创新的思路.创新的手段.创新的产品.创新的机制与流程支持企业集团全球化战略的实现. 海尔财务公司始终承接集团战略,以"提高资金效 ...

  • 浅谈城市商业银行票据业务风险防范
  • [摘 要]随着我国银行业竞争的日益激烈,传统的存贷业务已经难以满足银行自身业务发展的需要,票据业务作为一项新兴的中间业务,成为当前城市商业银行新的利润增长点,然而随着票据业务的发展,其问题也逐渐暴露出来,本文围绕这些问题提出了解决对策,并重点阐述了城市商业银行在办理票据业务中应注意的几个风险防范措施 ...