java课程设计商场库存管理系统文档格式.docx
《java课程设计商场库存管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《java课程设计商场库存管理系统文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
![java课程设计商场库存管理系统文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/28/47a30beb-6eec-4ba3-a4b1-a22445f5b34e/47a30beb-6eec-4ba3-a4b1-a22445f5b34e1.gif)
18
5.2.1修改界面.。
六总结。
19
参考资料:
.......................................................17
一需求分析
本系统的主要目的就是实现商品信息管理,使商品信息管理工作更加容易,从而提高工作效率,降低管理成本.
系统中需要对商品价格,数量进行管理,及库存量等。
.
二概要设计
/************************************************************************
概要设计阶段主要是粗略描述整个软件的框架,并从业务的角度描述软件的模块、工作流程等。
项目的成功取决于设计的好坏,而概要设计则是整个设计的关键部分。
概要设计的主要任务是将用户的需求划分为不同的功能,然后将这些功能细分成模块,并给模块一些规则约束,以达到各个模块之间可以相互交流的目的。
概要设计关乎到系统的整体架构,因此想做好一个概要设计,不仅仅要熟悉用户的业务流程,还要具备相当丰富的设计经验。
2.1概要设计的原则
概要设计是根据系统分析的需求和工作环境的情况对整个软件的总体结构进行大致的设计。
概要设计要坚持以下几个原则。
(1)细分原则:
软件系统都是由很多不同的模块组成,当设计一套软件时,要先将所有的功能分解。
解决复杂问题的方法是将其分解成几个小问题,一个个来解决。
(2)提高代码重用性:
在面向对象设计中,首先考虑的就是代码的重用,一个好的设计,将来在升级换代时不需要太大的改动,节省了人力物力。
(3)从上而下层层分析:
概要设计要从整体出发,逐个剖析软件的功能,从上而下,先分析系统总的功能,然后一步步细分,直到最小的功能模块。
(4)一致性原则:
概要设计要求所有功能模块在定义时使用统一的规范。
(5)提高独立性,减少耦合:
各个模块及模块之间尽量减少关联,否则修改一个地方就会引起其他多处的变动,不符合面向对象的原则。
一般情况下,对类封装后,只允许对类进行扩展,而不能修改,而封装的类必须具有单一职责,既理论情况下不允许两个类共同完成一个功能。
(6)模块的大小要尽量适中:
不是结构算法越复杂的模块越好,模块的大小要根据实际工作目标和其他类的耦合紧密程度来决定。
经验表明,一个模块的规模不应过大,模块的总行数应控制在10~100行的范围内,最好为30~60行,这样理解和阅读都较方便。
过长的模块往往是分解不充分的表现,会增加阅读理解的难度;
但小规模太多也会使模块之间联系变得复杂,增大系统在模块调用时传递信息所花费的开销。
由于概要设计是整个设计的重中之重,牵一发而动全身,所以要努力做一个好的概要设计,才能在今后软件开发过程中不再反复。
现在软件行业流行模式化驱动设计,将一些市场上比较成功的模式拿来用在自己的设计中。
2.2将用户需求模块化
根据概要设计的原则来分析一下本项目的用户需求,并最终转化成用程序语言描述的模块。
什么样的需求才是一个模块?
模块应该具备如下3个特征。
(1)输入和输出:
模块必须能被调用并且正确的返回调用,而且调用都是相对一个对象而言,这是模块独立性的一个体现。
(2)处理功能:
模块必须可以对调用的输入数据进行灵活的处理,并为输出准备好处理结果。
(3)程序代码:
用来实现模块功能的源代码。
2.3确定系统最终模块
概要设计中最重要的就是确定此项目包括哪些模块。
根据上两节讲述的设计原则和模块特征,将用户需求转化为下面的模块。
/*****************************************************************
三,系统主要功能模块设计
1.1登录模块流程
本模块的主要功能是对用户身份进行验证,只有系统的合法用户才能进入系统。
在进行系统登录过程中,登录模块将调用数据库里的用户清单,并对账号和密码进行验证,只有输入了正确的账号和密码后,系统登录才会成功。
并在输入了错误的或者是不存在的账户和密码时,系统会提示出错信息,指明登录过程中的错误输入或者错误操作,以便用户进行正确的登录。
系统登录模块流程如图4.1所示。
1.2库存管理流程
功能:
本模块的主要功能是商品信息的查询和更新,库存信息的查询和更新。
查询商品信息:
主要功能查询商品的明细信息,和它的库存信息。
添加商品信息:
主要功能添加新进的商品。
修改商品信息:
主要功能是修改商品的信息,包括他的库存数量。
删除商品信息:
主要功能是删除不再销售的商品信息。
输入项、输出项:
本模块的数据输入项主要是商品编号。
库存管理流程如图4.4所示
四,数据文件(或数据库)设计
表1
表2
五,程序的主要界面、代码实现
1.用户登录界面:
1.1输入用户编号和密码后,可以登录,可以关闭窗口,也可以重置
1.2若密码和用户名输入不正确,将显示提示对话框
2.登录成功后系统
2.1登录成功后将显示提示语句:
2.2并自动进入商场库存管理界面:
2.3查询界面:
2.4删除界面:
2.5添加界面:
2.6修改界面
3.1这是Gread类,用于连接数据库
packagework;
importjava.sql.*;
publicclassGread{
Connectionconn=null;
Statementstmt=null;
ResultSetrs=null;
publicGread(){
try{
StringdriverClassName="
com.mysql.jdbc.Driver"
;
Class.forName("
);
//2.连接数据库
Connectionconn=DriverManager.getConnection("
jdbc:
mysql:
//localhost:
3306/mydatabase"
"
root"
"
stmt=conn.createStatement();
}catch(Exceptionex){
ex.printStackTrace();
}
}
ResultSetexecuteQuery(Stringsql){//查询
rs=stmt.executeQuery(sql);
}catch(Exceptione){System.out.println(e);
}
returnrs;
voidexecuteUpdate(Stringsql){//修改
try{
stmt.executeUpdate(sql);
}catch(SQLExceptione){}
voidclose(){//关闭
stmt.close();
conn.close();
3.2这是商品库存管理界面类
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.awt.BorderLayout;
importjava.awt.Rectangle;
publicclassGulextendsJFrameimplementsActionListener{
BorderLayoutBL=newBorderLayout();
JButtonjq=newJButton();
//查询
JButtonji=newJButton();
//插入
JButtonjd=newJButton();
//删除
JButtonjo=newJButton();
//编辑
JButtonju=newJButton();
//修改
JPaneljp=newJPanel();
JLabelL1=newJLabel();
JLabelL2=newJLabel();
JLabelL3=newJLabel();
JLabelL4=newJLabel();
JLabelL5=newJLabel();
JLabelts=newJLabel();
JTextFieldid=newJTextField();
JTextFieldname=newJTextField();
JTextFieldnumber=newJTextField();
JTextFieldsid=newJTextField();
publicGul(){
jbInit();
}catch(Exceptiona){
a.printStackTrace();
privatevoidjbInit()throwsException{
getContentPane().setLayout(BL);
this.setTitle("
商场库存管理系统"
jp.setLayout(null);
jp.setBackground(Color.pink);
L1.setText("
商品编号:
L1.setBounds(newRectangle(8,103,71,30));
L2.setText("
数量:
L2.setBounds(newRectangle(6,175,42,15));
L3.setText("
商品名:
L3.setBounds(newRectangle(6,144,42,15));
L4.setText("
查询条件:
L4.setBounds(newRectangle(4,27,86,22));
L5.setText("
L5.setBounds(newRectangle(42,52,73,24));
id.setEditable(false);
id.setBounds(newRectangle(48,109,124,22));
name.setEditable(false);
name.setBounds(newRectangle(48,143,124,22));
number.setEditable(false);
number.setBounds(newRectangle(47,174,125,23));
sid.setBounds(newRectangle(82,55,110,20));
ts.setBounds(newRectangle(9,281,237,34));
ji.setEnabled(false);
ju.setEnabled(false);
jd.setEnabled(false);
jd.setDoubleBuffered(true);
this.getContentPane().add(jp,java.awt.BorderLayout.CENTER);
jq.setBounds(newRectangle(216,53,79,23));
ji.setBounds(newRectangle(20,229,72,23));
ju.setBounds(newRectangle(133,230,76,23));
jo.setBounds(newRectangle(217,173,79,23));
jd.setBounds(newRectangle(245,231,74,23));
jq.setText("
查询"
jq.addActionListener(this);
ju.setText("
修改"
ju.addActionListener(this);
ji.setText("
添加"
ji.addActionListener(this);
jo.setText("
编辑"
jo.addActionListener(this);
jd.setText("
删除"
jd.addActionListener(this);
jp.add(L1);
jp.add(id);
jp.add(name);
jp.add(number);
jp.add(L5);
jp.add(sid);
jp.add(L4);
jp.add(jq);
jp.add(ji);
jp.add(jo);
jp.add(L3);
jp.add(L2);
jp.add(jd);
jp.add(ju);
jp.add(ts);
this.setSize(500,400);
this.setVisible(true);
publicstaticvoidmain(Stringargs[]){
GulF=newGul();
publicvoidactionPerformed(ActionEvente){
ts.setText("
if(e.getSource()==jq){//查询
Strings=sid.getText().trim();
Stringsql="
select*fromuserwhereid='
+s+"
'
Greaddb=newGread();
rs=db.executeQuery(sql);
try{
while(rs.next()){
id.setText(rs.getString
(1));
name.setText(rs.getString
(2));
number.setText(rs.getString(3));
}
rs.close();
if(!
id.getText().equals("
))
ts.setText("
操作成功!
}catch(SQLExceptionex){}
elseif(e.getSource()==jo){//编辑
id.setEditable(true);
name.setEditable(true);
number.setEditable(true);
ji.setEnabled(true);
ju.setEnabled(true);
jd.setEnabled(true);
elseif(e.getSource()==ji){//添加
Strings1=id.getText();
Strings2=name.getText();
ints3=Integer.parseInt(number.getText());
insertintonumbervalues("
+s1+"
+s2+"
+s3+"
)"
System.out.println(sql);
Greaddb=newGread();
db.executeUpdate(sql);
ts.setText("
elseif(e.getSource()==ju){//修改
updatenumbersetname="
number="
whereid="
elseif(e.getSource()==jd){//删除
deletenumberwhereid="
andname="
andnumer="
+s3;
id.setText("
name.setText("
number.setText("
id.setEditable(false);
}
3.3登录界面类
importjava.awt.image.*;
importjavax.imageio.*;
importjava.util.*;
importjava.io.*;
classLoginWindowV2extendsJFrameimplementsActionListener
{JPanelp1=newJPanel();
JPanelp2=newJPanel();
JPanelp3=newJPanel();
JPanelp4=newJPanel();
JPanelp5=newJPanel();
JTextFieldtxtUserName=newJTextField(15);
//用户名文本框
JPasswordFieldtxtPwd=newJPasswordField(15);
//密码框
JButtonok=newJButton("
登录"
JButtoncancel=newJButton("
关闭"
JButtonresert=newJButton("
重置"
publicLoginWindowV2(){
//字体设置
Fontfont=newFont("
宋体"
Font.PLAIN,24);
FontlabelFont=newFont("
隶书"
Font.BOLD,24);
UIManager.put("
Button.font"
font);
Label.font"
labelFont);
TextField.font"
JpanelBackjpb=newJpanelBack();
ContainercontentPane=this.getContentPane();
//取出内容面板
p2.add(newJLabel("
用户编号:
));
p2.add(txtUserName);
//将组件添加到中间容器
p3.add(newJLabel("
密码:
p3.add(txtPwd);
p4.add(ok);
p4.add(cancel);
p4.add(resert);
ok.addActionListener(this);
cancel.addActionListener(this);
resert.addActionListener(this);
txtUserName.addActionListener(this);
txtPwd.addActionListener(this);
jpb.add(p2);
jpb.add(p3);
jpb.add(p4);
contentPane.add(jpb);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//设置自动关闭窗口
intwidth=