仓库管理系统实验报告.docx
《仓库管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《仓库管理系统实验报告.docx(91页珍藏版)》请在冰豆网上搜索。
仓库管理系统实验报告
实验报告
仓库管理系统
实验课程
数据库实验
实验者1
姓名
班级
学号
实验者2
姓名
班级
学号
实验时间
指导老师
P3要求
P4参考资料阅读心得
P6概述
(设计思路、实现功能、运用技术)
P7实现及操作
(关键代码解析、运行结果、类方法的介绍)
P17存在问题和需要改善的地方
P18附录
(完整代码包括分布调试代码)
要求:
使用ACCESS、SQLSERVER、ORACLE、MYSQL等作后台数据库,选择ASP、VB、VC、JAVA等作为前台开发工具设计一个小型管理系统。
所设计的小型管理系统应包含输入输出、查询、插入、删除等基本功能,功能越强大越好。
根据题目的基本需求,设计数据库、编写程序,并写出详细的设计说明书。
每班以2人为一组自由分组,由班长将分组情况报到指导教师处;
需要提交的文档资料:
设计说明书每人一份(包括:
参考资料的阅读心得,功能需求说明,设计思路,数据表结构及作用,数据关系图,存储过程代码及相关注释,设计体会);电子文档:
可运行的,能实现全部或者主要基本功能的小型系统。
课程设计说明书编写规范:
a.需求分析:
题目要求达到的功能,所提供的原始数据,需要输出的数据及样式等。
b.数据库设计:
根据要求设计数据库的结构,包括:
表、数据完整性、关系、视图。
c.开发方案选择:
主要是前端开发平台的选择与方案的比较,至少比较两套方案。
d.安全性设计:
登录用户、数据库用户、数据库角色、命令许可等方面。
e.前台应用程序设计:
要求至少完成通过前台程序实现对后台数据库的数据查询、插入、删除与更新。
涉及到数据的所有操作要求采用存储过程的方式进行。
f.附录或参考资料:
参考资料来源,阅读心得。
参考资料阅读心得:
参考资料(老师提供):
2、教材信息数据库
高校的教材管理需要相应的数据库环境,请根据如下系统需求定义数据表结构及关系,并通过编写存储过程来实现其中的两项功能:
1)、教材出入库
(1)教材入库
将教材内部识别号、入库时间,入库数,适用对象等信息输入到教材入库记录表中,并更新在库教材信息表。
教材入库后把教材征订单相应项目做教材收到标记。
(暂不处理订单中某教材只入库其中一部分的情况,即缺货情况。
)
(2)教材出库
教师或学生或班级或其它人员领用教材,需要把教材内部编号,教材代号,出库时间,出库数量,使用单位(指班级或教师,可多个班级或教师),用途,经办人等信息输入到教材出库记录表中。
并同时更新教材信息表中的在库数量。
为便于教材信息的录入,可通过班级名称、课程名称或教材名称查询到要出库的教材信息表中相应教材的内部编号。
(3)教材信息录入
将教材的内部识别号(由本系统自动维护),代号,书名,编著者,出版社,版次,定价,入库时间,入库数,适用对象等信息录入到系统的数据库中。
2)、教材查询
(1)在库教材查询
查询教材在库情况:
可按书名、代号等查询,可查询某班级使用的教材及在库数量,可查询某课程使用的教材及在库数量。
可查询指定教材的在库数量,价值总额。
可查询教材在库的统计信息:
在库教材总数、种类总数、价值总额。
(2)教材出库查询
教材出库信息查询:
按教材代号等信息查询教材出库情况,可查询某使用对象(包括班级、教师、部门、其他人员)的教材出库情况。
可查询某时间范围内(学期、学年等)的教材出库情况。
(3)教材历史查询
查询指定书的在库及出入库的历史信息,也可按时间或时间范围查询教材入库情况。
便于管理员掌握教材出入库情况。
3)、教材订购
(1)、生成教材订单
根据输入的各专业班级课程教材选用信息、教材出版社信息生成订单。
(2)、教材订单状态管理
订单状态管理:
可标记各订单为有效(款项发出),图书入库后标记订单为到货,图书退回标记为退换货。
4)、教材订单查询
可查询指定学期教材订单的到货、缺货情况,查询订单未到教材的订货公司信息包括它的银行帐号、地址、联系人、联系方法等,以便与其联系。
5)、其他相关数据:
学生相关、课程相关、教师相关、班级相关、系部相关
阅读心得:
我们的选题是仓库管理系统,和教材信息数据库大致相同,实现的功能略作添加;
我们需要完成的任务:
(1).这个实验本质就是设置合理的操作界面,实现对数据库的数据读取、修改、删除、更新等操作;
(2).系统的完备性和操作的安全性,是完善软件的关键,其中包括:
插入相同信息;
数据库中物品数量不足;
管理员编号不存在;
安全登录;
不同角色的对数据库的操作权限;
等等问题,都是我们需要解决的基本问题;
(3)界面的美化和操作的快捷性和正确性;
界面是给客户的第一感触,尽量的新颖并且符合客户要求:
(这里我们是学习,争取掌握多一点处理界面的函数,没有系统的规划)
如果美化界面是尽量的完善,那么操作的快捷性和正确性是必须要实现的,给客户一个合理的操作是成功的必备条件;
(4)分工与合作
我们两个人都是java的初级学习者,不断的学习,分别设计不同的界面,相互交流实现效果的的经验;
关于数据库的知识和SQL语言的学习,都是我们要重新学习的;
(5)文档的处理和制作,也是我们要完成的重要任务,我们也是分工完成;
概述
1.设计思路:
(1).仓库管理系统,实现功能:
入库登记:
商品入库记录;
出库登记:
库存商品出库;
在库商品查询:
库存物品查询;
出库入库信息查询:
按时间,操作管理员查询操作信息;
管理员信息管理:
管理员的登记,查询,删除;
(2).附加实现功能:
登录界面:
实现管理员员和客户的不同角色登录;
界面的转换:
分别创建不同的窗口,并及时删除浏览过的窗口;
分角色设定使用权限:
管理员和客户的使用权限不同;
(3).异常处理:
操作错误:
信息输入错误等;
常规错误:
仓库物品数量不足等;
2.运用技术:
(1)界面实现:
java语言;
(2)数据路操作实现:
使用Access2003,运用SQL语言进行操作;
实现及操作
根据分析,一共设计9个类,如下图,其中:
数据库操作类:
DBAccess:
实现连接,查询修改等分步操作;
GetDBInfo:
实现查询结果集的返回;
操作界面类:
Enter:
登录界面
Select:
功能选择界面
InStoreHouse:
物品入库操作界面
OutStoreHouse:
物品出库操作界面
SearchGoods:
物品查询界面
OutIn:
出入库查询界面
ManagerInfo:
管理员信息管理界面
分步实现说明:
1.DBAccess类
publicStatementgetStatement(StringdbPath)throwsException:
返回连接数据库的状态;
publicResultSetexecuteQuery(Statementstmt,Stringquery)throwsException:
返回查询结果集;
publicvoidexecuteUpdate(Statementstmt,Stringquery)throwsSQLException:
更新数据库;
publicvoidclose()throwsSQLException:
关闭数据库的连接;
2.GetDBInfo类
privateVector>rows;记录查询返回元组
privateVectorcolumnHeads;记录查询返回结果的标题
//获取表头VolumnHeads
publicVectorgetColumnHeads();
//获取表中内容
publicVectorgetRows();
//更新数据库
publicvoidexecuteUpdate(Statementstmt,Stringquery)throwsSQLException;
3.Enter类
privateJFrameframe;
privateJButtonenterButton;
privateJButtonresetButton;
用于标识登陆角色的单选按钮
privateJRadioButtonradioButton1;
privateJRadioButtonradioButton2;
privateJTextFieldnameText;
privateJPasswordFieldpasswordText;
表示登录身份:
publicstaticbooleanisManager=false;
实现效果:
基本实现:
(1)图片载入:
JLabellabel4=newJLabel();
ImageIconicon=newImageIcon("E:
\\study\\java\\workspace\\StoreHouse\\abc.jpg");
label4.setIcon(icon);
(2)单选按钮:
ButtonGroupgroup=newButtonGroup();
radioButton1=newJRadioButton("管理员",false);
radioButton2=newJRadioButton("客户",true);
group.add(radioButton1);
group.add(radioButton2);
4.InStoreHouse类
基本成员变量:
privateJFrameframe;
输入信息的11个文本框:
privateJTextFieldtext1-11;
privateJTextFieldinfoText;
privateJButtonokButton;
privateJButtonbackButton;
设置日期格式:
privatestaticfinalStringYYYMMDDHHMMSS="yyyy/MM/ddHH:
mm:
ss";
基本函数:
//SQL语句生成
publicStringgetSQL()
//自动生成插入时间
publicStringinsertTime()
//自动生成入库ID
publicStringinHouseID()
//清除文本框
publicvoidclear()
实现效果:
基本功能实现:
监听器的设定:
publicvoidactionPerformed(ActionEvente){
Objectsource=e.getSource();
if(source==okButton){
try{
DBAccessdb=newDBAccess();
StringdbPath="E:
\\study\\java\\workspace\\StoreHouse\\StoreHouse.mdb";
Statementstmt=db.getStatement(dbPath);
Stringquery=getSQL();
db.executeUpdate(stmt,query);
query=insertSQL();
db.executeUpdate(stmt,query);
stmt.close();
db.close();
infoText.setText("存储成功");
clear();
}catch(Exceptionex){
ex.printStackTrace();
}
}elseif(source==backButton){
frame.dispose();
newSelect();
}
}
5.OutStoreHouse类
基本成员变量:
privateJFrameframe;
privateJButtonokButton;
privateJButtonbackButton;
privateJTextFieldtext1;
privateJTextFieldtext2;
privateJTextFieldtext3;
privateJTextFieldtext4;
privatestaticfinalStringYYYMMDDHHMMSS="yyyy/MM/ddHH:
mm:
ss";
privateIntegernum;//修改数据里中数量的临时变量
基本函数:
同InStoreHouse雷同
实现效果:
基本功能实现:
处理物品编号不存在,以及数量不足的问题:
publicvoidactionPerformed(ActionEvente){
Objectsource=e.getSource();
if(source==okButton){
try{
DBAccessdb=newDBAccess();
StringdbPath="E:
\\study\\java\\workspace\\StoreHouse\\StoreHouse.mdb";
Stringquery=getGoodsSQL();
Statementstmt=db.getStatement(dbPath);
ResultSetrs=db.executeQuery(stmt,query);
if(!
(rs.next()))//判断数据库中是否有内容
{
JOptionPane.showMessageDialog(null,"输入货物编号不存在","提示信息",JOptionPane.INFORMATION_MESSAGE);
text3.setText("操作失败");
clear();
}else{
//判断仓库物品是否够
//这里实验了很多次为什么只有num=放在这里才可以呢
if((num=Integer.valueOf(rs.getString
(1)).intValue()-Integer.valueOf(text2.getText()).intValue())<0){
JOptionPane.showMessageDialog(null,"仓库货物不足","提示信息",JOptionPane.INFORMATION_MESSAGE);
clear();
text3.setText("操作失败");
}else{
query=getSendOutSQL();
db.executeUpdate(stmt,query);
query=updateGoodsSQL(num);
db.executeUpdate(stmt,query);
text3.setText("操作成功");
}
}
stmt.close();
db.close();
}catch(Exceptionex){
ex.printStackTrace();
}
}elseif(source==backButton){
frame.dispose();
newSelect();
}
}
解析:
这里应用到数据类型的转变,String到intdouble的转化;
还可以应用其他方法:
如:
rs.getInt(3);直接读取数据库中的int类型;
rs.getDouble(4):
直接读取double类型
6.SearchGoods类
基本成员函数:
privateJFrameframe;
privateJScrollPanejsp;
privateJComboBoxnameList;
privateJComboBoxtypeList;
privateJComboBoxproductList;
privateJTextFieldcountText;
privateJTextFieldvalueText;
privateJButtonokButton;
privateJTabletable;
privateDefaultTableModelmodel;
privateJButtonbackButton;
privateVectorrows;//表行值
privateVectorcolumnHeads;//表列名
//查询使用:
Stringstr1,str2,str3;
基本函数实现相同;
实现效果:
7.OutIn类
基本函数变量:
privateJFrameframe;
privateJRadioButtoninButton;
privateJRadioButtonoutButton;
privateJButtonokButton;
privateJButtonbackButton;
privateJComboBoxcombox1;
privateJComboBoxcombox2;
privateJTabletable;
privateVectorrows;//表行值
privateVectorcolumnHeads;//表列名
privateDefaultTableModelmodel;
privateJScrollPanejsp;
privateStringstr1=null,str2=null;//查询使用
privatebooleanflag=false;
privateinttmp=0;
privatestaticfinalStringYYYMMDDHHMMSS="yyyy/MM/dd";
实现效果:
基本实现:
时间字符创的分割处理;
8.Select类
基本成员变量
privateJButtonbutton1;
privateJButtonbutton2;
privateJButtonbutton3;
privateJButtonbutton4;
privateJButtonbutton5;
privateJButtonbutton6;
privateJTextFieldText;
privateJFrameframe;
实现效果:
基本实现:
界面效果实现:
infoLabel.setHorizontalAlignment(SwingConstants.CENTER);
infoLabel.setBackground(Color.gray);
Text.setBackground(Color.gray);
Text.setForeground(Color.cyan);
Text.setFont(newFont("宋体",Font.HANGING_BASELINE,20));
9.ManagerInfo类
基本函数:
privateJFrameframe;
privateJTabbedPanetabbedPane;
privateJLabellabel1;
privateJLabellabel2;
privateJLabellabel3;
privateJPanelpanel1;
privateJPanelpanel2;
privateJPanelpanel3;
privateJComboBoxageBox;
privateJComboBoxworkAgeBox;
privateJComboBoxpostionBox;
privateJTextFieldtext21;
privateJTextFieldtext22;
privateJTextFieldtext23;
privateJTextFieldtext24;
privateJTextFieldtext25;
privateJTextFieldtext26;
privateJTextFieldtext27;
privateJTextFieldtext28;
privateJTextFieldtext31;
privateJTextFieldtext32;
privateJButtonbutton11;
privateJButtonbutton12;
privateJButtonbutton21;
privateJButtonbutton31;
privateJButtonbackButton;
privateJTabletable;
privateVectorrows;//表行值
privateVectorcolumnHeads;//表列名
privateDefaultTableModelmodel;
privateJScrollPanejsp;
privateStringstr1=null,str2=null,str3=null;//查询使用
基本功能函数:
这里的函数处理和上面的相同,只是在布局上采用了JtablePanle面板,将三个功能加在同一个窗口里;
实现效果:
处理问题:
要删除的管理员信息不存在:
if(source==button31){
booleandeleteState=false;
try{
DBAccessdb=newDBAccess();
StringdbPath="E:
\\study\\java\\workspace\\StoreHouse\\StoreHouse.mdb";
Stringquery="select*fromManagerwhere编号="+"'"+text31.getText()+"'";