资源描述
朱俐楠:农资店信息管理系统
中 原 工 学 院
二 级 课 题 任 务 书
2011年6月13日
学生姓名
朱俐楠
学号
201007132211
专 业
软件技术
班级
编码J102
课题名称
农资店信息管理系统
课题来源
二级实训模拟课题
指导教师
郭彦宾
专业
计算机科学与技术
职称
集成项目经理
课题说明:农资店信息主要有农资货物的各种信息,如:货物的名字、类型、单价、生产日期、保质期等;其次是客户的各种信息,如:客户的名字、地址、电话、购得货物种类、数量及时间、备注等。本系统主要实现上述信息的增删改查功能,对特殊信息的汇总等其他功能。
额承担的任务:
1.数据库设计
2.实现客户信息管理的SWING界面并实现监听器的添加
中 原 工 学 院
二 级 课 题 任 务 书
2011年6月14日
工作进度安排:
任务名称
时间轴2011-6-13至2011-6-28(除周日)
负责人
审核人
1
2
3
4
5
6
7
8
9
10
11
12
孙军超
郭彦宾
总体进度
30%
62%
8%
范金梅
整理资料
范金梅
编写代码
孙军超
代码测试
朱俐楠
整理文档
朱俐楠
指导教师签字:
2011年 6 月 28 日
实训单位意见
签章:
年 月 日
学院意见
签章:
年 月 日
中 原 工 学 院
二 级 课 题 评 审 表
学号
201007132211
姓名
朱俐楠
专业
软件技术
班级
编码J102
题目
农资店信息管理系统
指
导
教
师
评
语
成绩(百分制): 指导教师签名: 2011年 6 月 日
软 件 学 院
二级课题实训报告
课题名称: 农资店信息管理系统
专 业: 软件技术
班 级: 编码J102
学 号: 201007132211
学生姓名: 朱俐楠
指导教师: 郭彦宾
2011年 6 月 28 日
24
摘 要 3
第1章 项目分析 4
1.1 问题描述 4
1.2 技术分析 4
1.3 工程进度计划 4
第2章 系统分析与设计 5
2.1 系统分析 5
2.1.1 参与者 5
2.1.2 需求分析 5
2.1.3 可行性分析 5
2.2 系统设计 5
2.2.1 系统规划 6
2.2.2 类图 6
2.2.3 E-R图 7
2.3 数据库设计 7
2.3.1 表结构设计 7
2.3.2 系统功能结构图 8
第3章 实现与测试 9
3.1部分功能模块展示 9
3.1.1 界面 9
3.1.2 代码 9
第4章 结束语 14
附录:主要源代码 15
摘 要
随着计算机的普及和计算机科学技术的飞速发展,人们开始越来越多地利用计算机来解决实际问题。现在连街头的小商店有些都有自己信息管理系统,帮助店主有条理的管理自己的货物。同样跟生活杂物商店功能及性质差不多的农资商店的货物种类以及各种账目数量一点也不亚于其他种类的商店,为了解决这个问题,我们小组经过协商之后决定利用这次做课题的机会,做一套方便农资店主管理货物和账目的小型软件。
首先实现整个登陆界面及菜单界面、根据所要实现的功能实现各种SWING界面并添加相应的监听器,再根据提前规划的功能实现DAO层中的各种方法,再实现监听器方法体中的具体代码。
整个系统从操作简便、界面友好、灵活、实用、安全的要求出发,完成对进货登记、销售查询、账目管理,包括对系统数据的维护,信息的添加、删除、查询等。计算机信息化管理以其存储信息量大、速度快、便于管理等优点将会受到更多用户的青睐。
关键词:监听器、数据库连接、DAO、SWING
第1章 项目分析
1.1 问题描述
实现各种SWING界面及监听器,统一编写DAO层中实现各种功能的方法,完善监听器方法体中的内容。
1.2 技术分析
SWING界面的容器采用JFrame编写,底层数据库采用MYSQL,实现功能时连接数据库采用----使用某个功能前,连接一次数据库,使用完毕后,立即关闭数据库的模式。添加监听器时,统一使用一个监听器内部类,监听器方法采用判断名字进行区分各个BUTTON之间的不同。汇总各种信息使用JTABLE组件,所有监听器方法统一写在一个DAO包中进行封装。客户、货物、用户信息使用JAVABEAN封装,使用其GET、SET方法进行信息在数据库和SWING界面之间的流通。欢迎、菜单界面友好、易懂,便于用户使用,并且有友好的提示界面。数据库是一项技术,主要包括数据的管理和处理两部分;在数据库的设计中,重点在数据库的需求分析中,构化出来,把用户所需的要求统统分析出来,再进一步的进行设计;完成相应的需求分析后,就是对数据库结构的设计,数据库结构设计主要分为数据库结构设计和数据库行为设计,数据库结构设计是在需求分析的基础上逐步形成对数据库概念,逻辑,物理结构的描述了、概念结构要有丰富的语义表达能力,表达用户的各种需求;概念设计的策略主要有三种:自上向下,自顶向外,自里向外和混合策略;逻辑结构设计主要是把在概念设计中设计的基本E-R模型转换为具体数据库管理系统支持的组织层数据模型;一般包括将概念结构转换为组织层数据模型;对组织层数据模型进行优化;物理结构设计是利用数据库管理系统提供的方法,对已确定数据库逻辑结构进行优化存储结构,数据存取路径,合理的位置以及存储分配等;从而设计出一个高效,可实现的无理数据结构。
1.3 工程进度计划
6月13日到6月17日:需求分析
6月17日到6月19日:结构设计(概念、逻辑、物理结构设计)
6月19日到6月22日:行为设计(功能设计、事务设计、程序设计)
6月22日到6月25日:代码实现
6月25日到6月27日:代码测试
6月27日到6月28日:整理文档
第2章 系统分析与设计
2.1 系统分析
2.1.1 参与者
系统分析指导:老师
数据库设计者:范金梅、朱俐楠
需求分析与可行性分析者:孙军超
2.1.2 需求分析
经过对几个农资店铺的日常工作的调查研究及管理流程的分析,要求本系统具有以下功能:
l 农资信息查询功能,方便店员销售货物时掌握价格的尺度。
l 农资信息的删除、修改、增加功能,确保信息的准确性和完整性。
l 客户信息的增删改查功能,利用备注信息掌握客户的各种信息。
l 账目总结功能,防止漏帐,错帐的状况发生。
l 统一、友好的操作界面,以保证系统的易用性。
2.1.3 可行性分析
根据调查得知,现在大多数小型农资商店采取手工方式对农资信息进行管理。将不好记住的价格弄个标签贴在货物架上,当进价调整时再统一换一遍,工作量大,也不免出现差错。对客户信息也是采用纯手工操作,既费时又费力,一旦账本等用作记录的本子丢失,将死无对证。
基于这一系列的问题,实在是有必要建立一个农资信息管理系统,使农资店的日常生活管理工作规范化、系统化、程序化、避免管理的随意性,提高信息处理的速度和准确性,能够及时、有效准确地完成每天的销售、账目管理任务,为广大农资店主提供方便。
2.2 系统设计
先在Jpane添加设计好的Jlabel和Jbutton,建好界面,再给按钮添加监听器,使其实现相应的功能,实现功能的同时连接数据库,比如说查询,按下查询按钮,监听器进行监听,连接数据库,执行查询语句,调出数据库中的数据实现查询,更新,删除,清空,实现其功能时,与查询雷同。
2.2.1 系统规划
本系统由货物管理、客户管理、账目管理三个功能模块组成,以后也可扩充,具体内容如下:
l 货物管理
货物管理主要实现货物的增删改查功能。
l 客户管理
客户管理主要实现客户的增删改查功能。
l 账目管理
账目管理主要实现账目的添加和总结功能。
2.2.2 类图
AgriculturalDAO
-conn: Connection
+getConnection():Connection
+add(ClienteleInformationDO a):int
+add(AgriculturallInformationDO a):int
+add(UserInformationDO a):int
+closeConnection(ResultSet r,PreparedStatement p,Connection conn):Void
+delete(AgriculturallInformationDO a):int
+delete(ClienteleInformationDO a):int
+delete(UserInformationDO a):int
+update(AgriculturallInformationDO a):int
+update(ClienteleInformationDO a):int
2.2.3 E-R图
货物
客户
销售
ID
Name
Type
Date
Beizhu
Price
KID
KName
Tel
Pay
Beizhu
Address
Beizhu
Number
2.3 数据库设计
2.3.1 表结构设计
Load表结构
字段名
数据类型
是否为空
是否主键
默认值
USERId
Int(11)
NO
是
0
USER
Varchar(255)
YES
是
NULL
PWD
Varchar(255)
YES
否
NULL
Agricultural Information表结构
字段名
数据类型
是否为空
是否主键
默认值
AgriculturalId
Int(11)
NO
是
0
Name
Varchar(20)
YES
否
NULL
Type
Varchar(255)
YES
否
NULL
Price
Varchar(255)
YES
否
NULL
Date
Varchar(255)
YES
否
NULL
Beizhu
Varchar(255)
YES
否
NULL
Clientele Information表结构
字段名
数据类型
是否为空
是否主键
默认值
ClienteleId
Int(11)
NO
是
0
KeHuName
Varchar(20)
YES
否
NULL
Tel
Varchar(20)
YES
否
NULL
Pay
Varchar(255)
YES
否
NULL
Address
Varchar(255)
YES
否
NULL
Beizhu
Varchar(255)
YES
否
NULL
Sale Information表结构
字段名
数据类型
是否为空
是否主键
默认值
ClienteleId
Int(11)
NO
是
0
AgriculturalId
Int(11)
NO
是
0
Number
Varchar(255)
YES
否
NULL
Beizhu
Varchar(255)
YES
否
NULL
2.3.2 系统功能结构图
农资店管理系统
货物信息管理
客户信息管理
账目管理
添加货物信息
删除货物信息
修改货物信息
查询货物信息
修改客户信息
删除客户信息
添加客户信息
查询客户信息
年终结账
退出系统
第3章 实现与测试
3.1部分功能模块展示
3.1.1 界面
3.1.2 代码
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import DO.ClienteleInformationDO;
import dao.AgriculturalDAO;
public class SelectKeHuSwing extends JFrame{
private JTextField[] jtf = new JTextField[3];
private AgriculturalDAO dao = new AgriculturalDAO();
private JTextArea jta = new JTextArea();
private JTextArea jta1 = new JTextArea();
String tablename = "ClienteleInformation";
public SelectKeHuSwing(){
for(int i = 0;i < 3;i++){
jtf[i] = new JTextField(8);
}
JPanel pane=new JPanel();
JPanel pane2=new JPanel();
pane.add(new JLabel("请输入客户名字进行查询"));
JPanel pane1=new JPanel();
pane1.setLayout(new GridLayout(5,2,5,5));
pane1.add(new JLabel("客户名:"));
pane1.add(jtf[0]);
pane1.add(new JLabel("客户电话:"));
pane1.add(jtf[1]);
pane1.add(new JLabel("客户住址:"));
pane1.add(jtf[2]);
pane1.add(new JLabel("消费额:"));
pane1.add(jta);
pane1.add(new JLabel("备注:"));
pane1.add(jta1);
JButton d1=new JButton("查询");
pane2.add(d1);
JButton d2=new JButton("清空");
pane2.add(d2);
JButton d4=new JButton("更新");
pane2.add(d4);
JButton d3=new JButton("删除");
pane2.add(d3);
add(pane1,BorderLayout.CENTER);
add(pane,BorderLayout.NORTH);
add(pane2,BorderLayout.SOUTH);
setTitle("查询客户信息");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,200);
setVisible(true);
d1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
for(int i = 0; i < 4;i++){
try {
jtf[i].setText(dao.select(tablename, jtf[0].getText()).getString(i+1));
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
try {
jta.setText(dao.select(tablename, jtf[0].getText()).getString(4));
jta1.setText(dao.select(tablename, jtf[0].getText()).getString(5));
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
d2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
for(int i = 0;i < 3;i++){
jtf[i].setText("");
}
jta.setText("");
jta1.setText("");
}
});
d3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dao.delete(keHuDO());
}
});
d4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dao.update(keHuDO());
}
});
}
public ClienteleInformationDO keHuDO(){
ClienteleInformationDO a = new ClienteleInformationDO();
a.setName(jtf[0].getText());
a.setTel(jtf[1].getText());
a.setPay(jtf[2].getText());
a.setAddress(jta.getText());
a.setBeizhu(jta1.getText());
return a;
}
}
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import DO.AgriculturalInformationDO;
import DO.ClienteleInformationDO;
import dao.AgriculturalDAO;
public class AddKeHuSwing extends JFrame{
private JTextField[] jtf= new JTextField[3];
private AgriculturalDAO dao = new AgriculturalDAO();
private JTextArea jta = new JTextArea();
private JTextArea jta1 = new JTextArea();
public ClienteleInformationDO keHuDO(){
ClienteleInformationDO a = new ClienteleInformationDO();
a.setName(jtf[0].getText());
a.setTel(jtf[1].getText());
a.setPay(jtf[2].getText());
a.setAddress(jta.getText());
a.setBeizhu(jta1.getText());
return a;
}
public AddKeHuSwing(){
for(int i = 0;i < 3;i++){
jtf[i] = new JTextField(8);
}
JPanel pane1=new JPanel();
pane1.setLayout(new GridLayout(6,2,5,5));
pane1.add(new JLabel("客户名:"));
pane1.add(jtf[0]);
pane1.add(new JLabel("客户电话:"));
pane1.add(jtf[1]);
pane1.add(new JLabel("客户地址:"));
pane1.add(jta);
pane1.add(new JLabel("消费额:"));
pane1.add(jtf[2]);
pane1.add(new JLabel("备注:"));
pane1.add(jta1);
JButton d1=new JButton("添加");
pane1.add(d1);
JButton d2=new JButton("清空");
pane1.add(d2);
add(pane1);
setTitle("添加客户信息");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,200);
setVisible(true);
d1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dao.add(keHuDO());
}
});
d2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
for(int i = 0;i < 3;i++){
jtf[i].setText("");
}
jta.setText("");
jta1.setText("");
}
});
}
}
第4章 结束语
在这次系统开发的过程中,我们这组遇到了许多难题,也许是由于基础知识的不足,也或许是因为第一次开发软件的问题,刚下手的时候明显有些吃力,不过经过组里人员的认真探讨和专注编程,最终度过重重难关,完成了这次课题,虽然仍有许多不足之处,但里面包含着组里人员这段时间的汗水和努力,心中还是挺高兴的,这次课题不仅让我巩固了基础知识,还让我从组员那里学到了更深一层的知识,让我明白了软件开发不仅需要的是技术,更多的还有团队精神和团队合作,也让我体会到了编码的深奥之处,让我对编码有了重新的认识,在做课题之前我对连接数据库这部分知识非常迷茫,恰好我们这组开发的系统能用到这些知识,组里给我分配的任务是建表,建表相对其他组成员的任务比较容易,所以我很快就完了任务,完成任务不是目的,最重要的是要从别的成员那里学到自己不会的知识,我们组长很精通数据库这部分知识,经过他的耐心教导,让我学会了关于数据库的这部分知识,也让我明白了知识是自己主动去学的,要主动把握住每次可以学到知识的机会。
这次课题让我体会到了组成员之间的友谊,这次我们的合作非常成功,如果以后有类似的课题我们会继续合作,创作出更加完美的系统。
参考文献:
[1] 何玉洁 等编著的《数据库原理与应用教程》 机械工业出版社 2010年 9月
[2] 万波 郑海红 李娜 等译的《JAVA语言程序设计》基础篇及进阶篇 机械工业出版社
[3] 王国辉,王毅,王殊宇等编著的《JAVA web开发典型模块大全》人民邮政出版社。
附录:主要源代码
package dao;
import java.sql.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import DO.*;
public class AgriculturalDAO {
private static Connection conn = null;
public Connection getConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/agricultural?useUnicode=true&characterEncoding=GB2312", "root", "root");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public void closeConnection(ResultSet rs,PreparedStatement pstmt,Connection conn){
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public void closeConnection(PreparedStatement pstmt,Connection conn){
try {pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
private ResultSet executeQuery(String sql) {
try {
if(conn==null)
getConnection();
return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE).executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
return null;
} finally {
}
}
private int executeUpdate(String sql) {
try {
if(conn==null)
getConnection();
return conn.createStatement().executeUpdate(sql);
} catch (SQLException e) {
System.out.println(e.getMessage());
return -1;
} finally {
}
}
public ResultSet select(String tablename,String str){
String sql = "select * from " + tablename + "where name = ?" ;
ResultSet result = null;
try {
Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, str);
result = executeQuery(sql);
closeConnection(result,pstmt,conn);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
public DefaultTableModel showTable(String tablename){
DefaultTableModel tableModel = new DefaultTableModel();
Vector row = new Vector();
Vector column = new Vector();
String sql = "select * from " + tablename ;
int i = 0;
try {
Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet result = executeQuery(sql);
i = result.getMetaData().getColumnCount();
System.out.println("影响结果条数:" + i);
while(result.next()){
Vector single = new Vector();
for(int j = 0; j < i;j++){
single.addElement(result.getObject(j + 1));
row.addElement(single);
}
for(int k = 1;k <= i;k++){
column.addElement(result.getMetaData().getColumnName(k));
}
}
tableModel.setDataVector(row, column);
closeConnection(result,pstmt,conn);
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return tableModel;
}
public int isload(UserInformationDO u){
int flag = 0;
String sql = "select * from where user = '" + u.getUser() + "'";
try {
Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet resultset = pstmt.executeQuery();
if(resultset.next()){
if(u.getPwd().equals(resultset.getString("pwd"))){
flag = 1;
resultset.last();
int rowSum = resultset.getRow();
resultset.first();
if(rowSum != 1){
flag = 0;
}
}else
flag =
展开阅读全文