软件工程课程设计报告
( 2014 -- 2015 年度第 一 学期)
课程名称: 软件工程课程设计 题 目: 小型超市管理系统 院 系:计算机与信息技术学院 班 级: 软件工程 组 号: 组 长: 洛佳琪 组 员:刘雅、刘一清、王雪瑶 指导教师: 杨陟卓 设计周数: 4周 小组成绩: 日期:2014 年 8月26日
《软件工程》课程设计任务书
一、目的、要求
通过软件开发的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。
具体如下:
学习和实践在分析和设计计算机应用系统所需要的知识,包括面向对象的系统分析与设计,编码和测试方面的知识; 熟悉自动化的软件开发工具Rational Rose 2003等,并将其运用于软件开发的全过程; 进一步加强和提高软件工程文档的编写能力; 培养协作能力和团队精神。 二、任务分配 任务 需求分析 总体设计 详细设计 负责人 洛佳琪 刘一清 刘雅 洛佳琪 参与人 备注 洛佳琪,刘雅,刘一清 洛佳琪,刘雅 洛佳琪,王雪瑶 系统实现与测试 王雪瑶 三、设计成果要求
建立系统分析与设计模型;
初步建立系统原型,实现关键的功能; 编写课程设计报告。
指导教师:杨陟卓
日 期: 2014 年 8 月 26 日
《软件工程》课程设计成绩评定
一、 指导教师评语 二、 成绩
学号 姓名 成绩 备注 洛佳琪 刘雅 刘一清 王雪瑶 指导教师: 杨陟卓 日 期:2014 年 8 月 26 日摘要:本系统实现一个超市管理系统的基本功能,包括营业员进行商品录入和收银业务;超市经理对商品销售进行控制,管理进货事项和商品库存;管理员对员工信息进行增、删、改、查,管理员工操作权限,管理客户销售权限;顾客可以在销售系统里查询商品信息和会员积分。系统利用Java平台技术进行开发,实现超市管理系统的动态管理,使得对信息的管理更加及时、高效,提高了效率。同时还对系统的开发原理、功能特点和设计方案进行了介绍。 关键词:超市管理 数据库 管理 Java 1 课程设计的目的与要求
通过软件开发的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。
具体如下: (1)
学习和实践在分析和设计计算机应用系统所需要的知识,包括面向对象
的系统分析与设计,编码和测试方面的知识;
(2)
熟悉自动化的软件开发工具Rational Rose 2003,并将其运用于软件
开发的全过程; (3) (4)
进一步加强和提高软件工程文档的编写能力; 培养协作能力和团队精神。
2 设计正文
2.1 概述
2. 1.1 课题题目:小型超市管理系统 2. 1.2 系统的主要目标 本系统目标是实现小型超市管理系统所需的各种基本功能,包括营业员商品录入和收银业务;超市经理商品销售控制、管理进货和商品库存;管理员对员工信息进行增、删、改、查,管理员工操作权限,管理客户销售权限;顾客可以在销售系统里查询商品信息和会员积分等功能。 2. 1.3 系统的开发环境及运行环境: 操作系统: Windows XP Pro SP2 建模工具: Rational Rose 2003 数据库系统:SQL Server2005 开发工具: Eclipse 2.2 系统需求分析 小型超市管理系统主要满足来自四方面的需求,这四个方面分别是营业员、超市经理、顾客和管理员,也即是四个对象。 (1)营业员主要有商品录入和收银业务两部分功能。商品录入:根据超巿业务特点制定相关功能,可以通过输入唯一编号、扫描条形码、商品名称等来实现精确或模糊的商品扫描录入。该扫描录入方法可以充分保证各种电脑操作水平层次的人员均能准确快速地进行商品扫描录入。收银业务:通过扫描条形码或者直接输入商品名称(对于同类多件商品采用一次录入加数量的方式)自动计算本次交易的总金额。在顾客付款后,自动计算找零,同时打印交易清单(包括交易的流水账号、每类商品的商品名、数量、该类商品的总金额、交易的时间、负责本次收银的员工号)。如果顾客是本店会员并持有本人会员卡,则在交易前先扫描会员卡,并对所购物品全部实行95折优惠,并将所购物品的总金额累计到该会员
的总消费金额中。 会员卡的有效期限为一年,满一年未续卡者,该会员卡将被注销。
(2)超市经理主要有商品销售控制,进货管理和库存管理三部分功能。销售管理: 商品正常销售、促销与限量、限期及禁止销售控制。 综合查询各种销售明细记录、各地收银员收银记录以及交结账情况等。 按多种方式统计生成销售排行榜,灵活察看和打印商品销售日、月、年报表。进货管理: 根据销售情况及库存情况,自动制定进货计划(亦可手工制定修改),可以避免盲目进货造成商品积压。 按计划单有选择性地进行自动入库登记。 综合查询打印计划进货与入库记录及金额。库存管理: 综合查询库存明细记录。 库存状态自动告警提示。如库存过剩、少货、缺货等。软件为您预警,避免库存商品积压损失和缺货。 库存自动盘点计算。 (3)管理员主要有基本信息管理和员工操作权限管理三部分。基本信息管理:对员工、会员信息进行增、删、改、查。员工操作权限管理:一般员工只能登陆系统查看个人信息及签到,其余权限受;营业员还可以登陆收银系统。
(4)会员主要有会员积分查询。会员积分查询:是会员的顾客查询自己积分数并兑换相应礼品。 2.1.1 用例图 图2-1 小型超市管理系统用例图 用例图说明: (1)系统的外部角色有:会员用户、营业员用户、员工用户、超市经理和管理员。 (2)系统主要用例的文档描述: ①收银业务用例:营业员用户和顾客用户可见的功能,包含了会员业务和结账两个用例功能。
②员工操作权限管理用例:管理员用户和员工用户可见的功能,这个用例进一步分为三个用例:签到权限用例、查询个人信息权限用例和登陆收银系统权限用例。
③基本信息管理用例:管理员用户可见的功能,实现员工、会员信息的
管理功能,包含了员工基本信息管理和会员基本信息管理两个用例。 ④商品销售控制用例:超市经理用户可见的功能,实现商品销售的控制功能,包含了正常销售控制、促销与限量、限期销售控制、禁止销售控制和查询明细五个用例。
⑤进货管理用例:超市经理用户可见的功能,包含了自动制定进货计划、自动入库登记、查询计划进货和查询入库记录及金额四个用例。 ⑥库存管理用例:超市经理用户可见的功能,包含了自动盘点计算、查询库存明细、库存状态自动报警三个用例。 (3)系统用例之间的关系: ①收银业务用例与会员业务、结账两用例之间是包含关系。 ②员工操作权限管理用例与签到权限、查询个人信息权限和登陆收银系统权限三用例之间是包含关系。 ③基本信息管理用例与员工基本信息管理、会员基本信息管理两个用例之间是包含关系。 ④商品销售控制用例与正常销售控制、促销与限量、限期销售控制、禁止销售控制和查询明细五个用例之间是包含关系。 ⑤进货管理用例与自动制定进货计划、自动入库登记、查询计划进货和查询入库记录及金额四个用例之间是包含关系。 ⑥库存管理用例与自动盘点计算、查询库存明细、库存状态自动报警三个用例之间是包含关系。
(4)系统关键用例的正常事件流图和异常事件流图
表2-1 结账用例的正常事件流图和异常事件流图
用例名称 表2-2 进货管理用例的正常事件流图和异常事件流图 2.2.2 描述 启动 前置条件 图2-2 小2.顾客付款 型超市管理系统类图 异常流 系统 货款无法进入超市账户 货款无法成功转入超市账户,系统给出提示,要求重新进行转入或要求管理员维修系统 异常 网络连接超时或系统功能损坏 进货管理用例 超市经理用户 超市经理管理进货事项 进入进货管理界面 用户成功登录 如果该用例成功,数据库中将增加商品信息。否则,系统维持现状 主事件流 用户 1.用户进入界面,登陆成功 系统 异常流 用户 系统 1.系统自动计算出商品价格 营业员、顾客结账 点击“结账”按钮 商品录入完成 主事件流 参与者 营业员、顾客 结账 类图 3.系统将价款和货款比对后找零 4.系统将实际收到价款打入超市账户中 类图说用例名称 参与者 描述 启动 前置条件 后置条件 明:
2.根据销售情况单及库存情况单,自动制定进货计划 3.按计划有选择性地进行自动入库登记 4.系统综合查询打印计划进货与入库记录及金额 异常流
(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)超市经理管理员工协作图
图2-5 营业员管理会员协作图
图2-6 超市经理管理员工协作图
2.3 系统总体设计 2.3.1 设计问题域子系统 本系统目标是实现小型超市管理系统所需的各种基本功能,分为前台和后台,共有五大模块,分别为:营业员模块,顾客模块,超市经理模块,管理员模块和公有模块。这五个模块包含了营业员进行商品录入和收银业务;超市经理对商品销售进行控制,管理进货事项和商品库存;管理员对员工信息进行增、删、改、查,管理员工操作权限,管理客户销售权限;顾客可以在销售系统里查询商品信息和会员积分等基本功能。 (1) 总体设计图 小型超市管理系统总体设计图 (2)各模块功能 包含子功能模功能模块 块 客户管理子模删除,添加,更改用户及用户信息 管理员模块 块 员工管理子模删除,添加,更改员工及员工信息 块 超市经理模块 商品价格更改,管理进货事项和商品库存 功能 营业员模块 会员模块 公共模块 2.3.2 设计数据管理子系统
商品录入和收银业务 查询会员积分,管理个人信息 登陆界面,企业介绍及超市活动信息 (1)数据库表 序号 1 2 3 4 5 6 7 8 9 10 11 (2) 数据库表 staff member commodity supplier storage manufacturer 数据表存储的内容 存储员工信息 存储会员信息 存储商品信息 存储供应商信息 存储仓库信息 存储厂商信息 存储生产信息 存储供应信息 存储采购信息 存储存储信息 存储购买信息 product supply procure store purchase 数据表之间的关系 数据表之间的关系图
(3)数据库表结构
1)员工表Staff的详细数据字段:
Staff员工信息表
序号 字段名 1 sta.no 字段类型 Char 说明 员工编号 备注 关键字 2 3 4 5 6 7 sta.name sta.sex sta.add sta.tel sta.wag sta.ID Char Char Char Char Char Char 员工姓名 员工性别 员工住址 员工电话 员工工资 员工身份证号 2)会员表member的详细数据字段: Member会员信息表 序号 1 2 3 4 5 6 字段名 mem.no mem.name mem.sex mem.ID mem.add mem.tel 字段类型 Char Char Char Char Date Date 说明 会员卡号 会员姓名 会员性别 会员身份证号 会员地址 会员电话 备注 关键字 3)商品表commodity的详细数据字段 commodity 商品员信息表 序号 1 2 3 4 字段名 com.no com.name com.num com.pri com.type 字段类型 Char Char Char Char Char 说明 商品编号 商品名称 商品单位 商品价格 商品种类 备注 关键字 4)供应商supplier的详细数据字段
supplier供应商信息表
序号 1 2 3 4 5 6 字段名 sup.no sup.name sup.tel sup.add sup.pos sup.man 字段类型 Char Char Char Char Char Char 说明 供应商编号 供应商名称 供应商电话 供应商地址 供应商邮编 供应商联系人 备注 关键字 5)仓库storage的详细数据字段 Storage仓库信息表 序号 1 2 3 4 字段名 sto.no sto.area sto.type sto.add 字段类型 Char Char Char Char 说明 仓库编号 仓库面积 仓库类别 仓库地址 备注 关键字 6)厂商manufacturer的详细字段 manufacturer厂商信息表 序号 1 2 3 4 5 6 字段名 man.no man.name man.tel man.pos man.add man.man 字段类型 Char Char Char Char 说明 厂商编号 厂商名称 厂商电话 厂商邮编 厂商地址 厂商联系人 备注 关键字 Char 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() //匿名类实例控制 p){
System.exit(0); }} );
{
public void actionPerformed(ActionEvent
menu.add(help);
menu.add(quet); menubar.add(menu); setMenuBar(menubar);
id=new Label(\"请输入帐号:\ key=new Label(\"请输入密码:\ 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();
catch (ClassNotFoundException 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) if (keyin.equals(passwordD)) {View2 frame=new View2(); this.setVisible(false); } else {JOptionPane.showMessageDialog(this,\" 帐户或密码错误\\n 请重新输入\提示\
} }
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(\"
商
品
编
码
\商品名称\
new JLabel(\"商品价格\生产日期
\生产地\
private JLabel[] goodsI={new JLabel(\"商品编码\
JLabel(\"商品名称\
new JLabel(\"商品价格\生产日期\生产地\ private JLabel allPrice=new JLabel(\"商品总价:
\\n
\JLabel(\"商品信息 \JLabel(\"购物信息 \ 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[b].setBounds(100+160*b,87,160,30); sM.add(goodsInformation[b]); } for (int b=0;b<5 ;b++ )
{ goodsI[b].setBounds(100+160*b,150,160,30); sM.add(goodsI[b]); } clean.setBounds(100,690,100,22); clean.addActionListener(this);
ok.setBounds(690,690,100,22); ok.addActionListener(this);
print.setBounds(800,690,100,22);
print.addActionListener(this); allPrice.setBounds(900,480,100,50); label1.setBounds(20,120,80,22);
label2.setBounds(20,180,80,22); sM.add(label1); sM.add(label2); sM.add(allPrice); sM.add(print); sM.add(ok); sM.add(showGoods); sM.add(clean); sM.add(numSearch); sM.add(searchGoods); sM.add(buyGoods); sM.add(jsp); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { Connection con;
Statement sql; ResultSet rs; try
{
if (n3!=0) {
int a1=0;
con=DriverManager.getConnection(\"jdbc:odbc:q\
sql=con.createStatement(); rs=sql.executeQuery(\"SELECT MAX(编号) from information\"); while(rs.next())
{
a1=rs.getInt(1);} for (int i=0;i ap=0; num=null;name=null;price=0;time=null;add=null;n3=0; goodsShow.setText(null); } } catch (SQLException g) } System.exit(0); } }); this.add(sM); this.setTitle(\"销售窗口\"); 编号 this.setResizable(false); this.setBounds(0,0,1024,768); this.setVisible(true); validate(); } ⑵ 购买商品功能的代码 if(p.getSource()==buyGoods) //购买按键 { try { if (num!=null) {con=DriverManager.getConnection(\"jdbc:odbc:q\sql=con.createStatement(); sql.executeUpdate(\"insert into information(listnum,goodsnum) values('\"+n2+\"','\"+num+\"')\"); rs=sql.executeQuery(\"SELECT * FROM information where listnum=\"+n2); n3++;//记录购买商品个数 con.close(); goodsShow.append(\" \"+num+\" \"+name+\" \"+price+\" \"+time+\" \"+add+\"\\n\"); } else {JOptionPane.showMessageDialog(this,\"请选择商品\提示 \ ap=ap+price;//总价 allPrice.setText(\"商品总价:\\n\"+ap); } catch (SQLException g) } } if(p.getSource()==ok) { try { if (n3!=0) { con=DriverManager.getConnection(\"jdbc:odbc:q\ sql=con.createStatement(); sql.executeUpdate(\"insert into information(listnum,allprice) values('\"+n2+\"','\"+ap+\"')\"); rs=sql.executeQuery(\"SELECT * FROM information where listnum=\"+n2); con.close(); ap=0; num=null;name=null;price=0;time=null;add=null;n3=0; goodsShow.setText(null); n2++;//帐单号 } else {JOptionPane.showMessageDialog(this,\"请购买商品\提示 \ } catch (SQLException g) } } if(p.getSource()==print) { try { if (n3!=0) { con=DriverManager.getConnection(\"jdbc:odbc:q\ sql=con.createStatement(); sql.executeUpdate(\"insert into information(listnum,allprice) values('\"+n2+\"','\"+ap+\"')\"); rs=sql.executeQuery(\"SELECT * FROM information where listnum=\"+n2); con.close(); ap=0; num=null;name=null;price=0;time=null;add=null;n3=0; goodsShow.setText(null); n2++;//帐单号 } else {JOptionPane.showMessageDialog(this,\"请购买商品\提示 \ } catch (SQLException g) } } if(p.getSource()==clean) { try { if (n3!=0) { int a1=0; con=DriverManager.getConnection(\"jdbc:odbc:q\ sql=con.createStatement(); rs=sql.executeQuery(\"SELECT MAX(编号) from information\"); while(rs.next()) { a1=rs.getInt(1);} for (int i=0;i =\"+(a1-i)); } con.close(); ap=0; num=null;name=null;price=0;time=null;add=null;n3=0; goodsShow.setText(null);} catch (SQLException g) } ⑶ 搜索商品的代码实现 if (p.getSource()==searchGoods) { num=numSearch.getText(); } catch (ClassNotFoundException f) try { con=DriverManager.getConnection(\"jdbc:odbc:q\sql=con.createStatement(); rs=sql.executeQuery(\"SELECT * FROM goods where num='\"+num+\"'\"); while(rs.next()){ name=rs.getString(2); price=rs.getInt(3); time=rs.getString(4); add=rs.getString(5); n1=1;} con.close();} catch (SQLException g) if (n1==1) { showGoods.setText(\" \"+num+\" \"+name+\" \"+price+\" \"+time+\" \"+add); n1=0; else { showGoods.setText(\" \"); num=null;name=null;price=0;time=null;add=null; JOptionPane.showMessageDialog(this,\" 输入错误 } \\n 请重新输入\提示\ }} ⑷ 提交商品的代码 if(p.getSource()==ok) { try { if (n3!=0) { con=DriverManager.getConnection(\"jdbc:odbc:q\ sql=con.createStatement(); sql.executeUpdate(\"insert into information(listnum,allprice) values('\"+n2+\"','\"+ap+\"')\"); rs=sql.executeQuery(\"SELECT * FROM information where listnum=\"+n2); con.close(); ap=0; num=null;name=null;price=0;time=null;add=null;n3=0; goodsShow.setText(null); n2++;//帐单号} else {JOptionPane.showMessageDialog(this,\"请购买商品\提示 \ } catch (SQLException g) 4.3 用户管理功能介绍 在用户管理部分,主要功能是控制小超市内用户的权限,不同的职位具有不同的权限,具有不同的ID和密码。在这部分当中,可以针对超市的情况对工作人员的信息实现添加用户、修改用户和删除用户的功能,并且超市内所有人员的信息都可以通过显示用户信息区域显示出来。界面的设计简单明了,将setLayout布局设为空,然后再向面板上添加组件,通过坐标值控制各组件的位置。权限管理界面如图4-5所示。 图4-5 用户管理界面 4.3.1 添加用户功能介绍 在添加用户行所对应的文本框中输入要添加用户的ID、PASSWORD、PERSONTY,单击添加按钮,“添加”按钮上已添加了监控器,在按钮被触发后,将会向“ID”、“PASSWORD”、“PERSONTY”所对应的文本框索取数据,只有当该用户在数据库中没有相应记录,并且添加的信息完整时才会显示添加成功,若所添加的信息不完整,则显示“请输入完整信息”,若信息完整,但该用户已存在,则显示“添加失败!原因:可能数据库添加失败或已有此ID”。添加用户功能如图4-6所示。 (a) (b) 图4-6 添加用户 4.3.2 修改用户功能介绍 修改部分的操作方法与添加部分相类似,但是输入的是修改后的用户信息,“修改”按钮也添加了监控器,单击“修改”按钮后,会将新输入的“ID”、“PASSWORD”、“PERSONTY”信息返回到数据库中,替代原来的信息。同样的,输入的信息必须完整,修改的ID数据库中必须存在。修改用户功能如图4.7所示。 图4.7 修改用户 4.3.3 删除用户功能介绍 删除用户部分的操作,只需要输入用户的ID,然后点击“删除”按钮,由于删除按钮上也添加了监控器,当按钮被触发后,会从删除用户对应的文本框获取数据(即ID号码),再 返回数据库,将该ID对应的信息删除。删除用户信息如图4-8所示。 (a) (b) 图4-8 删除用户 4.3.4 显示用户信息与刷新按钮介绍 设置显示用户信息区域的主要目的是将数据库中的用户信息显示出来,然而该区域只能显示在进入系统时的数据库信息,对于之后的修改等操作后的信息无法更新,所以添加了“刷新”按钮,使心事的信息更新,刷新的实质是将该界面关闭再重新打开,从而达到更新数据的目的。 4.3.5 用户管理的实现代码 用户管理的实现代码如下: import java.awt.*; import import java.sql.*; import java.util.*; import javax.swing.*; import public class View3 extends JFrame implements ActionListener { String url = \"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\\\supermarket.mdb\"; private JPanel v3=new JPanel(); private JLabel idl1=new JLabel(\"ID\JLabel(\"ID\JLabel(\"ID\JLabel(\"PASSWORD\JLabel(\"PASSWORD\JLabel(\"PERSONTY\JLabel(\"PERSONTY\ private JLabel[] cho={new JLabel(\"添加用户\修改用户\删除用户\显示用户信息\ private JTextField id1=new JTextField(),id2=new JTextField(),id3=new JTextField(),password1=new JTextField(),password2=new JTextField(); private JButton[] pS={new JButton(\"销售界面\"),new JButton(\"销售管理\"), new JButton(\"商品管理\"),new JButton(\"用户管理\")}; private JButton[] cB={new JButton(\"添加\"),new JButton(\"修改\"),new JButton(\"删除\")}; private JButton addin=new JButton(\"添加\"),updatein=new JButton(\"修改\"),dele=new JButton(\"修改\"); private String[] str={\"无\管理员\超级用户\用户\ private JComboBox per1=new JComboBox(str),per2=new JComboBox(str); private JTextArea jtas=new JTextArea(); private JScrollPane jsp=new JScrollPane(jtas); private JButton reShow=new JButton(\"刷新\"); Connection con;//连接对象 ResultSet rs;//结果集 Statement st; View3() { v3.setLayout(null); for(int i=0;i<4;i++) { pS[i].setBounds(550+i*110,50,100,22); v3.add(pS[i]); pS[i].addActionListener(this); } for (int i=0;i<4 ;i++ ) {cho[i].setBounds(50,120+i*51,140,22); v3.add(cho[i]); } for (int i=0;i<3 ;i++ ) {cB[i].setBounds(680,120+i*51,80,22); v3.add(cB[i]); cB[i].addActionListener(this); } idl1.setBounds(200,98,150,22);passwordl1.setBounds(370,98,150,22);perl1.setBounds(540,98,100,22); id1.setBounds(200,120,150,22);password1.setBounds(370,120,150,22);per1.setBounds(540,120,100,22); idl2.setBounds(200,149,150,22);passwordl2.setBounds(370,149,150,22);perl2.setBounds(540,149,100,22); id2.setBounds(200,171,150,22);password2.setBounds(370,171,150,22);per2.setBounds(540,171,100,22); idl3.setBounds(200,200,150,22); id3.setBounds(200,222,150,22); reShow.setBounds(865,273,90,22); reShow.addActionListener(this); try { Connection con; Statement sql; ResultSet rs; con=DriverManager.getConnection(url); sql=con.createStatement(); rs=sql.executeQuery(\"SELECT * from password\"); while(rs.next()) { String a1=rs.getString(1); String a2=rs.getString(2); String a3=rs.getString(3); jtas.append(\" 帐号:\"+a1+\" 密码:\"+a2+\" 权限:\"+a3+\"\\n\"); } con.close(); } catch (SQLException g) {System.out.println(g); } jsp.setBounds(200,273,650,420); v3.add(reShow); v3.add(jsp); v3.add(per1); v3.add(per2); v3.add(perl1); v3.add(perl2); v3.add(idl1); v3.add(id1); v3.add(idl2); v3.add(id2); v3.add(idl3); v3.add(id3); v3.add(passwordl1); v3.add(password1); v3.add(passwordl2); v3.add(password2); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); this.add(v3); this.setTitle(\"权限管理\"); this.setResizable(false); this.setBounds(0,0,1024,768); this.setVisible(true); validate(); } //连接数据库 public void conDB() { String url = \"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\\\supermarket.mdb\"; try { Class.forName } catch (ClassNotFoundException e) { JOptionPane.showMessageDialog(null, \"数据库操作错误或失败!\"); } try { con = DriverManager.getConnection(url); st = con.createStatement(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, \"数据库连接失败!\"); } } //关闭数据库 public void closeDB() { try { st.close(); con.close(); } catch (SQLException e) { JOptionPane.showMessageDialog(null, \"数据库关闭失败!\"); } } public void actionPerformed(ActionEvent e) { if(e.getSource()==reShow) { View3 fr=new View3(); dispose(); //提交添加用户操作 if (e.getSource() == cB[0]) { if ((id1.getText().trim()).equals(\"\") || (password1.getText().trim()).equals(\"\") || (per1.getSelectedIndex()==0 )) { JOptionPane.showMessageDialog(null, \"请输入完整信息!\"); } else { String userid = id1.getText(); String username =password1.getText(); String userpwd =per1.getSelectedItem().toString(); System.out String strSQL = \"insert into password values('\" +userid+ \"','\" +username+ \"','\" + userpwd+\"')\"; try { conDB(); st.executeUpdate(strSQL); closeDB(); } catch (Exception exx) { System.out.println(exx); JOptionPane.showMessageDialog(this, \"添加失败! 原因:有可能数据库联接失败或以由此ID,尝试换个ID添加\"); return; } JOptionPane.showMessageDialog(this, \"添加成功!\"); id1.setText(\"\"); password1.setText(\"\"); per1.setSelectedIndex(0); } } //提交修改用户操作 if (e.getSource() == cB[1]) { if ((id2.getText().trim()).equals(\"\") || (password2.getText().trim()).equals(\"\") || (per2.getSelectedIndex()==0 )) { JOptionPane.showMessageDialog(null, \"请输入完整信息!\"); } else { String userid = id2.getText(); String username =password2.getText(); String userpwd =per2.getSelectedItem().toString(); System.out String strSQL =\"update password set personty='\" + userpwd + \"',password='\" + username +\"'where ID='\" + userid +\"'\"; try { conDB(); int a=st.executeUpdate(strSQL); closeDB(); if (a==0) {JOptionPane.showMessageDialog(this, \"无此id信息,修改失败!\"); return; } } catch (Exception exx) { System.out.println(exx); JOptionPane.showMessageDialog(this, \"数据库原因,修改失败!\"); return; } JOptionPane.showMessageDialog(this, \"修改成功!\"); id2.setText(\"\"); password2.setText(\"\"); per2.setSelectedIndex(0); } } //提交删除用户操作 if (e.getSource() == cB[2]) { if ((id3.getText().trim()).equals(\"\") ) { JOptionPane.showMessageDialog(null, \"请输入完整信息!\"); } else { String userid = id3.getText(); String strSQL =\"delete from password where ID='\" + userid +\"'\"; try { conDB(); int a=st.executeUpdate(strSQL); closeDB(); if (a==0) {JOptionPane.showMessageDialog(this, \"没有此用户 删除失败!\"); return; } } catch (Exception exx) { System.out.println(exx); JOptionPane.showMessageDialog(this, \"没有此用户 删除失败!\"); return; } JOptionPane.showMessageDialog(this, \"删除成功!\"); id3.setText(\"\"); }} if(e.getSource()==pS[0]) {View2 ve=new View2(); dispose();} if(e.getSource()==pS[1]) { if(Login.persontyD.equals(\"管理员\")||Login.persontyD.equals(\"超级用户\")||Login.persontyD.equals(\"用户\")) { sale2 frame1=new sale2(); dispose(); } else JOptionPane.showMessageDialog(null, \"对不起,您没有进入权限!\"); } if(e.getSource()==pS[2]) { if(Login.persontyD.equals(\"管理员\")||Login.persontyD.equals(\"超级用户\")) { Frm_Main frame=new Frm_Main(); dispose(); } else JOptionPane.showMessageDialog(null, \"对不起,您没有进入权限!\"); } } 4.4销售管理功能介绍 销售管理功能主要是老板了解商品的销售情况,他可以登录进来,按已销售商品的编号和商品的账单号来查询商品的销售情况。也可以查询商品的售出的数量,当按编号查询时,后面的数量表示已售出商品的数量;当按账单号进行查询时,后面的数量表示消费者一次购买时,不同商品的总数。从而了解哪些商品销售的好,对商品的进货做出决定。 商品管理功能的界面如图4-9所示。 图4-9 商品管理功能界面 4.4.1 编号查询功能 在已销售出的商品中,可以按照它的编号来进行查询,以显示售出商品的各种信息。其中最后的信息“数量”表示已售出商品的数量。如:查询002号商品的销售情况,该商品一共卖出0份。如图4-10所示。 图4-10 002号商品的销售情况 4.4.2 账单查询功能 每一种商品在销售时,都有用户提交的一份账单,也就是流水号查询。消费者购买物品时,可以一次购买不同的商品,商品的编号不同,但是一次购买的账单号是一样的,账号查询的功能就是查询消费者一次购买的商品。这个功能还可以防止消费者的结账出错时的查询,一次就可以查询出消费者的购买信息,解决错账的情况。 如查询流水号是0号的消费者的购买情况,在这一次的交易中销售如图4-11所示。 图4-11按账单查询情况 4.4.3 销售管理模块的核心代码 ⑴ 销售面板的实现 public sale2() { label1=new JLabel(\"按编号查询\ label2=new JLabel(\"按帐单查询\ field1=new JTextField(30);field2=new JTextField(30); button1=new JButton(\"查询1\");button2=new JButton(\"查询2\"); sM.setLayout(null); field1.setBounds(100,120,150,22); field2.setBounds(600,120,150,22); label1.setBounds(100,90,150,30); label2.setBounds(600,90,150,30);button1.setBounds(260,120,80,22); button2.setBounds(760,120,80,22); button1.addActionListener(this);button2.addActionListener(this); sM.add(label1);sM.add(label2);sM.add(field1);sM.add(field2);sM.add(button1);sM.add(button2); for(int i=0;i<4;i++) { pS[i].setBounds(550+i*110,50,100,22); sM.add(pS[i]); pS[i].addActionListener(this); } for(int i=0;i<7;i++) //6个标签的绘制 { CD[i].setBounds(100+i*115,160,115,20); sM.add(CD[i]);} jsp.setBounds(100,180,800,500); goodsShow.setLineWrap(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); sM.add(jsp); this.add(sM); this.setTitle(\"销售窗口\"); this.setResizable(false); this.setBounds(0,0,1024,768); this.setVisible(true); } ⑵ 查询过程的处理 public void actionPerformed(ActionEvent p) { Connection con,con1; Statement sql,sql1; ResultSet rs,rs1; if (p.getSource()==button1) { String num=field1.getText(); catch (ClassNotFoundException f) try { con=DriverManager.getConnection(\"jdbc:odbc:q\ sql=con.createStatement(); rs=sql.executeQuery(\"SELECT count(goodsnum) FROM information where goodsnum='\"+num+\"'\"); while(rs.next()) { countBG=rs.getInt(1); rs=sql.executeQuery(\"SELECT * FROM goods where num='\"+num+\"'\"); while(rs.next()) {name=rs.getString(2); price=rs.getInt(3); time=rs.getString(4); add=rs.getString(5); n1=1;} con.close();} catch (SQLException g) if (n1==1) { goodsShow.append(\" (物品销售量查询) \"+num+\" \"+name+\" \"+price+\" \"+time+\" \"+add+\" \"+countBG+\"\\n\"); n1=0; } else { num=null;name=null;price=0;time=null;add=null; JOptionPane.showMessageDialog(this,\" 输入错误\\n 请重新输入\提示\ }} if(p.getSource()==pS[0]) { View2 frame=new View2(); dispose();} if(p.getSource()==pS[2]) { Frm_Main frame=new Frm_Main(); dispose();} if(p.getSource()==pS[3]) { View3 frame=new View3(); dispose(); } if (p.getSource()==button2) { String numb=field2.getText(); int num=Integer.parseInt(numb); catch (ClassNotFoundException f) try {con=DriverManager.getConnection(\"jdbc:odbc:q\ sql=con.createStatement(); rs=sql.executeQuery(\"SELECT goodsnum,count(goodsnum) FROM information where listnum=\"+num+\" group by goodsnum\"); while(rs.next()) { con1=DriverManager.getConnection(\"jdbc:odbc:q\ sql1=con1.createStatement(); String number=rs.getString(1); countBG=rs.getInt(2); rs1=sql1.executeQuery(\"SELECT * FROM goods where num='\"+number+\"'\"); while (rs1.next()) { name=rs1.getString(2); price=rs1.getInt(3); time=rs1.getString(4); add=rs1.getString(5); goodsShow.append(\" \"+num+\" \"+number+\" \"+name+\" \"+price+\" \"+time+\" \"+add+\" \"+countBG+\"\\n\"); } con1.close(); } con.close(); } catch (SQLException g) }}}} 4.4商品管理功能介绍 该模块主要实现对商品的信息管理功能,主要功能包括查询、添加、删除、修改商品信息,商品的主要信息包括商品编号、商品名称、商品价格、生产日期、生产地、库存量。商品管理界面如图4-12所示。 图 4-12 商品管理界面 4.4.1 查询信息 点击“查询信息”,出现如图4-13(a)所示的对话框,填入所查询商品的编号,然后点击“确定”,若存在所查询的商品,将在左面的信息栏中中显示商品信息;若不存在,则将出现如图4-13(b)所示的对话框,提示无商品信息。 (a)输入查询商品编号 (b) 无商品信息提示 图4-13 查询的界面 4.4.2 添加信息及提交添加 点击“添加信息”后,会出现如图4-14所示的对话框,提示输入信息;当信息输入完毕后,点击提交添加,若输入正确,会出现如图4-15(a)所示的对话框,提示添加成功,若输入不完全,有空项未添,则会出现如图4-15(b)所示的对话框,提示添加错误。当添加成功后,信息栏会自动变为空。 图4-14 提示输入信息 (a) 添加成功 (b) 添加错误 图4-15添加商品 4.4.3 删除信息及提交删除 点击“删除信息”后,会出现如图4-16所示的对话框,提示所要删除商品的名称,输入后点击“确定”,若输入的商品存在,在左面的信息栏中会显示所要删除的商品信息,再点击“提交删除”后,会出现如图4-17(a)所示的对话框,提示删除成功;若输入的商品不存在,则会出现如图4-17(b)所示的对话框,提示无商品信息。当删除成功后,信息栏会自动变为空。 图4-16 输入商品名称 (a) 删除成功 (b) 无商品信息提示 图4.17删除商品 4.4.4 修改信息及提交修改 点击“修改信息”后,会出现如图4-18所示的对话框,提示所要修改商品的名称,输入后点击“确定”,若输入的商品存在,在左面的信息栏中会显示所要修改的商品信息,修改完毕后,点击“提交修改”,会出现如图4-19(a)所示的对话框,提示修改成功;若输入的商品不存在,则会出现如图4-19(b)所示的对话框,提示无商品信息。修改成功后,信息栏会自动变为空。 图4-18 输入商品编号 (a) 修改成功 (b) 无商品 信息提示 图4-19 修改商品 4.4.5 关于 当商品有问题或对超市有任何意见和建议时,可通过“关于”上的联系方式与主管部门取得联系。如图4-20所示。 图4-20 联系电话提示 4.4.6 模块的核心代码 import java.awt.*; import javax.swing.*; import java.sql.*; public class sale2 extends JFrame implements ActionListener //销售界面 { private JPanel sM=new JPanel(); JLabel label1,label2; JTextField field1,field2; JButton button1,button2; String num=null,name=null,time=null,add=null,t1=null,t2=null,t3=null; int price=0,countBG,n1;// 价格/商品的卖出数量 //文本区 //supermarket面板 private JTextArea goodsShow=new JTextArea(); private JScrollPane jsp=new JScrollPane(goodsShow); //滚动区域 设定内容为 商品显示的文本区 private JButton[] pS={new JButton(\"销售界面\"), new JButton(\"销售管理\"), new JButton(\"商品管理\"), new JButton(\"用户管理\")}; //personty 按钮 private JLabel[] CD={new JLabel(\"清单号\ new JLabel(\"编号\ new JLabel(\"名称\ new JLabel(\"价格\ new JLabel(\"生产日期\ new JLabel(\"产地\ new JLabel(\"数量\ //帐单查询时的 商品显示标签 public sale2() { label1=new JLabel(\"按编号查询\label2=new JLabel(\"按帐单查询\field1=new JTextField(30); field2=new JTextField(30); button1=new JButton(\"查询1\"); button2=new JButton(\"查询2\"); sM.setLayout(null); field1.setBounds(100,120,150,22); field2.setBounds(600,120,150,22); label1.setBounds(100,90,150,30); label2.setBounds(600,90,150,30); button1.setBounds(260,120,80,22); button2.setBounds(760,120,80,22); button1.addActionListener(this); button2.addActionListener(this); sM.add(label1); sM.add(label2); sM.add(field1); sM.add(field2); sM.add(button1); sM.add(button2); for(int i=0;i<4;i++) { pS[i].setBounds(550+i*110,50,100,22); sM.add(pS[i]); pS[i].addActionListener(this); } for(int i=0;i<7;i++) { } CD[i].setBounds(100+i*115,160,115,20); sM.add(CD[i]); //6个标签的绘制 jsp.setBounds(100,180,800,500); goodsShow.setLineWrap(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); sM.add(jsp); this.add(sM); this.setTitle(\"销售窗口\"); this.setResizable(false); this.setBounds(0,0,1024,768); this.setVisible(true); } public void actionPerformed(ActionEvent p) { Connection con,con1; Statement sql,sql1; String url = \"jdbc:odbc:driver={Microsoft Access (*.mdb)};DBQ=D:\\\\supermarket.mdb\"; ResultSet rs,rs1; if (p.getSource()==button1) { String num=field1.getText(); } catch (ClassNotFoundException f) { Driver } try { con=DriverManager.getConnection(url); sql=con.createStatement(); rs=sql.executeQuery(\"SELECT count(goodsnum) FROM information where goodsnum='\"+num+\"'\"); while(rs.next()) { countBG=rs.getInt(1); } rs=sql.executeQuery(\"SELECT * FROM goods where num='\"+num+\"'\"); while(rs.next()) { name=rs.getString(2); price=rs.getInt(3); time=rs.getString(4); add=rs.getString(5); n1=1; } con.close(); } catch (SQLException g) } if (n1==1) { goodsShow.append(\" (物品销售量查询) \"+num+\" \"+name+\" \"+price+\" \"+time+\" \"+add+\" \"+countBG+\"\\n\"); } else { //goodsShow.setText(\" \"); num=null;name=null;price=0;time=null;add=null; JOptionPane.showMessageDialog(this,\" 输入错误n1=0; \\n 请重新输入\提示\ } if(p.getSource()==pS[0]) { } View2 frame=new View2(); dispose(); } if(p.getSource()==pS[2]) { Frm_Main frame=new Frm_Main(); dispose(); } if(p.getSource()==pS[3]) { View3 frame=new View3(); dispose(); } if (p.getSource()==button2) { String numb=field2.getText(); int num=Integer.parseInt(numb); } catch (ClassNotFoundException f) { } try { con=DriverManager.getConnection(url); sql=con.createStatement(); rs=sql.executeQuery(\"SELECT goodsnum,count(goodsnum) information where listnum=\"+num+\" group by goodsnum\"); while(rs.next()) FROM { con1=DriverManager.getConnection(url); sql1=con1.createStatement(); String number=rs.getString(1); countBG=rs.getInt(2); rs1=sql1.executeQuery(\"SELECT * FROM goods where num='\"+number+\"'\"); while (rs1.next()) { name=rs1.getString(2); price=rs1.getint(3); time=rs1.getString(4); add=rs1.getString(5); goodsShow.append(\" \"+num+\" \"+number+\" \"+name+\" \"+price+\" \"+time+\" \"+add+\" \"+countBG+\"\\n\"); } } con.close(); } catch (SQLException g) } con1.close(); //{ // goodsShow.setText(\" \"); // num=null;name=null;price=0;time=null;add=null; // JOptionPane.showMessageDialog(this,\" 输入错误 \\n 请重新输入\提示\ } } // } } 2.6 系统测试 在系统测试中,我们首先对各个子模块进行单元测试,即把每一个模块作为一个单独的实体来测试,保证每个模块作为一个单元能正确运行。然后在完成所有模块后,我们将各子模块集成起来,再对它进行系统测试,找出系统设计或编码上的错误,以及验证系统是否实现了指定的功能。最后找几个其他的同学再对系统进行黑盒子测试,验证系统是否满足用户的功能需求。 在测试的过程,特别是在集成测试之后,发现了许多问题及功能缺陷,最后经过修改调试后都解决了。 3 课程设计总结 (1) 通过这次软件工程课程设计的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。 学习和实践了分析和设计软件系统的各种知识,包括面向对象的系统分析与设计,编码和测试方面的知识。 掌握了自动化的软件开发工具Rational Rose 2003,并将其运用于软件开发的全过程。加深掌握了.Net平台的三层架构模式设计。 进一步加强和提高软件工程文档的编写能力。 增强了协作能力和团队精神。 (2) 本系统基本实现了关键的功能模块,在功能上基本满足了用户的需求,但是由于时间较紧,有些模块以及整个系统还有许多不完善的地方,如界面不太美观,操作性不太友好等。 4 参考文献 [1] 张海藩.软件工程导论(第4 版).北京:清华大学出版社,2005 [2] 成嘉.UML系统建模与分析设计.北京:机械工业出版社,2007 [3] UML基础与Rose建模案例.北京:人民邮电出版社,2004 [4] 刘乃丽 ASP.NET 2.0 网络开发详解.北京:电子工业出版社
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务