资源描述
序号: 10
学号: 11416230
常 州 大 学
课程设计
课 程 名 称: 《面向对象程序设计(JAVA)》
题 目: 企业销售管理系统
姓 名: `````````
学 院: 信息科学和工程学院 专业班级: ```````
指 导 教 师: ``````
设计时间: 年 12 月 24 日 ~ 年 1 月 11 日
目录
1. 任务书
a) 系统功效分析········································03
b) 系统组成············································03
2. 正文
a) 系统分析
i. 功效模块·········································04
ii. 功效步骤图·······································06
b) 数据库设计··········································07
c) 系统具体设计
i. 连接数据库·······································08
ii. 主界面···········································08
iii. 修改、添加、删除模块·····························10
iv. 查询、打印、登录模块·····························14
3. 系统使用说明···········································21
4. 日志···················································22
5. 心得体会···············································22
6. 参考文件···············································23
7. 致谢···················································23
一、任务书
(一)、系统功效分析
本系统用于对企业销售进行管理,包含职员基础信息表、商品信息表和职员销售信息表,关键功效包含:
l 数据表统计添加、删除、修改和浏览。
l 对职员基础情况、商品和销售相关信息查询。
l 报表打印输出。
l 系统退出。
(二)、系统组成
依据系统功效分析,给出系统参考处理方案。
整个系统功效经过菜单实现,包含数据库、表单、菜单、报表和主程序等多个部分,具体为:
后台数据库
销售管理数据库:
1.职员基础信息表(职员编号,职员名,年纪,性别,部门,职务)。
2. 商品信息表 (商品编号,商品名称,商品单价)。
3. 职员销售信息表 (职员编号, 商品编号,商品数目,应付金额,用户付款,找回金额)。
二、正文
(1) 系统分析:
企业销售管理系统关键实现功效为:和数据库连接,实施对职员基础信息表、商品信息表、职员销售信息表查询、修改、添加、删除等功效实现。和对3张表信息进行输出打印,打印保留成XLS格式。
功效模块以下:
查询功效:
模糊查找
正确查找
查询功效
其它模糊查找
金额模糊查找
数目模糊查找
名称模糊查找
编号模糊查找
名称查找
编号查找
添加其它
添加数目
添加编号
添加名称
添加功效
添加功效:
修改功效:
保留退出
修改功效
修改其它
修改数目
修改编号
修更名称
查询数据
删除功效:
删除功效
查询数据
确定删除
保留退出
程序结构步骤图:
企业销售管理系统
职员基础信息表
商品信息表
职员销售信息表
查询
修改
添加
删除
查询
修改
添加
添加
修改
删除
输出打印
系统退出
(2)数据库设计:
根据规范设计方法,考虑数据库及其管理系统开发全过程,将数据库设计分为以下六个阶段:
· 需求分析
· 概念结构设计
· 逻辑结构设计
· 物理结构设计
· 数据库实施
· 数据库运行和维护
基础要求
在mysql软件基础上,利用应用系统开发为企业销售管理设计数据库和建立对应数据库。创建4个表格,分别为sellInfo,staffInfo,goodsInfo,和登录所需password表格。
信息要求,处理要求,安全性和 完整性要求,数据流图,数据字典,数据项之间应有联络必需表示出来,用数据依靠表示即可逻辑结构设计必需:说明各个关系模式所属范式,假如不是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?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) {
System.out.println("数据库加载失败");
}
return connect;
}
二、 主界面:View.java
首先在主界面panel里显示数据库中数据,以商品信息表为例。
JTable table;
JScrollPane jscrollpane;//申明滚动面板变量
TableModel myTable = new DefaultTableModel();
Connection1 db = new Connection1();
Connection con = db.getConnection();//连接到数据库
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 columnNames = 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矢量中 */
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 = new JTable(myTable);
jscrollpane = new JScrollPane(table);
jscrollpane.setViewportView(table);
jscrollpane.revalidate();
jPanel3.setLayout(new BorderLayout());
jPanel3.add(jscrollpane, BorderLayout.CENTER);
jPanel3.setVisible(true);
效果以下:
三、修改模块:
首先对所需修改职员信息进行查询,并显示在修改界面上,关键代码以下:
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.getText())) {
//匹配该职员信息;
num1 = rs.getString("职员编号");
num2 = rs.getString("商品编号");
num3 = rs.getInt("商品数目");
price1 = rs.getInt("应付金额(元)");
price2 = rs.getInt("用户付款(元)");
price3 = rs.getInt("找回金额(元)");
}
}
jTextField2.setText(num1);
jTextField3.setText(num2);
jTextField4.setText("" + num3);
jTextField5.setText("" + price1);
jTextField6.setText("" + price2);
jTextField7.setText("" + price3);//在修改界面上显示该职员销售信息
}
然后在对修改界面上信息进行修改,并返回保留至数据库,关键代码以下:
String sql = "update sellInfo set 职员编号='" + num1 + "',商品编号='" + num2+ "',商品数目=" + num3 + ",应付金额(元)=" + price1 + ",用户付款(元)="+ price2 + ",找回金额(元)=" + price3 + " where 职员编号='" + num1 + "'";
try {
ps = con.createStatement();
ps.executeUpdate(sql);//数据更新
} catch (SQLException e) {
e.printStackTrace();
}
效果以下:
四、删除模块:
首先对用户输入职员编号或职员名称进行查找,当数据库中由此数据时,显示该数据,并请求用户是否确定删除,利用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())) {
num1 = 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() + "\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 staffInfo where 职员编号='" + jk
+ "'or 职员名='" + jk1 + "'";
Statement ps1;
try {
ps1 = con.createStatement();
ps1.execute(sql1);//实施删除
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
效果以下:
五、添加模块:
添加数据到数据库关键用是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.getText());
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();//实施并更新语句
效果以下:
六、查询模块:
查询方法关键有两种:一是正确查找,经过用户所输入编号,名称进行查找;二是模糊查找,经过用户所输入模糊信息进行查找,输出全部符合结果。
1.正确查找关键代码以下:
String sql = "select* from goodsInfo";
String num1 = null, name = null;
int num2 = 0;
Statement ps = con.createStatement();
ResultSet rs = ps.executeQuery(sql);
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 = jTextField3.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)) {
Statement ps;
ps = con.createStatement();
ResultSet rs;
rs = ps.executeQuery("select * from goodsInfo where 商品编号 like '"+ num1+ "%' and 商品名称 like '"+ num2+ "%' and 商品单价(元) like '" + num3 + "%'");
效果以下:
正确查找:输入商品编号:04,显示结果以下:
模糊查找:输入商品编号:0,显示结果以下:
七、打印模块:
打印信息表关键将修改好数据输出称excel形式,保留在电脑里,以staffInfo为例,
String[] title = { "职员编号", "职员名","年纪","性别","部门","职务"};// 准备设置excel工作表标题
String filePath = "D:\\staffInfo.xls";// 输出excel路径
OutputStream os = new FileOutputStream(filePath);// 创建Excel工作薄
WritableWorkbook wwb = Workbook.createWorkbook(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]);// 将定义好单元格添加到工作表中
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 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.showMessageDialog(null, "输出打印职员基础信息表成功!保留在D:staffInfo");
八、登陆界面:Login.Java
首先连接数据库,并判定用户所输用户名,密码是否正确,假如匹配则让其经过,不然提醒用户名和密码不匹配,请重新输入。判定方法queryUser语句以下:
boolean queryUser(String userName,String pass){
Connection1 db=new Connection1();
Connection con=db.getConnection();
String sql="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;
else
return false;
}else
return false;
登录以下:
(4)系统使用说明:
设备支持:推荐配置:Windows7,512内存。
数据库:MySQL Server 5.0。
软件支持:MyEclipse 编写。
(5)日志:
课程设计第一天:进行整体布局构思,创建职员信息表、商品信息表、职员销售信息表连接数据库,实现多个方法验证登录。
第二天:创建主界面,将数据库里表格信息出现在用户端上。关键是panel利用。
第三天:进行简单语句查询,调试编码问题—汉字乱码,并设置滚动面板。经过网上查找了解学习输出打印,将表格输出保留为xls文件。
第四天:编写删除功效代码,利用sql语句对编号正确查找,然后读取该行数据,实现对数据删除,并设置对应控件。
第四天:编写添加、修改功效代码,创建功效面板,调用sql语句进行查找,取得符合要求数据,修改并进行更新数据。
第五天:编写模糊查询,实现对数据模糊查找,并显示在数据面板上。
第六天:在主界面中调用调试各个功效面板,实现功效。并对各个图形界面进行美化。
第七天:编写备注信息,填写课程设计汇报。
(6)心得体会
依据题目要求,编写一个企业销售管理系统。开始设计时,因为初学java语言,对于系统整体编写有一定难度,所以茫然无措。在翻阅了部分书籍后最终有些想法,并开始付诸实施。连接数据库是碰到第一个难点,过程中总是碰到汉字字符,和java和数据库数据交互时汉字乱码问题。后经过调试,查阅资料,并尝试用网上字符转码语句fliter,将写入数据和从数据库中读取数据进行转码,知道须将数据库注册码和生成表字符码要和java编辑软件myeclipse字符码相一致,才排除了数据库信息在面板中异常显示。当处理到选择查询、模糊查询时,又碰到了sql语句引号问题,在sql语句中加入参数需要引号,假如是字符类型,需要表示为’”+data+”’,假如单单是整型,就不需要单引号了。相关局部变量、组员变量、全局变量,也有了深入认识,并经过此程序编写得到了强化。包含到数据库修改问题,因为第一次写入update语句中没有写上判定在数据库中哪一行改变(where···),结果造成全部数据全部变为同一数据,数据库信息丢失了。相关面板居中问题也能自己经过直接编辑代码实现。唯一遗憾是此系统采取是可视化界面做,全部GUI组件位置不稳定,易受干扰,所形成图形界面在美观上不是很好,有待改善。总而言之,此次课程设计不仅锻炼了自己利用java语言编写能力,也增强了自己在处理部分错误,排错技能,对自己以后学习有很大帮助。
参考文件
[1] 孙浏毅.Java宝典[M].电子工业出版社..8
[2] 郎波.Java语言程序设计[M].2版.清华大学出版社..9
[3]张广彬.王小宁.高静Java课程设计案例精编(第二版)[M].清华大学出版社..6
[4]王鹏.何昀峰.Java Swing 图形界面开发和案例详解[M].清华大学出版社..12
注: [M]论著
(8)致谢
展开阅读全文