收藏 分销(赏)

数据库系统课程设计仓库管理系统.doc

上传人:快乐****生活 文档编号:3529491 上传时间:2024-07-08 格式:DOC 页数:119 大小:673KB 下载积分:20 金币
下载 相关 举报
数据库系统课程设计仓库管理系统.doc_第1页
第1页 / 共119页
数据库系统课程设计仓库管理系统.doc_第2页
第2页 / 共119页


点击查看更多>>
资源描述
数据库系统课程设计仓库管理系统 实验报告 仓库管理系统 实验课程 数据库实验 实验者1 姓名 班级 学号 实验者2 姓名 班级 学号 实验时间 指导老师 目录 P3 要求 P4 参考资料阅读心得 P6 概述 (设计思路、实现功能、运用技术) P7 实现及操作 (关键代码解析、运行结果、类方法的介绍) P17 存在问题和需要改进的地方 P18 附录 (完整代码 包括 分布调试代码) 要求: 使用ACCESS、SQL SERVER、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) 数据路操作实现 :使用Access ,运用SQL语言进行操作; 实现及操作 根据分析,一共设计9个类,如下图,其中: 数据库操作类: DBAccess :实现连接,查询修改等分步操作 ; GetDBInfo :实现查询结果集的返回 ; 操作界面类: Enter : 登录界面 Select : 功能选择界面 InStoreHouse : 物品入库操作界面 OutStoreHouse : 物品出库操作界面 SearchGoods : 物品查询界面 OutIn : 出入库查询界面 ManagerInfo : 管理员信息管理界面 分步实现说明: 1. DBAccess类 public Statement getStatement(String dbPath) throws Exception: 返回连接数据库的状态 ; public ResultSet executeQuery(Statement stmt,String query) throws Exception : 返回查询结果集; public void executeUpdate(Statement stmt,String query) throws SQLException : 更新数据库 ; public void close() throws SQLException : 关闭数据库的连接 ; 2. GetDBInfo类 private Vector<Vector<String>> rows ; 记录查询返回元组 private Vector columnHeads ; 记录查询返回结果的标题 //获取表头VolumnHeads public Vector getColumnHeads() ; //获取表中内容 public Vector getRows() ; // 更新数据库 public void executeUpdate(Statement stmt,String query) throws SQLException ; 3. Enter类 private JFrame frame ; private JButton enterButton ; private JButton resetButton; 用于标识登陆角色的单选按钮 private JRadioButton radioButton1 ; private JRadioButton radioButton2 ; private JTextField nameText ; private JPasswordField passwordText ; 表示登录身份: public static boolean isManager = false ; 实现效果: 基本实现: (1)图片载入: JLabel label4 = new JLabel(); ImageIcon icon = new ImageIcon("E:\\study\\java\\workspace\\StoreHouse\\abc.jpg"); label4.setIcon(icon); (2)单选按钮: ButtonGroup group = new ButtonGroup(); radioButton1 = new JRadioButton("管理员",false); radioButton2 = new JRadioButton("客户",true); group.add(radioButton1) ; group.add(radioButton2) ; 4. InStoreHouse类 基本成员变量: private JFrame frame ; 输入信息的11个文本框: private JTextField text1 - 11; private JTextField infoText ; private JButton okButton ; private JButton backButton ; 设置日期格式:private static final String YYYMMDDHHMMSS = "yyyy/MM/dd HH:mm:ss"; 基本函数: //SQL语句生成 public String getSQL() //自动生成插入时间 public String insertTime() //自动生成入库ID public String inHouseID() //清除文本框 public void clear() 实现效果: 基本功能实现: 监听器的设定: public void actionPerformed(ActionEvent e){ Object source = e.getSource() ; if(source == okButton){ try{ DBAccess db=new DBAccess(); String dbPath="E:\\study\\java\\workspace\\StoreHouse\\StoreHouse.mdb"; Statement stmt=db.getStatement(dbPath); String query = getSQL(); db.executeUpdate(stmt,query) ; query = insertSQL() ; db.executeUpdate(stmt,query) ; stmt.close(); db.close() ; infoText.setText("存储成功"); clear() ; }catch (Exception ex){ ex.printStackTrace() ; } }else if(source == backButton){ frame.dispose() ; new Select() ; } } 5. OutStoreHouse类 基本成员变量: private JFrame frame ; private JButton okButton ; private JButton backButton ; private JTextField text1; private JTextField text2; private JTextField text3; private JTextField text4; private static final String YYYMMDDHHMMSS = "yyyy/MM/dd HH:mm:ss"; private Integer num ; //修改数据里中数量的临时变量 基本函数:同InStoreHouse雷同 实现效果: 基本功能实现: 处理物品编号不存在,以及数量不足的问题: public void actionPerformed(ActionEvent e){ Object source = e.getSource() ; if(source == okButton){ try{ DBAccess db=new DBAccess(); String dbPath="E:\\study\\java\\workspace\\StoreHouse\\StoreHouse.mdb"; String query=getGoodsSQL(); Statement stmt=db.getStatement(dbPath); ResultSet rs=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 (Exception ex){ ex.printStackTrace() ; } }else if(source == backButton){ frame.dispose() ; new Select() ; } } 解析: 这里应用到数据类型的转变,String 到int double的转化; 还能够应用其它方法: 如: rs.getInt(3); 直接读取数据库中的 int类型; rs.getDouble(4) :直接读取double类型 6. SearchGoods类 基本成员函数: private JFrame frame ; private JScrollPane jsp ; private JComboBox nameList ; private JComboBox typeList ; private JComboBox productList ; private JTextField countText ; private JTextField valueText ; private JButton okButton ; private JTable table ; private DefaultTableModel model ; private JButton backButton ; private Vector rows; //表行值 private Vector columnHeads;// 表列名 //查询使用 :String str1,str2,str3 ; 基本函数实现相同; 实现效果: 7. OutIn类 基本函数变量: private JFrame frame ; private JRadioButton inButton ; private JRadioButton outButton; private JButton okButton ; private JButton backButton ; private JComboBox combox1 ; private JComboBox combox2 ; private JTable table ; private Vector rows; //表行值 private Vector columnHeads;// 表列名 private DefaultTableModel model ; private JScrollPane jsp ; private String str1 = null ,str2 = null ; //查询使用 private boolean flag = false ; private int tmp = 0 ; private static final String YYYMMDDHHMMSS = "yyyy/MM/dd"; 实现效果: 基本实现: 时间字符创的分割处理 ; 8. Select类 基本成员变量 private JButton button1 ; private JButton button2 ; private JButton button3 ; private JButton button4; private JButton button5 ; private JButton button6 ; private JTextField Text ; private JFrame frame ; 实现效果: 基本实现: 界面效果实现: infoLabel.setHorizontalAlignment(SwingConstants.CENTER); infoLabel.setBackground(Color.gray) ; Text.setBackground(Color.gray) ; Text.setForeground(Color.cyan) ; Text.setFont(new Font("宋体",Font.HANGING_BASELINE,20)); 9. ManagerInfo 类 基本函数: private JFrame frame ; private JTabbedPane tabbedPane ; private JLabel label1 ; private JLabel label2 ; private JLabel label3 ; private JPanel panel1 ; private JPanel panel2 ; private JPanel panel3 ; private JComboBox ageBox ; private JComboBox workAgeBox ; private JComboBox postionBox ; private JTextField text21 ; private JTextField text22 ; private JTextField text23 ; private JTextField text24 ; private JTextField text25 ; private JTextField text26 ; private JTextField text27 ; private JTextField text28 ; private JTextField text31 ; private JTextField text32 ; private JButton button11 ; private JButton button12 ; private JButton button21 ; private JButton button31 ; private JButton backButton ; private JTable table ; private Vector rows; //表行值 private Vector columnHeads;// 表列名 private DefaultTableModel model ; private JScrollPane jsp ; private String str1= null,str2 = null ,str3 = null ; //查询使用 基本功能函数: 这里的函数处理和上面的相同,只是在布局上采用了JtablePanle面板,将三个功能加在同一个窗口里; 实现效果: 处理问题: 要删除的管理员信息不存在: if(source == button31){ boolean deleteState = false ; try{ DBAccess db=new DBAccess(); String dbPath="E:\\study\\java\\workspace\\StoreHouse\\StoreHouse.mdb"; String query = "select * from Manager where 编号 = " + "'" + text31.getText() + "'"; Statement stmt=db.getStatement(dbPath); ResultSet rs=db.executeQuery(stmt, query); while(rs.next()){ if(rs.getString(1).equals(text31.getText())){ query = "delete from Manager where 编号 = " + "'" + text31.getText() + "'"; db.executeUpdate(stmt,query) ; text31.setText(""); text32.setText("删除成功"); deleteState = true ; } } stmt.close(); db.close() ; }catch (Exception ex){ ex.printStackTrace() ; } if(deleteState == false) { text32.setText("输入编号不存在"); text31.setText(""); } 解析: 在删除之前,对数据库进行检查,判断 管理员编号 是否存在 ; 存在问题和需要完善的问题 附录 : 代码实现 DBAccess.Java文件 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBAccess { public Connection conn=null; // 连接未加密的数据库 public Statement getStatement(String dbPath) throws Exception{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dburl = "jdbc:odbc:driver= {Microsoft Access Driver (*.mdb)};" + "DBQ="+dbPath;// 此为NO-DSN方式 // String dburl ="jdbc:odbc:odbcName";//此为ODBC连接方式 conn = DriverManager.getConnection(dburl); return conn.createStatement(); } //连接加密的数据库 public Statement getStatement(String dbPath,String password) throws Exception{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};" + "pwd="+password+";DBQ="+dbPath;// 此为NO-DSN方式 // String dburl ="jdbc:odbc:odbcName";//此为ODBC连接方式 conn = DriverManager.getConnection(dburl); return conn.createStatement(); } /* 查询数据库 */ public ResultSet executeQuery(Statement stmt,String query) throws Exception{ ResultSet rs=stmt.executeQuery(query); return rs; } /* * 更新数据库 */ public void executeUpdate(Statement stmt,String query) throws SQLException{ stmt.executeUpdate(query); } /** * 关闭链接 */ public void close() throws SQLException{ if(conn!=null) conn.close(); } public static void main(String args[]) throws Exception { DBAccess db=new DBAccess(); String dbPath="E:\\study\\java\\workspace\\StoreHouse\\StoreHouse.mdb"; String query="select * from Manager"; Statement stmt=db.getStatement(dbPath); ResultSet rs=db.executeQuery(stmt, query); while(rs.next()){ System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) + "\t" + rs.getString(4) + "\t" + rs.getString(5) + rs.getString(6) + rs.getString(7)); } } } Enter.java文件 import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.sql.ResultSet; import java.sql.Statement; public class Enter implements ActionListener{ private JFrame frame ; private JButton enterButton ; private JButton resetButton; private JRadioButton radioButton1 ; private JRadioButton radioButton2 ; private JTextField nameText ; private JPasswordField passwordText ; public static boolean isManager = false ; public Enter(){ frame = new JFrame("仓库管理系统登录界面"); enterButton = new JButton("登录"); resetButton = new JButton("重置"); JLabel label1 = new JLabel("用户名 :"); JLabel label2 = new JLabel("密 码 :"); JLabel label3 = new JLabel("登录方式 :"); JLabel label4 = new JLabel(); JLabel label5 = new JLabel(); JLabel label6 = new JLabel(); JLabel label7 = new JLabel(); ImageIcon icon = new ImageIcon("E:\\study\\java\\workspace\\StoreHouse\\abc.jpg"); label4.setIcon(icon); label5.setText("华润品牌"); label7.setText("追求卓越"); label6.setText("中心软件,让您选择无悔的软件,感谢支持 晓伟O(∩_∩)O~制作"); nameText = new JTextField(); passwordText = new JPasswordField(); //单选按钮 ButtonGroup group = new ButtonGroup(); radioButton1 = new JRadioButton("管理员",false); radioButton2 = new JRadioButton("客户",true); group.add(radioButton1) ; group.add(radioButton2) ; /* * 字体等格式设置 */ label1.setHorizontalAlignment(SwingConstants.CENTER); label2.setHorizontalAlignment(SwingConstants.CENTER); label3.setHorizontalAlignment(SwingConstants.CENTER); label5.setHorizontalAlignment(SwingConstants.CENTER) ; label6.setHorizontalAlignment(SwingConstants.CENTER) ; label1.setFont(new Font("宋体",Font.HANGING_BASELINE,30)); lab
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服