《管理信息系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《管理信息系统课程设计报告.doc(33页珍藏版)》请在三一办公上搜索。
1、课程设计报告( 2010- 2011年度第2学期)名 称: 管理信息系统 题 目: 商品报价关系系统 院 系: 计算科学学院 班 级: 信息与计算科学081 学 号: 200811314109 200811314118 200811314124 学生姓名: 谢伟斌、方忠湟、阮喜城 指导教师: 高川翔 设计周数: 1 成 绩: 日期: 2011年 6月6 日目 录一、课程设计的目的与要求1二、设计正文11 问题分析12 算法设计13 系统设计24.程序编码25.调试分析26.测试结果27.用户使用说明2三、课程设计总结或结论2四、参考文献2附录(其他必要资料)3商品报价管理系统一、课程设计的目的
2、与要求训练学生灵活应用所学管理信息系统理论知识的使用,独立完成分析问题并利用RAD应用软件开发工具以及数据库系统完成一个实际管理信息系统的开发。结合实际的编程知识及结合其它开发工具,编写程序求解指定问题。初步掌握解决各种具体应用问题的基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和各学科知识的综合运用来进行软件开发,巩固、深化学生的理论知识,提高学生的动手能力,并在此过程中培养他们严谨的科学态度和良好的工作作风。要求(1)了解并掌握管理信息系统的开发方法,具备初步的独立分析和设计能力;(2)初步掌握软件开发过程的需求分析、系统设计、程序编码、测试等基
3、本方法和技能;(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;(5)设计的题目要求达到一定工作量,并具有一定的深度和难度;(6)编写出课程设计说明书。二、设计正文1 需求分析对于中小型企业,每到交易旗舰,准备参加展会货品的报价单每每得重新做过,对于货品品种种类多,分布广,查找资料起来工作十分的繁琐,而且十分的浪费时间。所以开发本货品报价管理系统,可以实现资料信息化,一次录入,查找简单方便,可供多次使用,而且可以实现按照一定的规范,自动录入已有的报价单以及输出所需要的货品信息形成新
4、的报价单。(1) 输入的形式和输入值的范围:A、 系统管理模块:a、 添加操作员:登录名称,操作员姓名均为字符或数字,不超过10个;密码以及确认密码,为字符或数字,不超过20个。b、 更改密码:旧密码,新密码,确认新密码为字符或数字,不超过20个。c、 删除操作员:没有输入。d、 权限更改:没有输入。e、 以上所有输入均不能为空。B、商品报价管理:a、 产品信息查询:货号查询,字符或数字,不超过10个。b、 添加产品信息:货号,规格,包装率,FOB(以美元为单位的报价),ExW(以人名币为单位的报价),为字符或数字,不超过20个;备注,为中文或英文字符,数字,不超过40个。c、 更改产品信息:
5、依照添加产品信息中的范围。d、 以上所有输入,除货号不能为空,其他无限制是否可为空。(2) 输出的形式:A、 系统管理模块:a、 添加操作员:数据合法,添加成功或失败;数据填写不完整或是不合法,提示修改。b、 更改密码:旧密码填写正确,新密码与确认新密码一致,提示修改成功;旧密码填写错误,提示错误;新密码与确认密码不一致,提示重新输入。c、 删除操作员:删除成功或失败。d、 权限更改:更改成功或失败。B、商品报价管理:a、 产品信息查询:货品的详细信息。b、 添加产品信息:填写符合规范,添加成功;否则提示添加失败。c、 更改产品信息:填写符合规范,修改成功;否则提示修改失败。(3) 程序所能达
6、到的功能:添加操作员,删除操作员,更改权限,修改密码,添加产品信息,修改产品信息,货品查询,导入已有的报价单,导出数据形成新的报价单。(报价单均以EXCL为基准)(4) 测试数据:A、 系统管理模块:a、 添加操作员:登录名称操作员姓名输入密码确认密码操作原因Angeo安戈12341234成功AngeoXX12341234失败用户名重复Angeo2012XX123321失败密码输入不一致b、 更改密码:旧密码新密码确认密码操作原因空124124失败旧密码不能为空123124125失败新密码与确认密码不一直123124124成功B、商品报价管理:a、 添加产品信息:货号规格包装率FOBExW操作
7、原因GA-101成功GA-10121*.SE.20100失败货号已经存在GA-10222*.SE.10100成功2 概要设计(1) 抽象数据类型:系统中自定义用户与货品的实体类,详细如下:用户实体类USER:属性名数据类型类型初始值用户IDuserIdStringprivate“”用户名称userNameStringprivate“”密码passwordStringprivate“”权限powerStringprivate“B”货品实体抽象类:属性名数据类型类型初始值货号itemNameStringPrivate“”规格specsStringprivate“”包装率packRateString
8、private“”外销价格FOBStringprivate“”内销价格ExWStringprivate“”描述,分类descStringprivate“”(2) 程序流程:3 详细设计系统采用简单的MVC设计模式,将系统分为基本模版模块,负责显示的面板模块以及负责相应时间处理数据已经获取相当的结果集合的控制模块。(1) 基本模块:基本模块中包括2个基本的实体类对象user和item。(2) 显示模块:以用户模块和货品模块两大模块为主,以及多个嵌入子面板包括用户添加面板,用户删除面板,用户密码修改面板,用户权限修改面板,货品信息添加面板,货品信息更改面板,货品信息查询面板。l 用户添加面板:根据
9、输入的数据,验证输入的数据是否合法;-数据合法,则提交到数据库中,验证是否已经存在该用户名;-若用户名不存在,则添加到数据库中,返回添加成功信息;-若用户名存在,则不添加数据到数据库,返回用户名已经存在提示信息;-数据不合法,则不提交数据,返回修改数据的提示信息;l 用户删除面板:从用户成员表格中选择所要删除的用户,确定后删除。l 用户密码修改面板:根据输入的数据,验证输入的数据是否合法;-均不为空,验证新密码与确认密码是否一致;-新密码与确认密码一致,从数据库中提取用户密码,与输入的旧密码进行匹配,判断是否一致;-提取的密码与输入的旧密码一致,将新密码提交的数据库中,覆盖原先的密码,返回“密
10、码修改成功”提示信息;-提取的密码与输入的旧密码不一致,返回“密码错误”提示信息;-新密码与确认密码不一致,返回“新密码与确认密码不一致”提示信息;-均为空,返回“输入密码不能为空”提示信息。l 用户权限修改面板:从选择用户的下拉列框中选取用户,所选中的用户的详细信息将显示在面板上,在权限一栏中,可以选择“管理员”与“操作员”两选项,选择后点击修改,成功则返回“修改成功”提示信息,失败则返回“修改失败”提示信息。l 货品信息添加面板:根据输入的数据验证是否合法(即货号是否为空);-货号不为空;-搜索数据库中,查找是否有与该货号相同的货品信息存在;-不存在与输入货号的货品信息,则将输入数据提交到
11、数据库中,返回“添加成功”提示信息;-存在与输入货号的货品信息,则返回“商品信息添加失败,存在同名商品”提示信息;-货号为空,返回“货号不能为空”提示信息。l 货品信息更改面板:从选择商品下拉列表中选择索要修改的货品编号,在面板上会显示已保存在数据库中该货品的详细信息。-如是删除,则点击删除按钮,再一次确认后,从数据库中删除该货品的信息,返回“删除成功”提示信息;-如果修改,则对该货品的信息进行修改后点击修改按钮,符合要求则将数据提交到数据库覆盖原来的数据,返回“修改成功”提示信息。l 货品信息查询面板:-根据输入的查询得到的数据在表格中显示;-双击选择某一货品则可查看该货品的图片;-点击添加
12、按钮,则将选择的货品添加到输入列表中;-点击导出数据按钮,选择文件存放地址,输入文件名,则可将输出列表中的货品信息输出形成报价表单;-点击导出数据按钮,选择需要导入报价单;-验证选择的报价单文件是否为EXCL文件;-选择的文件符合要求,则读取文件中符合规范的内容,存入数据库;-选择的文件不符合要求,则返回“选择的文件不是EXCL文件。”提示信息。注:本查询为迷糊查询,空数据查询默认是查找所以信息(3) 控制模块:控制模块主要由数据库连接,实体类DAO,图片管理以及报价表单输入输出控制组成。l 数据库连接:定义一静态的数据连接类,提供获取数据库连接和释放连接两个静态方法。l 实体类DAO:定义两
13、实体类的DAO类,包括基本的增删改查功能,再在此基础上,扩展系统所需的方法。l 图片管理:定义对于报价表单中图片管理的类,包括基本的增删改查功能。l 报价表单输入输出控制:引用外包,自定义规范,对所需的数据或文件进行相应的处理,以转换成我们所需要的文件或是数据。数据库设计:针对系统所需要的两个实体类,设计了t_user和t_items两个表,分别对应与用户实体类和货品实体类。t_user:t_items:4.程序编码由于功能重复,在此仅以某一为例子或仅列出类中某重要代码片段。1. 数据库连接类(Connect.java):package com.angeo.tools;import java.
14、sql.*;public class Connect protected static String dbClassName = com.mysql.jdbc.Driver;/mySql数据库JDBC驱动protected static String dbUser = root;/数据库用户名protected static String dbPwd = root;/数据库密码protected static String dbUrl = jdbc:mysql:/localhost/SMS?user= + dbUser + &password= + dbPwd;/获取数据库连接URL/获取连接
15、public static Connection getConnection()try Class.forName(dbClassName);Connection conn = DriverManager.getConnection(dbUrl);return conn; catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();return null;/关闭连接以释放资源public static void close(Connection conn,Pre
16、paredStatement pstmt,ResultSet rs) tryif(rs != null) rs.close();rs = null;if(pstmt != null) pstmt.close();pstmt = null;if(conn != null) conn.close();conn = null; catch (SQLException e)e.printStackTrace();2. 以用户实体类DAO(UserDao.java)中增删查改的某一功能为例子的代码片段:/* * 查询数据库是否存在所查找内容的相关信息 * param userId 查询的操作员的ID *
17、 return 查询得到结果,返回true,否则返回false * throws Exception */public boolean checkUserIsHave(String userId)String sql = select * from t_user where user_id=?;/查询用户ID的SQL语句Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try conn = Connect.getConnection();/获取连接pstmt = conn.prepareState
18、ment(sql);/预编译pstmt.setString(1, userId);/设置参数rs = pstmt.executeQuery();/获取结果集if(rs.next() /有数据,返回TRUEreturn true; catch (Exception e) e.printStackTrace(); finally Connect.close(conn, pstmt, rs);/释放资源return false;3. 图片管理类(ImagesMana.java):package com.angeo.tools;import java.io.File;import java.io.Fi
19、leOutputStream;import java.io.IOException;public class ImagesMana /* * 添加图片到本地 * param imageName * param imageData */public void imageAdd(String imageName,byte imageData) String imageUrl = ./images/items/ + imageName + .png;/文件名File fileImage = new File(imageUrl);/创建图片文件FileOutputStream fileos = nul
20、l;try fileos = new FileOutputStream(fileImage);/ 建立一个上传文件的输出流fileos.write(imageData, 0, imageData.length);/ 将文件写入服务器 catch (IOException e1) e1.printStackTrace(); finally try fileos.close(); catch (IOException e) e.printStackTrace();/* * 删除图片 * param imageName * return */public boolean imageDel(Strin
21、g imageName) String imageUrl = ./images/items/ + imageName + .png;/文件名File fileImage = new File(imageUrl);/创建图片文件if(fileImage.exists() & fileImage.delete() return true;elsereturn false;/* * 更换图片 * param imageName * param imageData * return */public boolean imageUpd(String imageName,byte imageData) i
22、f(imageDel(imageName) imageAdd(imageName,imageData);return true;return false;4. 报价表单(Excl文件)导出类(CreateXLS.java)导入类(ReadXLS.java):package com.angeo.exportExcl;import java.io.*; import java.util.List;import com.angeo.model.Item;import jxl.*; import jxl.write.*; import jxl.format.Alignment; public clas
23、s CreateXLS private List list;private String saveUrl;/文档路径private String headerName;/表头private WritableWorkbook book;/EXCL文本工作区public CreateXLS(List list,String saveUrl,String headerName)this.list = list;this.saveUrl = saveUrl;this.headerName = headerName; public boolean savaFile() boolean isSave =
24、false; try book = Workbook.createWorkbook(new File(saveUrl + .xls);/创建文件 WritableSheet sheet = book.createSheet(Sheet_1, 0);/穿件文件页面 /获取表格的行数与列数 int cloumn = headerName.length;/列数 int row = list.size();/行数 WritableFont wfont = new WritableFont(WritableFont.createFont(楷书),14 );/设置字体格式,大小 WritableCellF
25、ormat font = new WritableCellFormat(wfont); font.setAlignment(Alignment.CENTRE); / 设置居中 /设置行高列宽 for(int i=0; i=cloumn; i+) sheet.setColumnView(i,20);/设置列宽 for(int i=0; i=row*4; i+) sheet.setRowView(i,400);/设置行高 /填写表头 for(int i=1; i=cloumn ;i+) Label label = new Label(i, 0, headerNamei-1,font); sheet
26、.addCell(label); Label label = new Label(0, 0,图片 ,font); sheet.addCell(label); /向表格填写数据 for(int i=1 ; i=row ; i+) Label labelName = new Label (1, i + (i-1)*3, list.get(i-1).getItemName(), font); sheet.addCell(labelName); Label labelSpec = new Label (2, i + (i-1)*3, list.get(i-1).getSpecs(), font); s
27、heet.addCell(labelSpec); Label labelPR = new Label (3, i + (i-1)*3, list.get(i-1).getPackRate(), font); sheet.addCell(labelPR); Label labelFOB = new Label (4, i + (i-1)*3, list.get(i-1).getFOB(), font); sheet.addCell(labelFOB); Label labelExW = new Label (5, i + (i-1)*3, list.get(i-1).getExW(), font
28、); sheet.addCell(labelExW); Label labelDesc = new Label (6, i + (i-1)*3, list.get(i-1).getDesc(), font); sheet.addCell(labelDesc); byte data = new byte102400;/定义一个1K大小的数组 String fileName = list.get(i-1).getItemName() + .png;/文件名 File file = new File(./images/items/ + fileName);/创建图片文件 FileInputStrea
29、m stream = new FileInputStream(file);/指定要读取的图片 ByteArrayOutputStream bos = new ByteArrayOutputStream();/定义一个字节数组输出流,用于转换数组 /读取照片像素数组 while(stream.read(data)!=-1) bos.write(data); byte imageData = bos.toByteArray(); /转换成btye数组 FileOutputStream fileos = new FileOutputStream(file);/ 建立一个上传文件的输出流 fileos
30、.write(imageData, 0, imageData.length);/ 将文件写入服务器 fileos.close(); /添加图片到EXCEL WritableImage image=new WritableImage(0, i + (i-1)*3, 1, 4, file);/从A1开始 跨2行3个单元格 sheet.addImage(image);/ws是Sheet book.write(); book.close(); isSave = true; catch (Exception e) e.printStackTrace(); return isSave; ppackage
31、com.angeo.exportExcl;import java.io.*; import java.util.ArrayList;import java.util.List;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import com.angeo.model.Item;import com.angeo.model.ItemDao;import com.angeo.tools.ImagesMana;import
32、jxl.*; public class ReadXLS private static List list;private String fileUrl;private String headerName;private Sheet sheet = null;private FileInputStream fis = null; public ReadXLS(String fileUrl,String headerName) this.list = new ArrayList(); this.fileUrl = fileUrl;this.headerName = headerName; publ
33、ic List readXLS() try fis = new FileInputStream(fileUrl); Workbook book = Workbook.getWorkbook(fis); int sheetNumber = book.getNumberOfSheets(); for(int a=0; asheetNumber; a+) /读取第a个sheet Sheet sheet = book.getSheet(a); /获取EXCL文件行列数 int cloumn = sheet.getColumns();/列 int row = sheet.getRows();/行 /循环
34、查找表中与表头相一致的列,并输入信息 lop:for(int i=0; iheaderName.length; i+) for(int j=0; jcloumn; j+) /获取列名 Cell cellName = sheet.getCell(j, 0); String cloumnName = cellName.getContents().trim(); /如果EXCL数据表中有相应的数据,则取出 if(headerNamei.equals(cloumnName) for(int k=1; krow; k+) Cell cell = sheet.getCell(j, k); String r
35、esult = cell.getContents().trim(); addItemToList(result, k, i); if(i=0) addItemPhoto(sheet);/添加图片 continue lop; for(int k=1; krow; k+) addItemToList(, k, i); checkNullData(row);/清空空白数据行 ItemDao idao = new ItemDao(); /将数据保存到数据库中 for(int j=0; jlist.size(); j+) if(!idao.checkItemIsHave(list.get(j).getI
36、temName() idao.addItem(list.get(j); fis.close(); book.close(); catch (Exception e) /不是规定的EXCL文档,抛出错误 JOptionPane.showMessageDialog(null,选择的文件不是EXCL文件。, 数据导入, JOptionPane.ERROR_MESSAGE); list = null; e.printStackTrace(); finally if(fis != null) try fis.close();fis = null; catch (IOException e) e.prin
37、tStackTrace(); return list; /* * 向结果集List中添加数据 * param result * param row * param cloumn */ public static void addItemToList(String result,int row,int cloumn) switch (cloumn) case 0: /定制LIST以存放相应的数据 Item item = new Item(); item.setItemName(result); list.add(item); break; case 1:list.get(row-1).setSp
38、ecs(result);break; case 2:list.get(row-1).setPackRate(result);break; case 3:list.get(row-1).setFOB(result);break; case 4:list.get(row-1).setExW(result);break; case 5:list.get(row-1).setDesc(result);break; /将图片添加到本地 public void addItemPhoto(Sheet sheet) int imageNumber = sheet.getNumberOfImages(); int imageNow = list.size() / 3; System.out.println(imageNumber); System.out.println(imageNow); ImagesMana iMan = new ImagesMana(); for(int i=0; iimageNumber; i+) for(int j=0; j3; j+) int index = i * 3 + j; byte imageData = she