收藏 分销(赏)

物资管理系统.doc

上传人:丰**** 文档编号:4060010 上传时间:2024-07-26 格式:DOC 页数:28 大小:113.04KB 下载积分:10 金币
下载 相关 举报
物资管理系统.doc_第1页
第1页 / 共28页
物资管理系统.doc_第2页
第2页 / 共28页


点击查看更多>>
资源描述
《JAVA程序设计》 课程设计报告 设计题目: 物资管理系统设计与实现 学院名称: 信息工程学院 专业班级: 姓 名: 学 号: 13122102 目录 目录 一 需求分析 2 二 概要设计 2 2。1 概要设计的原则 2 2.2 将用户需求模块化 3 2.3 确定系统最终模块 3 2。4 UML用例图 3 2.5 模块设计 4 三 详细设计 5 3.1 数据库设计 5 3.2 模块及窗体设计 6 3。2。1 数据库模块设计 6 一 需求分析 本系统的主要目的就是对物资管理的快捷管理以及对数据信息的显示,存放的日期显示所有者等。 二 概要设计 概要设计阶段主要是粗略描述整个软件的框架,并从业务的角度描述软件的模块、工作流程等。项目的成功取决于设计的好坏,而概要设计则是整个设计的关键部分.概要设计的主要任务是将用户的需求划分为不同的功能,然后将这些功能细分成模块,并给模块一些规则约束,以达到各个模块之间可以相互交流的目的。概要设计关乎到系统的整体架构,因此想做好一个概要设计,不仅仅要熟悉用户的业务流程,还要具备相当丰富的设计经验。 2。1 概要设计的原则 概要设计是根据系统分析的需求和工作环境的情况对整个软件的总体结构进行大致的设计。概要设计要坚持以下几个原则。 (1)细分原则:软件系统都是由很多不同的模块组成,当设计一套软件时,要先将所有的功能分解。解决复杂问题的方法是将其分解成几个小问题,一个个来解决。 (2)提高代码重用性:在面向对象设计中,首先考虑的就是代码的重用,一个好的设计,将来在升级换代时不需要太大的改动,节省了人力物力。 (3)从上而下层层分析:概要设计要从整体出发,逐个剖析软件的功能,从上而下,先分析系统总的功能,然后一步步细分,直到最小的功能模块。 (4)一致性原则:概要设计要求所有功能模块在定义时使用统一的规范。 (5)提高独立性,减少耦合:各个模块与模块之间尽量减少关联,否则修改一个地方就会引起其他多处的变动,不符合面向对象的原则。一般情况下,对类封装后,只允许对类进行扩展,而不能修改,而封装的类必须具有单一职责,既理论情况下不允许两个类共同完成一个功能. (6)模块的大小要尽量适中:不是结构算法越复杂的模块越好,模块的大小要根据实际工作目标和其他类的耦合紧密程度来决定。经验表明,一个模块的规模不应过大,模块的总行数应控制在10~100行的范围内,最好为30~60行,这样理解和阅读都较方便。过长的模块往往是分解不充分的表现,会增加阅读理解的难度;但小规模太多也会使模块之间联系变得复杂,增大系统在模块调用时传递信息所花费的开销。 由于概要设计是整个设计的重中之重,牵一发而动全身,所以要努力做一个好的概要设计,才能在今后软件开发过程中不再反复。现在软件行业流行模式化驱动设计,将一些市场上比较成功的模式拿来用在自己的设计中。 2。2 将用户需求模块化 根据概要设计的原则来分析一下本项目的用户需求,并最终转化成用程序语言描述的模块。什么样的需求才是一个模块?模块应该具备如下3个特征。 (1)输入和输出:模块必须能被调用并且正确的返回调用,而且调用都是相对一个对象而言,这是模块独立性的一个体现. (2)处理功能:模块必须可以对调用的输入数据进行灵活的处理,并为输出准备好处理结果。 (3)程序代码:用来实现模块功能的源代码。 2.3 确定系统最终模块 概要设计中最重要的就是确定此项目包括哪些模块.根据上两节讲述的设计原则和模块特征,将用户需求转化为下面的模块。 **************************************************************************/ 2。4 UML用例图 1 用户登录信息管理 2 用户信息管理 2.5 模块设计 1) 物资信息的添加、修改、删除; 2) 物资信息的查询; 3) 用户的添加、查询、修改; 4) 数据存储数据库中; 三 详细设计 3.1 数据库设计 数据库名称:obj 表adm:存放登陆用户的用户名和密码 表wuliu: 管理员(adm) 字段名 类型 备注 Yid Varchar(30) 员工id Yname Nvarchar(50) 员工姓名 Ysex Nchar(1) 性别 '男’ 或者’女’ Yage int 年龄 〉0 Ym int 员工密码 物资信息表(wuliu) 物资的名称字段名 类型· 备注 OleiNvchar(20) Oname Nvchar(20) 物资的类别 Bid Varchar(30) 员工id Date Varchar(30) 存放日期 Oid Varchar(30) 物资的id Os Varchar(30) 存放者 3。2 模块及窗体设计 3.2.1 数据库模块设计 将数据库的连接包装在一个connect类中,以便其他模块能够轻松调用,避免每次重写数据库连接代码。 代码如下: public class connect { private Connection connection; public connect() { } public Connection sql() { String url = ”jdbc:sqlserver://127.0。0。1:1433;DatabaseName=obj"; String username = "ma”; String password = ”123456”; // Connection ct=null; // 加载驱动程序以连接数据库 try { Class。forName("com。microsoft。sqlserver。jdbc。SQLServerDriver”); connection = DriverManager.getConnection(url, username, password); } // 捕获加载驱动程序异常 catch (Exception e) { System。err.println("装载 JDBC/ODBC 驱动程序失败.”); e.printStackTrace(); System.exit(1); // terminate program } return connection; } public void closeAll(Connection conn, Statement stat, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { // TODO: handle exception e.printStackTrace(); } finally { if (stat != null) { try { stat.close(); } catch (SQLException e) { // TODO: handle exception e.printStackTrace(); } finally { if (conn != null) { try { conn。close(); } catch (SQLException e) { // TODO: handle exception e.printStackTrace(); } } } } } } } } 3.2.2 数据的查询删除功能的封装在Mode和Stable类中 代码如下: public class Mode { private Connection connection; // 连接信息定义 private Statement statement; private ResultSet resultSet; public SQLException zeng(String a){ SQLException s = null; String query=a; try { connect t = new connect(); connection=t。sql(); statement=connection.createStatement(); statement.executeUpdate(query); t.closeAll(connection, statement, resultSet); } catch (SQLException e) { s=e; } return s; } public SQLException change(String a){ SQLException s = null; String query=a; connect t = new connect(); connection=t.sql(); try { statement=connection.createStatement(); statement。executeUpdate(query); } catch (SQLException e) { s=e; } return s; } public SQLException dele(String a){ SQLException s=null; String query=a; connect t = new connect(); connection=t.sql(); try { statement=connection.createStatement(); statement。executeUpdate(query); t.closeAll(connection, statement, resultSet); } catch (SQLException e) { // TODO Auto—generated catch block s=e; } return s; } } Stable类的代码如下: public class Stable { private Connection connection; // 连接信息定义 private Statement statement; private ResultSet resultSet; private ResultSetMetaData rsMetaData; connect t = new connect(); public Stable() { } public Vector getable(String a) { Vector re=new Vector(); connection= t.sql();//封装起来的函数 try { // 执行SQL语句 String query = a; statement = connection.createStatement();//创建一个 Statement 对象来将 SQL 语句发送到数据库 resultSet = statement.executeQuery(query);//数据库表的结果集 返回resultset // 在表格中显示查询结果 re=displayResultSet(resultSet);//****************调用查找表的函数 t.closeAll(connection, statement, resultSet); } catch (SQLException sqlex) { sqlex.printStackTrace(); } return re; } private Vector displayResultSet(ResultSet rs) throws SQLException { // 定位到达第一条记录 此时查询结果已经返回到了结果集中 boolean moreRecords = rs.next(); // 如果没有记录,则提示一条消息 Vector re=new Vector(); Vector columnHeads = new Vector();// 列 向量类 对象 Vector rows = new Vector(); // 在数据库查询的时候是以一行一行查询,带在同一行是是以列查询的拼成一行。 try { // 获取字段的名称 ResultSetMetaData rsmd = rs。getMetaData();//获取此 ResultSet 对象的列的编号、类型和属性。 for (int i = 1; i 〈= rsmd.getColumnCount(); ++i) columnHeads.addElement(rsmd.getColumnName(i)); // 获取记录集 do { rows.addElement(getNextRow(rs, rsmd));// 调用函数 } while (rs.next()); re。addElement(rows); re.addElement(columnHeads); return re; //**************************************** } catch (SQLException sqlex) { sqlex.printStackTrace(); } return rows; } private Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException { Vector currentRow = new Vector();// 行 for (int i = 1; i 〈= rsmd。getColumnCount(); ++i) currentRow.addElement(rs。getString(i)); // 返回一条记录 return currentRow; } } 3。2。3 用户登录识别模块 代码封装在类Land里,所用到的信息保存在表adm里 下表是他的基本属性 判断用户名和密码是否正确的成员方法代码: public class J1 extends JFrame { JLabel J0 = new JLabel(”物流管理系统", JLabel.CENTER); JLabel J1 = new JLabel(”账户:"); JTextField t1 = new JTextField(10); JLabel J2 = new JLabel("密码:"); JPasswordField t2 = new JPasswordField(10); JButton JB0 = new JButton(”登陆"); JButton JB1 = new JButton("重填"); JPanel p[] = new JPanel[4]; JPanel top = new JPanel(); //数据库变量 private Connection connection; private Statement statement; private ResultSet resultSet; connect t = new connect(); J1() { connection= t。sql(); //封装函数 //******************************************************************************************* // new connect();//连接数据库 this。setTitle(”物流管理系统”); this.setSize(500, 400); this。setLocationRelativeTo(null);// 设置窗口启动位置 this。setVisible(true); this。setLayout(new GridLayout(6, 1));// 网格布局 Container con = this。getContentPane(); // 返回一个conterPanel的对象 for (int i = 0; i < 4; i++) { p[i] = new JPanel(); con。add(p[i]); } J0。setFont(new Font("宋体”,Font.BOLD,20)); p[0].add(J0); J0。setBounds(15, 15, 50, 20); p[1].add(J1); J1。setBounds(15, 20, 50, 20); p[1]。add(t1); t1.setBounds(80, 20, 120, 20); p[2].add(J2); J2.setBounds(15, 30, 50, 20); p[2]。add(t2); t2.setBounds(80, 30, 120, 20); p[3].add(JB0); JB0。setBounds(20, 40, 80, 20); p[3]。add(JB1); JB1.setBounds(140, 40, 80, 20); // 事件监听 JB0.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //获取文本框的数据 String a=t1。getText(); @SuppressWarnings("deprecation") String b=t2.getText(); getDate(a,b); } }); JB1。addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub t1.setText(""); t2.setText(”"); } }); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(1); } }); } private void getDate(String a,String b) { try { // 执行SQL语句 String query = ”select *from adm where Yname='"+a+”' and Ypassword=”+b;//拼接查询语句 statement = connection.createStatement(); resultSet = statement。executeQuery(query); // System。out。print(query);测试拼接语 ResultSet rs = resultSet;//返回相应的对象 boolean moreRecords = rs。next(); //查询标志 // 如果没有记录,则提示一条消息 if (!moreRecords) { JOptionPane。showMessageDialog(this, ”没有该账户”); setTitle("登陆错误”); return; }else{ new zhu(); } t。closeAll(connection, statement, resultSet); } catch (SQLException sqlex) { sqlex.printStackTrace(); JOptionPane.showMessageDialog(this, ”没有该账户"); setTitle(”登陆错误"); return; } } public static void main(String args[]) { new J1(); } } 3。2。4用户信息管理模块 (1)用户增加 用户名将自动从表adm里检索出来,供用户选择 以下是它的基本属性 package cn。GUI; public class adminsert extends JFrame { private JLabel biaoti; private JLabel Oid; private JLabel Cunfang; private JLabel leibie; private JLabel mingcheng; private JTextField TOid; private JTextField TCunfang; private JTextField Tleibie; private JTextField Tmingcheng; private JButton add; private JButton cho; private Container con; adminsert() { // TODO Auto-generated constructor stub this.setSize(500, 400); this.setLocationRelativeTo(null); this。setVisible(true); this.setLayout(new GridLayout(7, 1)); biaoti = new JLabel("添加用户信息", JLabel.CENTER); biaoti.setFont(new Font(”宋体", Font.BOLD, 20)); //YuanGongId = new JLabel("员工id:"); Cunfang = new JLabel("姓名: ”); leibie = new JLabel("性别: ”); mingcheng = new JLabel(”年龄: "); Oid = new JLabel("密码: "); //TYuanGongId = new JTextField(10); TCunfang = new JTextField(10); Tleibie = new JTextField(10); Tmingcheng = new JTextField(10); TOid = new JTextField(10); add = new JButton("添加"); cho = new JButton("重填”); con = this.getContentPane(); JPanel p[] = new JPanel[6]; for (int i = 0; i < 6; i++) { p[i] = new JPanel(); con。add(p[i]); setVisible(true); } p[0]。add(biaoti); //p[1]。add(YuanGongId); //p[1]。add(TYuanGongId); p[1].add(Cunfang); p[1]。add(TCunfang); p[2].add(leibie); p[2].add(Tleibie); p[3]。add(mingcheng); p[3]。add(Tmingcheng); p[4]。add(Oid); p[4]。add(TOid); p[5].add(add); p[5]。add(cho); BHandler h = new BHandler(); // 添加事件监听 add.addActionListener(h); cho。addActionListener(h); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(1); } }); } public static void main(String args[]) { //new adminsert(); } public class BHandler implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getSource() == add) { //insert into adm(Yid,Yname,Ysex,Yage,Ypassword) values(3,'cl’,’d’,33,123) String query = ”insert into adm (Yname,Ysex,Yage,Ypassword) values(” + "’" + TCunfang。getText() + "','" + Tleibie。getText() + ”',” + Tmingcheng。getText() + ”," + TOid。getText() + ")”; SQLException s=null; System。out。print(query); try { Mode m = new Mode(); System.out.print(query); s=m。zeng(query); System。out.print(s); JOptionPane.showMessageDialog(con, "增加成功!”); } catch (Exception s1) { JOptionPane。showMessageDialog(con, "增加失败!"); s1。printStackTrace(); } } if(e。getSource()==cho){ TCunfang。setText(””); Tleibie。setText(””); Tmingcheng。setText(""); TOid.setText(”"); } } } } (2)用户信息查询和删除 基本属性如下 package cn.GUI; public class deleteadm extends JFrame { private JTextArea text; private JTextArea text1; private JTextArea text2; private JTable table; private JComboBox list; private JComboBox list1; private JLabel lable; private JLabel lable1; private JLabel lable2; private JButton sub; private JButton ch; private Container con; private String names[] = { ”员工号", ”姓名","查看所有用户" }; // 下拉链表 private Connection connection; // 连接信息定义 private Statement statement; connect t = new connect(); deleteadm () { this.setSize(500, 400); this.setLocationRelativeTo(null); this.setVisible(true); this。setLayout(new BorderLayout()); Container con = this。getContentPane(); lable = new JLabel("选择:"); lable1 = new JLabel("选择:"); lable2 = new JLabel("员工号:"); text = new JTextArea("”, 1, 7); text1 = new JTextArea(””, 1, 7); text2 = new JTextArea("”, 1, 7); sub = new JButton("查询"); ch = new JButton("删除”); list = new JComboBox(names); list1 = new JComboBox(names); list。setMaximumRowCount(3); list1。setMaximumRowCount(3); list。setSelectedIndex(0); list1。setSelectedIndex(0); // 标签 JPanel south = new JPanel();// 下面的面板 JPanel TopPanel = new JPanel(); JPanel north = new JPanel(); north。setBounds(getBounds()); north。add(lable); north.add(list); north.add(text);// 把按钮添加到 SePanel north。add(sub); south。add(lable2); south.add(text2); south.add(ch); table = new JTable();// 表格 con。add(north, BorderLayout。NORTH); con.add(table, BorderLayout。CENTER); con.add(south, BorderLayout.SOUTH); // 事件监听 BHandler h = new BHandler(); sub。addActionListener(h); ch。addActionListener(h); } public static void main(String args[]) { new deleteadm(); } private void getTable(String test) { // 获取表的这一部分封装在了一个类中 Vector getV = new Vector(); Vector rows = new Vector(); Vector columnHeads = new Vector(); Stable s = new Stable(); getV = s。getable(test); // 调用类里的函数 rows = (Vector) getV.get(0); columnHeads = (Vector) getV.get(1); // 可以拆封 // 在表格中显示查询结果 table = new JTable(rows, columnHeads); // 传入两个对象 public 相当与一个泛型数组 // JTable(TableModel dm, // TableColumnModel cm) JScrollPane scroller = new JScrollPane(table);// 可滚动的面板 Container c = getContentPane();// 容器 c。remove(1); c。add(scroller, BorderLayout.CENTER); // 刷新Table c.validate(); // **************************************** } public class BHandler implements ActionListener { public void actionPerformed(ActionEvent e) { if (e。getSource() == sub) { repaint(); map like = new map(); String str = like.ad()。get(list.getSelectedItem())。toString(); String a
展开阅读全文

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


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

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

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

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

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服