客户管理系统 详细流程(不用三大框架)

2023-11-04

客户管理系统的详细编写流程

一、系统设计

1、需求分析

(系统中包含哪些数据模型、数据模型存在怎样的关系 E-R图、UML(用例图))

2、制作页面Demo

(和真实系统效果一样,给客户确认需求)

3、技术选型(环境搭建)

 软件建模工具:IBM RSA、Rational Rose、Jude(日本研发 纯java编写,小巧。在此次编写中使用)

技术选型:DHTML+JSP+Servlet+C3P0+DBUtils+MySQL(MVC模式,DAO模型)+Tomcat6+Windows

4、数据库设计 ----- 新建数据库 新建用户
create table customer(
   id varchar(40) primary key,
   name varchar(20) not null,
   gender varchar(10) not null,
   birthday date ,
   cellphone varchar(20),
   email varchar(40),
   preference varchar(100),
   type varchar(40) not null,
   description varchar(255)
);
创建数据库新用户angle  并利用angle来实现JDBC对数据库的操作

create user angel identified by 'angel';          --此句用来创建angle用户  密码用identified设置为angle
grant all on customer.* to angel;                    --此句用来限定angle账户访问的权限为customer下的一切数据

5、搭建开发环境

(1)创建工程
(2)导入jar包

c3p0-0.9.1.2.jar   (因为要用到c3p0技术 )

commons-beanutils-1.8.3.jar      commons-logging-1.1.1.jar   (利用BeanUtils技术将参数快速封装入javabean中)

commons-dbutils-1.4.jar   (数据层快速进行CURD操作)

mysql-connector-java-5.0.8-bin.jar    (MySQL数据库驱动)

(3)创建工程包结构

web层:web
业务层:service
数据层:dao
工具类包:utils
bean数据类包:vo

(4)配置文件 c3p0
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="user">angel</property>
		<property name="password">angel</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql:///customer</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config> <!-- This app is massive! -->
</c3p0-config> 

6、编写基本类

JDBCUtils    提供连接池和连接工具类
Customer     JavaBean结构和数据库对应


JDBCUtils

package utils;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 工具类 提供数据库连接池 和数据库连接
 * 
 * @author seawind
 * 
 */
public class JDBCUtils {
	private static DataSource dataSource = new ComboPooledDataSource();

	public static DataSource getDataSource() {
		return dataSource;
	}

