图书销售系统.docx

上传人:b****1 文档编号:23266913 上传时间:2023-05-15 格式:DOCX 页数:49 大小:2.77MB
下载 相关 举报
图书销售系统.docx_第1页
第1页 / 共49页
图书销售系统.docx_第2页
第2页 / 共49页
图书销售系统.docx_第3页
第3页 / 共49页
图书销售系统.docx_第4页
第4页 / 共49页
图书销售系统.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

图书销售系统.docx

《图书销售系统.docx》由会员分享,可在线阅读,更多相关《图书销售系统.docx(49页珍藏版)》请在冰豆网上搜索。

图书销售系统.docx

图书销售系统

 

数据库原理课程设计

 

评语:

学院计算机工程班级计算1013

姓名陈高伟学号2010810070

成绩指导老师林颖贤

2013年1月9日

 

第一章引言

1.1课题研究背景与意义

现如今图书销售行业发展迅速,大大小小的书店到处可见,特别是一些发展较大的书城采用大规模的连锁经营方式。

随着规模的扩大传统的图书管理已经不能适应发展的需要。

图书管理工作繁琐,销售频繁,包含大量的信息数据,因此就需要一个完善的图书销售管理系统来实现对这些数据的有效管理。

本系统主要任务就是对书店、图书、顾客、销售信息、查询进行统一管理,满足各类用户的需求。

本系统在功能上要实现书店进货功能,图书统计功能,书店销售功能等。

我通过对世面上的书城如新华书店和学校里的小书店进行了初步的了解,发现其业务主要是集中在对图书的管理和图书的销售上。

对图书的管理工作量较大,采用手工的方式还容易出错,并且不能满足顾客对图书的详细的查询功能。

本系统在设计中考虑和克服了上诉的诸多问题,增强了实用性。

1.2本课题研究内容与目标

1.2.1研究内容

本课题是通过SQLServer和相应的面相对象语言来制作一个面相书店用户的图书销售管理系统。

1.2.2研究目标

本图书销售管理系统就是要求图书管理人员通过该系统对图书、顾客、管理员、购买信息等进行统一管理,从而实现功能上的销售图书、管理图书库存量、图书信息、顾客信息和用户信息以及相应信息查询。

这就要求管理人员能够对数据库熟悉操作,简单的表查询、触发器的建立、存储过程的建立以及用户自定义函数的建立等等这些管理数据库的方法都能对图书馆里系统的管理起到事半功倍的效果。

最后通过应用这些命令来建立一个完整的图书销售管理系统。

1.3开发环境

本图书销售管理系统的开发语言是JAVA,开发环境是MyEclipse8.6,数据库采用SQLServer2008。

1.4体系结构设计

本次课程设计的图书销售管理系统采用了C/S体系结构设计,即采用了客户端和服务器,这里的客户端主要是应用程序界面,服务器是数据库后台。

通过对前台界面的操作,来实现相应的对数据库信息的增、删、改功能,如果操作正确则将运行显示相应结果,对应修改后台数据库内容,信息一旦提交,将不能修改;前台页面也调用后台数据库编写好的存储过程和触发器,来实现操作,客户端也有很好的权限控制,这样是为了防止用户的恶意操作,比如说:

在登录界面,只有密码和登录名都正确才能进入系统,并且不同的方式将进入不同的操作页面。

 

 

第二章、需求分析

2.1信息要求

图2-1

2.2处理要求

 

2.3数据字典

2.3.1数据项

2-1图书表

列名

中文名

数据类型

是否允许空

备注

Book_id

图书编号

varchar(13)

主键

Typeid

图书类型编号

varchar(13)

外键

Bookname

图书名称

varchar(40)

Writer

作者

varchar(21)

Translator

翻译者

varchar(30)

Publisher

出版社

varchar(50)

Date

出版时间

Datetime

Price

价格

Money

Insum

库存量

Int

2-2顾客表

列名

中文名

数据类型

是否允许空

备注

Reader_id

顾客编号

varchar(13)

主键

kname

顾客姓名

varchar(10)

Sex

性别

varchar

(2)

Age

年龄

Int

Identitycard

身份证号

varchar(30)

Tel

电话号码

varchar(50)

2-3购书信息表

列名

中文名

数据类型

是否允许空

备注

Id

订单编号

int

主键

Book_id

图书编号

varchar(13)

外键

Reader_id

顾客编号

varchar(13)

外键

