《华联超市进销存管理系统-Java期末课程设计.doc》由会员分享,可在线阅读,更多相关《华联超市进销存管理系统-Java期末课程设计.doc(100页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、甘肃政法学院Java课程设计报告题 目 兰州华联超市进销管理系统一.需求分析企业进销存管理系统的主要工作,是对企业的进货、销售和库存以信息化的方式进行管理,最大限度的减少各个环境中可能出现的错误,有效减少盲目采购,降低采购成本、合理控制库存、减少资金占用并提高市场灵敏度,使企业能够合理安排进、销、存的每个关键步骤,替身企业市场竞争力。针对经营管理中存在的问题,兰州华联超市对产品的进销存合理化提出了更高的要求。 通过实际调查,要求企业进销存管理系统具有以下功能。 界面设计美观大方,方便、快捷、操作灵活。实现强大的进销存管理,包括基本信息、进货、销售和库存管理。能够在不同的操作系统下运行,不局限于
2、特定的平台。提供数据库备份与恢复功能。提供库存盘点功能。提供技术支持的联系方式,可以使用邮件进行沟通,或者直接连接到技术网站。二.分析与设计:(1)功能模块划分:本进销存管理系统划分为六个模块,分别为系统登陆模块,系统主窗体设计模块,进货单模块,销售单模块,库存盘点模块和数据库备份与恢复模块,(2)数据库结构描述:企业进销存管理系统需要使用数据库存储和管理进销存过程中的所有信息,本企业进销存管理系统使用SQL Server 2000数据库系统作为后台数据库,数据库名称为db_database28。其中包含了14张数据表两个视图。以下是系统主要涉及的六个数据库表:1供应商信息表:主要用于存储供应
3、商详细信息,其结构如下表所示:tb_gysinfo供应商信息表字段名称数据类型字段大小是否主键说明idvarchar32主键供应商编号namevarchar50供应商名称jcvarchar20供应商简称addressvarchar100供应商地址bianmavarchar10邮政编码telvarchar15电 话faxvarchar15传 真lianvarchar8联 系 人ltelvarchar15联系电话yhvarchar50开户银行mailvarchar50电子信箱2.商品信息表:主要用于存储商品详细信息,其结构如下表所示; tb_spinfo商品信息表字段名称数据类型字段大小是否主键说
4、明idvarchar32主键商品编号spnamevarchar50商品名称jcvarchar30商品简称cdvarchar50产 地dwvarchar10计量单位ggvarchar10商品规格bzvarchar20包 装phvarchar32批 号pzwhvarchar50批准文号memovarchar100备 注gysnamevarchar50供应商名称3.入库主表:主要用于存出入库单据信息,其结构如下表所示: Tb_ru_ku_main入库主表字段名称数据类型字段大小是否主键说明rkIDvachar32主键入库编号pzsfloat8品种数量jemoney8总计金额ysjlvachar50验
5、收结论gysnamevachar100供应商名称rkatedatetime8入库时间czyvachar30操 作 员jsrvachar30经 手 人jsfsvachar10结算方式4.入库明细:主要用于存出入库详细信息,其结构如下表所示: tb_ruku_detail入库明细表字段名称数据类型字段大小是否主键说明idvachar50主键流 水 号rkIDvachar30入库编号spidvachar50商品编号djmoney8单 价slfloat8数 量5.销售主表:主要用于存储销售单据信息,其结构如下表所示: tb_sell_main销售主表字段名称数据类型字段大小是否主键说明sellIDva
6、char30主键销售编号pzsfloat8销售品种数jemoney8总计金额ysjlvachar50验收结论khnamevachar100客户名称xsdatedatetime8销售日期czyvachar30操作员jsrvachar30经手人jsfsvachar10结算方式6.销售明细表:主要用于存储销售详细信息,其结构如下表所示: tb_sell_detail销售明细表字段名称数据类型字段大小是否主键说明idvachar50主键流水号sellIDvachar50销售编号spidvachar50商品编号djMoney8销售单价slfloat8销售数量三.系统详细设计文档:1.系统流程图: (1)
7、系统功能结构图: (2)系统业务流程图: (3)系统中的主要类及功能: 1.Item公共类:Item公共类是对数据表最常用的ID和name属性的封装,属于swing列表,表格,下拉列表框等组件的赋值。该类重写了toString()方法,在该方法中只输出name属性。但是在获取组件的内容时,获取的是Item类的对象,从该对象中可以获取ID的属性,然后通过该属性到数据库中获取唯一的数据。 2.数据模型公共类: 数据模型公共类对应着数据库中不同的数据表,这些模型将被访问数据库的Dao类和程序中各个模块甚至各个组件使用,数据模型是对数据表所有字段的封装,它是纯粹的模型类,他也要重写toString()
8、方法,另外还要重写hashCode()方法和equal()方法。它主要用于存贮数据,并通过相应的getXXX()方法和setXXX()实现不同属性的访问原则。 3.Dao公共类: Dao类实现了数据库的驱动,连接,关闭和多个操作数据库的方法,Dao类不需要创建对象,可以直接调用类中的所有数据库操作方法。Dao类自定义的主要方法有getKhlnfo(Item item)方法,主要是获取客户信息,方法的返回值是tKhlnfo的对象,及客户信息的数据模型。getGyslnfo(Item item)方法,主要是获取供应商信息,返回值是Gyslnfo类的对象,及供应商数据表的模型对象。getSplnfo
9、(Item item)方法,主要用于获取商品信息,返回值是Splnfo类的对象,及商品数据表的数据模型。getLogin(String name,String password)方法主要适用于判断登录用户的用户名与密码是否正确,返回值是boolean类型。insertSelllnfo(TbSellMain sellMain)方法,主要是添加销售信息到数据库中。restoreOrBackup(String sql)方法,此方法是设置数据库的模式为单用户连接模式,这样可以避免数据库恢复或备份时失败。checkLogin(String userStr,String passStr)方法,用于判断登录
10、用户与密码是否正确。(2)各个模块实现方法描述: 1.系统登录模块 实现该模块的主要代码如下 package com.lzw.login;import java.awt.*;import java.awt.event.*;import java.sql.SQLException;import javax.swing.*;import com.lzw.MainFrame;import com.lzw.dao.Dao;public class LoginDialog extends JFrame private static final long serialVersionUID = 1L;pri
11、vate LoginPanel loginPanel = null;private JLabel jLabel = null;private JTextField userField = null;private JLabel jLabel1 = null;private JPasswordField passwordField = null;private JButton loginButton = null;private JButton exitButton = null;private static String userStr;private MainFrame mainFrame;
12、/* param owner */public LoginDialog() try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); mainFrame = new MainFrame(); initialize(); catch (Exception e) e.printStackTrace();/* * 初始化loginPanel登录面板的方法 * * return com.lzw.login.LoginPanel */private LoginPanel getLoginPanel() if (logi
13、nPanel = null) jLabel1 = new JLabel();jLabel1.setBounds(new Rectangle(86, 71, 55, 18);jLabel1.setText(密码:);jLabel = new JLabel();jLabel.setText(用户名:);jLabel.setBounds(new Rectangle(85, 41, 56, 18);loginPanel = new LoginPanel();loginPanel.setLayout(null);loginPanel.setBackground(new Color(0xD8DDC7);l
14、oginPanel.add(jLabel, null);loginPanel.add(getUserField(), null);loginPanel.add(jLabel1, null);loginPanel.add(getPasswordField(), null);loginPanel.add(getLoginButton(), null);loginPanel.add(getExitButton(), null);return loginPanel;/* * This method initializes userField * * return javax.swing.JTextFi
15、eld */private JTextField getUserField() if (userField = null) userField = new JTextField();userField.setBounds(new Rectangle(142, 39, 127, 22);return userField;/* * This method initializes passwordField * * return javax.swing.JPasswordField */private JPasswordField getPasswordField() if (passwordFie
16、ld = null) passwordField = new JPasswordField();passwordField.setBounds(new Rectangle(143, 69, 125, 22);passwordField.addKeyListener(new java.awt.event.KeyAdapter() public void keyTyped(java.awt.event.KeyEvent e) if(e.getKeyChar()=n)loginButton.doClick(););return passwordField;/* * This method initi
17、alizes loginButton * * return javax.swing.JButton */private JButton getLoginButton() if (loginButton = null) loginButton = new JButton();loginButton.setBounds(new Rectangle(109, 114, 48, 20);loginButton.setIcon(new ImageIcon(getClass().getResource(/res/loginButton.jpg);loginButton.addActionListener(
18、new ActionListener() public void actionPerformed(ActionEvent e) try userStr = userField.getText();StringpassStr=new String(passwordField.getPassword();if (!Dao.checkLogin(userStr, passStr) JOptionPane.showMessageDialog(LoginDialog.this,用户名与密码无法登录, 登录失败,JOptionPane.ERROR_MESSAGE);return; catch (Excep
19、tion e1) e1.printStackTrace();MainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mainFrame.setVisible(true);mainFrame.getCzyStateLabel().setText(userStr);setVisible(false););return loginButton;/* * This method initializes exitButton * * return javax.swing.JButton */private JButton getExitButto
20、n() if (exitButton = null) exitButton = new JButton();exitButton.setBounds(new Rectangle(181, 114, 48, 20);exitButton.setIcon(new ImageIcon(getClass().getResource(/res/exitButton.jpg);exitButton.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEv
21、ent e) System.exit(0););return exitButton;/* * 界面初始化方法 * * return void */private void initialize() Dimension size = getToolkit().getScreenSize();setLocation(size.width - 296) / 2, (size.height - 188) / 2);setSize(296, 188);this.setTitle(系统登录);setContentPane(getLoginPanel();public String getUserStr()
22、 return userStr; / jve:decl-index=0:visual-constraint=10,10运行结果如下: 2.主窗体模块主要实现代码如下:package com.lzw;import java.awt.*;import java.util.Date;import javax.swing.*;import javax.swing.border.BevelBorder;import com.lzw.login.LoginDialog;public class MainFrame extends JFrame private static final long seria
23、lVersionUID = 1L;private JPanel frameContentPane = null;private MenuBar frameMenuBar = null;private ToolBar toolBar = null;private DesktopPanel desktopPane = null;private JPanel statePanel = null;private JLabel stateLabel = null;private JLabel nameLabel = null;private JLabel nowDateLabel = null;priv
24、ate JSeparator jSeparator1 = null;private static JLabel czyStateLabel = null;private JSeparator jSeparator2 = null;/* * This method initializes jJToolBarBar * * return javax.swing.JToolBar */private ToolBar getJJToolBarBar() if (toolBar = null) toolBar = new ToolBar(getFrameMenuBar();toolBar.setCurs
25、or(new Cursor(Cursor.HAND_CURSOR);return toolBar;/* * 初始化窗体菜单栏的方法 * * return javax.swing.JMenuBar */protected MenuBar getFrameMenuBar() if (frameMenuBar = null) frameMenuBar = new MenuBar(getDesktopPane(), getStateLabel();return frameMenuBar;/* * This method initializes desktopPane * * return javax.
26、swing.JDesktopPane */private DesktopPanel getDesktopPane() if (desktopPane = null) desktopPane = new DesktopPanel();return desktopPane;/* * This method initializes statePanel * * return javax.swing.JPanel */private JPanel getStatePanel() if (statePanel = null) GridBagConstraints gridBagConstraints6
27、= new GridBagConstraints();gridBagConstraints6.gridx = 2;gridBagConstraints6.fill = GridBagConstraints.VERTICAL;gridBagConstraints6.insets = new Insets(0, 5, 0, 5);gridBagConstraints6.gridy = 0;GridBagConstraints gridBagConstraints4 = new GridBagConstraints();gridBagConstraints4.gridx = 3;gridBagCon
28、straints4.gridy = 0;GridBagConstraints gridBagConstraints3 = new GridBagConstraints();gridBagConstraints3.gridx = 6;gridBagConstraints3.fill = GridBagConstraints.VERTICAL;gridBagConstraints3.insets = new Insets(0, 5, 0, 5);gridBagConstraints3.gridy = 0;GridBagConstraints gridBagConstraints11 = new G
29、ridBagConstraints();gridBagConstraints11.gridx = 5;gridBagConstraints11.insets = new Insets(0, 5, 0, 5);gridBagConstraints11.gridy = 0;nowDateLabel = new JLabel();Date now = new Date();nowDateLabel.setText(String.format(%tF, now);GridBagConstraints gridBagConstraints2 = new GridBagConstraints();grid
30、BagConstraints2.gridx = 7;gridBagConstraints2.weightx = 0.0;gridBagConstraints2.fill = GridBagConstraints.NONE;gridBagConstraints2.gridy = 0;nameLabel = new JLabel(吉林省铭泰有限公司 );GridBagConstraints gridBagConstraints1 = new GridBagConstraints();gridBagConstraints1.gridx = 4;gridBagConstraints1.fill = G
31、ridBagConstraints.VERTICAL;gridBagConstraints1.weighty = 1.0;gridBagConstraints1.insets = new Insets(0, 5, 0, 5);gridBagConstraints1.gridy = 0;GridBagConstraints gridBagConstraints = new GridBagConstraints();gridBagConstraints.gridx = 0;gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;gridBag
32、Constraints.weightx = 1.0;gridBagConstraints.gridy = 0;statePanel = new JPanel();statePanel.setLayout(new GridBagLayout();statePanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED);statePanel.add(getStateLabel(), gridBagConstraints);statePanel.add(getJSeparator(),gridBagConstraints1);s
33、tatePanel.add(nameLabel, gridBagConstraints2);statePanel.add(getJSeparator1(),gridBagConstraints3);statePanel.add(nowDateLabel, gridBagConstraints11);statePanel.add(getCzyStateLabel(), gridBagConstraints4);statePanel.add(getJSeparator2(),gridBagConstraints6)return statePanel;public static JLabel get
34、CzyStateLabel() if (czyStateLabel = null) czyStateLabel = new JLabel(操作员:);return czyStateLabel;public JLabel getStateLabel() if (stateLabel = null) stateLabel = new JLabel();stateLabel.setText(当前没有选定窗体);return stateLabel;/* * This method initializes jSeparator * * return javax.swing.JSeparator */ p
35、rivate JSeparator getJSeparator() JSeparator jSeparator = new JSeparator();jSeparator.setOrientation(JSeparator.VERTICAL);return jSeparator;/* * This method initializes jSeparator1 * * return javax.swing.JSeparator */private JSeparator getJSeparator1() if (jSeparator1 = null) jSeparator1 = new JSepa
36、rator();jSeparator1.setOrientation(SwingConstants.VERTICAL);return jSeparator1;/* * This method initializes jSeparator2 * * return javax.swing.JSeparator */private JSeparator getJSeparator2() if (jSeparator2 = null) jSeparator2 = new JSeparator();jSeparator2.setOrientation(SwingConstants.VERTICAL)re
37、turn jSeparator2;/* * param args */public static void main(String args) SplashScreen splashScreen = SplashScreen.getSplashScreen();if(splashScreen!=null)try JFrame login = new LoginDialog();login.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Thread.sleep(3000);login.setVisible(true); catch (Interru
38、ptedException e) /* * This is the default constructor */public MainFrame() super();initialize();/* * This method initializes this * * return void */private void initialize() this.setSize(800, 600);this.setJMenuBar(getFrameMenuBar();this.setContentPane(getFrameContentPane();this.setTitle(华联超市进销存管理系统)
39、;/* * This method initializes frameContentPane * * return javax.swing.JPanel */private JPanel getFrameContentPane() if (frameContentPane = null) frameContentPane = new JPanel();frameContentPane.setLayout(new BorderLayout();frameContentPane.add(getStatePanel(), BorderLayout.SOUTH);frameContentPane.ad
40、d(getJJToolBarBar(), BorderLayout.NORTH);frameContentPane.add(getDesktopPane(), BorderLayout.CENTER);return frameContentPane; / jve:decl-index=0:visual-constraint=6,-5运行界面如下: 3.进货单模块 实现代码如下: package com.lzw.iframe;import java.awt.*;import java.awt.event.*;import java.beans.PropertyChangeListener;imp
41、ort java.sql.*;import java.util.*;import java.util.Date;import java.util.List;import javax.swing.*;import javax.swing.border.BevelBorder;import javax.swing.table.*;import com.lzw.*;import com.lzw.dao.Dao;import com.lzw.dao.model.*;public class JinHuoDan_IFrame extends JInternalFrame private JPanel jContentPane = null;private JPanel topPanel = null;private JLabel idLabel = null;private JTextField idField = null;private JLabel gysLabel = null;private JLabel lxrLabel = null;private JTextField lxrField = null;private JLabel jsfsLabel = null;private JComboBox jsfsCo