	/**
	 * 当DBUtils需要手动控制事务时,调用该方法获得一个连接
	 * 
	 * @return
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException {
		return dataSource.getConnection();
	}
}
Customer类
package vo;


import java.sql.Date;


/**
 * javabean实体类
 * 
 * @author seawind
 * 
 */
public class Customer {
<span style="white-space:pre">	</span>private String id;
<span style="white-space:pre">	</span>private String name;
<span style="white-space:pre">	</span>private String gender;
<span style="white-space:pre">	</span>private Date birthday;
<span style="white-space:pre">	</span>private String cellphone;
<span style="white-space:pre">	</span>private String email;
<span style="white-space:pre">	</span>private String preference;// 爱好为复选框,不止一个爱好,所以此处会想到用数组,但是若为数组类型,这数据库封                                  //装不了,所以将此问题在web层进行封装时解决掉。
<span style="white-space:pre">	</span>private String type;
<span style="white-space:pre">	</span>private String description;


<span style="white-space:pre">	</span>public String getId() {
<span style="white-space:pre">		</span>return id;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setId(String id) {
<span style="white-space:pre">		</span>this.id = id;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String getName() {
<span style="white-space:pre">		</span>return name;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setName(String name) {
<span style="white-space:pre">		</span>this.name = name;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String getGender() {
<span style="white-space:pre">		</span>return gender;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setGender(String gender) {
<span style="white-space:pre">		</span>this.gender = gender;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public Date getBirthday() {
<span style="white-space:pre">		</span>return birthday;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setBirthday(Date birthday) {
<span style="white-space:pre">		</span>this.birthday = birthday;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String getCellphone() {
<span style="white-space:pre">		</span>return cellphone;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setCellphone(String cellphone) {
<span style="white-space:pre">		</span>this.cellphone = cellphone;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String getEmail() {
<span style="white-space:pre">		</span>return email;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setEmail(String email) {
<span style="white-space:pre">		</span>this.email = email;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String getPreference() {
<span style="white-space:pre">		</span>return preference;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setPreference(String preference) {
<span style="white-space:pre">		</span>this.preference = preference;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String getType() {
<span style="white-space:pre">		</span>return type;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setType(String type) {
<span style="white-space:pre">		</span>this.type = type;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String getDescription() {
<span style="white-space:pre">		</span>return description;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void setDescription(String description) {
<span style="white-space:pre">		</span>this.description = description;
<span style="white-space:pre">	</span>}


}


因为客户id为customer表的主键,不能重复,所以利用UUID和Hash码来得到不同的主键

编写CustomerUtils类来实现主键的获取

package utils;

import java.util.UUID;

/**
 * 客户工具类,提供通用方法
 * 
 * @author seawind
 * 
 */
public class CustomerUtils {
	public static String generateId() {
		<span style="color:#ff0000;">String uuid = UUID.randomUUID().toString();
		return uuid.hashCode();    </span><span style="color:#33ccff;">//UUID值太长  所以取得其Hash码</span>
	}
}



7、CURD

按照 :    增加 ----- 查询 ---- 删除 ---- 修改   的顺序进行编写

(1)增加数据。

进行增加数据流程的设计分析



首先编写客户端显示页面,要实现对参数的表单提交

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>客户信息增加</title>

</head>
<body>
<h1>客户信息增加</h1>
<form action="${pageContext.request.contextPath }/addCustomer" method="post">
	<table>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

客户管理系统 详细流程(不用三大框架) 的相关文章

  • 【数据库】Navicat远程连接oracle出现ORA 28547错误

    问题说明 用 Navicat Premium 15 连接oracle数据库 连接本地没有问题 远程连接oracle数据库时就出现问题 问题为 ORA 28547 connection to server failed probable Or
  • 从《看见》中想到的

    很多人向我推荐柴静的 看见 我也趁着闲暇的时光看完了它 这本书讲的是柴静自己的从业生涯 以及在采访过程中的所思所想 比如非典 比如唐山大地震 比如踩猫事件 对于这些东西 有些是亲身经历过 比如非典时期的人心惶惶 有些是看过一些报道 亦或者是

随机推荐

  • ACE之(一)ACE概述

    关注微信公众号 池边小树 获取更多分析 文末二维码 1 ACE概述 1 1 模式与架构 1 软件模式分为3类 架构模式 设计模式 惯用法 2 模式贯穿了软件开发流程的几个关键阶段 系统分析 分析模式 着重于如何关注需求表面的额问题及蕴含的实
  • Group Project-思维

    链接 来源 牛客网 题目描述 The big day has fifinally arrived today you are going to form groups of two in which you will do the end
  • vue项目中webpack打包glsl文件不能编译,You may need an appropriate loader to handle this file type

    报错内容如下 You may need an appropriate loader to handle this file type currently no loaders are configured to process this f
  • vue封装插件并发布到npm上

    vue封装插件并发布到npm上 项目初始化 首先 要创建项目 封装vue的插件用webpack simple很合适 vue init webpack simple 项目名称此命令创建我们的项目的目录 创建文件夹和文件 最后结构是这样的 然后
  • Linux系统中修改用户名的两种方案整理

    在安装系统的时候 经常会无意识的随便起个用户名 后面如果发现该用户名不好或因为环境需要须重起个用户名 经过查找资料和亲自测试发现有两种方案可选 手动修改和使用usermod等命令自动修改 方案一 手动修改各个关联用户文件 以root身份登录
  • Qt内存泄漏篇

    一 常见内存泄漏例子 内存泄漏例子 1 prop 对象在栈函数中创建后 使用完后没有释放 导致每调用一次 内存泄漏一次 2 QObject子对象cleaner在创建时 没有指定父对象 且在栈函数中调用完毕后 没有释放 3 基类的类析构函数没
  • SeleniumLibrary4.5.0 关键字详解(八)

    SeleniumLibrary4 5 0 关键字详解 八 库版本 4 5 0 库范围 全局 命名参数 受支持 简介 SeleniumLibrary是Robot Framework的Web测试库 本文档说明了如何使用SeleniumLibra
  • Notepad++ 16进制编辑功能

    Notepad 可以编辑PE文件 二进制文件即HEX码 2进制 16进制都可以 通过附加的组件HexEditor即可实现 另外一款Notepad 自带插件TextFX也有这个功能 但实现效果不如Hex Editor Hex Editor实现
  • vscode 链接方式解决插件位置

    直接进入正题 在想要安装插件的位置建立文件夹 如下图所示 之后再windows的cmd指令中运行如下指令 注意在此需要以管理员身份运行cmd mklink D C Users vscode extensions F Microsoft VS
  • extended initializer lists only available with -std=c++11

    extended initializer lists only available with std c 11 or std gnu 11 enabled by default g MutexThread c lpthread o mute
  • 暴力破解zip加密压缩包

    最近恰好有个压缩包要解密 所以稍微研究了一下该怎么去破解加密的压缩包 zip rar在道理上是一样的 由于现有的方法中没想到高级的破解方式 所以只有暴力破解压缩包了 暴力破解压缩包的原理很简单 就是先制作一个密码字典 这个字典是暴力破解的核
  • Java:读取excel文件中的内容(简单、详细、明确、有全部代码)

    Java 读取excel文件中的内容 一 引入依赖 二 引入工作类 三 读取excel内容 一 引入依赖 注意 jxl 仅支持读取 xls 文件 读 xlsx 会报错 在 pom xml 中引入 jxl 的依赖
  • 使用SecureCRT 和 SecureFX遇到的几点问题以及解决

    一 使用SecureCRT 时候打开SecureFX的时候无法连接到Linux目录 打开SecureFX的时候无法打开上传目录弹出对话框 the file transfer protocol none specified in the se
  • 基于图像的火焰识别调研总结

    转载请注明出处https blog csdn net Hey chaoxia article details 85054870 简单总结一下近期的调研结果 一 简介 火焰的图像识别 主要围绕火焰的颜色特征 运动特征 几何特征与纹理特征来分析
  • Vue3+Vite+Pinia+Naive后台管理系统搭建之一:基础项目构建

    前言 如果对 vue3 的语法不熟悉的 可以移步 Vue3 0 基础入门 快速入门 github 开源库 Vue3 Vite Pinia Naive Js gitee 开源库 Vue3 Vite Pinia Naive Js 1 构建项目
  • AQS流程图

    整个AQS加锁解锁过程
  • jq 获取下拉框的值和value

    误区 一直以为jquery获取select中option被选中的文本值 是这样写的 s text 获取所有option的文本值 实际上应该这样 s option selected text 获取选中的option的文本值 获取select中
  • 深入了解ln命令:创建硬链接和符号链接的实用指南

    文章目录 1 引言 1 1 关于ln命令 1 2 ln命令的作用和用途 2 基本用法 2 1 创建硬链接 2 2 创建符号链接 2 3 区别硬链接和符号链接 3 操作示例 3 1 创建硬链接的示例 3 2 创建符号链接的示例 3 3 查看链
  • eval()函数的用法

    1 eval 函数函数基本原理 eval s 函数将去掉字符串s最外侧的引号 并按照Python语句方式执行去掉引号后的字符内容 使用方式如下 lt 变量 gt eval lt 字符串 gt a eval 1 2 print a 输出结果
  • 客户管理系统 详细流程(不用三大框架)

    客户管理系统的详细编写流程 一 系统设计 1 需求分析 系统中包含哪些数据模型 数据模型存在怎样的关系 E R图 UML 用例图 2 制作页面Demo 和真实系统效果一样 给客户确认需求 3 技术选型 环境搭建 软件建模工具 IBM RSA