Buynum

购买数量

int

默认为1

Buydate

购买日期

Datetime

默认为系统时间

Buybookname

图书姓名

varchar(40)

2-4管理员(用户)表

列名

中文名

数据类型

是否允许空

备注

Id

用户id

Int

主键

Yname

管理员姓名

varchar(20)

Sex

性别

varchar

(2)

Tel

电话号码

varchar(12)

Ypassword

管理员密码

varchar(10)

Ytype

管理员权限

varchar

(1)

2-5进货表

列名

中文名

数据类型

是否允许空

备注

Book_id

图书编号

varchar(13)

外键,唯一

Date

进货时间

Datetime

Number

进货量

Int

Operator

操作管理员

varchar(6)

Checkandaccept

是否验收

Int

Zk

折扣

Float

2-6图书类型表

列名

中文名

数据类型

是否允许空

备注

Id

图书类型编号

varchar(13)

主键

Typename

图书类型名称

varchar(20)

2.3.2、数据结构

图书表(book_id,typeid,bookname,writer,translator,publisher,date,price,insum);

顾客表(reader_id,kname,sex,age,identitycard,tel);

购书信息表(id,book_id,reader_id,buynum,buydate,buybookname);

管理员(用户)表(id,yname,sex,tel,ypassword,ytype);

进货表(book_id,date,number,operator,checkandaccept,zk);

图书类型表(id,typename)。

2.3.3、数据流

编号

名称

来源

去向

组成

1

身份信息

系统管理员,一般管理员

应用系统

登录名+密码

2

授权信息

应用系统

系统管理员,一般管理员

3

错误身份信息

应用系统

系统管理员,一般管理员

4

查询请求

系统管理员,一般管理员

应用系统

查询对象识别符(如book_id,reader_id等)

5

查询结果

应用系统

系统管理员,一般管理员

被查询对象具体信息

6

管理请求

系统管理员,一般管理员

应用系统

识别符(book_id等)+类型

7

管理结果信息

应用系统

系统管理员,一般管理员

被管理对象处理结果

8

非法请求

应用系统

系统管理员,一般管理员

非法请求提示信息

9

修改请求

系统管理员,一般管理员

应用系统

被修改对象具体信息

2-6数据流表

2.3.4、数据存储

图书表:

用于存放图书信息;

顾客表:

用于存放顾客信息;

购书信息表:

用于存放图书销售报表;

管理员(用户)表:

用于存放管理员信息;

进货表:

用于存放图书进货信息;

图书类型表:

用于存放图书类型信息。

2.4安全性和完整性要求

2.4.1安全性

系统具有较高的安全性能,在SQLServer中定义存储过程及相应的触发器来区分系统管理员与一般管理员的权限,实现安全性。

系统管理员登入名和密码输入正确后可才可进入系统,而且只有系统管理员(书店店主)在数据库中添加了一般管理员后,并且这些一般管理员登录名和密码的输入正确之后才能进入系统对销售系统进行操作,否则系统将拒绝用户的非法访问,以保证系统的安全,并且系统也控制了普通用户和系统管理员的权限,防止用户恶意操作或者不是故意的操作导致后台数据库的不一致。

2.4.1完整性

系统为了保证数据的完整性,在数据库里面写了许多触发器,比如当用户进行图书信息添加操作的时候,可以自动更改图书表里面的库存量;用户进行销售操作后通过触发器也可以修改图书表的对应图书的库存量等。

据此来维护数据库的数据完整性,并且在进行用户界面交互操作的时候,会判断输入的信息,如果信息有误或者无意义,系统将拒绝对后台数据库的更改,因此系统具有很强的数据完整性。

 

第三章、概念结构设计

3.1总ER图

图3-1整体E-R图

 

第四章、逻辑结构设计

4.1关系模型

图4-1

4.2数据模型优化

1.图书类型表(图书类型编号,图书类型名)

函数依赖:

图书类型编号----->图书类姓名

从函数依赖图可以看出,该关系中不存在部分函数依赖、传递函数依赖,且只有图书类型编号能够确定其它各项。

所以该关系是BCNF范式。

2.图书表(图书编号,图书类型编号,图书名称,作者名,译者名,出版社,出版日期,价钱,库存量)

函数依赖:

图书编号------->图书名称,图书编号----->作者名,图书编号----->译者名,图书编号----->出版社,图书编号---->出版日期,图书编号---->价钱,图书编号---->库存量

