《Java课程设计报告商店收银系统.doc》由会员分享,可在线阅读,更多相关《Java课程设计报告商店收银系统.doc(19页珍藏版)》请在三一办公上搜索。
1、Java课程设计报告【商店收银系统】系别:软件工程班级: 学号:姓名: 指导老师:2009年5月14日商店收银系统1系统概述1.1设计题目商店收银系统1.2可行性分析1.2.1背景商店是一个很繁忙的地方,每天有很多的顾客要买东西,收银员要和很多的顾客结算,并且要给这些结算存档,以便日后查看。如果只用人工的方法去处理这些结算和计算的数据将是一件很繁琐的事情,将投入大量的人力物力,为了解决这个问题,实现科学化、现代化的商店收银管理,我们就必须设计开发商店收银系统,并用于实践。而商店收银管理系统是对商店的收款信息进行管理的计算机网络软件系统,它可完成商店中各种货品的收银工作,并对可以对特定时间段的出
2、售信息进行查询。1.3总环境图图1.1是一幅上下文环境图,它演示了该商店收银管理系统的外部实体和系统接口。商店收银管理系统收银员商品管理员查询是否存在该商品商品情况对系统进行操作商品信息图1.1商店收银系统2系统目标和建设原则2.1系统目标2.1.1近期目标该系统可以使商店的收银工作变得轻松了许多,商店的管理员不必将大量的时间用在对厚厚的账本的管理上,可以直接查询数据库来相关的信息。因此,开发商店收银系统可以提高收银员和管理员的工作效率,利用计算机的方便、快捷、友好的操作环境,来完成相对比较复杂、繁琐的事务,使用户可以轻松地完成对商品的查找等操作,大大提高工作效率。2.1.2远期目标 随着商店
3、规模的扩大,商品种类的日益增加,对商品库存的管理越来越复杂,功能也需要不断的加强和扩充,本系统希能够通过不同版本的升级来完成业务功能的不断扩充和更新以完成更加复杂的工作。最终目标是方便超市收银员和管理员的各项操作。3支撑环境规划3.1网络逻辑结构该商店收银系统系统是为了方便商店收银员和管理员的操作而设计的,为每个商品管理人员和收银员配备了一台电脑,并把所有的电脑联入商店局域网内,以方便管理。为了对数据的安全性、准确性地保护,这些电脑都共享一个后台数据库。本系统采用下图局域网模式来构建的:3.2软件支撑环境及开发工具图3.1 超市收银管理系统的局域网逻辑结构设计:NFDEABC商店收银系统数据库
4、3.2.1软件支撑环境本系统是在下列系统配置下完成的:(1) 操作系统: Microsoft Windows XP Professional (SP2) (2) 中央处理器(CPU): Inter(R) Pentium(R) 4 (3) 硬盘: 80G (4) 内存: 512MB3.2.2开发工具本系统是在下列开发环境下完成的:(1) 应用程序开发环境:eclipse(2) 后台数据库开发工具:Microsoft SQL Server 2000(3) 文档开发环境:Microsoft Office Word 20034 系统设计4.1 功能结构在此次设计中,依据系统结构化设计方法,把本系统划分
5、为若干个功能模块,某些模块又可以划分为多个子模块,某些子模块又可划分为多个二级子模块,经层层分解后,最小的子模块的功能便十分明确和简单了。这样做,不仅展现了一个应用软件系统的整体性和层次性,而且通过屏幕对每个应用模块有明显的提示,在这些提示下,用户可以方便地进入系统的每一层进行操作,可以非常方便地使用这一数据库应用系统。4.1.1功能结构图 商店收银系统用户信息管理商品入库管理商品库存管理商品销售管理图4.2超市收银管理系统功能结构图(a)(c)4.1.2主要功能说明本系统主要分成三个功能模块,每个模块都独立的完成了自己的功能,以下是对各功能模块的说明:(1) 用户信息管理功能。该功能模块可以
6、实现系统用户对自己基本信息的修改,不过只限于对登录密码的修改,因为用户帐号都是超市为了方便管理而事先分配好了的,是不能改变的。出于对用户信息的安全性考虑,只能修改当前登录的用户的密码。(2) 商品入库信息管理功能。该功能模块是实现对即将入库的商品的统计,由于商品信息的庞大、复杂,在入库前需要对其进行详细地记录管理,为商品的库存管理打下良好的基础。需要记录的内容有:入库商品的商品号、名称、类型、价格、同类商品的数量、采购员、验收员、生产厂商、产地、入库时间等。同时能够实现对商品入库信息的添加、修改、删除和查询功能。(3) 商品销售信息管理功能。该功能模块是把要销售的商品从超市中取出来,并对库存商
7、品进行相应的记录管理,并且把顾客的购买信息打印下来给顾客做凭证。需要记录的内容有:出售商品的名称、类型、销售价格、数量、销售时间等,同时能够实现对商品销售信息的添加、修改、删除和查询功4.2 数据库结构4.2.1 E-R图 为了把系统的数据要求清楚、准确地描述出来,系统分析员通常建立一个概念性的数据模型(E-R图)。它描述了从用户角度看到的数据,它反映了用户的显示环境,而且与在软件中的实现方法无关。1N1商品商品管理员存放管理购物N11NN入库数量销售数量库存数量商品库房收银员1查询出售 顾客 商品商品名称商品类型商品价格产地生产厂家备注商品号(a)上图 (b)下图商品库房商品名称商品类型销售
8、价格入库价格入库时间生产厂家产地库存量备注商品号商品管理员管理员帐号管理员密码 (c)(d)图4.3 超市收银管理管理系统E-R图 (a)(d)4.2.2关系数据库模式在本系统的数据库设计中,设计了四个基本数据库表:用户资料表USERS,商品入库资料表GOODS_IMPORT,库存商品资料表GOODS_INFO,商品销售资料表GOODS。具体结构图如下列表所示:表4.1 USERS表字段名称标识名称数据类型空否字段说明USER_ID帐号CHAR(20)N主码USER_PASSWORD密码CHAR(20)NUSER_TYPE用户类型INT(4)N1:收银员2:管理员表4.2 GOODS_IMPO
9、RT表字段名称标识名称数据类型空否字段说明IMPORT_ID入库商品商品号VARCHAR(20)N主码IMPORT_NAME入库商品名称VARCHAR(20)NIMPORT_TIME入库时间DATETIMENIMPORT_NUM入库商品数量VARCHAR(20)NIMPORT_PRICE入库商品价格MONEYNPRODCOM生产厂商VARCHAR(20)NPRODPLACE产地VARCHAR(20)NBUYER采购员VARCHAR(20)NCHECKER验收员VARCHAR(20)NIMPORT_MEMO入库商品备注VARCHAR(50)N字段名称标识名称数据类型空否字段说明GOODS_IN_
10、ID库存商品商品号VARCHAR(20)N主码GOODS_IN_NAME入库商品名称VARCHAR(20)NGOODS_IN_TIME入库时间DATETIMENGOODS_IN_NUM库存商品数量VARCHAR(20)NIN_INPORT_PRICE入库价格MONEYNIN_EXPORT_PRICE销售价格MONEYNIN_PROCOM生产厂商VARCHAR(20)NIN_MEMO库存商品备注VARCHAR(50)N表4.3 GOODS_INFO表表4.4 GOODS表字段名称标识名称数据类型空否字段说明GOODS_ID出售商品的商品号VARCHAR(50)N主码GOODS_NAME销售商品名
11、称VARCHAR(50)NPRICE价格VARCHAR(50)NSALES_TIME出售时间DATETIMEY自动获得,可以为空AGIO是否打折VARCHAR(50)NISIN是否入库intN1:是 0:否5总体实施计划(1) 首先,根据所作的需求分析,完成基本的功能界面设计,并且把界面设计成方便、易用和人性化的用户界面。(2) 根据(1)中界面设计,把每个功能通过代码来实现,以完成功能的定义。(3) 根据4.3.3关系数据库模式中的数据库表的设计,并通过SQL Server 2000建立数据库。(4) 把设计好的界面和数据库连接起来,使整个系统能够运行。(5) 选取几个典型的例子对该系统进行
12、测试,不断地发现问题和解决问题,最终使该系统能够正常的运行,完成相应的任务。(6) 以下是该系统的主要界面:图5.1 登录界面图5.2 主控界面图5.3 收银员结账界面图5.4 查询已出售商品界面这些主要界面代表了系统中的主要风格,功能和界面都大致与这些界面设计的一样。所以不再一一列出。6 部分代码6.1 收银主界面代码package counter;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException
13、;import java.sql.Statement;import java.util.Vector;import javax.swing.*;import javax.swing.table.DefaultTableModel;public class shop extends JFrame implements ActionListener private JTextField vip,good,no,ying,shi,zhao;private JLabel vipid,ys,goodid,goodno,yingshou,shishou,zhaoling;private JButton o
14、k,check;private JRadioButton yn;public double discount=1;double total;/String id;JPanel p1,p2,p3,p4;JScrollPane sp;String colNames=商品ID,商品名称,单价,数目; String shopList=new String204;DefaultTableModel model=new DefaultTableModel();/定义DefaultTableModel模型 JTable jTable1 = new JTable(model); /定义JTable为Defau
15、ltTableModel的实例model模式public shop()super(商店结算系统);Container container=getContentPane();vipid=new JLabel(VIP号);vip=new JTextField(10);vip.setEditable(false);ys=new JLabel(是否是VIP用户);yn = new JRadioButton(是,false);yn.addActionListener(this);goodid=new JLabel(商品ID);good =new JTextField(10);goodno=new JLa
16、bel(商品数量);no=new JTextField(10);ok=new JButton(确定);container.add(ok);ok.addActionListener(this);yingshou=new JLabel(应收);ying=new JTextField(10);ying.setEditable(false);shishou=new JLabel(实收);shi=new JTextField(10);zhaoling=new JLabel(找零);zhao=new JTextField(10);zhao.setEditable(false);check=new JBut
17、ton(结算);check.addActionListener(this);p1=new JPanel();p2=new JPanel();p3=new JPanel();p4=new JPanel(new GridLayout(3,1); model.addColumn(商品名称) ; model.addColumn(商品id) ; model.addColumn(单价) ; model.addColumn(数目) ;sp=new JScrollPane(jTable1,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONT
18、AL_SCROLLBAR_AS_NEEDED);sp.setBorder(BorderFactory.createTitledBorder(商品清单);/p1 p2 p3 分别放置三行,P4放p1 p2 p3 p1.add(vipid);p1.add(vip);p1.add(ys);p1.add(yn);p2.add(goodid);p2.add(good);p2.add(goodno);p2.add(no);p2.add(ok);p3.add(yingshou);p3.add(ying);p3.add(shishou);p3.add(shi);p3.add(zhaoling);p3.add(
19、zhao);p3.add(check);p4.add(p1);p4.add(p2);p4.add(p3);container.add(p4,North);container.add(sp);setBounds(300, 100, 550, 300);setVisible(true);public static void main(String args)shop application=new shop();application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*事件处理*public void actionPerformed(
20、ActionEvent e) /*确定按钮事件*if(e.getSource()=yn)if(yn.isSelected()vip.setEditable(true);discount=0.9;elsevip.setText();vip.setEditable(false);discount=1;/*确定按钮事件*if(e.getSource()=ok)String sql,isbn,num;String sql1,id;Vector tempvector=new Vector(1,1); /定义临时集合isbn=good.getText().trim();id=vip.getText().t
21、rim();sql=select * from goods;sql1=select * from user ;double price;int number;connection co=new connection(); ResultSet rs =co.getResultSet(sql);ResultSet rs1=co.getResultSet(sql1);/记录集有记录if(yn.isSelected()if(check(rs1,userid,id)if(check(rs,isbn,isbn)trynum=no.getText().trim();rs.beforeFirst(); /移动
22、游标到零的位置 rs.next(); price=Double.parseDouble(rs.getString(price).trim();/读取价格 number=Integer.parseInt(no.getText().trim();/读取数量total=price * number * discount; /计算应收价ying.setText(String.valueOf(total);/显示应收的价格 sql=select * from goods where isbn=+isbn+;ResultSet rs2 =co.getResultSet(sql);rs2.beforeFir
23、st();rs2.next(); / while(rs2.next() tempvector=new Vector(1,1);/新的vector二维数组 tempvector.add(rs2.getString(isbn) ; tempvector.add(rs2.getString(goodsname) ; tempvector.add(rs2.getString(price) ; /tempvector.add(no.getText().trim() ; tempvector.addElement(num); model.addRow(tempvector); / catch (SQLEx
24、ception e1) e1.printStackTrace(); elseJOptionPane.showMessageDialog(this, 对不起,商品不存在!, 警告, JOptionPane.INFORMATION_MESSAGE);elseyn.setSelected(false);vip.setText();vip.setEditable(false);discount=1;no.setText(); good.setText();JOptionPane.showMessageDialog(this, 用户不存在!, 警告, JOptionPane.INFORMATION_ME
25、SSAGE);elseif(check(rs,isbn,isbn)trynum=no.getText().trim();rs.beforeFirst(); /移动游标到零的位置 rs.next(); price=Double.parseDouble(rs.getString(price).trim();/读取价格 number=Integer.parseInt(no.getText().trim();/读取数量 total=price * number * discount; /计算应收价 ying.setText(String.valueOf(total);/显示应收的价格 if(total
26、200) insert in=new insert(); sql=select * from goods where isbn=+isbn+;ResultSet rs2 =co.getResultSet(sql);rs2.beforeFirst();rs2.next(); / while(rs2.next() tempvector=new Vector(1,1);/新的vector二维数组 tempvector.add(rs2.getString(isbn) ; tempvector.add(rs2.getString(goodsname) ; tempvector.add(rs2.getSt
27、ring(price) ; /tempvector.add(no.getText().trim() ; tempvector.addElement(num); model.addRow(tempvector); / catch (SQLException e1) e1.printStackTrace(); elseJOptionPane.showMessageDialog(this, 对不起,商品不存在!, 警告, JOptionPane.INFORMATION_MESSAGE);good.setText();no.setText(); /*结算按钮事件*if(e.getSource()=ch
28、eck)double pay,change;pay=Double.parseDouble(shi.getText().trim();if(pay=total)change=pay-total;zhao.setText(+change);elseJOptionPane.showMessageDialog(this, 金额不足!, 警告, JOptionPane.INFORMATION_MESSAGE);shi.setText();vip.setText();/zhao.setText();/shi.setText();/*model.addColumn(商品名称) ; model.addColu
29、mn(商品id) ; model.addColumn(单价) ; model.addColumn(数目) ;sp=new JScrollPane(jTable1,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);sp.setBorder(BorderFactory.createTitledBorder(商品清单);*/*for(int i = 0; ijTable1.getRowCount();i+) jTable1();*/public boolean check(Resu
30、ltSet rs,String colunm,String s)if(rs!=null)try rs.beforeFirst();while(rs.next()/rs.next();if(rs.getString(colunm).equals(s)return true; catch (SQLException e) e.printStackTrace();elsereturn false;return false;6.2 本规划的评价(1) 本规划的特点功能的实现较好的完成了实验的目的,与应用程序的连接也比较理想。另外,应用程序的各功能模块分工明确可重用性也很强。另外,本系统可以把出售的商品信息打印给顾客作为凭证。(2) 本规划的不足该程序还有很多细节问题,另外程序还没有完全完善,还有几个子模块没有实现。6.3 收获与体会我觉得这次实验的收获和体会很大,主要有一下几点:(1) 在这次试验中我对数据库系统设计的基本框架和java语言都有了更深地认识和学习。(2) 增加了很多实际编程经验,更进一步的学习了java,在实践中遇到了很多的问题,但是经过努力也都较好地克服了。这使我感觉到做任何事都会有困难,解决的关键在于自己的不断的坚持和努力。总之,这次试验使我学习了很多书本上没有的知识,真正地达到了实践地目的。