资源描述
软件工程课程设计报告
( -- 年度第 一 学期)
课程名称: 软件工程课程设计
题 目: 小型超市管理系统
院 系:计算机与信息技术学院
班 级: 软件工程
组 号:
组 长: 洛佳琪
组 员:刘雅、刘一清、王雪瑶
指引教师: 杨陟卓
设计周数: 4周
小构成绩:
日期: 年 8月26日
《软件工程》课程设计任务书
一、目、规定
通过软件开发实践训练,进一步掌握软件工程办法和技术,提高软件开发实际能力,培养工程设计能力和综合分析、解决问题能力。
详细如下:
l 学习和实践在分析和设计计算机应用系统所需要知识,涉及面向对象系统分析与设计,编码和测试方面知识;
l 熟悉自动化软件开发工具Rational Rose 等,并将其运用于软件开发全过程;
l 进一步加强和提高软件工程文档编写能力;
l 培养协作能力和团队精神。
二、任务分派
任务
负责人
参加人
备注
需求分析
洛佳琪
洛佳琪
总体设计
刘一清
洛佳琪,刘雅,刘一清
详细设计
刘雅
洛佳琪,刘雅
系统实现与测试
王雪瑶
洛佳琪,王雪瑶
三、设计成果规定
l 建立系统分析与设计模型;
l 初步建立系统原型,实现核心功能;
l 编写课程设计报告。
指引教师:杨陟卓
日 期: 年 8 月 26 日
《软件工程》课程设计成绩评估
一、指引教师评语
二、成绩
学号
姓名
成绩
备注
洛佳琪
刘雅
刘一清
王雪瑶
指引教师: 杨陟卓
日 期: 年 8 月 26 日
摘要:本系统实现一种超市管理系统基本功能,涉及营业员进行商品录入和收银业务;超市经理对商品销售进行控制,管理进货事项和商品库存;管理员对员工信息进行增、删、改、查,管理员工操作权限,管理客户销售权限;顾客可以在销售系统里查询商品信息和会员积分。系统运用Java平台技术进行开发,实现超市管理系统动态管理,使得对信息管理更加及时、高效,提高了效率。同步还对系统开发原理、功能特点和设计方案进行了简介。
核心词:超市管理 数据库 管理 Java
1 课程设计目与规定
通过软件开发实践训练,进一步掌握软件工程办法和技术,提高软件开发实际能力,培养工程设计能力和综合分析、解决问题能力。
详细如下:
(1) 学习和实践在分析和设计计算机应用系统所需要知识,涉及面向对象系统分析与设计,编码和测试方面知识;
(2) 熟悉自动化软件开发工具Rational Rose ,并将其运用于软件开发全过程;
(3) 进一步加强和提高软件工程文档编写能力;
(4) 培养协作能力和团队精神。
2 设计正文
2.1 概述
2. 1.1 课题题目:小型超市管理系统
2. 1.2 系统重要目的
本系统目的是实现小型超市管理系统所需各种基本功能,涉及营业员商品录入和收银业务;超市经理商品销售控制、管理进货和商品库存;管理员对员工信息进行增、删、改、查,管理员工操作权限,管理客户销售权限;顾客可以在销售系统里查询商品信息和会员积分等功能。
2. 1.3 系统开发环境及运营环境:
操作系统: Windows XP Pro SP2
建模工具: Rational Rose
数据库系统:SQL Server
开发工具: Eclipse
2.2 系统需求分析
小型超市管理系统重要满足来自四方面需求,这四个方面分别是营业员、超市经理、顾客和管理员,也即是四个对象。
(1)营业员重要有商品录入和收银业务两某些功能。商品录入:依照超巿业务特点制定有关功能,可以通过输入唯一编号、扫描条形码、商品名称等来实现精准或模糊商品扫描录入。该扫描录入办法可以充分保证各种电脑操作水平层次人员均能精确迅速地进行商品扫描录入。收银业务:通过扫描条形码或者直接输入商品名称(对于同类多件商品采用一次录入加数量方式)自动计算本次交易总金额。在顾客付款后,自动计算找零,同步打印交易清单(涉及交易流水账号、每类商品商品名、数量、该类商品总金额、交易时间、负责本次收银员工号)。如果顾客是本店会员并持有本人会员卡,则在交易前先扫描会员卡,并对所购物品所有实行95折优惠,并将所购物品总金额合计到该会员总消费金额中。 会员卡有效期限为一年,满一年未续卡者,该会员卡将被注销。
(2)超市经理重要有商品销售控制,进货管理和库存管理三某些功能。销售管理: 商品正常销售、促销与限量、限期及禁止销售控制。 综合查询各种销售明细记录、各地收银员收银记录以及交结账状况等。 按各种方式记录生成销售排行榜,灵活察看和打印商品销售日、月、年报表。进货管理: 依照销售状况及库存状况,自动制定进货筹划(亦可手工制定修改),可以避免盲目进货导致商品积压。 按筹划单有选取性地进行自动入库登记。 综合查询打印筹划进货与入库记录及金额。库存管理: 综合查询库存明细记录。 库存状态自动告警提示。如库存过剩、少货、缺货等。软件为您预警,避免库存商品积压损失和缺货。 库存自动盘点计算。
(3)管理员重要有基本信息管理和员工操作权限管理三某些。基本信息管理:对员工、会员信息进行增、删、改、查。员工操作权限管理:普通员工只能登陆系统查看个人信息及签到,别的权限受限制;营业员还可以登陆收银系统。
(4)会员重要有会员积分查询。会员积分查询:是会员顾客查询自己积分数并兑换相应礼物。
2.1.1 用例图
图2-1 小型超市管理系统用例图
用例图阐明:
(1) 系统外部角色有:会员顾客、营业员顾客、员工顾客、超市经理和管理员。
(2)系统重要用例文档描述:
①收银业务用例:营业员顾客和顾客顾客可见功能,包括了会员业务和结账两个用例功能。
②员工操作权限管理用例:管理员顾客和员工顾客可见功能,这个用例进一步分为三个用例:签到权限用例、查询个人信息权限用例和登陆收银系统权限用例。
③基本信息管理用例:管理员顾客可见功能,实现员工、会员信息管理功能,包括了员工基本信息管理和会员基本信息管理两个用例。
④商品销售控制用例:超市经理顾客可见功能,实现商品销售控制功能,包括了正常销售控制、促销与限量、限期销售控制、禁止销售控制和查询明细五个用例。
⑤进货管理用例:超市经理顾客可见功能,包括了自动制定进货筹划、自动入库登记、查询筹划进货和查询入库记录及金额四个用例。
⑥库存管理用例:超市经理顾客可见功能,包括了自动盘点计算、查询库存明细、库存状态自动报警三个用例。
(3)系统用例之间关系:
①收银业务用例与会员业务、结账两用例之间是包括关系。
②员工操作权限管理用例与签到权限、查询个人信息权限和登陆收银系统权限三用例之间是包括关系。
③基本信息管理用例与员工基本信息管理、会员基本信息管理两个用例之间是包括关系。
④商品销售控制用例与正常销售控制、促销与限量、限期销售控制、禁止销售控制和查询明细五个用例之间是包括关系。
⑤进货管理用例与自动制定进货筹划、自动入库登记、查询筹划进货和查询入库记录及金额四个用例之间是包括关系。
⑥库存管理用例与自动盘点计算、查询库存明细、库存状态自动报警三个用例之间是包括关系。
(4) 系统核心用例正常事件流图和异常事件流图
表2-1 结账用例正常事件流图和异常事件流图
用例名称
结账
参加者
营业员、顾客
描述
营业员、顾客结账
启动
点击“结账”按钮
前置条件
商品录入完毕
主事件流
顾客
系统
1.系统自动计算出商品价格
2.顾客付款
3.系统将价款和货款比对后找零
4.系统将实际收到价款打入超市账户中
异常流
异常流
货款无法进入超市账户
系统
货款无法成功转入超市账户,系统给出提示,规定重新进行转入或规定管理员维修系统
异常
网络连接超时或系统功能损坏
表2-2 进货管理用例正常事件流图和异常事件流图
用例名称
进货管理用例
参加者
超市经理顾客
描述
超市经理管理进货事项
启动
进入进货管理界面
前置条件
顾客成功登录
后置条件
如果该用例成功,数据库中将增长商品信息。否则,系统维持现状
主事件流
顾客
系统
1.顾客进入界面,登陆成功
2.依照销售状况单及库存状况单,自动制定进货筹划
3.按筹划有选取性地进行自动入库登记
4.系统综合查询打印筹划进货与入库记录及金额
异常流
异常流
制定进货筹划失败
系统
销售状况单及库存状况单错误,系统给出错误提示,并规定进行修改后重新给出
2.2.2 类图
图2-2 小型超市管理系统类图
类图阐明:
(1)BaseUser类是一种系统角色顾客基类,重要办法有两个:
modifyPWD() 用于修改顾客密码;
loginCheck() 用于顾客登录验证。
(2)Admin类继承自BaseUser类。
(3)Staff类继承自BaseUser类,重要办法有:
STAdd() 用于添加员工;
STDel() 用于删除员工;
STUpdate() 用于更新员工信息;
STSel() 用于查询员工信息。
(4)manager类继承自BaseUser类,重要办法有:
MAAdd() 用于添加经理;
MADel() 用于删除经理;
MAUpdate() 用于更新经理信息;
MASel() 用于查询经理信息。
(5)VIP Member类继承自BaseUser类,重要办法有:
VIPAdd() 用于添加经理;
VIPDel() 用于删除经理;
VIPUpdate() 用于更新经理信息;
VIPSel() 用于查询经理信息。
(6)Good类是一种商品类,重要办法有:
GOAdd() 用于增长商品;
GODel() 用于删除商品。
(7) Sell类是一种销售类,重要办法有:
GODel() 用于删除商品。
(8)Replenish类是一种进货类,重要办法有:
GOAdd() 用于增长商品。
(9)Stock类是一种库存类,重要办法有:
StockAdd()用于增长库存量;
StockDel()用于减少库存量;
StockSel()用于查询库存量;
StockUpdate()用于更新库存量。
2.2.3 时序图
(1) 营业员管理睬员时序图
图2-3 营业员管理睬员时序图
(2)超市经理管理员工时序图
图2-4 超市经理管理员工时序图
2.2.3 协作图
(1) 营业员管理睬员协作图
图2-5 营业员管理睬员协作图
(2)超市经理管理员工协作图
图2-6 超市经理管理员工协作图
2.3 系统总体设计
2.3.1 设计问题域子系统
本系统目的是实现小型超市管理系统所需各种基本功能,分为前台和后台,共有五大模块,分别为:营业员模块,顾客模块,超市经理模块,管理员模块和公有模块。这五个模块包括了营业员进行商品录入和收银业务;超市经理对商品销售进行控制,管理进货事项和商品库存;管理员对员工信息进行增、删、改、查,管理员工操作权限,管理客户销售权限;顾客可以在销售系统里查询商品信息和会员积分等基本功能。
(1) 总体设计图
小型超市管理系统总体设计图
(2)各模块功能
功能模块
包括子功能模块
功能
管理员模块
客户管理子模块
删除,添加,更改顾客及顾客信息
员工管理子模块
删除,添加,更改员工及员工信息
超市经理模块
商品价格更改,管理进货事项和商品库存
营业员模块
商品录入和收银业务
会员模块
查询会员积分,管理个人信息
公共模块
登陆界面,公司简介及超市活动信息
2.3.2 设计数据管理子系统
(1)数据库表
序号
数据库表
数据表存储内容
1
staff
存储员工信息
2
member
存储会员信息
3
commodity
存储商品信息
4
supplier
存储供应商信息
5
storage
存储仓库信息
6
manufacturer
存储厂商信息
7
product
存储生产信息
8
supply
存储供应信息
9
procure
存储采购信息
10
store
存储存储信息
11
purchase
存储购买信息
(2) 数据表之间关系
数据表之间关系图
(3) 数据库表构造
1)员工表Staff详细数据字段:
Staff员工信息表
序号
字段名
字段类型
阐明
备注
1
sta.no
Char
员工编号
核心字
2
sta.name
Char
员工姓名
3
sta.sex
Char
员工性别
4
sta.add
Char
员工住址
5
sta.tel
Char
员工电话
6
sta.wag
Char
员工工资
7
sta.ID
Char
员工身份证号
2)会员表member详细数据字段:
Member会员信息表
序号
字段名
字段类型
阐明
备注
1
mem.no
Char
会员卡号
核心字
2
mem.name
Char
会员姓名
3
mem.sex
Char
会员性别
4
mem.ID
Char
会员身份证号
5
mem.add
Date
会员地址
6
mem.tel
Date
会员电话
3)商品表commodity详细数据字段
commodity 商品员信息表
序号
字段名
字段类型
阐明
备注
1
com.no
Char
商品编号
核心字
2
com.name
Char
商品名称
3
com.num
Char
商品单位
4
com.pri
Char
商品价格
com.type
Char
商品种类
4)供应商supplier详细数据字段
supplier供应商信息表
序号
字段名
字段类型
阐明
备注
1
sup.no
Char
供应商编号
核心字
2
sup.name
Char
供应商名称
3
sup.tel
Char
供应商电话
4
sup.add
Char
供应商地址
5
sup.pos
Char
供应商邮编
6
sup.man
Char
供应商联系人
5)仓库storage详细数据字段
Storage仓库信息表
序号
字段名
字段类型
阐明
备注
1
sto.no
Char
仓库编号
核心字
2
sto.area
Char
仓库面积
3
sto.type
Char
仓库类别
4
sto.add
Char
仓库地址
6)厂商manufacturer详细字段
manufacturer厂商信息表
序号
字段名
字段类型
阐明
备注
1
man.no
Char
厂商编号
核心字
2
man.name
Char
厂商名称
3
man.tel
Char
厂商电话
4
man.pos
Char
厂商邮编
5
man.add
Char
厂商地址
6
man.man
Char
厂商联系人
2.3.3 设计人机交互子系统
(1)顾客分类
本系统顾客可分为四类:
1)管理员顾客;
2)会员顾客;
3)员工顾客;
4)超市经理顾客。
(2)顾客描述
1)管理员顾客描述:
管理员顾客在整个小型超市管理系统中起到管理和维护作用,对会员和员工信息进行管理和维护等职责。
2)会员顾客描述:
会员顾客在本系统中具备管理自己信息权限,查看自己积分状况及超市会员优惠权限。
3)员工顾客描述:
员工在本系统中具备修改自己信息,查看商品价格及库存状况权限。
4)超市经理顾客描述:
超市经理有商品销售控制,进货管理和库存管理权限,她可以管理库
存,控制进货,更改商品价格等。
(3)设计命令层次
1)系统人机交互子系统内容和准则:
本小型超市管理系统人机交互子系统在依照不同顾客身份登陆到不同页面,然后按照不同顾客只能进行顾客权限内操作,其构造图如下:
2)通过采用树形构造,细化命令组织方式,如下:
2.4 详细设计
小型超市管理系统是实现管理员管理员工与会员基本信息、员工登陆系统以及超市经理管理进货、库存、商品销售一种平台,整个学生选课系统共分为5个大模块:管理员模块,会员模块,员工模块,超市经理模块和公有模块,其中复杂办法和模块
详细设计流程图如下。
(1) 系统顾客登录流程图
图4-1 系统顾客登录流程图
(2)营业员收银业务流程图
图4-2 营业员收银业务流程图
(3)管理员添加员工流程图
图4-3管理员添加员工流程图
(4)超市经理控制限量销售流程图
图4-4 超市经理控制限量销售流程图
(5)超市经理管理进货流程图
图4-5 超市经理管理进货流程图
(6)超市经理管理库存流程图
图4-6 超市经理管理库存流程图
2.5 系统实现
本系统采用了三层架构来实现,即分为顾客界面层(UI)、业务逻辑层(BLL)和数据访问层(DAL),顾客界面层是展示给顾客界面,以便顾客与系统进行交互;业务逻辑层是对系统业务实体封装,完毕系统业务功能;数据访问层直接与数据库打交道,为业务逻辑层提供底层数据库操作。
登录功能实现
登录界面是使用者在使用此软件时需要输入自已账号和密码,从而使用自已权限来管理超市运营。
小超市登录界面如4-1所示。
图4-1 小超市管理系统登录界面
模块核心代码:
public class Login extends Frame implements ActionListener,WindowListener //登陆界面
{
public int screanWidth,screanHeight;
String idin=null;
String keyin=null;
String passwordD=null;
public static String persontyD=null;
MenuBar menubar;
Menu menu;
MenuItem quet,help;
Label id,key;
TextField idtf,keytf;
Box boxV1,boxV2,boxV3,baseBox,boxx;
Button enterB;
Login()
{ setTitle("超市管理系统登陆界面");
Toolkit tool=getToolkit();
Dimension dim=tool.getScreenSize();
screanWidth=dim.width;
screanHeight=dim.height;
setBounds(dim.width/3,dim.height/3,320,215);
menubar=new MenuBar();
menu=new Menu("功能");
help=new MenuItem("协助");
quet=new MenuItem("退出");
quet.setShortcut(new MenuShortcut(KeyEvent.VK_E));
quet.addActionListener(new ActionListener() //匿名类实例控制
{
public void actionPerformed(ActionEvent p){
System.exit(0);
}} );
menu.add(help);
menu.add(quet);
menubar.add(menu);
setMenuBar(menubar);
id=new Label("请输入帐号:",Label.RIGHT);
key=new Label("请输入密码:",Label.RIGHT);
idtf=new TextField(10);
keytf=new TextField(10);
keytf.setEchoChar('*');
enterB=new Button("登陆");
boxV1=Box.createVerticalBox();
boxV1.add(Box.createVerticalStrut(35));
boxV1.add(id);
boxV1.add(Box.createVerticalStrut(15));
boxV1.add(key);
boxV1.add(Box.createVerticalStrut(15));
boxV2=Box.createVerticalBox();
boxV2.add(Box.createVerticalStrut(35));
boxV2.add(idtf);
boxV2.add(Box.createVerticalStrut(15));
boxV2.add(keytf);
boxV2.add(Box.createVerticalStrut(15));
baseBox=Box.createHorizontalBox();
baseBox.add(Box.createHorizontalStrut(25));
baseBox.add(boxV1);
baseBox.add(Box.createHorizontalStrut(5));
baseBox.add(boxV2);
baseBox.add(Box.createHorizontalStrut(70));
boxV3=Box.createHorizontalBox();
boxV3.add(Box.createHorizontalStrut(125));
boxV3.add(enterB);
boxV3.add(Box.createHorizontalStrut(125));
boxx=Box.createVerticalBox();
boxx.add(baseBox);
boxx.add(Box.createVerticalStrut(15));
boxx.add(boxV3);
boxx.add(Box.createVerticalStrut(70));
add(boxx);
enterB.addActionListener(this);
addWindowListener(this);
setResizable(false);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{ Connection con;
Statement sql;
ResultSet rs;
if (e.getSource()==enterB)
{ idin=idtf.getText();
keyin=keytf.getText();
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }
catch (ClassNotFoundException f)
{System.out.println(""+f);}
try
{con=DriverManager.getConnection("jdbc:odbc:q","","");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM password where ID='"+idin+"'");
while(rs.next()){
passwordD=rs.getString(2);
persontyD=rs.getString(3);}
con.close();}
catch (SQLException g)
{System.out.println(g);}
if (keyin.equals(passwordD))
{View2 frame=new View2();
this.setVisible(false);}
else {JOptionPane.showMessageDialog(this," 帐户或密码错误\n 请重新输入","提示",JOptionPane.WARNING_MESSAGE);} } }
public void windowActivated(WindowEvent o)
{validate();}
public void windowDeactivated(WindowEvent o)
{setBounds(screanWidth/3,screanHeight/3,320,215);
validate();}
public void windowClosing(WindowEvent o)
{dispose();}
public void windowClosed(WindowEvent o)
{System.exit(0);}
public void windowIconified(WindowEvent o)
{}
public void windowDeiconified(WindowEvent o)
{setBounds(screanWidth/3,screanHeight/3,320,215);
validate();}
public void windowOpened(WindowEvent o){}
}
4.2 销售界面功能简介
该功能是此系统最核心模块,是消费者直接使用功能。消费者可以依照已看到商,在搜索栏中打入商品编号,进行查询商品信息,然后可以依椐自已需要购买。最后单击提交,购买商品就记录到系统数据库中。
销售主界面如图4-2所示:
图 4-2 销售主界面
4.2.1 搜索商品信息
消费者可依照自已所需要商品编号,在销售功能中搜索,查看商品信息无误后,拟定与否购买。如搜索001号商品,查看它信息,如图4-3所示。
图4-3 搜索001号商品信息
4.2.2 购买商品
在拟定自已需要商品后,然后就是购买商品,消费者可以按“购买”键进行购买物品,购买一份就单击一次“购买”键,购买物品信息显示在购物信息框中,最后单击“提交”,消费者所购买物品就作为一种账单号存储在数据库中。
如购买004、005、006、008、010和011号商品时,购买信息如图4-4下:
图4-4 购买信息
当购买人不想购买这些商品时,可以点击窗口左下角清除按钮,来清除刚才购买商品,数据库中也不会有此记录。
此外,本系统是每购买一件商品向数据库提交一次记录,当未点击提交按钮之前,若要结束此窗口进程,咱们在代码中嵌入了一段删除当前帐单数据库记录代码,以达到没有误提交操作。
4.2.3 模块核心代码
⑴ 销售界面实现
public class View2 extends JFrame implements ActionListener //销售界面
{
String num=null,name=null,time=null,add=null,t1=null,t2=null,t3=null;
int price=0;
int n1,n2,ap,n3;
private JPanel sM=new JPanel();//supermarket面板
private JButton[] pS={new JButton("销售界面"),new JButton("销售管理"),
new JButton("商品管理"),new JButton("权限管理")};//personty 按钮
private JTextArea goodsShow=new JTextArea(),searchShow=new JTextArea(); //文本区
private JScrollPane jsp=new JScrollPane(goodsShow); //滚动区域 设定内容为 商品显示文本区
private JTextField numSearch=new JTextField(),showGoods=new JTextField(); //商品查询/显示商品
private JButton searchGoods=new JButton("搜索"),buyGoods=new JButton("购买"),
clean=new JButton("清空"),ok=new JButton("提交"),print=new JButton("打印并提交"); //查询按钮
private JLabel[] goodsInformation={new JLabel("商品编码",JLabel.CENTER),new JLabel("商品名称",JLabel.CENTER),
new JLabel("商品价格",JLabel.CENTER),new JLabel("生产日期",JLabel.CENTER),new JLabel("生产地",JLabel.CENTER) };
private JLabel[] goodsI={new JLabel("商品编码",JLabel.CENTER),new JLabel("商品名称",JLabel.CENTER),
new JLabel("商品价格",JLabel.CENTER),new JLabel("生产日期",JLabel.CENTER),new JLabel("生产地",JLabel.CENTER) } ;
private JLabel allPrice=new JLabel("商品总价:\n ",JLabel.LEFT),label1=new JLabel("商品信息 ",JLabel.RIGHT),label2=new JLabel("购物信息 ",JLabel.RIGHT);
public View2()
{
sM.setLayout(null);
for(int i=0;i<4;i++)
{
pS[i].setBounds(550+i*110,50,100,22);
sM.add(pS[i]);
pS[i].addActionListener(this);
}
jsp.setBounds(100,180,800,500);
goodsShow.setLineWrap(true)
numSearch.setBounds(100,50,150,22);
searchGoods.setBounds(260,50,60,22);
searchGoods.addActionListener(this);
buyGoods.setBounds(330,50,60,22);
buyGoods.addActionListener(this);
showGoods.setBounds(100,120,800,22);
for (int b=0;b<5 ;b++ )
{
goodsInformation
展开阅读全文