从函数依赖图可以看出,该关系中不存在部分函数依赖、传递函数依赖,且只有图书编号能够确定其它各项。

所以该关系是BCNF范式。

3.顾客表(顾客编号,顾客名称,性别,年龄,证件号码,电话号码)

函数依赖:

顾客编号------>顾客名称,顾客编号------>性别,顾客编号------>年龄,顾客编号------>证件号码,顾客编号------>电话号码。

从函数依赖图可以看出,该关系中不存在部分函数依赖、传递函数依赖,且只有顾客编号能够确定其它各项。

所以该关系是BCNF范式。

4.订购信息表(订单号,图书编号,客户编号,购买数量,销售时间,销售日期,图书名称)

函数依赖:

订单号--->客户编号,订单号--->购买数量,订单号--->销售时间,订单号--->销售日期,订单号--->图书名称,订单号---->图书编号,图书编号--->图书名称。

从函数依赖图可以看出,该关系中不存在部分函数依赖,但存在传递函数依赖(订单号---->图书编号,图书编号--->图书名称)故需对表进行分表:

分表一(订单号,图书编号,客户编号,购买数量,销售时间,销售日期)

分表二(图书编号,图书名称)

经过分表后,实现了关系中不存在部分函数依赖、传递函数依赖,所以改后的关系是第三范式。

5.管理员表(管理员编号,管理员名称,性别,电话号码,密码,管理员级别)

函数依赖:

管理员编号----->管理员名称,管理员编号----->性别,管理员编号----->电话号码,管理员编号----->密码,管理员编号----->管理员级别

从函数依赖图可以看出,该关系中不存在部分函数依赖、传递函数依赖,且只有管理员编号能够确定其它各项。

所以该关系是BCNF范式。

6.进货表(图书编号,进货日期,进货数量,操作员,是否验收,折扣)

函数依赖:

图书编号----->进货日期,图书编号----->进货数量,图书编号----->操作员,图书编号----->是否验收,图书编号----->折扣。

从函数依赖图可以看出,该关系中不存在部分函数依赖、传递函数依赖,且只有图书编号能够确定其它各项。

所以该关系是BCNF范式。

第五章、数据的实施与维护

5.1存储过程设计

因为在设计系统的时候,数据库信息的增、删、改以及查询都是用Java直接在java语句里面嵌套SQL语句来实现功能,在数据库中存储过程的设计主要是针对数据库安全性、图书信息模糊查找和数据库备份恢复这块。

存储过程名

功能

入口参数

权限

proc_role_grant

创建一般管理员角色

所要创建的角色名

系统管理员、一般管理员

proc_模糊查找

实现图书信息的模糊查找

查找的字符模式串

系统管理员、一般管理员

sq_backup

实现备份数据库

数据库名

系统管理员

1.功能—创建一般管理员角色

参数—所要创建的角色名

存储过程名:

proc_role_grant

createprocproc_role_grant@rnamevarchar(20)

as

begin

declare@sqlstrvarchar(255)--sql语句的字符串

set@sqlstr='createrole'+@rname+'authorizationdbo'

exec(@sqlstr)

set@sqlstr='grantselect,insert,update,deleteonbookinfoto'+@rname

exec(@sqlstr)

set@sqlstr='grantselect,insert,update,deleteonbooktypeto'+@rname

exec(@sqlstr)

set@sqlstr='grantselect,insert,update,deleteonbuyto'+@rname

exec(@sqlstr)

set@sqlstr='grantselect,insert,update,deleteonordertto'+@rname

exec(@sqlstr)

set@sqlstr='grantselect,insert,update,deleteonreaderto'+@rname

exec(@sqlstr)

set@sqlstr='denyselect,insert,update,deleteonoperatorto'+@rname

exec(@sqlstr)

end

go

2.功能—实现图书信息的模糊查找

参数—查找的字符模式串

存储过程名:

proc_模糊查找

代码如下:

createprocedureproc_模糊查找

@模式串varchar(20)

as

begin

declare@posionint

declare@svarchar(30),@stringvarchar(30)

set@posion=1--初始化,求字串的起始位置

set@s='%'

while@posion<=len(@模式串)--当位置大于模式串长度相等的时候,退出循环

begin

select@string=substring(@模式串,@posion,1)--取字串

set@s=@s+@string+'%'--连接字符串

set@posion=@posion+1

end

print@s

