资源描述
成
绩
课 程 设 计
课程名称数据库系统
题目名称小型超市管理系统
学生学院计算机学院
专业班级
学 号
学生姓名
指导教师
2013年1月
评价标准
分数比例(%)
成绩
论文
论文结构包含:
1、相关技术介绍、需求分析、
2、概念结构设计(涉及的实体至少三个以上)、
3、逻辑结构设计(有完整性约束说明)、
4、数据库物理设计、
5、数据库完整性设计(违反实体、参照完整性时的解决办法,比如触发器、存储过程等)
5、数据库安全性设计、
6、数据库实施、系统测试方案和测试报告、
7、系统的主要功能和使用说明、系统安装说明。
要求论文完整、内容详细,格式规范。
40
程序
1、 系统运行正确;
2、功能完善:有增、删、改、查功能,输入、输出功能;
3、有基本的统计、报表功能
4、有多表连接查询、自身连接查询、字符串匹配查询、模糊查询、分组查询等。
5、工作量充分;
6、系统实现技术的难度。
30
数据
库设
计
E—R图设计正确;
数据库逻辑结构设计规范化;
数据库物理设计合理。
30
总评成绩
优
良
中
及格
不及格
总分
目 录
1 引言1
1。1课题来源1
1。2课题研究主要内容1
1。3主要工作1
2 开发工具和平台1
3 命名约定1
4 需求分析2
4.1信息要求分析2
4。2处理要求分析2
5 概念结构设计3
5。1数据实体描述及分ER图3
5.2整体ER图3
6 系统概要设计4
6。1数据库逻辑结构设计4
6。2数据库物理设计6
6.3系统总体框架7
7 系统详细设计7
7.1数据库实施7
7.2数据库的数据完整性设计9
7。3数据的安全设计10
7。4系统功能模块的设计与实现11
7。5系统安装使用说明21
8 回顾与展望21
参考文献22
1 引言
1.1课题来源
到超市购物是一种较为频繁的生活事件。由于人们的超市购物行为越来越频繁,超市规模越来越大,商品种类数目与之俱增,超市商品的管理变得更加困难.显然手工的管理方式是不合适的。因此利用数据库相关技术开发一个规模适当、操作方便、功能完备的超市管理系统显得很有必要。
1.2课题研究主要内容
使用数据库管理系统和应用程序实现小型超市管理系统的商品销售结算,销售情况管理,商品信息管理,库存管理,权限管理等功能。
1。3主要工作
先对小型超市管理系统的设计进行需求分析,建立数据流图和数据字典。进行概念结构设计,作出E—R图并进行优化.进行逻辑结构设计,建立数据关系模型。进行物理结构设计,选择适当的存取方法。利用数据库管理系统按前面的分析设计作出若于基本表,根据应用程序和用户的需要建立视图。最后进行应用程序的设计、调试、运行。
2开发工具和平台
数据库管理系统:Microsoft SQL Server 2008程序设计语言:Java 1。6应用程序开发工具:eclipse测试平台 Windows 7 64bit
3 命名约定
表名和属性名的首字母大写(虽然SQL语言不分大小写,但设计过程仍遵守这一约定),基本表名和数据若由多个单词构成,则每个单词的首字母均大写,且单词间首尾紧密相接,没有间隔或其它分隔符。对于视图采用 _view 这一后辍。
4 需求分析
4。1信息要求分析
4。1.1商品销售模块应具有收银结算的功能:可将查询得的商品加入购物单,并计算总价。结算后要更新商品的库存。
4.1。2销售管理模块要实现对购物单和商品销量的查询。可分别按单号和商品编号,并能在限定(或不限定)时间范围内进行查询,并可查看查询结果的细目。
4.1。3库存管理模块要实现去商品进货的管理,及时更新库存。并具要能实现对供应商信息和商品信息的增、删、查、改等功能。
4。1。4实现权限管理,对不同的用户可授于不同的权限,不同权限所能使用的功能范围有所不同.
4.2处理要求分析
图4-1 用例图
5 概念结构设计
5.1数据实体描述及分ER图
商品
编号
名称
单价
折扣
库存
单位
商品供应商
编号
名称
地址
电话
购物单
单号
日期
操作员工号
时间
总额
用户
工号
姓名
最后登录时间
权限
性别
图5-1 分E-R图
商品实体E-R图
商品供应商实体E-R图
购物单实体E-R图
用户实体E-R图
5。2整体ER图
实体间关系:一个购物单里可以有多种商品,每种商品可以存在于多个购物单中;一个供应商可供应多种商品,每种商品可从多个供应商进货;一个购物单只由一个用户(操作员)操作生成,一个用户可操作生成多个购物单。
根据以上实体间的关系以及各分E—R图,可做出如下的整体E—R图:
图5-2 整体E-R图
商品
商品供应商
购物单
用户
供应
购买
操作
总额
名称
名称
姓名
编号
折扣
单价
单位
库存
数量
单号
日期
时间
工号
性别
最后登录时间
权限
编号
地址
电话
数量
n
m
m
n
n
1
6 系统概要设计
6。1数据库逻辑结构设计
参考整体E—R图可得到如下关系模式:商品(编号,名称,单价,折扣,库存,单位)商品供应商(编号,名称,地址,电话)供应商—商品(供应商编号,商品编号,数量)购物单(单号,总额,日期,时间)购物单—商品(购物单号,商品编号,数量)用户(工号,姓名,性别,权限,最后登录时间)购物单—用户(单号,工号)说明:由于购物单所关联的历史商品信息不一定与当前的商品信息相同,因此需要更改一个关系模式:购物单—商品(单号,编号,名称,单价,折扣,库存,单位);另外可以将购物单-用户模式合并到用户模式中去。
由关系模式可设计得如下基本表:
Commodities表
字段
说明
类型
宽度
约束
ID
商品编号
varchar
12
主键,非空
Name
商品名
varchar
30
非空
UnitPrice
单价
money
-
非空
Discount
折扣
smallint
1
大于0 小于或等于10
Stocks
库存
int
—
Unit
单位
varchar
8
Orders表
字段
说明
类型
宽度
约束
ID
购物单号
varchar
16
主键,非空
OrderDate
日期
date
-
非空
OrderTime
时间
time
7
非空
TotalPrice
该单总额
money
—
非空
OperatorID
操作员工号
varchar
10
OrderDetails表
字段
说明
类型
宽度
约束
OrderID
购物单号
varchar
16
主键,非空,外键(参考Orders表)
CommodityID
商品编号
varchar
12
主键,非空,外键(参考Commodities表)
Name
商品名
varchar
30
非空
UnitPrice
购买时单价
money
—
非空
Discount
购买时折扣
smallint
1
大于0 小于或等于10
Unit
单位
varchar
8
Amount
购买数量
int
—
Suppliers表
字段
说明
类型
宽度
约束
ID
供应商编号
varchar
10
主键,非空
Name
供应商名称
varchar
30
非空
Addr
地址
varchar
10
Tel
联系电话
varchar
15
Supply表
字段
说明
类型
宽度
约束
SupplierID
供应商编号
varchar
10
主键,非空,外键(参考Suppliers表)
CommoditiesID
商品名称
varchar
12
主键,非空,外键(参考Commodities表)
Users表
字段
说明
类型
宽度
约束
ID
工号
varchar
10
主键,非空
Name
姓名
varchar
30
非空
Sex
性别
varchar
2
‘男’或'女’
Authority
权限
varchar
10
非空
RecentlyLogin
最近登录时间
smalldatetime
—
6。2数据库物理设计
6.2。1创建数据库
数据库命名为SuperMarket。数据文件初始大小为30MB,日志文件的初始大小为3MB;数据文件按20%增长,日志文件按1MB增长.
CREATE DATABASE SuperMarketON PRIMARY ( NAME = SuperMarket, FILENAME = 'G:\SuperMarket\SuperMarket。MDF’, SIZE = 30MB, FILEGROWTH = 20%)
LOGON ( NAME = SuperMarket_LOG, FILENAME = ’G:\SuperMarket\SuperMarket_LOG。LDF’, SIZE = 3MB, FILEGROWTH = 1MB);
6。2。2建立索引
create index CommodityIDIndex on Commodities(ID);
6。3系统总体框架
小型数据库管理系统
连接数据库并登录
商品销售
销售管理
库存管理
权限管理
商品查询
购物单结算
购物单查询
商品销售情况查询
进货管理
供应商管理
商品信息管理
添加用户
删除用户
图6-1 系统总体框架
7 系统详细设计
7.1数据库实施
7。1。1建立基本表
Create Table Suppliers (
ID varchar(10) primary key,
Name varchar(30) not null,
Addr varchar(40),
Tel varchar(15)
);
Create Table Commodities (
ID varchar(12) primary key,
Name varchar(30) not null,
UnitPrice money not null,
Discount smallint check (Discount between 1 and 10),
Stocks integer,
Unit varchar(8)
);
Create Table Users (
ID varchar(10) primary key,
Name varchar(30) not null,
Sex varchar(2) check (Sex in ('男’, '女’)),
Authority varchar(10),
RecentlyLogin smalldatetime
);
Create Table Orders (
ID varchar(16) primary key,
OrderDate date not null,
OrderTime time not null,
TotalPrice money not null,
OperatorID varchar(10),
);
Create Table Supply (
SupplierID varchar(10)not null,
CommoditiesID varchar(12) not null,
primary key (SupplierID, CommoditiesID),
foreign key (SupplierID) references Suppliers(ID),
foreign key (CommoditiesID) references Commodities(ID)
);
Create Table OrderDetails(
OrderID varchar(16),
CommodityID varchar(12),
Name varchar(30) not null,
UnitPrice money not null,
Discount smallint check (Discount between 1 and 10),
Unit varchar(8),
Amount integer,
primary key(OrderID, CommodityID),
foreign key (OrderID) references Orders(ID)
);
7.1。2建立视图
商品视图:
create view Commodities_view
as
select ID 商品编号, Name 名称, UnitPrice 单价, Discount 折扣, Unit 单位, Stocks 库存
from Commodities
购物单视图:
create view Orders_view
as
select ID 单号, TotalPrice 总额, OrderDate 日期, OrderTime 时间, OperatorID 操作员工号
from Orders
购物单细目视图:
Create view OrderDetails_view
as
select OrderID 单号, CommodityID 商品编号, Name 名称, UnitPrice 单价, Discount 折扣, Amount 数量, Unit 单位, OrderDate 日期, OrderTime 时间, OperatorID 操作员工号
from OrderDetails, Orders
where Orders.ID = OrderID
库存视图:
create view Stocks_view
as
select CommoditiesID 商品编号, SupplierID 供应商编号, Name 商品名称, Unit 单位, Stocks 原有库存
from Commodities, Supply
where Commodities。ID = Supply。CommoditiesID
供应商视图:
create view Suppliers_view
as
select ID 供应商编号, Name 名称, Addr 地址, Tel 联系电话
from Suppliers;
用户(权限)视图:
create view Users_view
as
select ID 工号, Name 姓名, Sex 性别, Authority 权限, RecentlyLogin 最后登录时间
from Users
7.2数据库的数据完整性设计
为处理插入购物单细目时违反实体完整性的情况,设计如下触发器,将插入的元组与原有的元组合并,更新Amount属性值.(实际运行时有报错,这个问题还没解决)
create trigger Insert_OrderDetails
on OrderDetails
instead of insert
as begin
declare
@new_OID varchar(16),
@new_CID varchar(12),
@new_Name varchar(30),
@new_UP money,
@new_Dis smallint,
@new_Unit varchar(8),
@new_Amount int,
@old_Amount int
select @new_OID = OrderID from inserted
select @new_CID = CommodityID from inserted
select @new_Name = Name from inserted
select @new_UP = UnitPrice from inserted
select @new_Dis = Discount from inserted
select @new_Unit = Unit from inserted
select @new_Amount = Amount from inserted
select @old_Amount = Amount from deleted
if(@new_OID in (select OrderID from OrderDetails) and @new_CID in (select CommodityID from OrderDetails)) begin
set @new_Amount = @old_Amount + @new_Amount
end
insert into OrderDetails values(@new_OID, @new_CID, @new_Name, @new_UP, @new_Dis, @new_Unit, @new_Amount)
end
7.3数据的安全设计
在本系统中有四种角色:超级管理员,权限管理员,销售员,销售管理员,仓库管理员.
7。3。1超级管理员的角色
create role r1;
grant select, update, delete
on Orders, Suppliers, Commodities, Supply, OrderDetails, Users to r1;
7.3。2权限管理员的角色
create role r2;
grant select, update, delete
on Users to r2;
7。3.3销售员的角色
create role r3;
grant select, update
on Orders, Commodities, OrderDetails to r3;
7。3。4销售管理员角色
create role r4;
grant select
on Orders, Commodities, OrderDetails to r4;
grant delete
on Orders, OrderDetails to r4;
7.3。5仓库管理员的角色
create role r5
grant select, update, delete
on Commodities, Suppliers, Supply to r5;
7。4系统功能模块的设计与实现
7。4。1登录模块
系统要求SQL Server 2008开启 SQL Server身份验证方式登录,并创建一个登录号和密码,该小型超市管理系统登录时使用的登录名和密码与其一致.登录该系统的同时也会连接并登录数据库管理系统。若数据库登录失败,则该超市管理系统也会登录失败。
图7-1 登录界面
主要代码框架:
public class Login extends JDialog implements ActionListener {
private JPanel panel = new JPanel(new BorderLayout());
private NIcon icon = new NIcon(new ImageIcon(”images/login。png”), "”);
private JLabel accountsL = new JLabel(”登录号");
private JLabel passwordL = new JLabel(”密 码”);
private JTextField accountsTF = new JTextField(15);
private JPasswordField passwordTF = new JPasswordField(15);
private JButton loginB = new JButton("登 录”);
private JButton exitB = new JButton(”退 出”);
public Login(JFrame parent) {} //构造器
@Override
public void actionPerformed(ActionEvent e) {} //用于侦听登录和退出两个按钮
}
7。4。2商品销售模块
该模块可查询商品并将其加入购物单。查询商品有按名称和按编号两种方式.若按编号查询并且勾选“直接添加到购物单”,则商品按默认数量1直接加入购物单。否则查询到的商品会先在查询结果中显示,在选择一定的购买数量后按右边的添加按钮方可添加至购物单。当所有要购买的商品都添加至购物单后,可按提交购物单按钮进行提交。提交时会自动生成购物单号,并执行插入Orders表和OrderDetails表,且更新相应商品的库存量。
图7-2 商品销售模块界面
主要代码框架:
public class CommoditySales extends JPanel implements ActionListener {
private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData resultSMD;
private JButton queryB = new JButton("查询商品”);
private JTextField queryTF = new JTextField(18);
private JRadioButton withNameRB = new JRadioButton(”按名称”);
private JRadioButton withIDRB = new JRadioButton("按编号");
private ButtonGroup queryMethodBG = new ButtonGroup();
private JCheckBox addDirectlyCB = new JCheckBox(”直接添加到购物单(按编号查询时可用,默认购买数量为 1 )”);
private JLabel resultL = new JLabel(”查询结果");
private JTable resultT = new JTable();
private JScrollPane resultSP = new JScrollPane(resultT);
private DefaultTableModel resultModel;
private JLabel orderL = new JLabel(”购物单”);
private JButton clearB = new JButton(”清空购物单");
private JTable orderT = new JTable();
private JScrollPane orderSP = new JScrollPane(orderT);
private DefaultTableModel orderModel;
private JLabel totalL = new JLabel(”总价:”);
private JTextField totalTF = new JTextField(10);
private JButton submitB = new JButton(”提交购物单”);
private JLabel paidL = new JLabel("实付:”);
private JTextField paidTF = new JTextField(10);
private JLabel changeL = new JLabel(”应找回:”);
private JTextField changeTF = new JTextField(10);
int rowCount, colCount, orderTableRowCount = 0;
public CommoditySales() {} //构造函数
private void selectQueryMethod() {} //选择查询的方法:按名称/按编号
public void addToOrderTable() {} //将选中的项加入到购物单
public void removeFromOrderTable() {} //将选中的项从购物单移除
private void queryCommodity() {} //查询商品,并将结果添加至查询结果表
@Override
public void actionPerformed(ActionEvent e) {} //用于侦听各按钮的行为
public void connectStatement() {} //各模块都有这个方法,用于共享一个 Statement对象
}
7。4。3销售管理模块
销售管理模块有两个子模块:
(1)购物单查询子模块。可按单号或起止日期查询指定的购物单。查询结果出现在查询结果表中,点击表中的某一行则可在购物单详情列表中查看购物单细目。该子模块还可以删了指定日期以前的购物单.
(2)商品销售情况查询子模块.可按商品编号或起止日期查询指定的购物单。查询结果出现在查询结果表中,点击表中的某一行可在商品销售详情列表中查看在指定时间内包含该商品的所有购物单及购买时商品的信息。
图7-3 购物单查询子模块(上)和商品销售情况查询子模块(下)的界面
主要代码框架:
public class SalesManagement extends JPanel implements ActionListener, MouseListener {
.。。。。。//该模块的主要字段
/*******下面是购物单查询子模块的元件*********/
private JLabel orderIDL = new JLabel(”单号 ”);
。.。.。.
private JButton deleteB = new JButton("删 除");
/*******下面是商品销信情况查询子模块的元件*******/
private JLabel commodityIDL = new JLabel("商品编号 ”);
。.。.。。
private DefaultTableModel commodityDModel;
/*********主要的方法*******/
public SalesManagement() {} //销售管理模块的构造器
private void createOrderQueryPanel() {} //构造购物单查询子模块
private void createCommodityQueryPanel() {} //构造商品销信情况查询子模块
private void setComboBox(final JComboBox a, final JComboBox b, final JComboBox c) {} //日期选择的设置
private void queryOrder() {} //查询购物单
private void queryCommodity() {} //查询商品销售情况
private void deleteOrders() {} //删除购物单(小于指定日期)
private void showOrderDetails() {} //显示购物单详情
private void showCommoditySalesDetails() {} //显示商品销售详情
/******以下是侦听器必须要实现的方法,用于执行侦听对象的功能*******/
public void actionPerformed(ActionEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void connectStatement() {}
}
7。4。4库存管理模块
该模块有三个子模块:供应商管理、商品信息管理、进货管理。
(1)供应商管理:可按供应商名称或编号查询商品的供应商,也可按显示所有供应商按钮来查询所有供应商.可实现对供应商信息的删除、增加、修改。
(2)商品信息管理:可按商品名称或编号查询指定商品的信息,也可按显示所有商品按钮来查询所有商品。可实现对商品信息的删除、增加、修改。
(3)进货管理:当有商品进货时,可用商品编号和供应商编号来录入进货信息.按添加按钮时系统会先将条目添加到进货列表。若有录入错误则可把错误条目从该列表移除。待按下确认提交按钮时才会修改数据库。
图7-4 供应商管理界面
图7-5 商品信息管理界面
图7-6 进货管理界面
主要代码框架:
public class StockManagement extends JPanel implements ActionListener {
...。。。//该模块的字段
public StockManagement() {} //销售管理模块的构造器
/* cID: CommodityID, sID: SupplierID */
private JLabel cIDL = new JLabel("商品编号");
。。。。.。// 进货管理子模块的元件
private JButton submitB = new JButton(”确认提交”);
private void createStockPanel() {} //构造进货管理子模块
private JButton querySB = new JButton(”查找供应商”);
。。。。。.//供应商管理子模块的元件
private JButton addSB = new JButton("添 加”);
private void createSupplierPanel() {} //构造供应商管理子模块
private JButton queryCB = new JButton(”查找商品");
.。。。。。//商品信息管理子模块的无件
private JButton addCB = new JButton("添 加”);
private void createCommodityPanel() {} //构造商品信息管理子模块
private void querySupplier() {} //查询供应商(按名称或编号)
private void querySupplierAll() {} //查询所有供应商
private void queryCommodity() {} //查询商品信息(按名称或编号)
private void queryCommodityAll() {} //查询所有商品信息
private void addToStockTable() {} //将一项进货信息添加入进货列表
public void removeFromStockTable() {} //从进货列表移除一项进货信息
private void submitStock() {} //提交进货列表,写入数据库
private void deleteSupplier() {} //删除指定供应商
private void addSupplier() {} //添加供应商
private void alterQuerySupplier() {} //查询要更变的供应商
private void alterSupplier() {} //更变供应商信息
private void deleteCommodity() {} //删除指定商品信息
private void addCommodity() {} //添加商品信息
private void alterQueryCommodity() {} //查询要更变信息的商品
private void alterCommodity() {} //更变商品信息
@Override
public void actionPerformed(ActionEvent e) {} //执行按钮的功能
public void connectStatement() {}
}
7.4.5用户管理模块
本系统有五种用户权限:超级管理员可使用所有功能;销售员仅可使用商品销售模块;销售管理员可使用销售管理模块;仓库管理员可使用库存管理模块;权限管理员可支配用户权限。当用户登录超市管理系统时,系统会根据用户权限跳转是相应的模块(这是期望的功能,还没来得及实现).
图7-6 用户管理模块界面
主要代码框架:
public class UserManagement extends JPanel {
/***权限管理模块的字段,元件*****/
private Connection connection;
..。。。。
public UserManagement() {} //权限管理模块的构造器
private void showAll() {} //显示所有的用户
private void addUser() {} //添加用户(未实现)
private void deleteUser() {} //删除用户(未实现)
/****下面两个是布局时用到的方法,其它模块也有,我没有列出来***/
private Box left(JComponent component) {}
private JPanel inPanel(JComponent .。。components) {}
public void connectStatement() {}
}
7。5系统安装使用说明
需将本系统的数据库SuperMarket附加到数据库管理系统里,并且开启SQL Server身份验证方式,创建登录名和密码并用它们来登录本小型超市管理系统.
8 回顾与展望
这次课程设计是一次既有趣又有
展开阅读全文