Java课程设计超市管理系统设计实现Word文件下载.docx
《Java课程设计超市管理系统设计实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《Java课程设计超市管理系统设计实现Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。
4.用户管理与权限管理
系统流程图
2系统设计方案
2.1Java
Swing概述
通过图形用户界面(Graphical
User
Interface,GUI),用户和程序之间可以方便的进行交互。
Java的java.awt
(Abstract
Window
Toolkit)
包中包括了多种类和接口,用于在Java
Application中进行GUI编程。
Java
Swing是Java
Foundation
Classes(JFC)的一部分,是一个用于开发Java应用程序用户界面的开发工具包。
在Swing中,Sun开发了一个经过仔细设计的、灵活而强大的
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.gjt.mm.mysql.Driver"
);
3、创建数据连接对象:
通过DriverManager类创建数据库连接对象Connection。
DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,然后通过它的getConnection方法,根据数据库的URL、用户名和密码,创建一个JDBCConnection对象。
如:
Connectionconnection=
DriverManager.geiConnection(“连接数据库的URL"
"
用户名"
密码”)。
本程序创建MySQL的数据库连接代码如下:
Stringurl="
jdbc:
mysql:
//localhost:
3306/market"
;
Stringusername="
root"
Stringpassword="
connect=DriverManager.getConnection(url,username,password);
4、创建Statement对象:
Statement类的主要是用于执行静态SQL语句并返回它所生成结果的对象。
通过Connection对象的createStatement()方法可以创建一个Statement对象。
例如:
Statementstatament=connection.createStatement();
本程序创建Statement对象代码如下:
Statementstat=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
5、调用Statement对象的相关方法执行相对应的SQL语句:
通过execuUpdate()方法用来数据的更新,包括插入和删除等操作,通过调用Statement对象的executeQuery()方法进行数据的查询,而查询结果会得到ResulSet对象,ResulSet表示执行查询数据库后返回的数据的集合,ResulSet对象具有可以指向当前数据行的指针。
通过该对象的next()方法,使得指针指向下一行,然后将数据以列号或者字段名取出。
如果当next()方法返回null,则表示下一行中没有数据存在。
使用示例代码如下:
ResultSetresultSel=statement.executeQuery(
"
select*fromcommodity"
6、关闭数据库连接:
使用完数据库或者不需要访问数据库时,通过Connection的close()
方法及时关闭数据连接。
商品数据项的描述:
数据项名
数据类型
长度
说明
number
vachar
50
商品编号
CName
商品名称
supplier
商品供应商
PArea
商品生产地
unit
商品单位
shelfFife
商品规格
price
float
商品价格
pack
商品包装
fullNumber
商品数量
管理人员和销售人员数据想描述:
(其中1、2分别表示管理员、销售员权限)
user
用户名
password
密码
power
权限
3功能模块详细设计及实现
3.1系统登录页面
统登录模块需要管理员和销售员提供的用户名、初始密码和权限进行登录验证,如果成功则进入系统,否则提示无法登录并返回登录一面。
运行如图
3.2管理员登录页面
管理员身份登录成功进入管理员登陆界面。
其中包括模块进货管理、查看所有人员、用户注册、密码修改、个人信息修改。
管理员登陆页面运行截图
进货管理功能是通过系统中的publicvoidallRecord(){}方法查询数据库commodity显示超市仓库中所有商品。
但是在这里涉及一个类型转化问题、因为在数据库的设计中商品的数量和价格都是float类型。
在所有商品价格方面直接利用数据库中的第七列和第九列的数据相乘。
即sum+=rSet.getFloat(7)*rSet.getFloat(9);
但是在页面中合计金额需要显示的是一个string类型的,而这里的sum是一个float类型变量,则就需要用一个类型准换语句,并将该值传入文本框。
语句分别为
StringcString=newFloat(sum).toString();
minventoryJFrame.getTotalJTextField().setText(cString);
运行截图
删除按钮的设计是通过查找商品编号进行删除。
如果没有对应的商品则通过JOptionPane.showMessageDialog(null,"
库存中没有对应的商品"
删除记录"
1)语句提示库存中没有对应的商品、否则通过查询数据库并执行下列语句删除对应的库存品。
Stringsql="
deletefromcommoditywherenumber='
+minventoryJFrame.getJTable().getValueAt(row,0)+"
'
stat.executeUpdate(sql);
allRecord();
JOptionPane.showMessageDialog(null,"
成功删除记录"
1);
添加页面设计需要对数据类型和对输入文本框是否有空值进行检测,如果不合法则通过JOptionPane.showMessageDialog(this,"
请确认数据类型和是否有空值!
)给出提示。
否则通过执行下列语句并提示添加商品成功信息。
Stringsql="
INSERTINTOcommodity(number,CName,supplier,PArea,unit,shelfFife,price,pack,fullNumber)"
+"
VALUES('
+Number.getText()+"
'
+CName.getText()+"
+Supplier.getText()+"
+PArea.getText()+"
+unit.getText()+"
+ShelfFife.getText()+"
+Float.parseFloat(Price.getText())+"
+Pack.getText()+"
+Float.parseFloat(FullNumber.getText())+"
)"
stmt.executeUpdate(sql);
JOptionPane.showMessageDialog(this,"
商品添加成功!
人员管理模块可以查看所有人员直接通过下列语句Stringsql="
select*fromuserinfo"
获取数据库中的所有人员。
删除人员则是通过选中人员所对应的行进行删除。
实现语句为:
DELETEFROMuserinfoWHEREuser='
+cellValue+"
用户注册需要先查询数据库中的用户名和密码,如果都存在则提示该用户已经存在。
不存在则可以通过下列语句注册新员工
Stringstr="
INSERTINTOuserinfoVALUES('
+User+"
+Password+"
+power+"
+personneID+"
+SEX+"
+Birthday+"
+Job+"
+Id+"
密码修改则即更新数据库。
通过下列语句可以实现
UPDATEuserinfoSETpassword='
+String.valueOf(newPassword.getPassword())+"
WHEREuser='
+cook.user+"
用户信息修改也是一个更新数据库的操作,通过下列代码可以实现:
UPDATEuserinfoSETsex='
birthday='
job='
ID='
stmt.executeUpdate(str);
3.3管理员登录页面
销售人员身份登录成功进入销售人员登陆页面。
其中包括商品的销售、结账页面、其中个人信息修改和密码修改和管理员的相似。
销售页面通过输入商品的编号和数量、在通过查询数据库中对应的商品名称和数量,如果没有对用的商品则通过语句
对不起,暂时没有这件商品,请联系管理员添加!
提示没有商品,如果商品数量不够则通过语句
对不起,此商品库存仅剩"
+rs.getFloat("
fullNumber"
));
给出销售人员销售数量超出库存量的提示信息。
但是在添加商品时本系统是利用数据库查询,再通过一个数组利用编号和数量进行保存的。
因为如果直接利用从库存数据库中查询再添加到一个销售数据库中是直接将库存数据库中的所有商品都添加到了销售数据库表中。
实现的语句为
for(inti=0;
i<
rows;
i++){
Name[i]=String.valueOf(tableModel.getValueAt(i,0));
Q[i]=Float.parseFloat(String.valueOf(tableModel.getValueAt(i,8)));
}
while(rs.next()){
for(inti=0;
i++){
Stringname=rs.getString("
number"
if(name.equals(Name[i])){
Q[i]=rs.getFloat("
)-Q[i];
Stringsql="
UPDATEcommoditySETfullNumber='
+Q[i]+"
WHEREnumber='
+name+"
stmt1.executeUpdate(sql);
通过上述语句可以添加销售商品,在通过点击确认销售按钮时通过语句
intn=JOptionPane.showConfirmDialog(null,"
确认出售列表中货物(共计:
+acount+"
元)?
销售商品删除按钮是通过鼠标选中需要删除的行进行删除。
执行语句为:
if(myTable.getSelectedRow()!
=-1){
introw1=myTable.getSelectedRow();
tableModel.removeRow(row1);
else{
JOptionPane.showMessageDialog(this,"
请选中要删除的信息再点击删除!
}
4结论
通过此次的论文,我学到了很多知识,,在论文的写作过程中,通过查资料和搜集有关的文献,培养了自学能力和编程能力。
并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。
我们可能会记住很多的书本知识,但是通过课程设计,我们学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。
次超市库存管理系统课程设计,让我充分运用自己所学的知识,让我明白只有单纯的理论知识是远远不够的,只有通过实际的锻炼才能更好的运用所掌握的基础知识,才能在原有的基础上提升自己的能力,提高自己解决问题的能力。
在这短短的一个星期内,查阅有关的java学习资料和数据库,设计的规则,代码的编写及到最后的调试。
在设计过程中,通过对控件事件的处理,界面的布局,代码的调试,充分锻炼了自己的思维,获得了充分的实际经验,提高了处理问题的能力,同时也提高了对问题思考的应急能力和抗压力的能力。
经过一个星期的努力,虽然设计已经完成,但仍然有很多模块和功能要完善,存在很多美中不足之处。
但是基本上还能满足小型超市的管理。
在论文的写作过程中也学到了做任何事情所要有的态度和心态,对于出现的任何问题和偏差都不要轻视,要通过正确的途径去解决,在做事情的过程中要有耐心和毅力,只要坚持下去就可以找到思路去解决问题的。
五、问题与讨论
问题一
页面跳转可以通过一个鼠标监听器实现,当鼠标点击按钮时事件被出发,通过隐藏当前页面显示需要的目的页面。
本程序则是通过三个抽象方法实现该功能。
鼠标监听函数:
publicabstractvoidinitActionListener();
页面显示函数
publicabstractvoidshow();
当前页面隐藏函数
publicabstractvoidhide();
问题二
在销售页面中添加销售商品,我们刚开始的实现的从酷讯数据库中去查询对应编号的商品,然后将对用的商品添加到一个临时销售商品数据库保存表,但是早实现的过程中,如果查到该商品存在,通过编号主键将商品插入语句(insertinto)插入到销售表,但发现此操作的操作结果是只要一个条件符合查询条件就是将库存表中的所有记录都插入到销售表中。
对于该问题的解决办法是我们想到了JSP中的Cookies(Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术)实现了可以将需要销售的商品临时保存,当点击确认销售以后要,再通过循环表中的每一行将对应的数据清除。
实现函数为:
tableModel.removeRow(i);