select*frombookinfowherebooknamelike@s

end

go

3.功能—实现备份数据库

参数—数据库名

存储过程名:

sq_backup

代码如下:

createprocsq_backup@db_namevarchar(20)

as

begin

declare@strsqlvarchar(255)

set@strsql='sp_addumpdevice''disk'','''+@db_name+'备份设备'',''d:

\'+@db_name+'备份设备.bak'''

exec(@strsql)

set@strsql='backupdatabase'+@db_name+'to'+@db_name+'备份设备withname='''+@db_name+'_'+convert(varchar,getdate(),120)+''''

exec(@strsql)

end

go

5.2触发器设计

触发器名

功能

类型

作用表

operator_insert

用户插入触发创建对应数据库用户,并授予相关权限

insert

用户表(operator)

bookinfo_insert

触发器实现插入一条图书信息,库存量自动加1

insert

图书表(bookinfo)

bookinfo_update

创建更新触发器,库存量为0时提醒管理员订购新书

update

图书表(bookinfo)

buy_insert

触发器实现销售带动图书表库存量修改

insert

销售表(buy)

ordert_insert

触发器实现新书订购来补充对应图书库存量

Insert

进货表(ordert)

表5-1

代码:

--用户插入触发创建对应登录名和数据库用户,并授予相关权限-----------

createtriggeroperator_insert

onoperatorforinsert

as

begin

declare@sqlstrvarchar(255)--sql语句的字符串

declare@typevarchar

(1),@namevarchar(20)

select@type=ytype,@name=ynamefrominserted

set@sqlstr='createuser'+@name+'forlogincgwwithdefault_schema=dbo'

exec(@sqlstr)

if@type='1'

begin

execsp_addrolemember'db_owner',@name

end

else

begin

if@type='2'

begin

execsp_addrolemember'Role_Emp',@name

end

else

rollback

end

end

go

--触发器插入一个图书信息,库存量自动加-------

createtriggerbookinfo_insert

onbookinfoforinsert

as

begin

declare@bookidvarchar(13)

select@bookid=book_idfrominserted

ifexists(select*frombookinfowherebook_id=@bookid)

updatebookinfosetinsum=insum+1wherebook_id=@bookid

else

updatebookinfosetinsum=1wherebook_id=@bookid

end

go

--创建更新触发器,库存量为时提醒管理员订购新书------

createtriggerbookinfo_update

onbookinfoforupdate

as

begin

declare@sumint

select@sum=insumfrominserted

if@sum=0

begin

print'这本书的库存不足了,请及时补充!

'

end

end

go

 

--触发器实现销售带动图书表库存量修改----

createtriggerbuy_insert

onbuyforinsert

as

begin

declare@bookidvarchar(13)

select@bookid=book_idfrominserted

updatebookinfosetinsum=insum-1wherebook_id=@bookid

end

go

--触发器实现新书订购来补充对应图书库存量---

createtriggerordert_insert

onordertforinsert

as

begin

declare@in_numint,@bkidvarchar(13)

select@in_num=number,@bkid=book_idfrominserted

updatebookinfosetinsum=insum+@in_numwherebook_id=@bkid

end

go

 

5.3程序的模块设计

图5-1

注释:

管理员登录,输入的登录名和密码与管理员表里面的信息进行匹配,当两者都匹配成功才进入管理员操作界面。

关键代码如下:

privateclassBookLoginActionimplementsActionListener{

publicvoidactionPerformed(finalActionEvente){

user=Business.check(username.getText(),

newString(password.getPassword()));//调用business方法

if(user.getName()!

=null){//判断用户名是否为null

try{

Mainframe=newMain();//登陆成功,创建一个主窗体

frame.setVisible(true);//设置其可见

BookLogin.this.setVisible(false);//设置登录窗体为不显示

}catch(Exceptionex){

ex.printStackTrace();

}

}else{

JOptionPane.showMessageDialog(null,

"请输入正确的用户名和密码!

");//弹出提示框

username.setText("");//设置用户名输入框为空

password.setText("");//设置密码输入框为空

}

}

}}

图5-2

注释:

在java中创建一个Main类来显示系统操作界面。

关键代码如下:

packagemain;

importjava.awt.BorderLayout;

importjava.awt.Dimension;

importjava.awt.Toolkit;

importjava.awt.event.ComponentAdapter;

importjava.awt.event.ComponentEvent;

//import.URL;

importjavax.swi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1