物资管理系统

上传人:xuex****hao 文档编号:167898740 上传时间:2022-11-06 格式:DOC 页数:39 大小:426.50KB
收藏 版权申诉 举报 下载
物资管理系统_第1页
第1页 / 共39页
物资管理系统_第2页
第2页 / 共39页
物资管理系统_第3页
第3页 / 共39页
资源描述:

《物资管理系统》由会员分享,可在线阅读,更多相关《物资管理系统(39页珍藏版)》请在装配图网上搜索。

1、JAVA程序设计课程设计报告 设计题目: 物资管理系统设计与实现 学院名称: 信息工程学院 专业班级: 姓 名: 学 号: 13122102 目录目录一 需求分析2二 概要设计22.1 概要设计的原则22.2 将用户需求模块化32.3 确定系统最终模块32.4 UML用例图32.5 模块设计4三 详细设计53.1 数据库设计53.2 模块及窗体设计63.2.1 数据库模块设计6一 需求分析 本系统的主要目的就是对物资管理的快捷管理以及对数据信息的显示,存放的日期显示所有者等。二 概要设计概要设计阶段主要是粗略描述整个软件的框架,并从业务的角度描述软件的模块、工作流程等。项目的成功取决于设计的好

2、坏,而概要设计则是整个设计的关键部分。概要设计的主要任务是将用户的需求划分为不同的功能,然后将这些功能细分成模块,并给模块一些规则约束,以达到各个模块之间可以相互交流的目的。概要设计关乎到系统的整体架构,因此想做好一个概要设计,不仅仅要熟悉用户的业务流程,还要具备相当丰富的设计经验。2.1 概要设计的原则概要设计是根据系统分析的需求和工作环境的情况对整个软件的总体结构进行大致的设计。概要设计要坚持以下几个原则。(1)细分原则:软件系统都是由很多不同的模块组成,当设计一套软件时,要先将所有的功能分解。解决复杂问题的方法是将其分解成几个小问题,一个个来解决。(2)提高代码重用性:在面向对象设计中,

3、首先考虑的就是代码的重用,一个好的设计,将来在升级换代时不需要太大的改动,节省了人力物力。(3)从上而下层层分析:概要设计要从整体出发,逐个剖析软件的功能,从上而下,先分析系统总的功能,然后一步步细分,直到最小的功能模块。(4)一致性原则:概要设计要求所有功能模块在定义时使用统一的规范。(5)提高独立性,减少耦合:各个模块与模块之间尽量减少关联,否则修改一个地方就会引起其他多处的变动,不符合面向对象的原则。一般情况下,对类封装后,只允许对类进行扩展,而不能修改,而封装的类必须具有单一职责,既理论情况下不允许两个类共同完成一个功能。(6)模块的大小要尽量适中:不是结构算法越复杂的模块越好,模块的

4、大小要根据实际工作目标和其他类的耦合紧密程度来决定。经验表明,一个模块的规模不应过大,模块的总行数应控制在10100行的范围内,最好为3060行,这样理解和阅读都较方便。过长的模块往往是分解不充分的表现,会增加阅读理解的难度;但小规模太多也会使模块之间联系变得复杂,增大系统在模块调用时传递信息所花费的开销。由于概要设计是整个设计的重中之重,牵一发而动全身,所以要努力做一个好的概要设计,才能在今后软件开发过程中不再反复。现在软件行业流行模式化驱动设计,将一些市场上比较成功的模式拿来用在自己的设计中。2.2 将用户需求模块化根据概要设计的原则来分析一下本项目的用户需求,并最终转化成用程序语言描述的

5、模块。什么样的需求才是一个模块?模块应该具备如下3个特征。(1)输入和输出:模块必须能被调用并且正确的返回调用,而且调用都是相对一个对象而言,这是模块独立性的一个体现。(2)处理功能:模块必须可以对调用的输入数据进行灵活的处理,并为输出准备好处理结果。(3)程序代码:用来实现模块功能的源代码。2.3 确定系统最终模块概要设计中最重要的就是确定此项目包括哪些模块。根据上两节讲述的设计原则和模块特征,将用户需求转化为下面的模块。*/2.4 UML用例图1 用户登录信息管理2 用户信息管理2.5 模块设计1) 物资信息的添加、修改、删除;2) 物资信息的查询;3) 用户的添加、查询、修改;4) 数据

