1、总体思想

2、分包思想

我们会在代码当中,进行分包管理。

1.  src.bean  用来存放 JavaBean 信息POJO, 要求是成员变量和表的字段对应,名称要一样。
2.  src.dao   定义接口(规则) 增、删、改、查 查单个、查所有
3.  src.service  定义接口(规则) 主要是针对于业务层面了。登录的业务、注册业务、车辆进入、车辆退出...
4.  src.controller 与客户打交道的, 当用户选择对应操作的过程当中,执行对应的方法
5.  src.entry 定义入口程序,现在的入口程序,也就是 main 方法
6.  src.util  用来定义一些工具类,工具接口,工具方法,常量信息等
7.  src.test  测试程序需要使用的包, 都是测试三层(dao\service\controller)测试工具类(util)需要使用的单元测试

第二章 案例代码

第01节 工具类

1、JDBCUtil

​
package zyw.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class JDBCUtils {private static DataSource ds = null;static {try {Properties pp = new Properties();InputStream is = ClassLoader.getSystemResourceAsStream("druid.properties");pp.load(is);is.close();ds = DruidDataSourceFactory.createDataSource(pp);} catch (Exception e) {e.printStackTrace();}}/*** 获取到连接对象*/public static Connection getConnection(){Connection conn = null;try {if(ds!=null){conn = ds.getConnection();}} catch (SQLException e) {e.printStackTrace();}return conn;}/*** 释放资源*/public static void close(Connection conn, Statement stat){close(conn,stat,null);}public static void close(Connection conn, Statement stat, ResultSet resu){if(resu!=null){try {resu.close();System.out.println("释放资源resu");} catch (SQLException e) {e.printStackTrace();}}if(stat!=null){try {stat.close();System.out.println("释放资源satat");} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();System.out.println("释放资源conn");} catch (SQLException e) {e.printStackTrace();}}}public static DataSource getDataSource(){return  ds;}
}​

2、ScannerUtil

