超市管理系统

  • 格式:doc
  • 大小:2.41 MB
  • 文档页数:20

课程设计报告超市管理系统班级:学号:姓名:1 目的和背景超市是人们生活中重要的一部分,超市分为小型超市和大型的连锁超市,为了更加便利管理小型超市的正常运作,一套完善的超市管理系统显得尤为重要。

该系统需要支持管理员和收银员两种角色,一方面可以给予管理员最高的权限,可以控制收银员的工作状态,并且可以更新商品信息,如添加商品,删除商品,更新商品价目库存数量,查询商品的属性信息。

而收银员角色可以进行商品的收银,对于客户选择的商品,可以添加顾客选择的商品并进行金额栏目的计算等功能,一目了然。

这套系统给予了顾客,收银员,管理员三方极大的便利,对于小型超市的经营意义重大。

2 数据库设计2.1 概念结构设计ER图2. 逻辑结构设计2.2.1 数据库表1.daymoney:(日账目表)2.emp(员工表:管理员和收银员用empPower区分)3.shop(商品表)4.shelf(货架表)2.3 物理结构设计2.3.1触发器设计相对于员工表和商品表大量的查询更新删除插入操作,每一步插入更新信息需要准确的各类属性的独特设置,而因为员工表与商品表本身关联不大,在这里就没有使用触发器设计。

但在shelf货架与商品表的操作上,这里特地设计了两个触发器。

Trigger1——功能:在插入一个新的货架的时候,如果货架的ID号大于10,假设情景,超市只需摆10个正常人够得到的架子,所以大于10个的货架要固定货架高度,以便装下固定存货所以统一定为10。

因为shelfID是varchar型的,所以这里需要转型,用到了convert函数。

代码如下,默认权限是当前使用者,Trigger2——功能:在撤除一个货架的时候,可以使用该功能,将对应货架上的商品也撤出。

保证管理员删除数据时的各表同步完善,因为他们都有共有属性shelfID。

(PS在这里也可以使用外键的方式,shelfID是shelf表的主键,而在商品shop表中属于外键,所以shop表是shelf表在删除操作上的字表,在设置时可以使用cascade方法级联删除如图)触发器使用前看7 在操作之后shelfID=7的架子和放在上面的222222号的牙刷都消失了触发器三:假设情景,当shop类的num库存量>100时只能放在1号货架上,1号货架为巨型货架。

如图所示为trigger3代码为trigger3信息。

检验:数据库中结果2.3.2 索引的设计数据库主要使用主键索引,保证唯一性约束,便于高效的查找。

如表的结构可见,这里面主要的索引方式是已逐渐作为索引如表daymoney日账目表,emp员工表,shop商品表,但在shelf表中索引可以指向shop表与shelf表的联合表目索引的作用:大大提高了查询的速度和效率。

2.3.4 数据库视图设计——本人建立视图的主要原因:1.简化程序2. 当前端需要按照不同种类菜品加载数据时,直接遍历不同的视图,便可以完成加载,使得逻辑更加清晰,提高查询与加载的速度。

1. view1 DDL定义如下2. view2View1 vs 原始表 empDao 124 行要实现效果绿色注释为原始语句,而运用视图,只需下面的一行就可以完成查语句。

View2 直接遍历不同的视图,便可以完成加载 这是查看在线状态。

提高查询与加载的速度。

empDao 513行 View3View1建立的原因:本人设计的项目里面要用到一个交filltable 的函数,用于将数据库里面的数据通过connector 的连接,将一个二维可变的容器对象vector 存储每一个实体,每一个属性对应的数据,然后依次add 进Jtable 中,所以select 语句很繁琐,因为不需要提取emp 的所有属性,不能使用*,若多次使用,select+每一个属性——from 表,就很浪费代码行数,这里建立视图,一方面,简化了代码行数,只需要一次建立,就可以简化(图可以对比)绿色为非视图是写的复杂语句。

2.3.3 数据库存储过程设计:存储过程是存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

本人在使用Java调用MySQL的存储过程,需要用JDBC连接,环境eclipse为Luna。

