当前位置:文档之家› 进销存管理系统

进销存管理系统

课程设计目的《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。

其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。

一.开发背景由于公司发展需要,原有管理系统已不能满足业务需要,需要有更新的进销存管理系统来协助公司进行管理.二.需求分析:公司业务不断发展,原料及产品的进出愈加频繁且中间操作环节更加复杂,原有的管理系统在公司越来越快的发展下已经面临崩溃,仓库的管理需要重新规划,因此需要建立数据库和相配套的高级软件系统来进行管理。

该数据库能够对客户,商品,供应商信息进行添加,删除,修改,同时能够进货,销售,查询,库存,系统等信息进行操作查询;要求本系统应具有以下特点:1.具有良好的系统性能,友好的用户界面.2.较高的处理效率,便于使用和维护.3.采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期.4.系统尽可能简化公司管理的难度,便于提高工作效率.5.简化数据查询,统计难度三:系统目标通过以上需求分析,该系统应达到以下目标.1.界面设计友好,美观2.数据存储安全,可靠3.信息分类清晰,准确4.强大的查询功能,保证数据查询的灵活性5.操作简单6.系统安全,稳定7.占用资源少,对硬件要求低8.提供灵活,方便的权限设置功能,是整个系统那个的管理分工明确系统功能结构进销存管理系统分为6大功能模块,包括基础信息管理,进货管理,销售管理,查询管理,库存管理,系统管理.具体功能模块如下图:图1-1 进销售管理系统功能结构首先画出ER图1-2客户信息实体图:1-3商品信息实体图1-4供应商信息实体图1-5进货单实体图1-6退货单实体图1-7销售单实体图1-8销售退货单实体图1-9库存实体图1-10管理员实体图在access2008画出表之间的关系图:如下图2-1数据库驱动类设计private static String jdbcDrive ="sun.jdbc.odbc.JdbcOdbcDriver";private String strcon = "jdbc:odbc:njue1"; //连接字符串private Connection conn = null; //连接对象private PreparedStatement pstm = null;private CallableStatement cstm = null;* 单态模式获取实例* @return SqlManager对象*/public static SqlManager createInstance(){if (manager == null){manager = new SqlManager();manager.initDB();}return manager;}/*** 初始化连接参数,由指定的DBType生成*/public void initDB(){try{Class.forName(jdbcDrive);}catch (Exception e){System.err.println("initDB Error!" + e.getMessage());e.printStackTrace();}System.out.println("成功加载驱动类!");}/*** 连接数据库*/public void connectDB(){try{conn = DriverManager.getConnection(strcon); // 获取连接conn.setAutoCommit(false); //设置自动提交为false}catch (Exception e){System.err.println("connectDB Error!" + e.getMessage());e.printStackTrace();return;}System.out.println("成功连接到数据库!");}1.登陆窗口图2-2public LoginFrame(){super("进销存管理系统");Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();System.out.println(screenSize);this.setBounds(screenSize.width / 3, screenSize.height / 3, 330, 230);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);submit = new JButton("确定");submit.addActionListener(this);cancel = new JButton("取消");cancel.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});loginLayout();this.setVisible(true);}验证用户名和密码public void actionPerformed(ActionEvent e){String usernameString = username.getText();String passwordString = String.valueOf(password.getPassword());try{if (usernameString.trim().length() == 0){JOptionPane.showMessageDialog(null, "用户名不能为空!","警告",JOptionPane.WARNING_MESSAGE);}elseif (passwordString.trim().length() == 0){JOptionPane.showMessageDialog(null, "密码不能为空!","警告",JOptionPane.WARNING_MESSAGE);}else{OperatorServicesHandler operator = CommonFactory.getOperatorServices();boolean isPass = operator.loginCheck(usernameString,passwordString);if (isPass){ername=usernameString;MainFrame.power=operator.getPower(usernameString);System.out.println(MainFrame.power);MainFrame.getMainFrame().setVisible(true);this.setVisible(false);}else{JOptionPane.showMessageDialog(null, "登陆失败,用户名或密码错误!","警告",JOptionPane.WARNING_MESSAGE);}}}catch(Exception ex){ex.printStackTrace();}}图2-3super("进销存管理系统");JMenuBar menuBar = new JMenuBar();JMenu menu = new JMenu("基础信息管理");menuBar.add(menu);JMenuItem menuItem = new JMenuItem("客户信息管理");menuItem.addActionListener(MainAction.clickCustomerInfoManager());menu.add(menuItem);menuItem = new JMenuItem("商品信息管理");menuItem.addActionListener(MainAction.clickGoodsInfoManager());menu.add(menuItem);menuItem = new JMenuItem("供应商信息管理");menuItem.addActionListener(MainAction.clickProviderInfoManager());menu.add(menuItem);menuBar.add(menu);权限验证if (power.equals("guanliyuan")) //管理员可登陆{menuItem = new JMenuItem("操作员管理");menuItem.addActionListener(MainAction.operaterManager());menu.add(menuItem);}else if(power.equals("caozuoyuan")) //操作员可登陆{}else{JOptionPane.showMessageDialog(null, "非法用户!!!","警告",JOptionPane.WARNING_MESSAGE);System.exit(0);}2.基本信息管理1.客户信息管理查询001号客户图2-4添加002号客户图2-5 图2-6 图2-7如下所示:添加数据前添加数据后客户信息管理窗体设计JPanel addpanel8 = new JPanel();JButton saveButton = new JButton("保存");addpanel8.add(saveButton);保存按钮事件处理设计saveButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if (simple_custoField.getText().trim().length() == 0){JOptionPane.showMessageDialog(null, "客户编号不能为空","警告",JOptionPane.WARNING_MESSAGE);return;}if(custoField.getText().trim().length() == 0){JOptionPane.showMessageDialog(null, "客户全称不能为空!","警告",JOptionPane.WARNING_MESSAGE);return;}CustomerServicesHandler handler = CommonFactory.getCustomerServices();if (handler.isExited(simple_custoField.getText())){JOptionPane.showMessageDialog(null, "客户编号已存在!", "警告",JOptionPane.WARNING_MESSAGE);return;}else{if (handler.addCustomer(newCustomer(simple_custoField.getText(), custoField.getText(),customer_zipField.getText(), customer_addressField.getText(),customer_linktField.getText(),customer_faxField.getText(),customer_linkpField.getText(),customer_linktField.getText(),customer_mailField.getText(),customer_bankField.getText(),customer_bankIDField.getText()))){JOptionPane.showMessageDialog(null, "客户信息添加成功!", "消息",RMATION_MESSAGE);setNull();}else{JOptionPane.showMessageDialog(null,"客户信息添加失败,请按要求输入信息!", "警告",JOptionPane.WARNING_MESSAGE);setNull();}}}});重置按钮事件处理JButton reButton = new JButton("重置");reButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){setNull();}});addpanel8.add(reButton);addPanel.add(addpanel8);tabbedPane.addTab("客户添加信息", addPanel);2.供应商信息管理图2-83.商品信息管理图2-9进货管理1.进货单图2-10添加按钮事件处理JButton addButton = new JButton("添加");addButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Date date=new Date();SimpleDateFormat formate=newSimpleDateFormat("yyyyMMddHHmmss");ID_importtextField.setText("PI"+formate.format(date));formate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");importtimeField.setText(formate.format(date));operaterField.setText(ername);numberField.setText("");setEnableTrue();}});入库按钮事件处理JButton inButton = new JButton("入库");inButton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String inportID=ID_importtextField.getText();String providerID=ID_privoderField.getText();String numberStr=numberField.getText();StringpayType=paytypeComboBox.getSelectedItem().toString();String inportTime=importtimeField.getText();String operator=operaterField.getText();String goodsID=goodsField.getText();String comment=explainField.getText();double price=0;if(numberStr==null||numberStr.trim().length()==0){JOptionPane.showMessageDialog(null,"请输入商品数量","警告",JOptionPane.WARNING_MESSAGE);return;}int number=0;if(paytypeComboBox.getSelectedIndex()==0){JOptionPane.showMessageDialog(null,"请选择支付类型","警告",JOptionPane.WARNING_MESSAGE);return;}price=goodsPrices*number; //计算出总价格PortIn portIn=newPortIn(inportID,providerID,goodsID,payType,number,price,inportTime,operator,comment);PortInServicesHandlehandle=CommonFactory.getPortInServices();if (handle.addPortIn(portIn)){JOptionPane.showMessageDialog(null,"入货单添加成功","警告",JOptionPane.WARNING_MESSAGE);numberField.setText("");setEnableFalse();}else{JOptionPane.showMessageDialog(null,"入货单添加失败,请按要求输入数据","警告",JOptionPane.WARNING_MESSAGE);}}});库存管理图2-11JButton button = new JButton();button.setText("盘点");panel.add(button);button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){GoodsServicesHandler goods=CommonFactory.getGoodsServices();storageGoodses=goods.getAllStorageGoods();System.out.println("共"+storageGoodses.size()+"条记录");if(storageGoodses.size()==0){JOptionPane.showMessageDialog(null,"没有商品","警告",JOptionPane.WARNING_MESSAGE);}else{model.addAllStorageGoods(storageGoodses);}}});价格调整图2-12搜索原价按钮事件处理JButton button = new JButton("搜索原价");button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){if (textField_name.getText().trim().length() == 0){JOptionPane.showMessageDialog(null, "货品ID不能为空!", "消息",RMATION_MESSAGE);}else{GoodsServicesHandler goodsServicesHandler = CommonFactory.getGoodsServices();Goods goods = goodsServicesHandler.getGoodsInfo(textField_name.getText());if(goods.getAvailable()==0){JOptionPane.showMessageDialog(null, "货品不存在!", "消息",RMATION_MESSAGE);}else {textField_price1.setText(String.valueOf(goods.getPrice()));button_sure.setEnabled(true);}}}});确认按钮事件处理button_sure = new JButton("确定");button_sure.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){// TODO Auto-generated method stubif (textField_name.getText().trim().length() == 0|| textField_price2.getText().trim().length() == 0){JOptionPane.showMessageDialog(null, "货品ID或价格不能为空!", "消息",RMATION_MESSAGE);}if (textField_price2.getText().trim().length() != 0){if(!ValidationManager.validatePrice(textField_price2.getText().trim())){JOptionPane.showMessageDialog(null, "商品价格不合法!", "警告",JOptionPane.WARNING_MESSAGE);return;}}GoodsServicesHandler goodsServicesHandler = CommonFactory.getGoodsServices();if (goodsServicesHandler.modifyGoodsPrice(textField_name.getText(),Double.valueOf(textField_price2.getText()))){JOptionPane.showMessageDialog(null, "恭喜你,价格调整成功!", "消息",RMATION_MESSAGE);textField_name.setText("");textField_price1.setText("");textField_price2.setText("");button_sure.setEnabled(false);}else{JOptionPane.showMessageDialog(null, "对不起,价格调整失败!", "消息",RMATION_MESSAGE);}}});系统(用户)管理图2-13change = new JButton("修改");change.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String oldPasswordString = String.valueOf(old_password.getPassword());String newPasswordString = String.valueOf(new_password.getPassword());String rePasswordString = String.valueOf(repassword.getPassword());if (oldPasswordString.trim().length() == 0){JOptionPane.showMessageDialog(null, "旧密码不能为空!", "警告",JOptionPane.WARNING_MESSAGE);}elseif (newPasswordString.trim().length() == 0){JOptionPane.showMessageDialog(null, "新密码不能为空!", "警告",JOptionPane.WARNING_MESSAGE);}else{OperatorServicesHandler operator = CommonFactory.getOperatorServices();if(oldPasswordString.equals(operator.getPassword(ername))){if(newPasswordString.equals(rePasswordString)){operator.modifyPassword(ername, newPasswordString);JOptionPane.showMessageDialog(null,"恭喜你,密码已修改成功!", "消息",RMATION_MESSAGE);dispose();}else{JOptionPane.showMessageDialog(null,"请输入相同新密码!", "警告",JOptionPane.WARNING_MESSAGE);}}else{JOptionPane.showMessageDialog(null, "旧密码不正确!","警告", JOptionPane.WARNING_MESSAGE);}}}});添加操作员图2-14check = new JButton("检测用户名");check.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String loginnameString = text_login_name.getText();if (loginnameString.trim().length() == 0){JOptionPane.showMessageDialog(null, "用户名不能为空", "警告",JOptionPane.WARNING_MESSAGE);}else{OperatorServicesHandler operator = CommonFactory.getOperatorServices();if (operator.isExited(loginnameString)){JOptionPane.showMessageDialog(null, "用户名已存在", "警告",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null, "恭喜你,该用户名可用", "消息",RMATION_MESSAGE);}}}});图2-15sure = new JButton("添加");sure.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String loginnameString = text_login_name.getText();String operatorNameString = text_operator_name.getText();String passwordString = String.valueOf(text_password.getPassword());String repasswordString = String.valueOf(text_repassword.getPassword());String powerString =jcbpower.getSelectedItem().toString();if (loginnameString.trim().length() == 0){JOptionPane.showMessageDialog(null, "用户名不能为空", "警告",JOptionPane.WARNING_MESSAGE);}else if (operatorNameString.trim().length() == 0){JOptionPane.showMessageDialog(null, "姓名不能为空", "警告",JOptionPane.WARNING_MESSAGE);}else if (passwordString.trim().length() == 0){JOptionPane.showMessageDialog(null, "密码不能为空", "警告",JOptionPane.WARNING_MESSAGE);}else if (repasswordString.trim().length() == 0){JOptionPane.showMessageDialog(null, "请输入确定密码", "警告",JOptionPane.WARNING_MESSAGE);}else{if (passwordString.equals(repasswordString)){OperatorServicesHandler addOperator = CommonFactory.getOperatorServices();if (addOperator.isExited(loginnameString)){JOptionPane.showMessageDialog(null, "用户名已存在", "警告",JOptionPane.WARNING_MESSAGE);}elseif (addOperator.addOperator(new Operator(loginnameString, passwordString,operatorNameString, powerString))){JOptionPane.showMessageDialog(null, "恭喜你,添加"+ powerString + "已成功!", "消息",RMATION_MESSAGE);}else{JOptionPane.showMessageDialog(null, "对不起,添加"+ powerString + "失败,请重新输入!", "消息",RMATION_MESSAGE);}}else{JOptionPane.showMessageDialog(null, "两次输入的密码不一致", "警告",JOptionPane.WARNING_MESSAGE);}}}});总结:。

相关主题