6、存储数据库中;三 详细设计3.1 数据库设计数据库名称:obj表adm:存放登陆用户的用户名和密码表wuliu:管理员(adm)字段名类型备注YidVarchar(30)员工idYnameNvarchar(50)员工姓名YsexNchar(1)性别男 或者女Yageint年龄0Ymint员工密码物资信息表(wuliu)物资的名称字段名类型备注OleiNvchar(20)OnameNvchar(20)物资的类别BidVarchar(30)员工idDateVarchar(30)存放日期OidVarchar(30)物资的idOsVarchar(30)存放者3.2 模块及窗体设计3.2.1 数据库模块

7、设计将数据库的连接包装在一个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.

8、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 programreturn connection;public void closeAll(Connection co

9、nn, Statement stat, ResultSet rs) if (rs != null) try rs.close(); catch (SQLException e) / TODO: handle exceptione.printStackTrace(); finally if (stat != null) try stat.close(); catch (SQLException e) / TODO: handle exceptione.printStackTrace(); finally if (conn != null) try conn.close(); catch (SQL

10、Exception e) / TODO: handle exceptione.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 co

11、nnect();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

12、 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.cl

13、oseAll(connection, statement, resultSet); catch (SQLException e) / TODO Auto-generated catch blocks=e;return s;Stable类的代码如下:public class Stable private Connection connection; / 连接信息定义private Statement statement;private ResultSet resultSet;private ResultSetMetaData rsMetaData;connect t = new connect(

14、);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(r

15、esultSet);/*调用查找表的函数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 c

16、olumnHeads = 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

17、(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 =

18、 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 JTextFie

19、ld(10);JLabel J2 = new JLabel(密码:);JPasswordField t2 = new JPasswordField(10);JButton JB0 = new JButton(登陆);JButton JB1 = new JButton(重填);JPanel p = new JPanel4;JPanel top = new JPanel();/数据库变量private Connection connection;private Statement statement;private ResultSet resultSet;connect t = new conne

20、ct();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+) pi = n

21、ew JPanel();con.add(pi);J0.setFont(new Font(宋体,Font.BOLD,20);p0.add(J0);J0.setBounds(15, 15, 50, 20);p1.add(J1);J1.setBounds(15, 20, 50, 20);p1.add(t1);t1.setBounds(80, 20, 120, 20);p2.add(J2);J2.setBounds(15, 30, 50, 20);p2.add(t2);t2.setBounds(80, 30, 120, 20);p3.add(JB0);JB0.setBounds(20, 40, 80,

22、 20);p3.add(JB1);JB1.setBounds(140, 40, 80, 20);/ 事件监听JB0.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stub/获取文本框的数据String a=t1.getText();SuppressWarnings(deprecation)String b=t2.getText();getDate(a,b););JB1.addActionListener(

23、new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stubt1.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

24、= 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.showMessage

25、Dialog(this, 没有该账户);setTitle(登陆错误);return;elsenew 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里检索出

26、来,供用户选择以下是它的基本属性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 JBu

27、tton add;private JButton cho;private Container con;adminsert() / TODO Auto-generated constructor stubthis.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)

28、;/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 J

29、Button(添加);cho = new JButton(重填);con = this.getContentPane();JPanel p = new JPanel6;for (int i = 0; i 6; i+) pi = new JPanel();con.add(pi);setVisible(true);p0.add(biaoti);/p1.add(YuanGongId);/p1.add(TYuanGongId);p1.add(Cunfang);p1.add(TCunfang);p2.add(leibie);p2.add(Tleibie);p3.add(mingcheng);p3.add

30、(Tmingcheng);p4.add(Oid);p4.add(TOid);p5.add(add);p5.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 adminser

31、t();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()+

32、 ,+ 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.printStackTrac

33、e();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 JComboBo

34、x 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(5

35、00, 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);

36、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 JPane

37、l();north.setBounds(getBounds();north.add(lable);north.add(list);north.add(text);/ 把按钮添加到 SePanelnorth.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);/ 事件监听BH

38、andler 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 =

39、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()

40、;/ 容器c.remove(1);c.add(scroller, BorderLayout.CENTER);/ 刷新Tablec.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 = te

41、xt.getText();String test;/ String query =/ select *from adm where name=+a+ and pass=+b;/拼接查询语句/ 到这里就剩下拼接字符串了if ( str = Yid) test = select* from adm where + str + = + a; else if(str=*)test = select* from adm; else test = select* from adm where + str + = + a + ;/ System.out.print(test);getTable(test);

42、if (e.getSource() = ch) connection = t.sql();/ 封装起来的函数/ delete from wuliu where Oid=6String query = delete from adm where Yid= + text2.getText();try Mode m = new Mode();m.dele(query);JOptionPane.showMessageDialog(con, 删除成功!); catch (Exception e2) JOptionPane.showMessageDialog(con, 删除失败!);e2.printSta

43、ckTrace();3.2.5 物理信息查询模块(1)添加信息 代码如下:package cn.GUI;public class zengjia extends JFrame private JLabel biaoti;private JLabel YuanGongId;private JLabel Oid;private JLabel Cunfang;private JLabel leibie;private JLabel mingcheng;private JTextField TYuanGongId;private JTextField TOid;private JTextField T

44、Cunfang;private JTextField Tleibie;private JTextField Tmingcheng; private JButton add;private JButton cho;private Container con;zengjia() this.setSize(500, 400);this.setLocationRelativeTo(null);this.setVisible(true);this.setLayout(new GridLayout(7, 1);biaoti=new JLabel(添加信息,JLabel.CENTER);biaoti.set

45、Font(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(1

46、0);add=new JButton(添加);cho=new JButton(重填);con=this.getContentPane();JPanel p=new JPanel7;for(int i=0;i7;i+)pi=new JPanel();con.add(pi);setVisible(true);p0.add(biaoti);p1.add(Oid);p1.add(TOid);p2.add(YuanGongId);p2.add(TYuanGongId);p3.add(Cunfang);p3.add(TCunfang);p4.add(leibie);p4.add(Tleibie);p5.a

47、dd(mingcheng);p5.add(Tmingcheng);p6.add(add);p6.add(cho);BHandler h=new BHandler(); /添加事件监听add.addActionListener(h);cho.addActionListener(h);public static void main(String args) new zengjia();public class BHandler implements ActionListenerOverridepublic void actionPerformed(ActionEvent e) if(e.getSo

48、urce()=add)String query =insert into wuliu(Oid,Bid,Oname,Olei,Os) values(+TOid.getText()+,+TYuanGongId.getText()+,+Tmingcheng.getText()+,+Tleibie.getText()+,+TCunfang.getText()+);/Sql语句try Mode m=new Mode();m.zeng(query);JOptionPane.showMessageDialog(con, 增加成功!); catch (Exception e1) JOptionPane.sho

49、wMessageDialog(con, 增加失败!);e1.printStackTrace();if(e.getSource()=cho)TCunfang.setText();Tleibie.setText();Tmingcheng.setText();TOid.setText();TYuanGongId.setText();(2)信息查看下面是它的代码:package cn.GUI;public class search extends JFrame / *private JTextArea text;private JTable table;private JComboBox list;p

50、rivate JLabel lable;private JButton sub;private String names = 员工号, 运单号, 物品, 种类, 员工姓名, 查询所有 ;search() / *this.setSize(500, 400);this.setLocationRelativeTo(null);this.setVisible(true);Container con = this.getContentPane();/ 创建 container/ 碰到一个有趣的问题lable = new JLabel(选择:);text = new JTextArea(1, 7); /

51、ceishisub = new JButton(查询);/ 事件监听BHandler h = new BHandler(); / 添加事件监听sub.addActionListener(h);list = new JComboBox(names);list.setMaximumRowCount(3);list.setSelectedIndex(0);/ 标签JPanel TopPanel = new JPanel();JPanel SePanel = new JPanel();TopPanel.setLayout(new BorderLayout();TopPanel.add(SePanel);SePanel.setBounds(getBounds();SePanel.add(lable);SePanel.add(list);SePanel.add(text);/ 把按钮添加到 SePanelSePanel

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!