1、序号: 10 学号: 11416230 常 州 大 学 课程设计 课 程 名 称: 《面向对象程序设计(JAVA)》 题 目: 企业销售管理系统 姓 名: ````````` 学 院: 信息科学和工程学院 专业班级: ``````` 指 导 教 师: ``````
2、 设计时间: 年 12 月 24 日 ~ 年 1 月 11 日 目录 1. 任务书 a) 系统功效分析········································03 b) 系统组成············································03 2. 正文 a) 系统分析 i. 功效模块·········································04 ii. 功效步骤图·······································06 b) 数据库设计····
3、······································07 c) 系统具体设计 i. 连接数据库·······································08 ii. 主界面···········································08 iii. 修改、添加、删除模块·····························10 iv. 查询、打印、登录模块·····························14 3. 系统使用说明······································
4、·····21 4. 日志···················································22 5. 心得体会···············································22 6. 参考文件···············································23 7. 致谢···················································23 一、任务书 (一)、系统功效分析 本系统用于对企业销售进行管理,包含职员基础信息表、商品信息
5、表和职员销售信息表,关键功效包含: l 数据表统计添加、删除、修改和浏览。 l 对职员基础情况、商品和销售相关信息查询。 l 报表打印输出。 l 系统退出。 (二)、系统组成 依据系统功效分析,给出系统参考处理方案。 整个系统功效经过菜单实现,包含数据库、表单、菜单、报表和主程序等多个部分,具体为: 后台数据库 销售管理数据库: 1.职员基础信息表(职员编号,职员名,年纪,性别,部门,职务)。 2. 商品信息表 (商品编号,商品名称,商品单价)。 3. 职员销售信息表 (职员编号, 商品编号,商品数目,应付金额,用户付款,找回金额)。
6、 二、正文 (1) 系统分析: 企业销售管理系统关键实现功效为:和数据库连接,实施对职员基础信息表、商品信息表、职员销售信息表查询、修改、添加、删除等功效实现。和对3张表信息进行输出打印,打印保留成XLS格式。 功效模块以下: 查询功效: 模糊查找 正确查找 查询功效 其它模糊查找 金额模糊查找 数目模糊查找 名称模糊查找 编号模糊查找 名称查找 编号查找 添加其它 添加数目 添加编号 添加名称 添加
7、功效 添加功效: 修改功效: 保留退出 修改功效 修改其它 修改数目 修改编号 修更名称 查询数据 删除功效: 删除功效 查询数据 确定删除 保留退出 程序结构步骤图: 企业销售管理系统 职员基础信息表 商品信息表 职员销售信息表 查询 修改 添加 删除 查询 修改 添加 添加 修改 删除 输出打印 系统
8、退出 (2)数据库设计: 根据规范设计方法,考虑数据库及其管理系统开发全过程,将数据库设计分为以下六个阶段: · 需求分析 · 概念结构设计 · 逻辑结构设计 · 物理结构设计 · 数据库实施 · 数据库运行和维护 基础要求 在mysql软件基础上,利用应用系统开发为企业销售管理设计数据库和建立对应数据库。创建4个表格,分别为sellInfo,staffInfo,goodsInfo,和登录所需password表格。 信息要求,处理要求,安全性和 完整性要求,数据流图,数据字
9、典,数据项之间应有联络必需表示出来,用数据依靠表示即可逻辑结构设计必需:说明各个关系模式所属范式,假如不是BC或3NF范式, (3)系统具体设计: 一、 连接数据库: import java.sql.*; public class Connection1 { Connection connect; private String dbDriver = "com.mysql.jdbc.Driver"; //加载数据库驱动 private String url = "jdbc:mysql://localhost:3306/sell
10、true&characterEncoding=utf-8"; // 地址 /** Creates a new instance of connectJdbc */ public Connection getConnection() { try { Class.forName(dbDriver).newInstance(); connect=DriverManager.getConnection(url, "root", "123456"); } catch (Exception ex) {
11、System.out.println("数据库加载失败"); } return connect; } 二、 主界面:View.java 首先在主界面panel里显示数据库中数据,以商品信息表为例。 JTable table; JScrollPane jscrollpane;//申明滚动面板变量 TableModel myTable = new DefaultTableModel(); Connection1 db = new Connection1(); Connection con = db.getConnectio
12、n();//连接到数据库 Statement ps; try { ps = con.createStatement(); ResultSet rs; rs = ps.executeQuery("select * from goodsInfo");//在sell表格中实施查询 ResultSetMetaData metaData; metaData = rs.getMetaData();//得到数据库元数据 int number = metaData.getColumnCount();//得到数据库中表列个数 Vector co
13、lumnNames = new Vector();//调用Vector类,生成可自动增加数组对象列 Vector rows = new Vector();//对象行 for (int num = 0; num < number; num++) { columnNames.addElement(metaData.getColumnLabel(num + 1)); }//循环生成 while (rs.next()) { Vector newRow = new Vector(); /* for循环,将结果集中一行数据放到newRow矢量中 */
14、 for (int i = 1; i <= number; i++) { newRow.addElement(rs.getObject(i)); }/* 将上面矢量newRow作为矢量rows中一个元素,这么rows中一个元素就代表结果集中一行数据 */ rows.addElement(newRow);//增加行 myTable = new DefaultTableModel(rows, columnNames);//在表格中加载数据 } } catch (SQLException ex) { } table = n
15、ew JTable(myTable); jscrollpane = new JScrollPane(table); jscrollpane.setViewportView(table); jscrollpane.revalidate(); jPanel3.setLayout(new BorderLayout()); jPanel3.add(jscrollpane, BorderLayout.CENTER); jPanel3.setVisible(true); 效果以下: 三、修改模块: 首先对所需修改职员信息进行查询,并显示
16、在修改界面上,关键代码以下: Connection1 db = new Connection1(); Connection con = db.getConnection();//连接数据库 String sql = "select* from sellInfo"; Statement ps = con.createStatement(); ResultSet rs = ps.executeQuery(sql);//查询 while (rs.next()) { if (rs.getString("职员编号").equals(jTextField1.
17、getText())) { //匹配该职员信息; num1 = rs.getString("职员编号"); num2 = rs.getString("商品编号"); num3 = rs.getInt("商品数目"); price1 = rs.getInt("应付金额(元)"); price2 = rs.getInt("用户付款(元)"); price3 = rs.getInt("找回金额(元)"); } } jTextField2.setText(num1); jTextFie
18、ld3.setText(num2); jTextField4.setText("" + num3); jTextField5.setText("" + price1); jTextField6.setText("" + price2); jTextField7.setText("" + price3);//在修改界面上显示该职员销售信息 } 然后在对修改界面上信息进行修改,并返回保留至数据库,关键代码以下: String sql = "update sellInfo set 职员编号='" + num1 + "',商品编号='" + num2+ "',
19、商品数目=" + num3 + ",应付金额(元)=" + price1 + ",用户付款(元)="+ price2 + ",找回金额(元)=" + price3 + " where 职员编号='" + num1 + "'"; try { ps = con.createStatement(); ps.executeUpdate(sql);//数据更新 } catch (SQLException e) { e.printStackTrace(); } 效果以下: 四、删除模块: 首先对用户输入职员编号或职员名称进行查
20、找,当数据库中由此数据时,显示该数据,并请求用户是否确定删除,利用sql语句中delete,以职员基础信息为例,关键代码以下: Statement ps = con.createStatement(); ResultSet rs = ps.executeQuery(sql); while (rs.next()) { if (rs.getString("职员编号").equals(jTextField1.getText()) || rs.getString("职员名").equals(jTextField2.getText())) { num
21、1 = rs.getString("职员编号"); num2 = rs.getString("职员名"); i = rs.getInt("年纪"); num3 = rs.getString("性别"); num4 = rs.getString("部门"); num5 = rs.getString("职务"); } } } int s = JOptionPane.showConfirmDialog(null, "确定要删除此数据吗?\t\n职员编号: "+ jTextField1.getText(
22、) + "\t\n" + "职员名: " + num2 + "\t\n" + "年纪: " + i + "(岁)" + "\t\n" + "性别: " + num3 + "\t\n" + "部门: " + num4 + "\t\n" + "职务: " + num5 + "\t");//显示对话框是否确定删除 if (s == 0) { String jk = jTextField1.getText(); String jk1 = jTextField2.getText(); String sql1 = "delete from sta
23、ffInfo where 职员编号='" + jk + "'or 职员名='" + jk1 + "'"; Statement ps1; try { ps1 = con.createStatement(); ps1.execute(sql1);//实施删除 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } 效果以下: 五、添加模块: 添加数据到数据库关键
24、用是sql中insert语句,在数据中增加所需数据,这期间要尤其注意语句中变量和引号问题,以职员销售表为例,关键代码以下: String num1 = jTextField1.getText(); String num2 = jTextField2.getText(); int ii = Integer.valueOf(jTextField3.getText()); int price1 = Integer.valueOf(jTextField4.getText()); int price2 = Integer.valueOf(jTextField5.getTex
25、t()); int price3 = Integer.valueOf(jTextField6.getText()); String sql = "insert into sellInfo values('" + num1 + "','" + num2 + "','" + ii + "','" + price1 + "','" + price2 + "','" + price3 + "')"; PreparedStatement ps = con.prepareStatement(sql); ps.executeUpdate();//实施并更新
26、语句 效果以下: 六、查询模块: 查询方法关键有两种:一是正确查找,经过用户所输入编号,名称进行查找;二是模糊查找,经过用户所输入模糊信息进行查找,输出全部符合结果。 1.正确查找关键代码以下: String sql = "select* from goodsInfo"; String num1 = null, name = null; int num2 = 0; Statement ps = con.createStatement(); ResultSet rs = ps.executeQuery(sql);
27、 while (rs.next()) { if (rs.getString("商品编号").equals(jTextField1.getText()) || rs.getString("商品名称").equals(jTextField2.getText())) { num1 = rs.getString("商品编号"); name = rs.getString("商品名称"); num2 = rs.getInt("商品单价(元)"); } } 2.模糊查询关键代码以下: String num1 = jTe
28、xtField3.getText(), num2 = jTextField4.getText(), num3 = jTextField5.getText(); if (num1.equals("") && num2.equals("") && num3.equals("")) { GoodsInfo gi = new GoodsInfo(); gi.getGoodsInfo();//假如全部为空,则显示全部数据 } else if (!num1.equals(null) || !num2.equals(null) || !num3.equals(null)) {
29、 Statement ps; ps = con.createStatement(); ResultSet rs; rs = ps.executeQuery("select * from goodsInfo where 商品编号 like '"+ num1+ "%' and 商品名称 like '"+ num2+ "%' and 商品单价(元) like '" + num3 + "%'"); 效果以下: 正确查找:输入商品编号:04,显示结果以下: 模糊查找:输入商品编号:0,显示结果以下:
30、 七、打印模块: 打印信息表关键将修改好数据输出称excel形式,保留在电脑里,以staffInfo为例, String[] title = { "职员编号", "职员名","年纪","性别","部门","职务"};// 准备设置excel工作表标题 String filePath = "D:\\staffInfo.xls";// 输出excel路径 OutputStream os = new FileOutputStream(filePath);// 创建Excel工作薄 WritableWorkbook wwb = Workbook.crea
31、teWorkbook(os); // 添加第一个工作表并设置第一个Sheet名字 WritableSheet sheet = wwb.createSheet("职员基础信息表", 0); Label label = null; for (int i = 0; i < title.length; i++) { // Label(x,y,z)其中x代表单元格第x+1列,第y+1行, 单元格内容是y// 在Label对象子对象中指明单元格位置和内容 label = new Label(i, 0, title[i]);// 将定义好单元格添加到工作表中
32、 sheet.addCell(label); } Statement stmt = con.createStatement(); ResultSet result = stmt.executeQuery("select * from staffInfo");//查询表中全部数据 int x = 0; while (result.next()) { // 从数据库中取得数据 x++; // 控制行数 for (int y = 0; y < title.length; y++) {// 取得列数 label = new
33、 Label(y, x, result.getString(y + 1)); // x代表行, y代表列,经过rst.getString()设置单元格内容 sheet.addCell(label);// 将内容加到execl中去 } } wwb.write(); // 写入数据 wwb.close(); // 关闭文件 保留效果以下: 关键代码以下: OutPutExl oe1 = new OutPutExl(); oe1.OutPutExlstaff(); JOptionPane.show
34、MessageDialog(null, "输出打印职员基础信息表成功!保留在D:staffInfo"); 八、登陆界面:Login.Java 首先连接数据库,并判定用户所输用户名,密码是否正确,假如匹配则让其经过,不然提醒用户名和密码不匹配,请重新输入。判定方法queryUser语句以下: boolean queryUser(String userName,String pass){ Connection1 db=new Connection1(); Connection con=db.getConnection(); String sq
35、l="select* from password where Username= '"+userName +"'and Password= '"+pass+"'"; try { Statement ps=con.createStatement(); ResultSet rs=ps.executeQuery(sql); if(rs.next()){ if(rs.getString("Username").equals(userName)&&rs.getString("Password").equals(pass)) return true;
36、 else return false; }else return false; 登录以下: (4)系统使用说明: 设备支持:推荐配置:Windows7,512内存。 数据库:MySQL Server 5.0。 软件支持:MyEclipse 编写。 (5)日志: 课程设计第一天:进行整体布局构思,创建职员信息表、商品信息表、职员销售信息表连接数据库,实现多个方法验证登录。 第二天:创建主界面,将数据库里表格信息出现在用户端上。关键是panel利用。 第三天:进行简单语句查询,调
37、试编码问题—汉字乱码,并设置滚动面板。经过网上查找了解学习输出打印,将表格输出保留为xls文件。 第四天:编写删除功效代码,利用sql语句对编号正确查找,然后读取该行数据,实现对数据删除,并设置对应控件。 第四天:编写添加、修改功效代码,创建功效面板,调用sql语句进行查找,取得符合要求数据,修改并进行更新数据。 第五天:编写模糊查询,实现对数据模糊查找,并显示在数据面板上。 第六天:在主界面中调用调试各个功效面板,实现功效。并对各个图形界面进行美化。 第七天:编写备注信息,填写课程设计汇报。 (6)心得体会 依据题目要求,编写一个企业销售管理系统。开始设计时,因
38、为初学java语言,对于系统整体编写有一定难度,所以茫然无措。在翻阅了部分书籍后最终有些想法,并开始付诸实施。连接数据库是碰到第一个难点,过程中总是碰到汉字字符,和java和数据库数据交互时汉字乱码问题。后经过调试,查阅资料,并尝试用网上字符转码语句fliter,将写入数据和从数据库中读取数据进行转码,知道须将数据库注册码和生成表字符码要和java编辑软件myeclipse字符码相一致,才排除了数据库信息在面板中异常显示。当处理到选择查询、模糊查询时,又碰到了sql语句引号问题,在sql语句中加入参数需要引号,假如是字符类型,需要表示为’”+data+”’,假如单单是整型,就不需要单引号了。相
39、关局部变量、组员变量、全局变量,也有了深入认识,并经过此程序编写得到了强化。包含到数据库修改问题,因为第一次写入update语句中没有写上判定在数据库中哪一行改变(where···),结果造成全部数据全部变为同一数据,数据库信息丢失了。相关面板居中问题也能自己经过直接编辑代码实现。唯一遗憾是此系统采取是可视化界面做,全部GUI组件位置不稳定,易受干扰,所形成图形界面在美观上不是很好,有待改善。总而言之,此次课程设计不仅锻炼了自己利用java语言编写能力,也增强了自己在处理部分错误,排错技能,对自己以后学习有很大帮助。 参考文件 [1] 孙浏毅.Java宝典[M].电子工业出版社..8 [2] 郎波.Java语言程序设计[M].2版.清华大学出版社..9 [3]张广彬.王小宁.高静Java课程设计案例精编(第二版)[M].清华大学出版社..6 [4]王鹏.何昀峰.Java Swing 图形界面开发和案例详解[M].清华大学出版社..12 注: [M]论著 (8)致谢






