Java仓库管理系统报告
发布时间:2019-10-04 19:30:26
发布时间:2019-10-04 19:30:26
2016—2017学年第一学期期末考试
《面向对象程序设计(Java)*》
实践考核项目设计说明书
项目名称: 仓库管理系统
专 业: 计算机科学与技术
学 号:
姓 名:
任课教师: 巩晨静
2016年12月3日
项目及要求
(一)考核内容:Java应用程序开发
(二)考核要求:
1. 设计开发一个Java应用程序,设计题目自拟;
2. 要求学生熟练运用Java程序设计的基本知识和技能;
3. 要求学生掌握面向对象程序开发的基本思路和方法,熟悉软件开发过程;
4. 要求学生利用面向对象的编程思想以及组件开发原理来完成系统的设计;
5. 要求学生利用所学的基本知识和技能,进行应用程序设计,并体现自己的创新;
6. 要求学生独立完成,严禁拷贝与抄袭;
7. 按照软件工程的思想,完成项目的需求分析、项目的功能框架、用户界面的设计、各功能模块的调试和运行等工作;
8. 重视设计说明书文档的书写。
9. 上交要求。要求学生上交设计说明书一份(Word格式)电子及打印文档(A4纸)各一份,源程序打包上传BB平台。
仓库管理系统设计说明书
管理信息系统(MIS)的应用已深入到社会的各行各业,它是信息、软件与科学管理相结合的产物。MIS的开发过程不仅是一个编写应用程序的过程,而且是一个以软件工程的思想为指导,从可行性研究开始,经过系统分析、系统设计、系统实施到等主要阶段的规范开发过程。
我们实现的是网络数据库管理系统,我们选择的是仓库管理系统,仓库作为一种资源的集散地,在企业的整个供应链中起着至关重要的作用,如果不能保证正确的库存控制及发货,将会导致管理费用的增加,服务质量难以得到保证,从而影响企业的竞争力,传统简单的,静态管理已经无法保证企业各种资源的搞笑利用。如今的仓库作业和库存控制作业已经十分复杂多样化,仅靠人工记忆和手工录入,不但费时费力,而且容易出错,给企业带来巨大的损失。所以要实施先进的自动化系统,实现企业内部的信息管理,共享交流,才能让企业在竞争激烈的21世纪取得先机。仓库管理系统就是对货物和信息及金钱进行规划和实行交流控制。它将入库、出库、库存形成一个统一的中体,使企业处于全面受控状态,压缩投资规模,加快资金周转。在实时反映的基础上,修正企业在日常生产经营过程中各个环节上的偏差,降低产品成本和货物的积压。
仓库管理系统是通过入库业务、出库业务、实时库存管理等功能综合运用的管理系统,对货物全程进行有效的控制和跟踪,实现完善的企业仓库信息管理。仓库管理系统的投入,将使仓库的管理更加正规化,为产品的出入库管理部门和销售部门提供了方便,降低了仓库的损耗。企业可以通过该系统对售出的产品进行跟踪服务,同时避免可过去销售人员按以往惯例亲自前往用户处去核实货物情况的麻烦,提高了办事小效率,节省了费用,而且还避免了不必要的业务纠纷,维护了企业长期与用户建立的良好信誉。
我们设计的仓库管理系统主要用于对仓库日常工作的管理,主要任务是仓库的各种信息进行日常管理,如查询、修改、增加、删除等。本系统实现了仓库的信息化管理,完成了仓库管理系统的基本功能。
该系统主要包括用户登录系统、出入库管理系统和库存管理系统三个部分,各部分主要功能如下:
(1) 用户登录系统:用于系统的登录
(2) 出入库管理系统:用于产品信息的管理,如新增,修改。
(3) 库存管理系统:用于数据库的连接,对库内产品的信息查询,实现按需求查询。
(1)系统分成两个主要的模块,出入库管理和库存管理
(2)分层的模块化程序设计思想,整个系统采用模块化结构设计。作为应用程序有较强的可操作性和扩展性。
(3)合理的数据流设计,在应用系统设计中,相对独立的模块间以数据流相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。
图3.1 仓库管理系统功能结构图
图3.2 管理员登录功能结构图
图3.3仓库基本功能结构图
管理员登录主体代码:
public class DengLu extends JFrame implements ActionListener,MouseListener{
JPanel pnlMain;
JLabel lbltupian,lblyonghu,lblmima,lblbiaoti;
JTextField txtUserName;//文本框
JPasswordField pwdPassWord;//密码框
JButton DengLu,TuiChu;//主键
Dimension deSize;
Toolkit toolkit=Toolkit.getDefaultToolkit();
public DengLu (){
super("仓库管理系统");
pnlMain=new JPanel();//主面板
pnlMain.setLayout(null);//空布局
this.setUndecorated(true);
lbltupian=new JLabel(new ImageIcon("images/tupian.jpg"));//添加图片
lbltupian.setBounds(0, 0, 708,366);
lblyonghu=new JLabel("用户名:");
lblyonghu.setBounds(450,50,90, 20);
lblmima=new JLabel("密 码:");
lblmima.setBounds(450,100,90, 20);
txtUserName=new JTextField(100);
txtUserName.setBounds(500,50,150, 20);
pwdPassWord=new JPasswordField(100);
pwdPassWord.setBounds(500,100,150, 20);
DengLu=new JButton("登录");
DengLu.setBounds(450,140,90, 30);
DengLu.addActionListener(this);//增加监听器
TuiChu=new JButton("退出");
TuiChu.setBounds(560,140,90, 30);
TuiChu.setMnemonic('d');//设置快捷按钮
TuiChu.addActionListener(this);
//字体
Font font=new Font("宋体", Font.PLAIN, 13);
lblyonghu.setFont(font);
lblmima.setFont(font);
DengLu.setFont(font);
TuiChu.setFont(font);
//颜色
DengLu.setBackground(Color.CYAN);
TuiChu.setBackground(Color.CYAN);
pnlMain.add(lblyonghu);
pnlMain.add(txtUserName);
pnlMain.add(lblmima);
pnlMain.add(pwdPassWord);
pnlMain.add(DengLu);
pnlMain.add(TuiChu);
pnlMain.add(lbltupian);
this.setContentPane(pnlMain);
this.setVisible(true);
deSize=toolkit.getScreenSize(); //获取屏幕的大小
this.setSize(708,366);
this.setLocation(deSize.width/2-this.getWidth()/2, deSize.height/2-this.getHeight()/2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new DengLu();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==DengLu)
{ if((txtUserName.getText().equals("20150200121"))&&(pwdPassWord.getText().equals("960523")))
{
new ZhuJieMian();
this.dispose();}
else
JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新输入");
}
if(e.getSource()==TuiChu)System.exit(0);
}
数据库中总体有一张表,是管理产品信息的,具体结构如下图所示:
设计表如下图3.1所示:
图3.1 数据库的设计表
图3.2 数据库表的内容(部分)
连接数据库的代码如下:
public Connection openDB(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root" , "960914");
return cn;
} catch (ClassNotFoundException e) {
System.out.println("驱动加载异常!");
return null;
} catch (SQLException e) {
System.out.println("数据库连接异常!");
return null;
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnExit)this.dispose();
if(e.getSource()==btnchaxun)
{
try{
// 获得连接
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root" , "960914");
// 建立查询条件
String sql = "select * from kucun where bianhao='"+txtPassWord.getText()+"'";
PreparedStatement pstm = conn.prepareStatement(sql);
// 执行查询
ResultSet rs = pstm.executeQuery();
// 计算有多少条记录
int count = 0;
while(rs.next()){
count++;
}
rs = pstm.executeQuery();
// 将查询获得的记录数据,转换成适合生成JTable的数据形式
Object[][] info = new Object[count][6];
count = 0;
while(rs.next()){
info[count][0] = rs.getString("bianhao");
info[count][1] = rs.getString("chanpinname");
info[count][2] = rs.getString("xinghao");
info[count][3] = rs.getString("dengji");
info[count][4] = rs.getString("shuliang");
info[count][5] = rs.getString("danjia");
count++;
}
// 定义表头
String[] title = {"编号","产品名","型号","等级","数量","单价"};
// 创建JTable
this.tabDemo = new JTable(info,title);
// 显示表头
this.jth = this.tabDemo.getTableHeader();
// 将JTable加入到带滚动条的面板中
this.scpDemo.getViewport().add(tabDemo);
}catch(ClassNotFoundException cnfe){
JOptionPane.showMessageDialog(null,"数据源错误","错误",JOptionPane.ERROR_MESSAGE);
}catch(SQLException sqle){
JOptionPane.showMessageDialog(null,"数据操作错误","错误",JOptionPane.ERROR_MESSAGE);
}
}
}
(一)登录界面,管理员进行登录操作。如图4.1所示:
图4.1 登录界面
(二)主界面,管理员通过该界面进入出入库管理和库存查询。如图4.2所示:
图4.2 系统主界面
(三)出入库界面新增产品,点击新入按钮,将新产品信息输入后,点击确定,将新产品信息添加到数据库中图4.3所示:。如
图4.3 新增产品
(四)出入库管理界面,点击增减按钮,在编号栏输入编号,即可修改该产品的数量信息。如图4.4所示:
图4.4 增减库存
(五)库存管理界面,点击显示数据查看当前仓库存储产品的信息。如图4.5所示:
图4.5 查询库存信息
(六)库存管理界面,在文本框输入要查询产品的编号后,点击查询按钮,出现该产品的基本信息。如图4.6所示:
图4.6 按需查询信息
经过这学期的学习,在努力了几周之后,终于将Java仓库管理系统做了出来,虽然与想象中的程序还有一定的差距,但我还是很开心能够独立的将它完成,在这过程中,自己学到了很多,也感触到很多。Java是本学期新开的一门课程,在学习过程中对其的感触并不是很深刻,但是在这两周内,对其有了更加深刻的认识。平常在课堂的学习中都是跟着老师的脚步来敲代码,对代码的理解认识都很浅,但在自己构思自己动手的过程中,了解到了自己的不足,让我明白了Java的学习是一个反复的过程,不断的出现错误,不断的找到错误,然后查阅资料、调试,最终让其能够成功的运行。通过这几个周的努力,仓库管理系统设计完成,实现了系统的基本功能。在这个过程中,主要完成了数据库的设计和系统功能的实现。通过该系统可以方便快捷的实现仓库管理中的货物登记、出库入库、货物盘点等工作,使企业的仓库管理井井有条,为企业的健康发展创造良好的条件。并且在这个过程中,我对java程序设计有了进一步的认识,这并不是一件简简单单的事情,从最初的设计构思开始,每一步都需要自己的亲历亲为,首先要做的就是通过调查了解分析问题,对于接受的任务要进行认真的分析,不能凭自己的客观想象进行设计,分析最后应达到的目标,完成实际问题,否则做出来的程序将没有实际运用的价值。然后进行算法的设计。之后便要开始编程,将算法翻译成计算机语言。最后将程序运行,分析结果,对程序进行调试。
这次的编程,是第一次独立的进行完整设计的过程,在过程中遇到了很多的问题,最终的程序与最初的设计有很大的不同,因为经常会发现最初的设想并不适用,所以经过了几次大的改动,所以我认识到,Java程序并不是一步完成的,往往需要不断的调试,不断的改进。在这过程中也经常会遇到困难,但是在同学老师和网络的帮助下,最终也一一的将其克服,但在今后的日子里还是需要不断的学习新知识。有时候会忙到凌晨一二点,看着周围只有屏幕的亮光,虽然真的是很辛苦吧,但是很快乐,当自己能敲出的代码,即使做出的是做简单的东西,可看着它从一个个代码变成了程序,心里的那种喜悦感和成就感依旧是那么强烈。
部分重要代码如下:
管理员登录:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class DengLu extends JFrame implements ActionListener,MouseListener{
JPanel pnlMain;
JLabel lbltupian,lblyonghu,lblmima,lblbiaoti;
JTextField txtUserName;//文本框
JPasswordField pwdPassWord;//密码框
JButton DengLu,TuiChu;//主键
Dimension deSize;
Toolkit toolkit=Toolkit.getDefaultToolkit();
public DengLu (){
super("仓库管理系统");
pnlMain=new JPanel();//主面板
pnlMain.setLayout(null);
this.setUndecorated(true);
lbltupian=new JLabel(new ImageIcon("images/tupian.jpg"));
lbltupian.setBounds(0, 0, 708,366);
lblyonghu=new JLabel("用户名:");
lblyonghu.setBounds(450,50,90, 20);
lblmima=new JLabel("密 码:");
lblmima.setBounds(450,100,90, 20);
txtUserName=new JTextField(100);
txtUserName.setBounds(500,50,150, 20);
pwdPassWord=new JPasswordField(100);
pwdPassWord.setBounds(500,100,150, 20);
DengLu=new JButton("登录");
DengLu.setBounds(450,140,90, 30);
DengLu.addActionListener(this);
TuiChu=new JButton("退出");
TuiChu.setBounds(560,140,90, 30);
TuiChu.setMnemonic('d');//设置快捷按钮
TuiChu.addActionListener(this);
//字体
Font font=new Font("宋体", Font.PLAIN, 13);
lblyonghu.setFont(font);
lblmima.setFont(font);
DengLu.setFont(font);
TuiChu.setFont(font);
//颜色
DengLu.setBackground(Color.CYAN);
TuiChu.setBackground(Color.CYAN);
pnlMain.add(lblyonghu);
pnlMain.add(txtUserName);
pnlMain.add(lblmima);
pnlMain.add(pwdPassWord);
pnlMain.add(DengLu);
pnlMain.add(TuiChu);
pnlMain.add(lbltupian);
this.setContentPane(pnlMain);
this.setVisible(true);
deSize=toolkit.getScreenSize(); //获取屏幕的大小
this.setSize(708,366);
this.setLocation(deSize.width/2-this.getWidth()/2, deSize.height/2-this.getHeight()/2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new DengLu();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==DengLu)
{
if((txtUserName.getText().equals("20150200121"))&&(pwdPassWord.getText().equals("960914")))
{
//JOptionPane.showMessageDialog(null, "用户名和密码正确,欢迎登陆");
new ZhuJieMian();
this.dispose();}
else
JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新输入");
}
if(e.getSource()==TuiChu)System.exit(0);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
连接数据库并进行修改添加:
package lsg;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.*;
public class RuKu extends JFrame implements ActionListener{
JPanel pnlMain,pnlxin,pnltian;
JButton xinzeng,tianjia,guanbi,queding,tuichu,queding2;
JLabel biaoti1,chanpinming,bianhao,xinghao,dengji,shuliang,danjia;
JLabel biaoti2,chanpinming2,bianhao2,xinghao2,dengji2,shuliang2,danjia2;
JTextField chan,bian,xing,deng,shu,dan;
JTextField chan2,bian2,xing2,deng2,shu2,dan2;
ResultSet rs;
Dimension deSize;
Toolkit toolkit=Toolkit.getDefaultToolkit();
public RuKu() {
super("入库");
deSize=toolkit.getScreenSize();
pnlMain=new JPanel();
pnlMain.setLayout(null);//空布局
pnltian=new JPanel();
pnltian.setLayout(null);
pnlxin=new JPanel();
pnlxin.setLayout(null);
xinzeng=new JButton("新入");
xinzeng.setBounds(0,0, 200, 50);
xinzeng.addActionListener(this);
tianjia=new JButton("增减");
tianjia.setBounds(210, 0, 200, 50);
tianjia.addActionListener(this);
guanbi=new JButton("关闭");
guanbi.setBounds(420, 0, 200, 50);
guanbi.addActionListener(this);
queding=new JButton("确定");
queding.setBounds(350, 300, 200, 50);
queding.addActionListener(this);
tuichu=new JButton("清空");
tuichu.setBounds(570, 300, 200, 50);
tuichu.addActionListener(this);
queding2=new JButton("确定");
queding2.setBounds(350, 350, 200, 50);
queding2.setBackground(Color.GREEN);
queding2.addActionListener(this);
biaoti1=new JLabel("请输入新增产品的信息");
biaoti1.setBounds(450, 10, 200, 30);
chanpinming=new JLabel("产品名");
chanpinming.setBounds(350, 50, 50, 30);
chan=new JTextField(17);
chan.setBounds(450, 50, 300, 30);
bianhao=new JLabel("编码");
bianhao.setBounds(350,90, 50, 30);
bian=new JTextField(17);
bian.setBounds(450,90, 300, 30);
xinghao=new JLabel("型 号");
xinghao.setBounds(350,130, 50, 30);
xing=new JTextField(17);
xing.setBounds(450,130, 300, 30);
dengji=new JLabel("等 级");
dengji.setBounds(350,170, 50, 30);
deng=new JTextField(17);
deng.setBounds(450,170, 300, 30);
shuliang=new JLabel("数 量");
shuliang.setBounds(350,210, 50, 30);
shu=new JTextField(17);
shu.setBounds(450,210, 300, 30);
danjia=new JLabel("单 价");
danjia.setBounds(350,250, 50, 30);
dan=new JTextField(17);
dan.setBounds(450,250, 300, 30);
bianhao2=new JLabel("编码");
bianhao2.setBounds(350, 50, 50, 30);
bian2=new JTextField(17);
bian2.setBounds(450, 50, 300, 30);
shuliang2=new JLabel("数 量");
shuliang2.setBounds(350,210, 50, 30);
shu2=new JTextField(17);
shu2.setBounds(450,210, 300, 30);
pnlxin.add(biaoti1);
pnlxin.add(chanpinming);
pnlxin.add(bianhao);
pnlxin.add(xinghao);
pnlxin.add(dengji);
pnlxin.add(shuliang);
pnlxin.add(danjia);
pnlxin.add(chan);
pnlxin.add(bian);
pnlxin.add(xing);
pnlxin.add(deng);
pnlxin.add(shu);
pnlxin.add(dan);
pnlxin.add(queding);
pnlxin.add(tuichu);
pnltian.add(bianhao2);
pnltian.add(shuliang2);
pnltian.add(bian2);
pnltian.add(shu2);
pnltian.add(queding2);
pnlMain.add(xinzeng);
pnlMain.add(tianjia);
pnlMain.add(guanbi);
pnlMain.add(pnlxin);
pnlMain.add(pnltian);
this.setContentPane(pnlMain);
this.setSize(deSize.width-320,deSize.height-275);
this.setLocation(310, 232);
this.setUndecorated(true);//无边化:必须在setVisible之前使用
this.setVisible(true);//可视
}
public static void main(String[] args) {
RuKu mu=new RuKu();
mu.getUser();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==xinzeng)
{pnlxin.setBounds(10, 70, 1030, 400);
pnltian.setSize(0, 0);
}
if(e.getSource()==tianjia)
{pnltian.setBounds(10, 70, 1030, 400);
pnlxin.setSize(0, 0);
}
if(e.getSource()==guanbi)this.dispose();
if(e.getSource()==queding){ insertUser();}
if(e.getSource()==queding2){updateUser();}
}
public Connection openDB(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root" , "960914");
return cn;
} catch (ClassNotFoundException e) {
System.out.println("驱动加载异常!");
return null;
} catch (SQLException e) {
System.out.println("数据库连接异常!");
return null;
}
}
public void getUser(){
try {
Statement stmt=openDB().createStatement();
rs=stmt.executeQuery("select bianhao,shuliang from kucun");
} catch (SQLException e) {
JOptionPane.showMessageDialog(null,"用户信息获取失败");
}
}
private void insertUser() {
// TODO Auto-generated method stub
try {
PreparedStatement psm=openDB().prepareStatement("insert into kucun(bianhao,chanpinname,xinghao,dengji,shuliang,danjia) values(?,?,?,?,?,?)");
psm.setString(1,bian.getText());
psm.setString(2,chan.getText());
psm.setString(3,xing.getText());
psm.setString(4,deng.getText());
psm.setString(5,shu.getText());
psm.setString(6,dan.getText());
psm.executeUpdate();
JOptionPane.showMessageDialog(null, "用户添加成功");
psm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "用户添加失败");
}
}
private void updateUser() {
// TODO Auto-generated method stub
System.out.println("aaaa");
try {
Statement sm=openDB().createStatement();
String strupdate="update kucun set shuliang='"+shu2.getText()+"' where bianhao='"+bian2.getText()+"'";
sm.execute(strupdate);
JOptionPane.showMessageDialog(null, "用户修改成功");
sm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "用户更新失败");
}
}
}
2016-2017学年度第一学期期末考试
《面向对象程序设计(Java)*》实践考核成绩报告单
排课编号:(2016-2017-1)-B080204-00159-1 批阅日期: 年 月 日