前言:
何为二手车:
二手车是指在公安交通管理机关登记注册,在达到国家规定的报废标准之前或在经济实用寿命期内服役,并仍可继续使用的机动车辆。
二手车,英文译为“Second Hand Vehicle”或"Used Car",意为“第二手的汽车”或“使用过的汽车”,在中国称为 “旧机动车”。“中古车”是日本的叫法,不过我国台湾也称“中古车”。北美是二手车最发达的市场,因为平民百姓购买旧车时不一定就能买到“第二”手的,而且大多是小轿车和家用吉普车,所以在北美二一种很通俗的叫法“用过的汽车”。
政府工作报告提出,将新能源汽车车辆购置税优惠政策再延长三年,全面取消二手车限迁政策。专家表示,这将促进二手车消费市场潜力进一步释放。
2019年5月,商务部、公安部、海关总署共同举行二手车出口专题会议,正式启动二手车出口工作。首批开展二手车出口业务的地区为北京、天津、上海、浙江(台州)、山东(济宁)、广东、四川(成都)、陕西(西安)、青岛、厦门10个省市
二手车网站:
互联网的时代,全国性和地方性的二手车网站很多,为车主寻找买主提供免费的交易平台。在这些专业的二手车网站上,往往都会有免费评估的版块,车主可以大致判断自己旧车的定价,不会受骗。不过,这些评估结果同市场行情可能有偏差,所以只能做参考。上网前,要为自己的车子准备好几张照片,这样网上展示的效果才会好。
【项目整体思路】
1、首先是util层(工具层),有两个类(CommonUtil、RandomFourNumUtils)
- RandomFourNumUtils:生成一个String类型的四位随机数
- CommonUtil:dateStrIsValid:检查日期字符串是否合法,用Try-Catch抛出异常
2、其次是main层,有两个类(Main、easycheck)
- easycheck:系统使用说明与项目要求(方便对照)
- Main:主菜单(Switch实现)
3、然后是entity层(实体层),有五个类
- Admin:实现对象序列化(设置用户名与密码)
- Brand:同上(设置品牌名称与编号)
- Car:同上(设置汽车各类参数)
- CarType:同上(设置车型编号与名称)
- User:同上(设置用户相关信息)
4、接着是Dao层(数据存取对象层),有三个类
- UserDao:使用单例模式封装数据类
- saveUser: 保存用户信息
- findUserByNameAndPassword:根据账号和密码查询用户
- FileDB:文件操作类
- saveObjToFile:将对象保存到文件中,如果本地不存在数据就创建一个文件,用Try-Catch抛出异常
- getObjFromFile:从文件中读出对象,并且返回文件中存储的序列化对象
- 如果本地不存在数据,就创建一个文件用Try-Catch抛出异常
- DataAccessDao:数据访问类,通过I/O流对文件的操作,实现数据的增删改查
- buy:买车
- saveCarType:添加车型
- queryRecentTenCars:查询最新10条发布车辆信息
- saveBrand:添加品牌,用isExistsBrand判断是否可以添加品牌
5、最后是service层,有四个类
- 1)首先是CarService类:
- 可以根据车型、品牌、价格、挂牌日期,筛选出符合条件的车并显示,相应的可以根据情况收藏车或购买,购买的话打印账单
- 2)其次是RegisterService类:
- 注册类,检查输入,用户是否已经存在,输入邮箱手机号等,均成功则注册完成
- 在这里默认用户存款10W
- 3)然后是LoginService类:
- 登陆类,与注册类大致相同,其中要防止多人多次登陆,登陆后更改功能1
- 4)最后是BakendService类:
- 后台服务,用伪管理员密码控制登陆,进入后可以对车辆类作出增删,也可以对相应已经登陆的用户增加余额
package main;
import entity.User;
import service.BakendService;
import service.CarService;
import service.LoginService;
import service.RegisterService;
import java.util.Scanner;
public class Main {
public static boolean isLogin=false;
public static User user;
public static void main(String[] args) {
boolean isFirst=true;
LoginService loginService = new LoginService();
RegisterService registerService = new RegisterService();
CarService carService = new CarService();
BakendService bakendService = new BakendService();
System.out.println("****** 主菜单 ******");
System.out.println("1: 登录");
System.out.println("2: 注册");
System.out.println("3: 最新二手车信息");
System.out.println("4: 搜索车辆");
System.out.println("6: 我的收藏");
System.out.println("7: 后台管理");
System.out.println("8: 退出系统.");
System.out.print("请输入功能前对应的数字:");
while (true) {
if(!isFirst) {
System.out.println("请输入功能前对应的数字继续...");
}
isFirst=false;
Scanner sc = new Scanner(System.in);
String choice = sc.nextLine();
// 选择
switch (choice) {
case "1":
loginService.login();
break;
case "2":
registerService.register();
break;
case "3":
carService.queryTenCars();
break;
case "4":
carService.searchCar();
break;
case "6":
carService.queryAllMyLike();
break;
case "7":
bakendService.showBakendManage();
break;
case "8":
System.exit(1);
break;
default:
System.out.println("输入的数字错误");
break;
}
}
}
}
USER DAO
package dao;
import entity.User;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
private static UserDao instance;
private String userFile = "user.txt";
//单例模式
public static UserDao getInstance(){
if(instance==null){
synchronized (UserDao.class){
if(instance==null){
instance = new UserDao();
}
}
}
return instance;
}
public void saveUser(User user){
FileDB> fileDB = new FileDB<>(userFile);
List userList = fileDB.getObjFromFile();
if(userList ==null) {
userList = new ArrayList<>();
}
userList.add(user);
fileDB.saveObjToFile(userList);
}
public User findUserByNameAndPassword(String userName,String password){
FileDB> fileDB = new FileDB<>(userFile);
List userList = fileDB.getObjFromFile();
if(userList!=null) {
for (int i = 0; i < userList.size(); i++) {
if (userList.get(i).getUserName().equals(userName)&&userList.get(i).getPassword().equals(password)) {
return userList.get(i);
}
}
}
return null;
}
public boolean checkUserNameExists(String userName){
FileDB> fileDB = new FileDB<>(userFile);
List userList = fileDB.getObjFromFile();
if(userList!=null) {
for (int i = 0; i < userList.size(); i++) {
if (userList.get(i).getUserName().equals(userName)) {
return true;
}
}
}
return false;
}
public boolean checkEmailExists(String email){
FileDB> fileDB = new FileDB<>(userFile);
List userList = fileDB.getObjFromFile();
if(userList!=null) {
for (int i = 0; i < userList.size(); i++) {
if (userList.get(i).getEmail().equals(email)) {
return true;
}
}
}
return false;
}
public boolean checkPhoneExists(String phone){
FileDB> fileDB = new FileDB<>(userFile);
List userList = fileDB.getObjFromFile();
if(userList!=null) {
for (int i = 0; i < userList.size(); i++) {
if (userList.get(i).getPhone().equals(phone)) {
return true;
}
}
}
return false;
}
}
ADMIN
package entity;
import java.io.Serializable;
public class Admin implements Serializable {
private String name;//用户名
private String password;//密码
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
LoginService
package service;
import dao.UserDao;
import entity.User;
import main.Main;
import java.util.Scanner;
public class LoginService {
public boolean checkUserName(String userName){
if(userName!=null&&userName.trim().length()>=3&&userName.trim().length()<=10){
return true;
}else{
return false;
}
}
public void login() {
UserDao userDao = UserDao.getInstance();
// 键盘录入信息
System.out.println("登录");
System.out.println("------------------------");
System.out.println("请输入用户名与密码");
System.out.println("用户名长度限制3~10字符");
System.out.println("密码长度限制6~32字符");
System.out.println("------------------------");
Scanner sc = new Scanner(System.in);
String userName="";
String password="";
while (true) {
System.out.println("请输入用户名");
boolean flag = false;
userName = sc.nextLine();
// 判断用户名是否合规
flag=checkUserName(userName);
if (flag == false) {
System.out.println("用户名长度错误!");
} else {
System.out.println("请输入密码");
password = sc.nextLine();
User user = userDao.findUserByNameAndPassword(userName,password);
if(user!=null){
System.out.println("登录成功");
Main.isLogin=true;
Main.user = user;
break;
}else {
System.out.println("用户名密码校验失败,请重新输入用户名、密码");
}
}
}
}
}
RandomFourNumUtils
package util;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class RandomFourNumUtils {
public static String getRandomFourNum() {
String[] beforeShuffle = new String[] { "2", "3", "4", "5", "6", "7",
"8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z" };
List list = Arrays.asList(beforeShuffle);
Collections.shuffle(list);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
}
String afterShuffle = sb.toString();
String result = afterShuffle.substring(5, 9);
return result;
}
}



