基于Java+MySQL实现(WinForm)客户管理系统【100010236】
客户资料管理系统的设计与实现
第一章 需求分析
1.1 需求总体介绍
本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对系统资料进行磁盘文件保存。旨在实现客户电子化管理,它主要包括客户界面、客户信息的增加界面、客户信息的修改界面、显示全部客户的信息、删除一条用户信息、按照用户的编号查询用户信息、按照用户的姓名查询用户信息、按照用户的地址查询用户信心、退出系统界面。客户管理系统是一个现代化的软件,它通过窗口 swing 和数据库的结合,以便于对客户信息集体化管理,提高了管理效率,美观性强。
1.2 系统的功能性需求
方便维护客户信息,对客户进行统一管理,把客户信息录入系统进行统计和管理维护。包括客户增加、客户删除、客户修改、客户查询、浏览客户、城市增加、城市删除、城市修改、城市查询、浏览城市、退出系统等功能。并且设置了两个用户权限等级,针对不同客户实现不同的功能。添加了天气,日期等功能并可以实时更新。
1.3 系统的非功能性需求
用户界面有增加用户,用户列表,修改密码等、需要配置好 Java 环境,对 eclipse 配置,连接好数据库,在数据库中建好列表。
第二章 数据库设计
2.1 数据库概念结构设计
图 2-1 客户实体与其属性图
图 2-2 增加客户信息图
图 2-3 查询客户信息图
图 2-4 修改客户信息图
图 2 -5 删除客户信息图
图 2-6 总 E-R 图
2.2 数据库逻辑结构设计
2.2.1 完成关系模式的转化
基本信息:客户编号、客户姓名、客户电话、客户性别、客户邮箱、客户城市、客户等级
2.2.2 数据字典
数据和表的建立:
图 2-7 数据库建立图
图 2-8 数据表建立图 1
图 2-9 数据表建立图 2
图 2-10 数据表建立图 3
2.3 数据库列表
表 2-1 城市信息表
字段名 | 数据类型 | 字段含义 | ||||
---|---|---|---|---|---|---|
cityid | int | 城市编号 | ||||
cityname | varchar(20) | 城市姓名 | ||||
表 2-2 客户信息表
字段名 | 数据类型 | 字段含义 | ||||
---|---|---|---|---|---|---|
custid | int | 客户编号 | ||||
custname | varchar | 客户姓名 | ||||
custphone | varchar | 客户电话 | ||||
custemail | varchar | 客户邮箱 | ||||
custgender | varchar | 客户性别 | ||||
cityid | int | 客户城市 | ||||
custlevel | int | 客户等级 |
图 2-2 用户信息图
字段名 | 数据类型 | 字段含义 | ||||
---|---|---|---|---|---|---|
userid | int | 用户编号 | ||||
userpassword | varchar(20) | 用户密码 | ||||
username | varchar(20) | 用户姓名 | ||||
userlevel | int | 用户等级 |
第三章 系统设计
系统采用 dao 设计。dao 全称是 data access object,数据库访问对象,主要的功能就是用于进行数据操作的,在程序的标准开发架构中属于数据层的操作。
3.1 体系结构设计
将需求分析中的系统功能用类(实体类、操作类、工具类、异常类等)的形式进行设计,搭建合理的系统架构。
dao 包:
ICustomerDao 类是用来装封一定功能(增、删、改、查、浏览)的集合。它好比一个模板,在其中定义了对象必须实现的成员,通过类或结构来实现它。
impl 包:DAO 接口的真实实现类,完成具体的数据库操作,但是不负责数据库的打开和关闭;
CustomerDao 类:用数据库来实现增删改查浏览等功能;
model 包:
Customer 类:客户属性 get 和 set 方法,toString 方法
program 包:程序界面
AddCustomerFrame 类:增加客户的界面
CloseWindow 类:退出系统
DelCustomerFrame 类:删除客户的界面
LoginFrame 类:主界面,即登录上本系统弹出的界面
MainFrame 类:主函数,运行管理系统
SearchCustomerFrame 类:查询客户信息界面
ShowCustomerFrame 类:显示所有员工界面
UpCustomerFrame 类:修改客户信息的界面
util 包:
BaseDao 类:数据库连接与关闭
,
3.2 人机交互设计
3.3 用户界面设计规则
管理员管理部分:
(1)管理员可以增加客户信息
(2)管理员可以删除客户信息
(3)管理员可以修改客户信息
(4)管理员可以查询客户信息
(5)管理员可退出管理系统
第四章 系统实现
4.1 数据库实现
private String url = “jdbc:mysql://localhost:3306/cus?useUnicode=true&characterEncoding=UTF-8”;
private String username = “root”;
private String password = “”;
private Connection conn = null;
建立一个数据库,数据库名为 cus。
以下为用户登录,用户名如上语句为“root”,密码为 null。
然后是数据库表的创建,表名为 customer,如语句所示:
String SQL = "SELECT * FROM user WHERE username=? AND userpassword=?";
String SQL = "UPDATE `user` SET `userpassword` = ? WHERE `user`.`userid` =?";
String SQL = "SELECT * FROM `user` WHERE username=?";
String SQL = "UPDATE `user` SET `username` = ? WHERE `user`.`userid` =?";
String SQL = "INSERT INTO `user` (`userid`, `username`, `userpassword`, `userlevel`) VALUES (NULL, ?, ?, ?)";
String SQL = "SELECT * FROM `user` WHERE userid=?";
String SQL = "DELETE FROM `user` WHERE `user`.`userid` = ?";
String SQL = "select * from customer";
String SQL = "SELECT * FROM customer WHERE custid=?";
String SQL = "INSERT INTO customer VALUES (NULL,?,?,?,?,?,?)";
String SQL = "UPDATE customer SET custname = ?,custphone = ?,cuetemail = ?,custgender = ?,cityid = ?,cuslevel = ? WHERE custid = ?";
String SQL = "DELETE FROM customer WHERE custid=?";
String SQL = "select * from city";
String SQL = "select * from city order by cityid desc";
String SQL = "SELECT * FROM city WHERE cityid = ?";
String SQL = "INSERT INTO city VALUES (NULL,?)";
String SQL = "UPDATE city SET cityname = ? WHERE cityid = ?";
String SQL = "DELETE FROM city WHERE cityid=?";
String SQL = "SELECT * FROM city WHERE cityname = ?";
4.2 主界面的实现
protected void listCustomerButton(MouseEvent e) {
new ListCustomerFrame().setVisible(true);
}
/**
* 新增客户
* @param e
*/
protected void addCustomerButton(MouseEvent e) {
new AddCustomerFrame().setVisible(true);
}
/**
* 新增城市
* @param e
*/
protected void addCityButton(MouseEvent e) {
new AddCityFrame().setVisible(true);
}
/**
* 城市列表
* @param e
*/
protected void listCityButton(MouseEvent e) {
new ListCityFrame().setVisible(true);
}
/**
* 用户列表按钮点击事件
* @param e
*/
protected void listUserButton(MouseEvent e) {
new ListUserFrame().setVisible(true);
}
/**
* 增加用户按钮点击事件
* @param e
*/
protected void addUserButton(MouseEvent e) {
new AddUserFrame().setVisible(true);
}
/**
* 客户管理组件点击事件
* @param e
*/
protected void mangeCusButton(MouseEvent e, JPanel mangeCusPanel) {
getContentPane().add(mangeCusPanel);
}
/**
* 退出按钮
* @param e
*/
protected void exitButton(ActionEvent e) {
System.exit(0);
}
/**
* 修改密码按钮
* @param arg0
* @param user
*/
protected void updatePasswordButton(ActionEvent arg0, User user) {
new UpdatePwdFrame(user).setVisible(true);
}
/**
* 窗口大小改变事件
*/
protected void mainFrameComponentResized(ComponentEvent arg0, JPanel topPanel, GroupLayout gl_panel) {
4.3 增加功能的实现
protected void addButton(ActionEvent e) {
String cityname = this.citynameText.getText();
}
if (cityname.isEmpty()) {
JOptionPane.showMessageDialog(this, "请输入城市名称");
this.citynameText.requestFocus();
return;
}
if (cityname.length() > 20) {
JOptionPane.showMessageDialog(this, "对不起,城市名称不能超过20位!");
this.citynameText.requestFocus();
return;
}
City city = new City();
city.setCityname(cityname);
int row = cdao.addCity(city);
if (row > 0) {
JOptionPane.showMessageDialog(this, "保存城市信息成功");
} else {
JOptionPane.showMessageDialog(this, "保存城市信息失败");
}
}
4.4 查询功能的实现
protected void detailCustomer(MouseEvent arg0) {
int row = this.table.getSelectedRow();
int custid = (Integer) this.table.getValueAt(row, 0);
Customer customer = cdao.queryCustomerById(custid);
this.custidText.setText(String.valueOf(customer.getCustid()));
this.custnameText.setText(customer.getCustname());
this.custphoneText.setText(customer.getCustphone());
this.cuetemailText.setText(customer.getCuetemail());
this.getCitys("modify");
this.cuslevelText.setText(String.valueOf(customer.getCuslevel()));
if (customer.getCustgender().equals("男")) {
this.menjrbn.setSelected(true);
} else {
this.womenjrb.setSelected(true);
}
int count = this.cityidJrb.getItemCount();
for (int i = 0; i < count; i++) {
City selectcity = dao.queryCityById(customer.getCityid());
if (selectcity.getCityname().equals(this.cityidJrb.getItemAt(i))) {
this.cityidJrb.setSelectedIndex(i);
}
}
}
4.5 修改功能的实现
protected void gainameButton(ActionEvent e) {
String strCustid = this.custidText.getText();
int custid = Integer.parseInt(strCustid);
String custname = this.custnameText.getText();
String cityname = (String) this.cityidJrb.getItemAt(cityidJrb.getSelectedIndex());
String cuetemail = this.cuetemailText.getText();
String custphone = this.custphoneText.getText();
City city = dao.queryCityByName(cityname);
int cuslevel = Integer.parseInt(this.cuslevelText.getText());
Customer customer = new Customer();
customer.setCustid(custid);
customer.setCustname(custname);
customer.setCuetemail(cuetemail);
customer.setCityid(city.getCityid());
customer.setCuslevel(cuslevel);
customer.setCustphone(custphone);
if (this.menjrbn.isSelected()) {
customer.setCustgender("男");
} else {
customer.setCustgender("女");
}
int row = cdao.updateCustomer(customer);
if (row > 0) {
JOptionPane.showMessageDialog(this, "修改成功");
this.getCustomers(null);
} else {
JOptionPane.showMessageDialog(this, "修改失败");
4.6 删除功能的实现
protected void deleButton(ActionEvent e) {
String strCustid = this.custidText.getText();
int custid = Integer.parseInt(strCustid);
int row = this.cdao.deleteCustomer(custid);
if (row > 0) {
JOptionPane.showMessageDialog(this, "删除客户成功");
this.getCustomers(null);
} else {
JOptionPane.showMessageDialog(this, "删除客户失败");
第五章 系统测试
5.1 测试概要
先建立数据库测试,然后分别对客户增加、客户删除、客户修改、客户查询、浏览客户、等功能进行测试。
5.2 测试结果及发现
表 5-1 建立数据库测试表
序号 | 1 | ||
---|---|---|---|
控件名称 | |||
描述 | 建立数据库 | ||
编号 | 输入/动作 | 期望的输出 | 实际情况 |
1 | 输入用户名“root”,密码为 null | 无输出 | 提示“数据库建立成功” |
表 5-2 增加客户测试表
序号 | 2 | ||
---|---|---|---|
控件名称 | |||
描述 | 增加客户 | ||
编号 | 输入/动作 | 期望的输出 | 实际情况 |
1 | 编号,姓名 | 提示“添加成功!” | 提示“添加成功!” |
2 | 编号,地址 | 提示“添加失败!” | 提示“添加失败!” |
3 | 姓名,地址 | 提示“添加失败!” | 提示“添加失败!” |
4 | 编号,地址,姓名 | 提示“添加成功!” | 提示“添加成功!” |
表 5-3 删除客户测试表
序号 | 3 | ||
---|---|---|---|
控件名称 | |||
描述 | 删除客户 | ||
编号 | 输入/动作 | 期望的输出 | 实际情况 |
1 | 不存在的编号 | 提示“查询无此客户!” | 提示“查询无此客户!” |
2 | 存在的编号 | 提示“删除成功!” | 提示“删除成功!” |
表 5-4 修改客户测试表
序号 | 4 | ||
---|---|---|---|
控件名称 | |||
描述 | 修改客户 | ||
编号 | 输入/动作 | 期望的输出 | 实际情况 |
1 | 不存在的编号 | 提示“查询无此客户!” | 提示“查询无此客户!” |
2 | 存在的编号,输入姓名和地址 | 提示“修改成功!” | 提示“修改成功!” |
表 5-5 查询客户测试表
序号 | 5 | ||
---|---|---|---|
控件名称 | |||
描述 | 查询客户 | ||
编号 | 输入/动作 | 期望的输出 | 实际情况 |
1 | 编号 | 客户姓名和地址 | 客户姓名和地址 |
2 | 地址 | 客户编号和姓名 | 客户编号和姓名 |
3 | 姓名 | 客户编号和地址 | 客户编号和地址 |
4 | 不存在的编号,姓名,或者地址 | 提示“查询无此客户!” | 提示“查询无此客户!” |
表 5-6 浏览客户测试表
序号 | 6 | ||
---|---|---|---|
控件名称 | |||
描述 | 浏览客户 | ||
编号 | 输入/动作 | 期望的输出 | 实际情况 |
1 | 无输入 | 所有客户信息,包括无客户的情况 | 所有客户信息,包括无客户的情况 |
5.3 测试结果
经测试,数据库,客户增加、客户删除、客户修改、客户查询、浏览客户、等功能都正常,可正常运行、
第六章 系统使用说明书
6.1 用户登录
首先输入用户名密码登陆系统
6.2 进入系统
两种权限对应两种登录界面,实现不同的功能
6.3 新增客户
6.4 访问客户列表修改
♻️ 资源
大小: 9.87MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87354184
相关文章
- Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
- Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
- 「mysql优化专题」90%程序员没听过的存储过程和存储函数教学(7)
- Mysql优化的几点总结
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- Ruby on Rails 3 Can't connect to local MySQL server through socket '/tmp/mysql.sock' on linux
- 数据库基础之Mysql(3)mysql删除历史binlog
- Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
- Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
- MySQL事务详解
- 【java】Java连接mysql数据库及mysql驱动jar包下载和使用
- 上Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题和解决方法
- java访问mysql方法数据库
- MySQL逻辑备份和物理备份
- Mysql之mysql工具
- MySql高级----Linux下的mysql的安装与初始化配置
- 【java】Java 抽象类
- 【java】Java 继承
- JAVA开发讲义(二)-Java程序设计之数据之谜三