课程设计课程名称 Java语言课程设计题目名称超市管理系统的设计与实现学生学院应用数学学院专业班级信息与计算科学1班学号学生姓名指导教师2013年 10 月24 日超市管理系统的设计与实现1系统设计内容随着小超市规模的发展不断扩大,商品数量急剧增加,有关商品的各种信息量也成倍增长。
超市时时刻刻都需要对商品各种信息进行统计分析。
而大型的超市管理系统功能过于强大而造成操作繁琐降低了小超市的工作效率。
超市管理系统是市场上最流行的超市上常用的系统之一,它主要包含以下几个模块:系统登陆、商品入库、商品查询、商品更改和删除等。
从而,实现对进货、销售及员工信息等实现全面、动态、及时的管理。
本文系统的分析了软件开发的背景以过程;首先介绍了软件的开发环境,其次介绍了本软件的详细设计过程:数据库的设计、各个模块的设计和实现,以及具体界面的设计和功能。
超市库存管理系统是基于Java作为开发工具, Mysql作为后台数据库支持。
超市库存管理系统开发主要是界面程序的开发、数据库的建立、数据库的维护。
应用程序功能完善,界面人机交互要好,而且操作简单。
同时JAVA语言简单,在较短的时间内能够开发出使用性强、功能完善,易于操作的程序,也能实现与数据库的连接。
通过以上的需求分析,初步确定该系统功能主要包括以下几个模块:1.系统登录2.商品入库管理(包括商品信息管理)3.商品销售管理4.用户管理与权限管理系统流程图JFC)开发了一个经过仔细设计的、灵活而强大的?GUI?工具包。
?它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
?Swing增强了AWT中组件的功能,这引起增强的组件命名通常是在AWT组件名前增加了一个“J”字母;同时也提供了更多的组件库,如:按钮(JButton?)、单选按钮(JRadioButton?)、复选框(JCheckBox?)、文本区(JTextArea)、文本字段(JTextField)、列表(JList?)、组合框(JComboBox?)、树(JTree)、表格(JTable)。
一个Java?GUI通常由顶层容器、中间容器以及多个原子组件组成。
每个原子组件或容器都可能触发相应事件的产生。
容器是一类能够在其中容纳其他组件的特殊组件。
Swing的GUI组件类是按照类属层次以树状结构进行组织的。
在这个树的最顶层,即树的根部,使一个最基本的容器类,被称为顶层容器。
Swing?提供了三个通用的顶层容器类JFrame,JDialog和JApplet。
JFrame提供了基于窗体的应用程序,JDialog提供对话框形式的界面,JApplet提供Java小应用程序的界面形式。
在顶层容器下是中间容器,用于容纳其他的组件。
通常窗格本身在显示界面中是看不到的。
面板类Panel是一种中间容器,它的唯一作用是使组件更容易定位。
顶层容器通过getContentPane()方法获取内部的一个内容窗格。
?2.2使用JDBC-ODBC与MySQL数据库建立连接1、在开发环境中加载指定数据库的驱动程序。
2、在Java程序中加载驱动程序。
在Java程序中,可以通过?“Class.forName(“指定数据库的驱动程序”)” 方式来加载添加到开发环境中的驱动程序,例如加载MySQL的数据驱动程序的代码为: ?Class.forName("org.gjt3、创建数据连接对象:通过DriverManager类创建数据库连接对象Connection。
DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,然后通过它的getConnection方法,根据数据库的URL、用户名和密码,创建一个JDBC Connection 对象。
如:Connection connection= ?DriverManager.geiConnection(“连接数据库的URL", "用户名", "密码”)。
本程序创建MySQL的数据库连接代码如下:String username = "root";String password = "root";connect = DriverManager.getConnection(url, username, password);4、创建Statement对象:Statement 类的主要是用于执行静态 SQL 语句并返回它所生成结果的对象。
通过Connection 对象的 createStatement()方法可以创建一个Statement对象。
例如:Statement statament = connection.createStatement();?本程序创建Statement对象代码如下:Statement stat = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);?5、调用Statement对象的相关方法执行相对应的 SQL 语句:通过execuUpdate()方法用来数据的更新,包括插入和删除等操作,通过调用Statement对象的executeQuery()方法进行数据的查询,而查询结果会得到 ResulSet对象,ResulSet表示执行查询数据库后返回的数据的集合,ResulSet对象具有可以指向当前数据行的指针。
通过该对象的next()方法,使得指针指向下一行,然后将数据以列号或者字段名取出。
如果当next()方法返回null,则表示下一行中没有数据存在。
使用示例代码如下:ResultSet resultSel = statement.executeQuery(?""select * from commodity";"?);6、关闭数据库连接:使用完数据库或者不需要访问数据库时,通过Connection的close()?方法及时关闭数据连接。
3功能模块详细设计及实现3.1 系统登录页面统登录模块需要管理员和销售员提供的用户名、初始密码和权限进行登录验证,如果成功则进入系统,否则提示无法登录并返回登录一面。
运行如图3.2管理员登录页面管理员身份登录成功进入管理员登陆界面。
其中包括模块进货管理、查看所有人员、用户注册、密码修改、个人信息修改。
管理员登陆页面运行截图进货管理功能是通过系统中的public void allRecord() {}方法查询数据库commodity显示超市仓库中所有商品。
但是在这里涉及一个类型转化问题、因为在数据库的设计中商品的数量和价格都是float类型。
在所有商品价格方面直接利用数据库中的第七列和第九列的数据相乘。
即sum += rSet.getFloat(7) * rSet.getFloat(9);但是在页面中合计金额需要显示的是一个string类型的,而这里的sum是一个float类型变量,则就需要用一个类型准换语句,并将该值传入文本框。
语句分别为String cString = new Float(sum).toString();minventoryJFrame.getTotalJTextField().setText(cString);运行截图删除按钮的设计是通过查找商品编号进行删除。
如果没有对应的商品则通过JOptionPane.showMessageDialog(null, "库存中没有对应的商品", "删除记录", 1)语句提示库存中没有对应的商品、否则通过查询数据库并执行下列语句删除对应的库存品。
String sql = "delete from commodity where number='" + minventoryJFrame.getJTable().getValueAt(row, 0) + "'";stat.executeUpdate(sql);allRecord();JOptionPane.showMessageDialog(null, "成功删除记录", "删除记录", 1);添加页面设计需要对数据类型和对输入文本框是否有空值进行检测,如果不合法则通过JOptionPane.showMessageDialog(this, "请确认数据类型和是否有空值!")给出提示。
否则通过执行下列语句并提示添加商品成功信息。
String sql="INSERT INTO commodity(number,CName,supplier,PArea,unit,shelfFife,price,pack,fullNumber)" +"VALUES('"+Number.getText()+"','"+CName.getText()+"','"+Supplier.getText()+ "','"+PArea.getText()+"','"+unit.getText()+"','"+ShelfFife.getText()+"','"+F loat.parseFloat(Price.getText())+"','"+Pack.getText()+"','"+Float.parseFloat (FullNumber.getText())+"')";stmt.executeUpdate(sql);JOptionPane.showMessageDialog(this, "商品添加成功!");运行截图人员管理模块可以查看所有人员直接通过下列语句String sql = "select * from userinfo";获取数据库中的所有人员。
运行截图删除人员则是通过选中人员所对应的行进行删除。
实现语句为:String sql="DELETE FROM userinfo WHERE user='"+cellValue+"'";用户注册需要先查询数据库中的用户名和密码,如果都存在则提示该用户已经存在。