资源描述
—第一学期期末考试
《面向对象程序设计(Java)*》
实践考评项目设计说明书
项目名称: 仓库管理系统
专 业: 计算机科学和技术
学 号:
姓 名:
任课老师: 巩晨静
12月3日
项目及要求
(一)考评内容:Java应用程序开发
(二)考评要求:
1. 设计开发一个Java应用程序,设计题目自拟;
2. 要求学生熟练利用Java程序设计基础知识和技能;
3. 要求学生掌握面向对象程序开发基础思绪和方法,熟悉软件开发过程;
4. 要求学生利用面向对象编程思想和组件开发原理来完成系统设计;
5. 要求学生利用所学基础知识和技能,进行应用程序设计,并表现自己创新;
6. 要求学生独立完成,严禁拷贝和剽窃;
7. 根据软件工程思想,完成项目标需求分析、项目标功效框架、用户界面设计、各功效模块调试和运行等工作;
8. 重视设计说明书文档书写。
9. 上交要求。要求学生上交设计说明书一份(Word格式)电子及打印文档(A4纸)各一份,源程序打包上传BB平台。
目录
第一章 项目选题说明 1
第二章 项目需求分析 2
第三章 系统设计 2
3.1 设计思想 2
3.2程序总体设计 3
3.3程序具体设计 4
3.4 数据库总体设计: 7
第四章 系统测试及实现 10
第五章 总结 13
附录 : 15
仓库管理系统设计说明书
第一章 项目选题说明
管理信息系统(MIS)应用已深入到社会各行各业,它是信息、软件和科学管理相结合产物。MIS开发过程不仅是一个编写应用程序过程,而且是一个以软件工程思想为指导,从可行性研究开始,经过系统分析、系统设计、系统实施到等关键阶段规范开发过程。
我们实现是网络数据库管理系统,我们选择是仓库管理系统,仓库作为一个资源集散地,在企业整个供给链中起着至关关键作用,假如不能确保正确库存控制及发货,将会造成管理费用增加,服务质量难以得到确保,从而影响企业竞争力,传统简单,静态管理已经无法确保企业多种资源搞笑利用。现在仓库作业和库存控制作业已经十分复杂多样化,仅靠人工记忆和手工录入,不仅费时费力,而且轻易犯错,给企业带来巨大损失。所以要实施优异自动化系统,实现企业内部信息管理,共享交流,才能让企业在竞争猛烈二十一世纪取得先机。仓库管理系统就是对货物和信息及金钱进行计划和实施交流控制。它将入库、出库、库存形成一个统一中体,使企业处于全方面受控状态,压缩投资规模,加紧资金周转。在实时反应基础上,修正企业在日常生产经营过程中各个步骤上偏差,降低产品成本和货物积压。
仓库管理系统是经过入库业务、出库业务、实时库存管理等功效综合利用管理系统,对货物全程进行有效控制和跟踪,实现完善企业仓库信息管理。仓库管理系统投入,将使仓库管理愈加正规化,为产品出入库管理部门和销售部门提供了方便,降低了仓库损耗。企业能够经过该系统对售出产品进行跟踪服务,同时避免可过去销售人员按以往通例亲自前往用户处去核实货物情况麻烦,提升了办事小效率,节省了费用,而且还避免了无须要业务纠纷,维护了企业长久和用户建立良好信誉。
第二章 项目需求分析
我们设计仓库管理系统关键用于对仓库日常工作管理,关键任务是仓库多种信息进行日常管理,如查询、修改、增加、删除等。本系统实现了仓库信息化管理,完成了仓库管理系统基础功效。
该系统关键包含用户登录系统、出入库管理系统和库存管理系统三个部分,各部分关键功效以下:
(1) 用户登录系统:用于系统登录
(2) 出入库管理系统:用于产品信息管理,如新增,修改。
(3) 库存管理系统:用于数据库连接,对库内产品信息查询,实现按需求查询。
第三章 系统设计
3.1 设计思想
(1)系统分成两个关键模块,出入库管理和库存管理
(2)分层模块化程序设计思想,整个系统采取模块化结构设计。作为应用程序有较强可操作性和扩展性。
(3)合理数据流设计,在应用系统设计中,相对独立模块间以数据流相互连接,使各模块间耦合性较低,方便系统运行,提升系统安全性。
3.2程序总体设计
仓库管理系统
用户登录
仓库基础信息
图3.1 仓库管理系统功效结构图
用户登录
管理员登录系统
图3.2 管理员登录功效结构图
仓库基础信息
新品入库
库存增减
库存数据
按需查询
图3.3仓库基础功效结构图
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("021"))&&(pwdPassWord.getText().equals("960523")))
{
new ZhuJieMian();
this.dispose();}
else
JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新输入");
}
if(e.getSource()==TuiChu)System.exit(0);
}
3.4 数据库总体设计:
数据库中总体有一张表,是管理产品信息,具体结构以下图所表示:
设计表以下图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("021"))&&(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)
{p
展开阅读全文