在整个项目的过程中有太多的例子,在这里统计一下次数:在我设计的dao包中有四个类,分别是shopDao ,empDao ,shelfDao,daymoneyDao 类,用于实体对应的窗口window类调用这些dao功能类的方法,实现对于数据库中数据的存储。

在这里使用了两个存储过程从而来体会其使用的有效性。

项目实例截图主要依赖的是PreparedStatement 接口public interface PreparedStatement extends Statement 表示预编译的 SQL 语句的对象。

SQL 语句被预编译并存储在 PreparedStatement 对象中。

然后可以使用此对象多次高效地执行该语句。

用于设置 IN 参数值的设置方法(setShort、setString 等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。

例如,如果 IN 参数具有 SQL 类型INTEGER,那么应该使用 setInt 方法,还有setString…而这里的sql语句就是call +存储过车存储过程在数据库中定义public interface ResultSet extends Wrapper表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

ResultSet 对象具有指向其当前数据行的光标。

最初,光标被置于第一行之前。

next 方法将光标移动到下一行;因为该方法在ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

如getInt()、getString()、getDouble()等等。

具体的数据库中存储过程设计:在java 中用Stirng sql 去存储存储过程的调用指令String sql=”CALL FUC1()” String sql=”CALL FUC2()”代码部分:public String getT() {String time = "";Connection con=ConnectionManager.getCon();//声明PreparedStatement引用变量PreparedStatement ps=null;//声明ResultSet引用变量ResultSet rs=null;//sqlString sql="CALL fuc2()";try {//返回psps=con.prepareStatement(sql);//执行rs=ps.executeQuery();//遍历if(rs.next()){time=rs.getString("种类");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{ConnectionManager.closeStatement(ps);ConnectionManager.closeRS(rs);ConnectionManager.closeCon(con);}return time;}public String getcharacter() {String time = "";Connection con=ConnectionManager.getCon();//声明PreparedStatement引用变量PreparedStatement ps=null;//声明ResultSet引用变量ResultSet rs=null;//sqlString sql="CALL fuc1()";try {//返回psps=con.prepareStatement(sql);//执行rs=ps.executeQuery();//遍历if(rs.next()){time=rs.getString("F");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{ConnectionManager.closeStatement(ps);ConnectionManager.closeRS(rs);ConnectionManager.closeCon(con);}return time;}3系统设计与实现3.1 系统概要设计3.1.1 框架设计:本开发项目是桌面应用程序开发,JavaSE的项目,所以没有用上框架等知识,如SSH。

3.1.2 模块功能图:图1 图2(图一)3.2系统详细设计Overview 见图2 项目总览详细设计:所用图片icon为网上项目素材下载与游戏截图,确保真实性。

以下的交互界面都是用javaSE的JFrame类的组件component和容器container制作,运用了Actionlistener 事件监听器,监听ActionEnvent 事件的触发,在这里,事件多为按钮点击mouse click之类,不过多赘述了。

1.登陆窗口Login:Login界面,界面处理如图所示,为响应组件设置属性大小颜色,setvisible,等属性,设置button group,在选择收银员或管理员时只能2选1.在退出时,使用system.exit(0),终止程序。

当点击登陆按钮时,用事件监听,思路是获取textfield的内容和buttion的选择,用if判断,如果不成功,就展示JoptionPane 的showMessageDialog错误信息提示,登陆时,使用if来判断条件,并且使用我在empDao层添加的方法IfExist方法,判断信息是受存在,登陆后,要将登陆状态改变。

2.管理员主页面:选取阳光的界面可以提供管理员好心情,这里体现了UI界面符合年轻人的特性。

在服务,员工管理,商品管理,帮助几个选项中分别设置了其他功能。

先介绍服务使用的方法,其他页面在后续会介绍。

当点击启动服务时,调用我在empDao使用的setServiceOn()返回一个数据库对象,运用Connection 建立数据库连接,preparedStatement来记录参数化sql使用Update语句对emp表中的员工状态属性empLoginOn更新, 用对应的execute,之后释放连接关闭服务时,同样使用setServiceOff(),过程同上。