《数据库课程设计超市管理系统(广工).doc》由会员分享,可在线阅读,更多相关《数据库课程设计超市管理系统(广工).doc(29页珍藏版)》请在三一办公上搜索。
1、成绩课 程 设 计 课程名称 数据库系统 题目名称 小型超市管理系统 学生学院 计算机学院 专业班级 学 号 学生姓名 指导教师 2013 年 1 月 评价标准分数比例(%)成绩论文论文结构包含:1、相关技术介绍、需求分析、2、概念结构设计(涉及的实体至少三个以上)、3、逻辑结构设计(有完整性约束说明)、4、数据库物理设计、5、数据库完整性设计(违反实体、参照完整性时的解决办法,比如触发器、存储过程等)5、数据库安全性设计、6、数据库实施、系统测试方案和测试报告、7、系统的主要功能和使用说明、系统安装说明。要求论文完整、内容详细,格式规范。40程序1、 系统运行正确;2、功能完善:有增、删、改
2、、查功能,输入、输出功能;3、有基本的统计、报表功能4、有多表连接查询、自身连接查询、字符串匹配查询、模糊查询、分组查询等。5、工作量充分;6、系统实现技术的难度。30数据库设计E-R图设计正确;数据库逻辑结构设计规范化;数据库物理设计合理。30总评成绩 优 良 中 及格 不及格总分目 录1 引言11.1课题来源11.2课题研究主要内容11.3主要工作12 开发工具和平台13 命名约定14 需求分析24.1信息要求分析24.2处理要求分析25 概念结构设计35.1数据实体描述及分ER图35.2整体ER图36 系统概要设计46.1数据库逻辑结构设计46.2数据库物理设计66.3系统总体框架77
3、系统详细设计77.1数据库实施77.2数据库的数据完整性设计97.3数据的安全设计107.4系统功能模块的设计与实现117.5系统安装使用说明218 回顾与展望21参考文献221 引言1.1课题来源到超市购物是一种较为频繁的生活事件。由于人们的超市购物行为越来越频繁,超市规模越来越大,商品种类数目与之俱增,超市商品的管理变得更加困难。显然手工的管理方式是不合适的。因此利用数据库相关技术开发一个规模适当、操作方便、功能完备的超市管理系统显得很有必要。1.2课题研究主要内容使用数据库管理系统和应用程序实现小型超市管理系统的商品销售结算,销售情况管理,商品信息管理,库存管理,权限管理等功能。1.3主
4、要工作先对小型超市管理系统的设计进行需求分析,建立数据流图和数据字典。进行概念结构设计,作出E-R图并进行优化。进行逻辑结构设计,建立数据关系模型。进行物理结构设计,选择适当的存取方法。利用数据库管理系统按前面的分析设计作出若于基本表,根据应用程序和用户的需要建立视图。最后进行应用程序的设计、调试、运行。2 开发工具和平台数据库管理系统:Microsoft SQL Server 2008程序设计语言:Java 1.6应用程序开发工具:eclipse测试平台 Windows 7 64bit3 命名约定表名和属性名的首字母大写(虽然SQL语言不分大小写,但设计过程仍遵守这一约定),基本表名和数据若
5、由多个单词构成,则每个单词的首字母均大写,且单词间首尾紧密相接,没有间隔或其它分隔符。对于视图采用 _view 这一后辍。4 需求分析4.1信息要求分析4.1.1商品销售模块应具有收银结算的功能:可将查询得的商品加入购物单,并计算总价。结算后要更新商品的库存。4.1.2销售管理模块要实现对购物单和商品销量的查询。可分别按单号和商品编号,并能在限定(或不限定)时间范围内进行查询,并可查看查询结果的细目。4.1.3库存管理模块要实现去商品进货的管理,及时更新库存。并具要能实现对供应商信息和商品信息的增、删、查、改等功能。4.1.4实现权限管理,对不同的用户可授于不同的权限,不同权限所能使用的功能范
6、围有所不同。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
7、图商品商品供应商购物单用户供应购买操作总额名称名称姓名编号折扣单价单位库存数量单号日期时间工号性别最后登录时间权限编号地址电话数量nmmnn16 系统概要设计6.1数据库逻辑结构设计参考整体E-R图可得到如下关系模式:商品(编号,名称,单价,折扣,库存,单位)商品供应商(编号,名称,地址,电话)供应商商品(供应商编号,商品编号,数量)购物单(单号,总额,日期,时间)购物单商品(购物单号,商品编号,数量)用户(工号,姓名,性别,权限,最后登录时间)购物单用户(单号,工号)说明:由于购物单所关联的历史商品信息不一定与当前的商品信息相同,因此需要更改一个关系模式:购物单商品(单号,编号,名称,单价,
8、折扣,库存,单位);另外可以将购物单用户模式合并到用户模式中去。由关系模式可设计得如下基本表:Commodities表字段说明类型宽度约束ID商品编号varchar12主键,非空Name商品名varchar30非空UnitPrice单价money-非空Discount折扣smallint1大于0 小于或等于10Stocks库存int-Unit单位varchar8Orders表字段说明类型宽度约束ID购物单号varchar16主键,非空OrderDate日期date-非空OrderTime时间time7非空TotalPrice该单总额money-非空OperatorID操作员工号varchar1
9、0OrderDetails表字段说明类型宽度约束OrderID购物单号varchar16主键,非空,外键(参考Orders表)CommodityID商品编号varchar12主键,非空,外键(参考Commodities表)Name商品名varchar30非空UnitPrice购买时单价money-非空Discount购买时折扣smallint1大于0 小于或等于10Unit单位varchar8Amount购买数量int-Suppliers表字段说明类型宽度约束ID供应商编号varchar10主键,非空Name供应商名称varchar30非空Addr地址varchar10Tel联系电话varch
10、ar15Supply表字段说明类型宽度约束SupplierID供应商编号varchar10主键,非空,外键(参考Suppliers表)CommoditiesID商品名称varchar12主键,非空,外键(参考Commodities表)Users表字段说明类型宽度约束ID工号varchar10主键,非空Name姓名varchar30非空Sex性别varchar2男或女Authority权限varchar10非空RecentlyLogin最近登录时间smalldatetime-6.2数据库物理设计6.2.1创建数据库数据库命名为SuperMarket。数据文件初始大小为30MB,日志文件的初始大小
11、为3MB;数据文件按20%增长,日志文件按1MB增长。CREATE DATABASE SuperMarketON PRIMARY (NAME = SuperMarket,FILENAME = G:SuperMarketSuperMarket.MDF,SIZE = 30MB,FILEGROWTH = 20%)LOG ON (NAME = SuperMarket_LOG,FILENAME = G:SuperMarketSuperMarket_LOG.LDF,SIZE = 3MB,FILEGROWTH = 1MB);6.2.2建立索引create index CommodityIDIndex on
12、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 k
13、ey,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);Cre
14、ate 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) refe
15、rences 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,
16、 CommodityID),foreign key (OrderID) references Orders(ID);7.1.2建立视图商品视图:create view Commodities_viewasselect ID 商品编号, Name 名称, UnitPrice 单价, Discount 折扣, Unit 单位, Stocks 库存from Commodities购物单视图:create view Orders_viewasselect ID 单号, TotalPrice 总额, OrderDate 日期, OrderTime 时间, OperatorID 操作员工号from Ord
17、ers购物单细目视图:Create view OrderDetails_viewasselect OrderID 单号, CommodityID 商品编号, Name 名称, UnitPrice 单价, Discount 折扣, Amount 数量, Unit 单位, OrderDate 日期, OrderTime 时间, OperatorID 操作员工号from OrderDetails, Orderswhere Orders.ID = OrderID库存视图:create view Stocks_viewasselect CommoditiesID 商品编号, SupplierID 供应商
18、编号, Name 商品名称, Unit 单位, Stocks 原有库存from Commodities, Supplywhere Commodities.ID = Supply.CommoditiesID供应商视图:create view Suppliers_viewasselect ID 供应商编号, Name 名称, Addr 地址, Tel 联系电话from Suppliers;用户(权限)视图:create view Users_viewasselect ID 工号, Name 姓名, Sex 性别, Authority 权限, RecentlyLogin 最后登录时间from Use
19、rs7.2数据库的数据完整性设计为处理插入购物单细目时违反实体完整性的情况,设计如下触发器,将插入的元组与原有的元组合并,更新Amount属性值。(实际运行时有报错,这个问题还没解决)create trigger Insert_OrderDetailson OrderDetailsinstead of insertas begindeclarenew_OID varchar(16),new_CID varchar(12),new_Name varchar(30),new_UP money,new_Dis smallint,new_Unit varchar(8),new_Amount int,o
20、ld_Amount intselect new_OID = OrderID from insertedselect new_CID = CommodityID from insertedselect new_Name = Name from insertedselect new_UP = UnitPrice from insertedselect new_Dis = Discount from insertedselect new_Unit = Unit from insertedselect new_Amount = Amount from insertedselect old_Amount
21、 = Amount from deletedif(new_OID in (select OrderID from OrderDetails) and new_CID in (select CommodityID from OrderDetails) beginset new_Amount = old_Amount + new_Amountendinsert into OrderDetails values(new_OID, new_CID, new_Name, new_UP, new_Dis, new_Unit, new_Amount)end7.3数据的安全设计在本系统中有四种角色:超级管理员
22、,权限管理员,销售员,销售管理员,仓库管理员。7.3.1超级管理员的角色create role r1;grant select, update, deleteon Orders, Suppliers, Commodities, Supply, OrderDetails, Users to r1;7.3.2权限管理员的角色create role r2;grant select, update, deleteon Users to r2;7.3.3销售员的角色create role r3;grant select, updateon Orders, Commodities, OrderDetail
23、s to r3;7.3.4销售管理员角色create role r4;grant selecton Orders, Commodities, OrderDetails to r4;grant deleteon Orders, OrderDetails to r4;7.3.5仓库管理员的角色create role r5grant select, update, deleteon Commodities, Suppliers, Supply to r5;7.4系统功能模块的设计与实现7.4.1登录模块系统要求SQL Server 2008开启 SQL Server身份验证方式登录,并创建一个登录号
24、和密码,该小型超市管理系统登录时使用的登录名和密码与其一致。登录该系统的同时也会连接并登录数据库管理系统。若数据库登录失败,则该超市管理系统也会登录失败。图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 =
25、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) /构造器Overridepublic void
26、 actionPerformed(ActionEvent e) /用于侦听登录和退出两个按钮7.4.2商品销售模块该模块可查询商品并将其加入购物单。查询商品有按名称和按编号两种方式。若按编号查询并且勾选“直接添加到购物单”,则商品按默认数量1直接加入购物单。否则查询到的商品会先在查询结果中显示,在选择一定的购买数量后按右边的添加按钮方可添加至购物单。当所有要购买的商品都添加至购物单后,可按提交购物单按钮进行提交。提交时会自动生成购物单号,并执行插入Orders表和OrderDetails表,且更新相应商品的库存量。图7-2 商品销售模块界面主要代码框架:public class Commodi
27、tySales 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
28、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 JScroll
29、Pane 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 J
30、Label 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)
31、;int rowCount, colCount, orderTableRowCount = 0;public CommoditySales() /构造函数private void selectQueryMethod() /选择查询的方法:按名称/按编号public void addToOrderTable() /将选中的项加入到购物单public void removeFromOrderTable() /将选中的项从购物单移除private void queryCommodity() /查询商品,并将结果添加至查询结果表Overridepublic void actionPerformed(A
32、ctionEvent e) /用于侦听各按钮的行为public void connectStatement() /各模块都有这个方法,用于共享一个Statement对象7.4.3销售管理模块销售管理模块有两个子模块:(1)购物单查询子模块。可按单号或起止日期查询指定的购物单。查询结果出现在查询结果表中,点击表中的某一行则可在购物单详情列表中查看购物单细目。该子模块还可以删了指定日期以前的购物单。(2)商品销售情况查询子模块。可按商品编号或起止日期查询指定的购物单。查询结果出现在查询结果表中,点击表中的某一行可在商品销售详情列表中查看在指定时间内包含该商品的所有购物单及购买时商品的信息。图7-3
33、 购物单查询子模块(上)和商品销售情况查询子模块(下)的界面主要代码框架:public class SalesManagement extends JPanel implements ActionListener, MouseListener 。/该模块的主要字段/*下面是购物单查询子模块的元件*/private JLabel orderIDL = new JLabel(单号);。private JButton deleteB = new JButton(删除);/*下面是商品销信情况查询子模块的元件*/private JLabel commodityIDL = new JLabel(商品编号
34、);。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 quer
35、yOrder() /查询购物单private void queryCommodity() /查询商品销售情况private void deleteOrders() /删除购物单(小于指定日期)private void showOrderDetails() /显示购物单详情private void showCommoditySalesDetails() /显示商品销售详情/*以下是侦听器必须要实现的方法,用于执行侦听对象的功能*/public void actionPerformed(ActionEvent e) public void mouseClicked(MouseEvent e) pu
36、blic 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)商品信息管
37、理:可按商品名称或编号查询指定商品的信息,也可按显示所有商品按钮来查询所有商品。可实现对商品信息的删除、增加、修改。(3)进货管理:当有商品进货时,可用商品编号和供应商编号来录入进货信息。按添加按钮时系统会先将条目添加到进货列表。若有录入错误则可把错误条目从该列表移除。待按下确认提交按钮时才会修改数据库。图7-4 供应商管理界面图7-5 商品信息管理界面图7-6 进货管理界面主要代码框架:public class StockManagement extends JPanel implements ActionListener 。/该模块的字段public StockManagement() /
38、销售管理模块的构造器/* 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 c
39、reateSupplierPanel() /构造供应商管理子模块private JButton queryCB = new JButton(查找商品); 。/商品信息管理子模块的无件private JButton addCB = new JButton(添加);private void createCommodityPanel() /构造商品信息管理子模块private void querySupplier() /查询供应商(按名称或编号)private void querySupplierAll() /查询所有供应商private void queryCommodity() /查询商品信息(
40、按名称或编号)private void queryCommodityAll() /查询所有商品信息private void addToStockTable() /将一项进货信息添加入进货列表public void removeFromStockTable() /从进货列表移除一项进货信息private void submitStock() /提交进货列表,写入数据库private void deleteSupplier() /删除指定供应商private void addSupplier() /添加供应商private void alterQuerySupplier() /查询要更变的供应商p
41、rivate void alterSupplier() /更变供应商信息private void deleteCommodity() /删除指定商品信息private void addCommodity() /添加商品信息private void alterQueryCommodity() /查询要更变信息的商品private void alterCommodity() /更变商品信息Overridepublic void actionPerformed(ActionEvent e) /执行按钮的功能public void connectStatement() 7.4.5用户管理模块本系统有五
42、种用户权限:超级管理员可使用所有功能;销售员仅可使用商品销售模块;销售管理员可使用销售管理模块;仓库管理员可使用库存管理模块;权限管理员可支配用户权限。当用户登录超市管理系统时,系统会根据用户权限跳转是相应的模块(这是期望的功能,还没来得及实现)。图7-6 用户管理模块界面主要代码框架:public class UserManagement extends JPanel /*权限管理模块的字段,元件*/private Connection connection;。public UserManagement() /权限管理模块的构造器private void showAll() /显示所有的用户private void addUser() /添加用户(未实现)private void deleteUser() /删除用户(未实现)/*