




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库课程设计报告题目:进销存管理系统课程代号: 课程名称:数据库课程设计学号: 姓名: 班级: 指导教师: 完成日期: 目录第一章 引言11.1 设计背景11.2 任务及目标11.3 软硬件环境1第二章 系统分析与设计22.1 系统总体结构设计22.2 数据库概念结构设计32.3 数据库逻辑结构设计52.4 数据库创建10第三章 系统开发及实现133.1 数据持久化 DAO层133.2 实体对象类 JavaBean层163.3 主窗体设计及swing图形开发173.4 基础信息管理模块203.5 进货管理模块 销售管理模块233.6 查询统计模块243.7 库存管理模块 系统管理模块25第四
2、章 总结27参考文献28附录29第一章 引言1.1 设计背景企业信息化管理是现代企业稳步发展的必要条件,而进销存管理系统是企业管理中的重要组成部分,它可以完成进货、销售、库存管理等各项业务,极大的提高企业效率,解放繁杂的计算工作,减少手工操作带来的失误。1.2 任务及目标设计计划达到如下功能和标准:1)支持 顾客、商品、供货商、系统用户等基本信息的管理。2)退货功能。3)进货记录,销售记录,退货记录,库存情况的查询统计和导出。4)支持多用户登录。5)系统操作简单,界面友好。6)保证数据安全,发生意外时可以备份和找回。1.3 软硬件环境Windows 7 64bit操作系统、Microsoft
3、SQL server 2000、 jdk 1.7运行环境Eclipse开发环境 第二章 系统分析与设计2.1 系统总体结构设计基于对本设计功能的分析,共分六个模块,27点功能。得出以下系统总体结构图:而后基于swing图形界面,界面设计如下2.2 数据库概念结构设计本系统中涉及到的对象实体有:系统用户、顾客、商品、供货商、进货单、销售单等。他们之间有进购、销售等各种联系。实体联系图(E-R图)如下:供货商Id名称地址电话电子邮件供货单供货退货单Id时间总价支付方式Id时间总价支付方式商品名称Id产地计量单位规格型号存量简介销售单销售退货单Id时间总价支付方式Id时间总价支付方式顾客Id
4、0;地址电话电子邮件名称系统用户用户名密码2.3 数据库逻辑结构设计由E-R图经过转换和BCNF约束,生成关系图。其中的关系模式和约束如下给出:l 商品信息tb_spinfo(id,商品名,简称,产地,单位,规格,包装,商品号,介绍,供应商)主键 id 外键 无l 库存信息tb_kucun(id, 商品名,进货价,卖价, 库存数量)主键 id 外键 id 依赖 商品表的 idl 用户表tb_userlist(用户名,密码,权限)主键 username 外键 无l 供应商信息tb_gysinfo(id,名称,简称,地址,编码,电话,传真,联系人,联系人电话,电子邮件)主键id 外键 无l 入库单
5、tb_ruku_main(rukuID,供应商id,时间,操作员,验收结论,支付方式)主键 入库单id外键 供应商id 依赖 供应商表的idl 入库单详情tb_ruku_detail(id,入库单id,商品id,单价,数量)主键 id外键 入库单id依赖 入库单id商品id依赖 商品表idl 入库退货单tb_rkth_main()主键 rkthID外键 供应商id 依赖供应商表idl 入库退货详情tb_rkth_detail(id,入库退货单id,商品id,单价,数量)主键 id外键 入库退货单id 依赖入库退货id商品id 依赖商品表idl 客户信息tb_khinfo(id,名称,简称,地址
6、,邮编,电话,传真,联系人,联系人电话,电子邮件)主键 id外键 无l 销售单tb_sell_main(id,客户id,总价,验收结论,销售时间,结算方式)主键 id外键 客户id 依赖客户表idl 销售详情tb_sell_detail(id,销售单id,商品id,单价,数量)主键 id外键 sellid依赖销售单idspid依赖商品表idl 销售退货单tb_xsth_main(id,客户id,总价,验收结论,时间,结算方式)主键id外键 khid依赖客户表idl 销售退货详情tb_xsth_detail(id,销售退货单id,商品id,单价,数量)主键 id外键 xsthID依赖 销售退货单
7、idspid依赖商品表id2.4 数据库创建在powerdesigner中选择目标DBMS为SQLserver 2000生成数据库脚本。其中部分摘录如下:l 检查是否已经存在表结构和索引,若有删除if exists (select 1 from sysobjects where id = object_id('dbo.tb_khinfo') and type = 'U') drop table dbo.tb_khinfogoif exists (select 1 from dbo.sysreferences r join dbo.sysobjects o on
8、(o.id = r.constid and o.type = 'F')where r.fkeyid = object_id('dbo.tb_xsth_main') and = 'FK_TB_XSTH_REFERENCE_TB_KHINF')alter table dbo.tb_xsth_main drop constraint FK_TB_XSTH_REFERENCE_TB_KHINFgol 建表语句/*=*/* Table: tb_gysinfo */*=*/create table dbo.tb_gysinfo ( id var
9、char(50) not null, name varchar(60) null, jc varchar(50) null, address varchar(100) null, bianma varchar(50) null, tel varchar(50) null, fax varchar(50) null, lian varchar(50) null, ltel varchar(50) null, yh varchar(50) null, mail varchar(50) null, constraint PK_tb_gysinfo primary key (id)go/*=*/* T
10、able: tb_khinfo */*=*/create table dbo.tb_khinfo ( id varchar(50) not null, khname varchar(50) null, jian varchar(50) null, address varchar(100) null, bianma varchar(50) null, tel varchar(50) null, fax varchar(50) null, lian varchar(50) null, ltel varchar(50) null, mail varchar(50) null, xinhang var
11、char(60) null, hao varchar(60) null, constraint PK_tb_khinfo primary key (id)go/*=*/* Table: tb_kucun */*=*/create table dbo.tb_kucun ( id varchar(30) not null, spname varchar(50) not null, jc varchar(25) null, cd varchar(50) null, gg varchar(50) null, bz varchar(50) null, dw varchar(10) null, dj mo
12、ney null, kcsl int null, constraint PK_tb_kucun primary key (id)gol 增加外键关系alter table dbo.tb_kucun add constraint FK_TB_KUCUN_REFERENCE_TB_SPINF foreign key (id) references dbo.tb_spinfo (id)goalter table dbo.tb_rkth_detail add constraint FK_tb_rkth_detail_tb_rkth_main foreign key (rkthID) reference
13、s dbo.tb_rkth_main (rkthID) on delete cascadegoalter table dbo.tb_rkth_detail add constraint FK_TB_RKTH_REFERENCE_TB_SPINF foreign key (spid) references dbo.tb_spinfo (id)go第三章 系统开发及实现3.1 数据持久化 DAO层为了便于管理以及代码解耦,需要将所有与数据库操作有关的内容抽象出来,放在Dao类中,由其对外提供接口。其主要功能和方法如下:l 连接数据库使用jdbc的方式连接数据库。在Dao类第一次被加载时初始化如下代
14、码:(其中的静态字符串为驱动器类名,数据库url,数据库名,登录用户,密码)protected static String dbClassName = ""protected static String dbUrl = "jdbc:microsoft:sqlserver:/localhost:1433;"+ "DatabaseName=db_JXC;SelectMethod=Cursor"protected static String dbUser = "sa"protected static String dbP
15、wd = ""protected static String second = null;public static Connection conn = null;private static void init()try if (conn = null) Class.forName(dbClassName).newInstance();conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); catch (Exception ee) ee.printStackTrace();l 封装 增、删、改、查 的方法使用初始
16、化时得到的连接 conn 进行增删改查等各种语句的执行。1. public static boolean insert(String sql) boolean result = false;try Statement stmt = conn.createStatement();result = stmt.execute(sql); catch (SQLException e) e.printStackTrace();return result;2. public static int update(String sql) int result = 0;try Statement stmt =
17、conn.createStatement();result = stmt.executeUpdate(sql); catch (SQLException e) e.printStackTrace();return result;3. public static List findForList(String sql) List<List> list = new ArrayList<List>();ResultSet rs = findForResultSet(sql);try ResultSetMetaData metaData = rs.getMetaData();i
18、nt colCount = metaData.getColumnCount();while (rs.next() List<String> row = new ArrayList<String>();for (int i = 1; i <= colCount; i+) String str = rs.getString(i);if (str != null && !str.isEmpty()str = str.trim();row.add(str);list.add(row); catch (Exception e) e.printStackTra
19、ce();return list;l 封装具体的操作方法使用之前封装好的增删改查的方法,来完成系统中对数据操作的实际需求,如查询客户信息,增加商品,进货等。1. / 读取客户信息public static TbKhinfo getKhInfo(Item item) String where = "khname='" + item.getName() + "'"if (item.getId() != null)where = "id='" + item.getId() + "'"TbK
20、hinfo info = new TbKhinfo();ResultSet set = findForResultSet("select * from tb_khinfo where "+ where);try if (set.next() info.setId(set.getString("id").trim();info.setKhname(set.getString("khname").trim();info.setJian(set.getString("jian").trim();info.setAddre
21、ss(set.getString("address").trim();info.setBianma(set.getString("bianma").trim();info.setFax(set.getString("fax").trim();info.setHao(set.getString("hao").trim();info.setLian(set.getString("lian").trim();info.setLtel(set.getString("ltel").tr
22、im();info.setMail(set.getString("mail").trim();info.setTel(set.getString("tel").trim();info.setXinhang(set.getString("xinhang").trim(); catch (SQLException e) e.printStackTrace();return info;2. / 添加商品public static boolean addSp(TbSpinfo spInfo) if (spInfo = null)return
23、false;return insert("insert tb_spinfo values('" + spInfo.getId() + "','"+ spInfo.getSpname() + "','" + spInfo.getJc() + "','"+ spInfo.getCd() + "','" + spInfo.getDw() + "','"+ spInfo.getGg() + &qu
24、ot;','" + spInfo.getBz() + "','"+ spInfo.getPh() + "','" + spInfo.getPzwh() + "','"+ spInfo.getMemo() + "','" + spInfo.getGysname() + "')");3.2 实体对象类 JavaBean层注意到上面Dao层方法的用到的参数和返回类型,如Item类,TbSPinfo等。这就
25、是实体对象类,即javaBean,将实体的各种属性封装起来,便于dao层与逻辑层交换数据。类中只有实体的各种属性,以及getter和setter方法。这样做的好处是大大的减少了相关代码的重复,降低复杂性,易于编写、维护。本系统中用到的bean如下:举例来说 其中TbSpinfo.java如下:正如所见的的,类中的属性与数据库中这个实体的属性基本对应,类中的方法则是get和set方法。3.3 主窗体设计及swing图形开发本系统基于java swing开发了图形界面, 现将就主界面开发进行详细介绍,之后其余模块的图形界面开发不在累述。1. 创建主窗体Swing中通过继承或直接使用JFrame类来
26、实现窗口的功能。并使用JFrame类的方法来设置窗口的各种属性,如标题 大小 位置 布局等。代码如下:public JXCFrame() frame = new JFrame("进销存管理系统");frame.getContentPane().setBackground(new Color(170, 188, 120);frame.addComponentListener(new FrameListener();frame.getContentPane().setLayout(new BorderLayout();frame.setBounds(100, 100, 800,
27、 600);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);backLabel = new JLabel();/ 背景标签backLabel.setVerticalAlignment(SwingConstants.TOP);backLabel.setHorizontalAlignment(SwingConstants.CENTER);updateBackImage(); / 更新或初始化背景图片desktopPane = new JDesktopPane();desktopPane.add(backLabel, new Integer(
28、Integer.MIN_VALUE);frame.getContentPane().add(desktopPane);JTabbedPane navigationPanel = createNavigationPanel();frame.getContentPane().add(navigationPanel, BorderLayout.NORTH);frame.setVisible(true);其中调用了updateBackImage()方法来更改背景图片,其代码如下:private void updateBackImage() if (backLabel != null) int back
29、w = JXCFrame.this.frame.getWidth();int backh = frame.getHeight();backLabel.setSize(backw, backh);backLabel.setText("<html><body><image width='" + backw+ "' height='" + (backh - 110) + "' src="+ JXCFrame.this.getClass().getResource("we
30、lcome.jpg")+ "'></img></body></html>");然后调用createNavigationPanel()来创建导航标签面板。在swing中使用JTabbedPane来表现标签导航面板:JTabbedPane tabbedPane = new JTabbedPane();tabbedPane.setFocusable(false);tabbedPane.setBackground(new Color(211, 230, 192);tabbedPane.setBorder(new Bevel
31、Border(BevelBorder.RAISED);使用JPanel来表现基础信息管理、进货管理、销售管理、查询统计、库存管理、系统管理共六个面板:JPanel baseManagePanel = new JPanel();在各个JPanel中添加各自所需内容和组件:baseManagePanel.setBackground(new Color(215, 223, 194);baseManagePanel.setLayout(new BoxLayout(baseManagePanel,BoxLayout.X_AXIS);baseManagePanel.add(createFrameButto
32、n("客户信息管理","KeHuGuanLi");baseManagePanel.add(createFrameButton("商品信息管理","ShangPinGuanLi");baseManagePanel.add(createFrameButton("供应商信息管理", GysGuanLi");最后将六个标签面板添加到主窗体中:tabbedPane.addTab(" 基础信息管理 ", null, baseManagePanel, "基础信息管理&q
33、uot;);tabbedPane.addTab(" 进货管理 ", null, stockManagePanel, "进货管理");tabbedPane.addTab(" 销售管理 ", null, sellManagePanel, "销售管理");tabbedPane.addTab(" 查询统计 ", null, searchStatisticPanel, "查询统计");tabbedPane.addTab(" 库存管理 ", null, depotMa
34、nagePanel, "库存管理");tabbedPane.addTab(" 系统管理 ", null, sysManagePanel, "系统管理");最终实现的图形界面效果如下:2. 事件处理swing中使用监听器来进行事件的监听和处理,实现ActionListener接口并重写其中的ActionPerformed方法,然后在相应的组件上添加这个监听器即可实现事件处理的功能。如 修改供应商信息的按钮的事件处理方式如下:编写ActionListener类:class ModifyActionListener implements A
35、ctionListener public void actionPerformed(ActionEvent e) Item item = (Item) gys.getSelectedItem();TbGysinfo gysInfo = new TbGysinfo();gysInfo.setId(item.getId();gysInfo.setAddress(diZhiF.getText().trim();gysInfo.setBianma(bianMaF.getText().trim();gysInfo.setFax(chuanZhenF.getText().trim();gysInfo.se
36、tYh(yinHangF.getText().trim();gysInfo.setJc(jianChengF.getText().trim();gysInfo.setName(quanChengF.getText().trim();gysInfo.setLian(lianXiRenF.getText().trim();gysInfo.setLtel(lianXiRenDianHuaF.getText().trim();gysInfo.setMail(EMailF.getText().trim();gysInfo.setTel(dianHuaF.getText().trim();if (Dao.
37、updateGys(gysInfo) = 1)JOptionPane.showMessageDialog(GysXiuGaiPanel.this, "修改完成");elseJOptionPane.showMessageDialog(GysXiuGaiPanel.this, "修改失败");为按钮添加监听器:modifyButton.addActionListener(new ModifyActionListener();3.4 基础信息管理模块基础信息管理模块包括 客户信息管理、商品信息管理、供应商信息管理三个部分,实现方法相似,以供应商信息管理为例介绍
38、。1. 供应商添加,创建GysTianJiaPanel类,其中有许多JTextField文本域和按钮,用来填写供应商各种信息,以及提交结果。界面如下:完成信息填写后点击添加按钮, 处理的代码在按钮的监听器类中:class TjActionListener implements ActionListener / 添加按钮的事件监听类public void actionPerformed(final ActionEvent e) if (diZhiF.getText().equals("") | quanChengF.getText().equals("")
39、| chuanZhenF.getText().equals("")| jianChengF.getText().equals("")| yinHangF.getText().equals("")| bianMaF.getText().equals("")| diZhiF.getText().equals("")| lianXiRenF.getText().equals("")| lianXiRenDianHuaF.getText().equals("")|
40、 EMailF.getText().equals("")| dianHuaF.getText().equals("") JOptionPane.showMessageDialog(GysTianJiaPanel.this, "请填写全部信息");return;try ResultSet haveUser = Dao.query("select * from tb_gysinfo where name='"+ quanChengF.getText().trim() + "'");i
41、f (haveUser.next() JOptionPane.showMessageDialog(GysTianJiaPanel.this,"供应商信息添加失败,存在同名供应商", "供应商添加信息",JOptionPane.INFORMATION_MESSAGE);return;ResultSet set = Dao.query("select max(id) from tb_gysinfo");String id = null;if (set != null && set.next() String sid = s
42、et.getString(1).trim();if (sid = null)id = "gys1001"else String str = sid.substring(3);id = "gys" + (Integer.parseInt(str) + 1);TbGysinfo gysInfo = new TbGysinfo();gysInfo.setId(id);gysInfo.setAddress(diZhiF.getText().trim();gysInfo.setBianma(bianMaF.getText().trim();gysInfo.setF
43、ax(chuanZhenF.getText().trim();gysInfo.setYh(yinHangF.getText().trim();gysInfo.setJc(jianChengF.getText().trim();gysInfo.setName(quanChengF.getText().trim();gysInfo.setLian(lianXiRenF.getText().trim();gysInfo.setLtel(lianXiRenDianHuaF.getText().trim();gysInfo.setMail(EMailF.getText().trim();gysInfo.
44、setTel(dianHuaF.getText().trim();Dao.addGys(gysInfo);JOptionPane.showMessageDialog(GysTianJiaPanel.this, "已成功添加供应商","供应商添加信息", JOptionPane.INFORMATION_MESSAGE);resetButton.doClick(); catch (SQLException e1) e1.printStackTrace();注意到其中调用了Dao.query和Dao.addGys两个方法进行数据库操作。2. 供应商修改和删除与
45、此相似。3.5 进货管理模块 销售管理模块进货、销售、退货各功能类似,以进货为例:依据规则自动生成进货单号,即为数据库中的id。共有供应商、结算方式、商品等下拉列表框,swing中使用JComboBox实现。商品表格使用JTable实现。table = new JTable();table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);initTable();private void initTable() String columnNames = "商品名称", "商品编号", "产地", &q
46、uot;单位", "规格", "包装", "单价","数量", "批号", "批准文号"(DefaultTableModel) table.getModel().setColumnIdentifiers(columnNames);TableColumn column = table.getColumnModel().getColumn(0);final DefaultCellEditor editor = new DefaultCellEditor(sp);edit
47、or.setClickCountToStart(2);column.setCellEditor(editor);各按钮监听器中添加处理代码,不在累述。3.6 查询统计模块 本系统提供了客户查询、商品查询、供应商查询、销售查询、退货查询、入库查询等各种查询功能,方便用户使用。以商品查询为例其中图形界面开发使用的主要控件和相关技术、代码已经有过说明。为了给用户提供丰富的查询功能,本系统设置了各种查询条件,比如依据客户名,单号,日期,等多种查询条件和查询对象,可以进行精确和模糊查询。对应在所执行的SQL语句中使用= > < 等where条件进行查找,使用like关键字以及 % _ 等通配
48、符进行模糊匹配。如商品信息查询代码如下:private List searchInfo(String conName, String conOperation,String content, List list) String sql = "select * from Tb_Spinfo where "if (conOperation.equals("等于") if (conName.equals("商品名称")list = Dao.findForList(sql + "spname='" + conten
49、t + "'");if (conName.equals("供应商全称")list = Dao.findForList(sql + "gysname='" + content + "'");if (conName.equals("产地")list = Dao.findForList(sql + "cd='" + content + "'");if (conName.equals("规格")list
50、= Dao.findForList(sql + "gg='" + content + "'"); else if (conName.equals("商品名称")list = Dao.findForList(sql + "spname like '%" + content+ "%'");if (conName.equals("供应商全称")list = Dao.findForList(sql + "gysname like '%
51、" + content+ "%'");if (conName.equals("产地")list = Dao.findForList(sql + "cd like '%" + content + "%'");if (conName.equals("规格")list = Dao.findForList(sql + "gg like '%" + content + "%'");return list;3.7 库存
52、管理模块 系统管理模块主要包括以下功能。库存盘点价格调整操作员管理权限管理第四章 总结这次的课程设计让我收获很大,经过了很多困难,最后实现了大部分预期计划,实在难忘。首先,是实施过程中遇到的各种各样问题让我看到了自身的不足。无论是数据库结构的设计与实现,powerdesigner设计软件使用,java swing图形界面开发方法,jdbc 数据库操作方式,都对过去的学过的 数据库课程,高级程序语言课程等有着较大考验,许多之前以为掌握了的知识在使用时却出了问题。而其中许多之前不知道的知识,更是要求我寻找各种方式自己来解决来学习, 知识是无穷无尽的,课堂和书本只能交给我们一部分,剩下的需要自己来探
53、索。然而,虽然遇到了刚才提到的各种困难,但是在解决问题的同时,自身的知识在实践中不断运用以致熟练,比如数据库设计方法和工具,java代码编写能力,数据库软件部署,SQL 语句运用等等。而且各种能力得到加强,发现问题的能力,搜索答案解决问题的方法。克服困难的信心得到提高。最后,这次课程设计更是督促我进行不断学习,自主学习,从实践中学习。参考文献1 任秀艳.基于B/S模式的企业进销存管理系统 见: 中国通信学会. 第六届全国计算机应用联合学术会议论文集. 2002.2 戴小平; 张妤婷; 黄虎.基于DDBS进销存管理系统的研究和应用J. 计算机技术与发展. 20103 赵晓霞. 进销存管理系统的设计与实现J. 煤炭技术. 20104 王小超. 基于Java Swing的中小企业进销存系统的设计与实现:硕士学位论文. 云南大学. 20135 翁谦益. 基于Java SE的企业进销存管理系统设计与实现:硕士学位论文. 厦门大学. 2014附录1. Dao.javapublic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微量泵使用与护理
- 2-14逻辑函数的化简-卡诺图法3
- 台州科技职业学院《全科医学概论理论》2023-2024学年第二学期期末试卷
- 铁门关职业技术学院《矿物加工技术基础》2023-2024学年第二学期期末试卷
- 南京医科大学康达学院《学前儿童游戏与指导》2023-2024学年第一学期期末试卷
- 四川省宜宾市翠屏区2025年初三十月月考化学试题试卷含解析
- 上海民远职业技术学院《物流配送中心设计》2023-2024学年第二学期期末试卷
- 辽宁省阜新二高2025届高三第二学期入学检测试题试卷英语试题含解析
- 江西生物科技职业学院《分子生物学实验技术与原理》2023-2024学年第二学期期末试卷
- 江苏省扬州市梅岭2025届中考第二次模拟考试语文试题理试题含解析
- 重症医学科各项规章制度汇编
- 社会组织培训概述课件
- 三角函数的应用论文Word版
- 平面位置(轴线)测量记录表
- 生物制造国内外状况课件
- 处分通报范文员工处分通报范文4篇
- 幼儿园大班数学口算练习题可打印
- 罚没收缴物品处理管理流程图
- 生命体征监测-PPT课件
- 药物临床试验管理和质量控制课件(PPT 55页)
- 桥梁下部结构监理细则
评论
0/150
提交评论