​
package zyw.util;
import java.util.Scanner;
​
//封装键盘录入的工具类
public class ScannerUtil {
​/**** 构造方法私有化修饰, 无法让外界去创建对象*/private ScannerUtil() {}
​
​/**** 给出一些提示 message 输入字符串类型的数据之后返回* @param message* @return*/public static String inputString(String message){Scanner sc = new Scanner(System.in);System.out.println(message);String str = sc.nextLine();return str;}
​/**** 给出一些提示 message 输入 整数类型的数据之后返回* @param message* @return*/public static int inputInt(String message){//调用上面输入字符串的方法String str = inputString(message);//对输入的字符串进行处理,转换成为 int类型的数据int number = Integer.parseInt(str);//返回结果return number;}
}​

3、Constant

​
package zyw.util;
//用于记录常量相关的接口
public interface Constant {
//项目当中文件夹的路径public static  final String DIR="C:\\develop\\work0719\\TCar0823\\lib";//记录缓存,记住密码的状态的路径public static final String CACHE_FILE = DIR + "\\cache.txt";
}​

4、CacheLoginUtil

​
package zyw.util;import zyw.bean.UserBean;import java.io.*;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;//用于缓存登录的状态,解决免登录的问题
public class CacheLoginUtil {public static List<UserBean> loadAll(){//取所有记录BufferedReader br = null;List<UserBean> mList = new ArrayList<>();try {br = new BufferedReader(new FileReader(Constant.CACHE_FILE));//查询数据,将数据保存到集合当中String line;while ((line = br.readLine()) != null) {//zhangsan,123456,1String[] array = line.split(",");//判断是否不为null,则存放在集合当中if (array != null && array.length > 0) {UserBean bean = new UserBean();bean.setUname(array[0]);bean.setUpass(array[1]);bean.setRemember(array[2]);mList.add(bean);}}//保存到集合} catch(Exception e) {e.printStackTrace();}finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}//返回结果return mList;}public static UserBean loadOnly(String uname){List<UserBean> list = loadAll();int index = -1;for (int i = 0; i < list.size(); i++) {UserBean userBean = list.get(i);if (uname.equals(userBean.getUname())){index = i;break;}}return index == -1 ? null : list.get(index);}public static void storeOnly(UserBean bean){List<UserBean> list = loadAll();list.add(bean);List<UserBean> noRepeatList = list.stream().distinct().collect(Collectors.toList());BufferedWriter bw = null;try {bw = new BufferedWriter(new FileWriter(Constant.CACHE_FILE));for (int i = 0; i < noRepeatList.size(); i++) {UserBean userBean = noRepeatList.get(i);StringBuilder sb = new StringBuilder();sb.append(userBean.getUname()).append(",");sb.append(userBean.getUpass()).append(",");sb.append(userBean.getRemember());bw.write(sb.toString());bw.newLine();bw.flush();}} catch (IOException e) {e.printStackTrace();}finally {if (bw!=null){try{bw.close();}catch (IOException e){e.printStackTrace();}}}}public static void storeAll(List<UserBean> mlist){List<UserBean> list = loadAll();list.addAll(mlist);List<UserBean> noRepeatList = list.stream().distinct().collect(Collectors.toList());BufferedWriter bw = null;try {bw = new BufferedWriter(new FileWriter(Constant.CACHE_FILE));for (int i = 0; i < noRepeatList.size(); i++) {UserBean userBean = noRepeatList.get(i);StringBuilder sb = new StringBuilder();sb.append(userBean.getUname()).append(",");sb.append(userBean.getUpass()).append(",");sb.append(userBean.getRemember());bw.write(sb.toString());bw.newLine();bw.flush();}} catch (IOException e) {e.printStackTrace();}finally {if (bw!=null){try{bw.close();}catch (IOException e){e.printStackTrace();}}}}}​

5、CalcTimeUtil

​
import blb.chc.bean.CarBean;
import blb.chc.dao.CarDao;
import blb.chc.dao.impl.CarDaoImpl;
​
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
​
//需要去定义一个计算停车时长的工具类
public class CalcTimeUtil {
​
​/**** 通过车牌号码 和 出场时间去计算停车的总时长。* @param carNumber* @param outTime* @return*/public static int calcStopTime(String carNumber,String outTime){//我们可以根据车牌号码,查询得到最新的入场时间CarDao dao = new CarDaoImpl();List<CarBean> mList = dao.selectByNumber(carNumber);//循环遍历mList集合,查看当前的哪一项的出场时间是null,如果是null则表示最后的一次进入的操作String iTime = null;for (int i=0;i<mList.size();i++) {CarBean car = mList.get(i);//获取到进场时间和出场时间String oTime = car.getCar_out_time();//最新的进场时间对应的出场时间if (oTime == null){iTime = car.getCar_in_time();}}try {//通过进场的时间和出场的时间,进行计算,计算两个时间差值if (iTime!=null){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");long outHaoMiao = sdf.parse(outTime).getTime();long inHaoMiao = sdf.parse(iTime).getTime();//采用毫秒值相减long cha = (outHaoMiao - inHaoMiao)/(1000*60*60);return (int)cha;}} catch (ParseException e) {e.printStackTrace();}return 0;}
}​

第02节 用户模块

1、实体类编写

​
package zyw.bean;public class UserBean {private int uid;private String uname;private String upass;private String remember;public UserBean() {}public UserBean(int uid, String uname, String upass, String remember) {this.uid = uid;this.uname = uname;this.upass = upass;this.remember = remember;}public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getUpass() {return upass;}public void setUpass(String upass) {this.upass = upass;}public String getRemember() {return remember;}public void setRemember(String remember) {this.remember = remember;}@Overridepublic String toString() {return "UserBean{" +"uid=" + uid +", uname='" + uname + '\'' +", upass='" + upass + '\'' +", remember='" + remember + '\'' +'}';}
}​

2、Dao层的代码

​
zyw.UserDaoimport blb.chc.bean.UserBean;
​
import java.util.List;
​
//用户表的数据访问层,接口
public interface UserDao {
​/**** 添加数据【增】* 直接添加一条记录,添加的时候,返回的是影响的行数*/public abstract int insertUser(UserBean bean);
​/*** 删除数据【删】* 根据用户名 uname 删除记录,将删除的影响行数返回*/public abstract int deleteUser(String uname);
​/**** 修改数据【改】* 根据UserBean当中的用户名去修改信息, 可以修改密码,可以修改记录状态*/public abstract int updateUser(UserBean bean);
​/**** 通过用户名去查询 用户的信息* @param uname 用户名* @return*/public abstract UserBean selectByName(String uname);
​/**** 直接查询整张用户表的信息,返回的结果是一个集合数据* @return*/public abstract List<UserBean> selectAll();
​
}
blb.chc.dao.impl.UserDaoImpl//用户访问层 UserDao具体实现
@SuppressWarnings("all")
public class UserDaoImpl implements UserDao {@Overridepublic int insertUser(UserBean bean) {String sql = "INSERT INTO t_user VALUES (NULL,?,?,?)";Object[] objects = {bean.getUname(),bean.getUpass(),bean.getRemember()};//-------------------//创建到工具类 JdbcTemplate 的对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//执行SQL语句int lineNumber = temp.update(sql, objects);//结果返回return lineNumber;}
​@Overridepublic int deleteUser(String uname) {String sql = "DELETE FROM t_user WHERE uname=?";Object[] objects = {uname};//-------------------//创建到工具类 JdbcTemplate 的对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//执行SQL语句int lineNumber = temp.update(sql, objects);//结果返回return lineNumber;}
​@Overridepublic int updateUser(UserBean bean) {int lineNumber = 0;//判断,如果包含有所有的信息,密码信息和状态的信息if (bean.getUpass()!=null&&bean.getRemember()!=null){//更新所有的信息String sql = "UPDATE t_user SET upass=?,remember=? WHERE uname=?";Object[] objects = {bean.getUpass(),bean.getRemember(),bean.getUname()};JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//执行SQL语句lineNumber = temp.update(sql, objects);}else if (bean.getRemember()==null){//更新密码String sql = "UPDATE t_user SET upass=? WHERE uname=?";Object[] objects = {bean.getUpass(),bean.getUname()};JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//执行SQL语句lineNumber = temp.update(sql, objects);}else if (bean.getUpass() == null){//更新是否记住密码String sql = "UPDATE t_user SET remember=? WHERE uname=?";Object[] objects = {bean.getRemember(),bean.getUname()};JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//执行SQL语句lineNumber = temp.update(sql, objects);}return lineNumber;}
​@Overridepublic UserBean selectByName(String uname) {//根据用户名查询单个String sql = "SELECT * FROM t_user WHERE uname=?";Object[] objects = { uname };JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//执行SQL语句,查询的结果封装成为对象Map<String, Object> map = temp.queryForMap(sql, objects);//封装成为 UserBean的对象UserBean bean = new UserBean();bean.setUid((Integer) map.get("uid"));bean.setUname((String) map.get("uname"));bean.setUpass((String) map.get("upass"));bean.setRemember((String) map.get("remember"));return bean;}
​@Overridepublic List<UserBean> selectAll() {//根据用户表所有信息String sql = "SELECT * FROM t_user";JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());List<UserBean> list = temp.query(sql, new BeanPropertyRowMapper<>(UserBean.class));return list;}
}​

3、Service层代码

​
zyw.service.UserServiceimport blb.chc.bean.UserBean;
​
//与用户相关的业务功能
//1. 登陆功能
//2. 注册功能
//3. 修改密码
//4. 修改是否记住密码
//5. 修改密码和记住密码状态
@SuppressWarnings("all")
public interface UserService {
​/**** 登陆功能* @param bean 需要的是用户名和密码* @return 是否登陆成功*/public abstract boolean login(UserBean bean);
​/**** 注册功能* @param bean 需要的是用户名和密码以及记住密码的状态* @return 是否注册成功*/public abstract boolean regist(UserBean bean);
​
​/**** 修改密码的功能* @param bean 需要是用户名和新密码* @return 是否修改成功*/public abstract boolean updatePassWord(UserBean bean);
​/**** 修改记住密码的状态* @param bean 需要的是用户名和状态信息* @return 是否修改成功*/public abstract boolean updateState(UserBean bean);
​/**** 修改密码和记住密码的状态* @param bean 需要的是用户名和密码和记住密码的状态* @return 是否修改成功*/public abstract boolean updatePassWordAndState(UserBean bean);
}
blb.chc.service.impl.UserServiceImplimport blb.chc.bean.UserBean;
import blb.chc.dao.UserDao;
import blb.chc.dao.impl.UserDaoImpl;
import blb.chc.service.UserService;
​
import java.util.List;
​
/**** 用户模块,业务层的接口实现*/
@SuppressWarnings("all")
public class UserServiceImpl implements UserService {
​/**** 登录功能* @param bean 需要的是用户名和密码* @return*/@Overridepublic boolean login(UserBean bean) {//查询数据.查看数据库当中是否存在用户名和密码//调用查询数据表的操作UserDao dao = new UserDaoImpl();//查询单个UserBean userBean = dao.selectByName(bean.getUname());//查看当前 userBean 是否存在。不为nullif (userBean != null) {//判断密码是否正确if (bean.getUpass().equals(userBean.getUpass())) {return true;}}return false;}
​/***** 注册功能* @param bean 需要的是用户名和密码以及记住密码的状态* @return*/@Overridepublic boolean regist(UserBean bean) {//查询所有的信息//isSameUname 表示的含义是是否存在相同的用户名。刚开始的时候设置为falseboolean isSameUname = false;UserDao dao = new UserDaoImpl();List<UserBean> list = dao.selectAll();for (UserBean userBean : list) {//判断if (userBean.getUname().equals(bean.getUname())) {//存在重复的用户名。isSameUname = true;break;}}//判断一下是否存在重复的用户名if (isSameUname == false) {//执行插入数据的操作int lineNumber = dao.insertUser(bean);return lineNumber > 0 ? true : false;}return false;}
​/**** 修改密码* @param bean 需要是用户名和新密码* @return*/@Overridepublic boolean updatePassWord(UserBean bean) { if (bean.getUname() != null && bean.getUpass() != null && bean.getRemember() == null) {//创建Dao的对象,调用修改的方法UserDao dao = new UserDaoImpl();int lineNumber = dao.updateUser(bean);return lineNumber > 0 ? true : false;}return false;}
​/**** 修改记住密码的状态* @param bean 需要的是用户名和状态信息* @return*/@Overridepublic boolean updateState(UserBean bean) { if (bean.getUname() != null && bean.getUpass() == null&& bean.getRemember() != null) {//创建Dao的对象,调用修改的方法UserDao dao = new UserDaoImpl();int lineNumber = dao.updateUser(bean);return lineNumber > 0 ? true : false;}return false;}
​/**** 修改密码和记住密码的状态* @param bean 需要的是用户名和密码和记住密码的状态* @return*/@Overridepublic boolean updatePassWordAndState(UserBean bean) { if (bean.getUname() != null && bean.getUpass() != null&& bean.getRemember() != null) {//创建Dao的对象,调用修改的方法UserDao dao = new UserDaoImpl();int lineNumber = dao.updateUser(bean);return lineNumber > 0 ? true : false;}return false;}
}​

4、Controller 层代码

​
zyw.controller.UserController//用户的控制层视图类
public class UserController {
​//表示开关开启的操作,可以去控制是否还需要死循环的操作。public static boolean toggle = true;
​//定义启动的方法public static void start() {//定义死循环的操作,刚开始的时候为 true 则表示会一直执行//如果修改成为 false 之后,循环就介绍了while (toggle) {System.out.println("欢迎进入车辆管理系统");System.out.println("请选择你的操作:");System.out.println("1.用户注册");System.out.println("2.用户登录");System.out.println("3.输入其他操作,则退出");//调用输入的方法String choice = ScannerUtil.inputString("请输入选择:");//创建服务的对象UserService service = new UserServiceImpl();//分支处理switch (choice) {//注册操作case "1":String unameReg = ScannerUtil.inputString("请输入用户名");String upassReg = ScannerUtil.inputString("请输入密码");String rememberReg = ScannerUtil.inputString("请输入是否记住密码(0-不记住,1-记住)");//封装成为 JavaBean对象UserBean regUserBean = new UserBean();regUserBean.setUname(unameReg);regUserBean.setUpass(upassReg);regUserBean.setRemember(rememberReg);//直接调用后面服务的方法boolean flagReg = service.regist(regUserBean);System.out.println(flagReg ? "注册成功" : "注册失败");//判断,如果我们注册状态是成功的,则将数据存储到本地if (flagReg == true && "1".equals(rememberReg)){//记录到本地CacheLoginUtil.storeOnly(regUserBean);}break;//登录操作case "2":String unameLog = ScannerUtil.inputString("请输入用户名");//做判断,是否处于免登陆的状态。UserBean noPassWordUserBean = CacheLoginUtil.loadOnly(unameLog);//判断if (noPassWordUserBean!=null){System.out.println("登录成功");toggle = false;break;}String upassLog = ScannerUtil.inputString("请输入密码");//封装成为 JavaBean对象UserBean logUserBean = new UserBean();logUserBean.setUname(unameLog);logUserBean.setUpass(upassLog);//直接调用后面服务的方法boolean flagLog = service.login(logUserBean);System.out.println(flagLog ? "登录成功" : "登录失败");//当我们登录成功之后,关闭开关了if (flagLog == true){toggle = false;}break;//其他情况,则退出,修改boolean值为 falsedefault:toggle = false;System.out.println("感谢你的使用");break;}}}
}​

5、入口程序

​
zyw.entry.Homeimport blb.chc.controller.UserController;
​
//程序的入口, 所有的操作,都在这里开始,包含有main方法
public class Home {
​public static void main(String[] args) {//直接调用用户模块的操作UserController.start();}
}​

第03节 车辆模块

1、实体类编写

​
zyw.bean.CarBean//车辆的实体类
public class CarBean {
​private int car_id;private String car_number;private String car_name;private String car_phone;private String car_in_time;private String car_out_time;private Double car_money;private String car_vip;
​public CarBean() {}
​public CarBean(int car_id, String car_number, String car_name, String car_phone, String car_in_time, String car_out_time, Double car_money, String car_vip) {this.car_id = car_id;this.car_number = car_number;this.car_name = car_name;this.car_phone = car_phone;this.car_in_time = car_in_time;this.car_out_time = car_out_time;this.car_money = car_money;this.car_vip = car_vip;}
​public int getCar_id() {return car_id;}
​public void setCar_id(int car_id) {this.car_id = car_id;}
​public String getCar_number() {return car_number;}
​public void setCar_number(String car_number) {this.car_number = car_number;}
​public String getCar_name() {return car_name;}
​public void setCar_name(String car_name) {this.car_name = car_name;}
​public String getCar_phone() {return car_phone;}
​public void setCar_phone(String car_phone) {this.car_phone = car_phone;}
​public String getCar_in_time() {return car_in_time;}
​public void setCar_in_time(String car_in_time) {this.car_in_time = car_in_time;}
​public String getCar_out_time() {return car_out_time;}
​public void setCar_out_time(String car_out_time) {this.car_out_time = car_out_time;}
​public Double getCar_money() {return car_money;}
​public void setCar_money(Double car_money) {this.car_money = car_money;}
​public String getCar_vip() {return car_vip;}
​public void setCar_vip(String car_vip) {this.car_vip = car_vip;}
​@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;
​CarBean bean = (CarBean) o;
​if (car_number != null ? !car_number.equals(bean.car_number) : bean.car_number != null) return false;if (car_name != null ? !car_name.equals(bean.car_name) : bean.car_name != null) return false;if (car_phone != null ? !car_phone.equals(bean.car_phone) : bean.car_phone != null) return false;if (car_in_time != null ? !car_in_time.equals(bean.car_in_time) : bean.car_in_time != null) return false;if (car_out_time != null ? !car_out_time.equals(bean.car_out_time) : bean.car_out_time != null) return false;if (car_money != null ? !car_money.equals(bean.car_money) : bean.car_money != null) return false;return car_vip != null ? car_vip.equals(bean.car_vip) : bean.car_vip == null;}
​@Overridepublic int hashCode() {int result = car_number != null ? car_number.hashCode() : 0;result = 31 * result + (car_name != null ? car_name.hashCode() : 0);result = 31 * result + (car_phone != null ? car_phone.hashCode() : 0);result = 31 * result + (car_in_time != null ? car_in_time.hashCode() : 0);result = 31 * result + (car_out_time != null ? car_out_time.hashCode() : 0);result = 31 * result + (car_money != null ? car_money.hashCode() : 0);result = 31 * result + (car_vip != null ? car_vip.hashCode() : 0);return result;}
​@Overridepublic String toString() {return "CarBean{" +"car_id=" + car_id +", car_number='" + car_number + '\'' +", car_name='" + car_name + '\'' +", car_phone='" + car_phone + '\'' +", car_in_time='" + car_in_time + '\'' +", car_out_time='" + car_out_time + '\'' +", car_money=" + car_money +", car_vip='" + car_vip + '\'' +'}';}
}​

2、Dao层的代码

​
zyw.dao.CarDaoimport blb.chc.bean.CarBean;
​
import java.util.List;
​
//车辆表的数据访问层,接口
public interface CarDao {
​/**** 新增车辆信息* @param bean* @return*/public abstract int insertCar(CarBean bean);
​/**** 删除车辆信息, 根据车牌号, 删除此车辆的所有信息* @param car_number* @return*/public abstract int deleteCar(String car_number);
​
​/**** 修改车辆的信息,根据车牌号,修改车辆,入场时间* @param car_number* @param inTime* @return*/public abstract int updateCarInTime(String car_number, String inTime);
​
​/**** 修改车辆的信息,根据车牌号,修改车辆,出场时间,修改VIP的方式,修改停车费* @param car_number* @param outTime* @return*/public abstract int updateCarOutTime(String car_number, String outTime);
​
​/**** 修改车辆的信息,根据车牌号,修改VIP的方式,修改停车费* @param car_number* @param vip* @return*/public abstract int updateCarVIP(String car_number, String vip);
​
​/**** 修改车辆的信息,根据车牌号,修改停车费* @param car_number* @param money* @return*/public abstract int updateCarMoney(String car_number,double money);
​
​/**** 查询所有的车辆信息* @return*/public abstract List<CarBean> selectAll();
​/**** 根据车牌号,查询该车辆的信息* @param car_number* @return*/public abstract List<CarBean> selectByNumber(String car_number);
​
​/**** 根据时间,去查询入场时间之间的车辆信息,车流量信息* @param startTime 入场时间* @param endTime   入场时间* @return*/public abstract List<CarBean> selectByTime(String startTime, String endTime);
}
blb.chc.dao.impl.CarDaoImplimport blb.chc.bean.CarBean;
import blb.chc.dao.CarDao;
import blb.chc.util.JDBCUtil;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
​
import java.util.List;
​
//车辆访问层 CarDao具体实现
@SuppressWarnings("all")
public class CarDaoImpl implements CarDao {/**** 车辆刚开始进入的信息,车辆入场信息* @param bean* @return*/@Overridepublic int insertCar(CarBean bean) {String sql = "INSERT INTO t_car (car_id,car_number,car_name,car_phone,car_in_time,car_vip) VALUES (NULL,?,?,?,?,?)";Object[] objects = {bean.getCar_number(),bean.getCar_name(),bean.getCar_phone(),bean.getCar_in_time(),bean.getCar_vip()};//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//插入数据int lineNumber = temp.update(sql, objects);//返回结果return lineNumber;}
​/**** 根据车牌号,删除该车辆的所有信息* @param car_number* @return*/@Overridepublic int deleteCar(String car_number) {String sql = "DELETE FROM t_car WHERE car_number = ?";Object[] objects = {car_number};//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//插入数据int lineNumber = temp.update(sql, objects);//返回结果return lineNumber;}
​/**** 修改车辆的进场时间* @param car_number* @param inTime* @return*/@Overridepublic int updateCarInTime(String car_number, String inTime) {String sql = "UPDATE t_car SET car_in_time=? WHERE car_number=?";Object[] objects = {inTime, car_number};//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//插入数据int lineNumber = temp.update(sql, objects);//返回结果return lineNumber;}
​/**** 修改车辆的出场时间* @param car_number* @param inTime* @return*/@Overridepublic int updateCarOutTime(String car_number, String outTime) {String sql = "UPDATE t_car SET car_out_time=? WHERE car_number=? AND car_out_time IS NULL";Object[] objects = {outTime, car_number};//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//插入数据int lineNumber = temp.update(sql, objects);//返回结果return lineNumber;}
​/**** 修改车辆的停车VIP* @param car_number* @param vip* @return*/@Overridepublic int updateCarVIP(String car_number, String vip) {String sql = "UPDATE t_car SET car_vip=? WHERE car_number=?";Object[] objects = {vip, car_number};//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//插入数据int lineNumber = temp.update(sql, objects);//返回结果return lineNumber;}
​/**** 修改车辆本次应该提交的停车费* @param car_number* @param money* @return*/@Overridepublic int updateCarMoney(String car_number, double money) {String sql = "UPDATE t_car SET car_money=? WHERE car_number=? AND car_money IS NULL";Object[] objects = {money, car_number};//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//插入数据int lineNumber = temp.update(sql, objects);//返回结果return lineNumber;}
​/*** 查询车辆整张表的信息** @return*/@Overridepublic List<CarBean> selectAll() {String sql = "SELECT * FROM t_car";//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//查询表的所有信息List<CarBean> list = temp.query(sql, new BeanPropertyRowMapper<>(CarBean.class));return list;}
​/**** 根据车牌号码,去查询该车辆停车的信息* @param car_number* @return*/@Overridepublic List<CarBean> selectByNumber(String car_number) {String sql = "SELECT * FROM t_car WHERE car_number=?";Object[] objects = {car_number};//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//查询表的所有信息List<CarBean> list = temp.query(sql, objects, new BeanPropertyRowMapper<>(CarBean.class));return list;}
​/**** 查询某段范围内的车流量信息* @param startTime 入场时间* @param endTime   入场时间* @return*/@Overridepublic List<CarBean> selectByTime(String startTime, String endTime) {String sql = "SELECT * FROM t_car WHERE car_in_time BETWEEN ? AND ?";Object[] objects = {startTime, endTime};//创建对象JdbcTemplate temp = new JdbcTemplate(JDBCUtil.getDataSource());//查询表的所有信息List<CarBean> list = temp.query(sql, objects, new BeanPropertyRowMapper<>(CarBean.class));return list;}
}​

3、Service层代码

​
zyw.service.CarServiceimport blb.chc.bean.CarBean;
​
import java.sql.Date;
import java.util.List;
​
/**** 定义车辆的业务功能** 1. 车辆的进入* 2. 车辆的退出* 3. 某辆车,一共在停车场单次消费金额* 4. 某辆车,一共在停车场已经消费了多少钱* 5. 某段时间内的车流量信息*/
public interface CarService {
​/*** 进入停车场的操作* @param bean* @return*/public abstract boolean inPark(CarBean bean);
​
​/**** 退出停车场的操作* @param bean* @return*/public abstract boolean outPark(CarBean bean);
​
​/**** 根据车牌号,查询单次的消费* @param car_number* @return*/public abstract double selectOnceFee(String car_number);
​/**** 根据车牌号,查询所有消费* @param car_number* @return*/public abstract double selectAllFee(String car_number);
​/*** 根据两次的入场时间,查询该时间段内的车流量* @param startTime  第一个入场时间* @param endTime    第二个入场时间* @return*/public abstract List<CarBean> selectAllCarByTime(String startTime,String endTime);
}
blb.chc.service.impl.CarServiceImpl/**** 车辆模块,业务层的接口实现*/
@SuppressWarnings("all")
public class CarServiceImpl implements CarService {/**** 进入停车场的操作* @param bean* @return*/@Overridepublic boolean inPark(CarBean bean) {//调用添加数据的方法CarDao dao = new CarDaoImpl();int lineNumber = dao.insertCar(bean);//返回结果return lineNumber > 0;}
​/**** 退出停车场* @param bean* @return*/@Overridepublic boolean outPark(CarBean bean) {String carNumber = bean.getCar_number();String outTime = bean.getCar_out_time();//调用方法,设置获取到停车的时长int hours = CalcTimeUtil.calcStopTime(carNumber, outTime);//修改数据CarDao dao = new CarDaoImpl();//1.修改停车出场的时间int lineNumber1 = dao.updateCarOutTime(carNumber, outTime);//2.修改停车费用int lineNumber2 = dao.updateCarMoney(carNumber, hours * Constant.MONEY_OF_HOUR);return lineNumber1 > 0 && lineNumber2 > 0;}
​@Overridepublic double selectOnceFee(String car_number) {return 0;}
​@Overridepublic double selectAllFee(String car_number) {return 0;}
​@Overridepublic List<CarBean> selectAllCarByTime(String startTime, String endTime) {return null;}
}​

4、Controller层代码

​
zyw.controller.CarController/*** 车辆的控制层视图类*/
public class CarController {
​
​//表示开关开启的操作,可以去控制是否还需要死循环的操作。public static boolean toggle = true;
​//定义启动的方法public static void start() {//定义死循环的操作,刚开始的时候为 true 则表示会一直执行//如果修改成为 false 之后,循环就介绍了while (toggle) {System.out.println("欢迎进入车辆管理系统");System.out.println("请选择你的操作:");System.out.println("1.车辆进入");System.out.println("2.车辆退出");System.out.println("3.查询车辆单次消费金额");System.out.println("4.查询车辆累计消费金额");System.out.println("5.查询车流量");System.out.println("6.输入其他操作,则退出");//调用输入的方法String choice = ScannerUtil.inputString("请输入");//分支选择switch (choice) {//车辆进入case "1":carIn();break;//车辆退出case "2":carOut();break;case "3":System.out.println("功能尚在开发中,敬请期待...");break;case "4":System.out.println("功能尚在开发中,敬请期待...");break;case "5":System.out.println("功能尚在开发中,敬请期待...");break;default:System.out.println("感谢您的使用,谢谢");toggle = false;break;}}}
​/**** 车辆进入*/public static void carIn() {String number = ScannerUtil.inputString("请输入车牌号");String name = ScannerUtil.inputString("请输入车主姓名");String phone = ScannerUtil.inputString("请输入车主电话");String inTime = ScannerUtil.inputString("请输入车辆入场时间 yyyy-MM-dd HH:mm:ss");String vip = ScannerUtil.inputString("请输入车辆VIP级别(0-临停,1-包月,2-包年)");//封装成为对象CarBean bean = new CarBean();bean.setCar_number(number);bean.setCar_name(name);bean.setCar_phone(phone);bean.setCar_in_time(inTime);bean.setCar_vip(vip);//调用服务层CarService service = new CarServiceImpl();boolean flag = service.inPark(bean);System.out.println(flag ? "车辆入库成功" : "车辆入库失败");}
​/**** 车辆退出*/public static void carOut() {String number = ScannerUtil.inputString("请输入车牌号");String outTime = ScannerUtil.inputString("请输入车辆出场时间 yyyy-MM-dd HH:mm:ss");//封装成为对象CarBean bean = new CarBean();bean.setCar_number(number);bean.setCar_out_time(outTime);//调用服务层CarService service = new CarServiceImpl();boolean flag = service.outPark(bean);System.out.println(flag ? "车辆出库成功" : "车辆出库失败");}
}​

5、入口程序

​
zyw.entry.Homeimport blb.chc.controller.CarController;
import blb.chc.controller.UserController;
​
//程序的入口, 所有的操作,都在这里开始,包含有main方法
public class Home {
​public static void main(String[] args) {//直接调用用户模块的操作UserController.start();//直接调用车辆模块的操作CarController.start();}
}​

6、成果展示

7、数据库存储记录

人员信息录入表单:

车辆信息录入表单

小区停车管理系统(SQL,JDBC)相关推荐

  1. 《数据库应用系统实践》------ 小区停车管理系统

    系列文章 <数据库应用系统实践>------ 小区停车管理系统 文章目录 系列文章 一.需求分析 1.系统背景 2. 系统功能结构(需包含功能结构框图和模块说明) 3.系统功能简介 二.概 ...

  2. SSH小区停车管理系统答辩PPT免费下载

    今日PPT展示如下:

  3. jsp小区物业停车管理系统毕业设计

    技术:Java.JSP等 摘要: 随着现代社会的不断发展,小区业主汽车拥有数量越来越多,直接导致了人们停车难.乱停车的现象.同时大中城市的很多住宅小区,包括以前建造的小区,由于在规划设计中没有充分考虑 ...

  4. python小区停车练习题

    一. 题目一 :(100分) 模拟实现小区停车管理系统,需求如下: 小区内停车收费有两种方式,如果是本小区内的业主按小时是1.5元1小时,非小区业务停车3元1小时,当有车进入小区自动计费,等他离开时可 ...

  5. 【附源码】计算机毕业设计SSM小区停车计费管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  6. c#+sql语言开发的小区物业管理系统,基于C#环境下的物业管理系统.doc

    成都信息工程学院银杏酒店管理学院 本科生毕业论文(设计) 题 目 明珠苑小区物业管理系统的设计与实现 学生姓名 彭秋月 学 号 2011561281 年级 2011级 指导教师 倪铉珣 教务处制表 二 ...

  7. swing小区安全管理系统

    swing小区安全管理系统 使用原生jdbc+swing,废话就不多说了,直接贴代码: github地址:https://github.com/PineappleLB/village-Manage-P ...

  8. 基于Web小区物业管理系统/物业管理系统的设计与实现

    目    录 第一章 绪论 1.1 研究背景 1.2 主要研究内容 第二章 相关技术 2.1 MySQL技术介绍 2.2 eclipse编译器介绍 2.3 Spring框架介绍 2.4 MyBatis ...

  9. 基于Springboot+SpringDataJpa+Mysql智能停车管理系统

    一.基于Springboot+SpringDataJpa+Mysql智能停车管理系统 1.1 项目概述 开发语言:Java8 数据库:Mysql5 前端技术:echarts图表 渲染数据:thymel ...

  10. spring boot小区物业管理系统 毕业设计源码101409

    springboot小区物业管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚 ...

最新文章

  1. Android应用程序消息处理机制(Looper、Handler)分析(1)
  2. 企业核心员工的长期激励计划
  3. jdk8 Function
  4. Scrapy的安装介绍
  5. 小技巧 ----- Java中指定保留几位小数
  6. HBase常用操作备忘
  7. Linux进程的管理与调度(八) -- Linux下进程的创建过程分析(_do_fork/do_fork详解)
  8. 二建公路工程知识总结_2020二建公路实务:专题突破+高分攻略,拿分90稳过二建...
  9. 父亲儿子计算机语言,c语言之父_C语言编程,父亲30岁。儿子6岁,问多少年后父亲的岁数是儿子的2倍...
  10. 缠论入门到精通理论到实战
  11. python之urlencode(),quote()及unquote()
  12. IndoorGML 介绍
  13. 开源生态研究与实践| ChinaOSC
  14. 提高iOS开发效率的第三方框架(更新中)
  15. 淘宝/天猫获取商品历史价格信息 API 返回值说明
  16. 计算机存储一个字节数是,在计算机中,如果一个存储单元能存放一个字节,则容量为64KB的存储器中的存储单元个数 。...
  17. Android使用HereMap教程
  18. 卷积神经网络 - 汇聚层
  19. 计算机中的英语六级作文万能模板,英语六级作文的通用万能模板
  20. win10神州网信政府版系列设置(麦克风、摄像头、相机、屏幕保护时间)

热门文章

  1. 我的世界java版如何加披风_我的世界正版披风怎么换
  2. K8S 还没用,K9S 又是什么鬼?
  3. 破解校园网“一人一号” 高校学子必备秘籍
  4. IPO屡战屡败 而立之年WPS 能否闯关成功?
  5. Mergely – 免费的在线文本对比
  6. android动态表格数据类型,华为运动表GT表盘主题制作教程
  7. .dmg文件转.iso的工具:dmg2img
  8. mbot编程机器人怎么连接蓝牙_STEAM教育机器人搭建指南,mBot入门级编程机器人搭建教程...
  9. 计算机考研复试难,艰难与快乐:2008年重庆邮电大学计算机考研复试经历
  10. 9260ac网卡linux驱动,intel wireless-ac 9260 driver