java二手车交易系统

基于控制台的效果图

 

 

 

 

一、要求总览(附完整代码)

该项目的目的用于二手车交易

运行开始系统看到主菜单:

1.登陆

2.注册:用户名不能重复

3.最新二手车信息

4.搜索车辆

*5.对比车辆

*6.我的收藏

7.后台管理

8.退出系统

项目要求:

1)选择登陆要求输入用户名密码和验证码,输入错误要求给出相应的提示信息

2)选择注册要求输入用户名,密码,确认密码,邮箱,手机号,注册日期,如果用户名或邮箱或手机号已被使用,则该用户注册失败,也应给与相应的提示信息,邮箱、手机号皆需要验证规则

3)选择最新二手车信息,要求显示最新发布的10辆二手车的信息内容,显示的内容包含车辆的品牌,车型,里程数,价格

呈现的内容如下:

  品牌   车型   里程数  价格   发布时间

1.大众   朗逸   54000   75000  2014-7-5

2.

3.

.....

10.

4)以上看到的十辆车的信息可以进行选择后显示车辆的详细信息,详细包含之前呈现的信息以及排量,上牌的时间,离合器类型,同时在信息的下方呈现如下菜单:

1.收藏(必须登陆后才能进行收藏)

2.加入对比

3.购买(只能在登陆后才能看到该菜单项)

4.返回主菜单

5)选择收藏,可以将该车辆收藏至登陆人的"我的收藏",当用户选择主菜单中的"我的收藏"选项时,可以查看登陆人收藏的所有车辆信息,每个人最多只能收藏10辆车,如果收藏第11辆车的时候第一辆移除收藏列表

6)选择加入对比,可以将车辆加入对比列表,对比列表最多只能存储4辆车的信息,如果对比车辆已满,则给出提示信息,同时可以选择是否要将页面跳转至"对比车辆"菜单项

7)选择购买,可以支付登陆人的金额,如果金额不够,则购买失败,否则交易成功,打印凭条

8)选择搜索车辆进入如下菜单:

1.根据品牌搜索

2.根据价格搜索

3.根据上牌日期搜索

9)选择根据品牌搜索,要求呈现当前二手车系统的所有品牌信息,显示如下:

1.大众

2.福特

3.斯柯达

.......

10)选择品牌后,要求呈现该品牌所对应的所有车型,如选择了1后,显示如下:

1.桑塔纳

2.朗逸

3.速腾

4.帕萨特

.......

11)选择车型后查看该车辆的详细信息,显示对应品牌车型所发布的所有二手车的信息,信息呈现的内容同3),可以对车辆进行选择,该功能同4)

12)选择价格搜索,呈现如下菜单:

1. 5万以下

2. 5-10万

3. 10-15万

4. 15万以上

13)选择任意项搜索出对应价格范围的车辆信息,信息呈现内容同3),可以对车辆进行选择,该功能同4)

14)选择上牌日期搜索,输入起始年份和月份以及结束的年份和月份,可以显示对应时间范围中的所有二手车信息,内容呈现同3),可以对车辆进行选择,功能同4)

15)选择对比车辆,呈现如下菜单:

1.查看对比信息

2.删除对比车辆

3.返回上一级菜单

16).选择查看对比信息,可以将之前加入对比的车辆信息进行对比(如果只有一辆车则无法参与对比),对比信息如下:

品牌    雪佛兰    大众       

车型    科鲁兹    朗逸

价格    65000     75000

排量    1.6       1.6

里程数  32000     23000

离合器  自动挡    手自一体

上牌时间

返回上一个菜单

17)选择删除对比车辆,需要先显示对比列表中的车辆品牌和车型,选择要删除的车辆,进行删除(删除操作时要给出提示信息)

18)选择我的收藏,可以查看收藏的车辆信息,内容呈现同3),可以选择查看收藏车辆的详细信息,功能同4)

19)选择后台管理,可以呈现如下菜单:

1.品牌管理

2.车型管理

3.发布车辆信息

20)选择品牌管理,可以添加品牌信息

21)选择车型管理,首先呈现所有的品牌信息,选择品牌后呈现如下菜单:

1.添加车型

2.删除车型

22)选择添加车型,可以输入车型名称并将该车型添加至对应的品牌中

23)选择删除车型,显示当前品牌下所有的对应的车型,选择车型后可以删除该车型(该车型对应的二手车都应删除):收藏夹,对比列表中的该车型的车都应该被删除

24)选择发布车辆信息,要求输入车辆的详细信息(要求品牌和车型是通过选择获取的,其余直接键盘输入获取)同时自动根据当前系统时间记录发布车辆的时间

要求:1.分层设计

      2.使用单例模式封装数据类

      3.Dao层不可出现于用户交互的代码,如输入或者输入等

      4.在合适的地方使用try..catch进行异常处理

      ****5.在合适的地方使用log4j记录日志:记录在文件中

      6.用户输入信息必须进行合理性验证

      7.进行增删改操作的最后,必须有确认步骤

      8.输出中不能有null,false,true等专业词汇

      9.程序不能出异常,不能非法退出

二、代码实现

1.Dao

package dao;

import entity.car;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class collection {
    private static final List<car> collectlist=new CopyOnWriteArrayList();
    private collection(){}
    static {

    }
    public static List<car> getInstance(){return collectlist;}

}

4.

package dao;

import entity.car;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class comparation {

        private static final List<car> comparelist=new CopyOnWriteArrayList();
        private comparation(){}
        static {

        }
        public static List<car> getInstance(){return comparelist;}
    }

5

package dao;

import entity.car;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class dateDB {
    private static final List<car> datelist=new CopyOnWriteArrayList();
    private dateDB(){}
    static {

    }
    public  static  List<car> getInstance(){
        return datelist;
    }
}

6

package dao;


import entity.User;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class iflogin {
    private static final List loginlist=new CopyOnWriteArrayList();
    private iflogin(){};
    static {loginlist.add(0);
        loginlist.add(0);
loginlist.add(0);

    }
    public  static  List getInstance(){
        return loginlist;
    }
}

7

package dao;

import entity.car;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class jiageDB {

    private static final List<car> jiagelist=new CopyOnWriteArrayList();
    private jiageDB(){}
    static {

    }
    public  static  List<car> getInstance(){
        return jiagelist;
    }
}

8

package dao;

import entity.basepinpai;
import entity.car;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class pinpaiDB {
    private static final List<basepinpai> basepinpailist=new CopyOnWriteArrayList();
    private static final List<basepinpai> basechexinglist=new CopyOnWriteArrayList();
    private static final List<basepinpai> pinpaichexinglist=new CopyOnWriteArrayList();
    private pinpaiDB(){}
    static {
        basechexinglist.add(new basepinpai("大众","朗逸"));
        basechexinglist.add(new basepinpai("大众","速腾"));
        basechexinglist.add(new basepinpai("大众","帕萨特"));
        basechexinglist.add(new basepinpai("大众","桑塔纳"));
        basechexinglist.add(new basepinpai("福特","金牛座"));
        basechexinglist.add(new basepinpai("福特","锐际"));
        basechexinglist.add(new basepinpai("福特","探险者"));
        basechexinglist.add(new basepinpai("福特","福克斯"));
        basechexinglist.add(new basepinpai("福特","锐界"));
        basechexinglist.add(new basepinpai("斯柯达","明锐"));
        basechexinglist.add(new basepinpai("斯柯达","速派"));
        basechexinglist.add(new basepinpai("斯柯达","速尊"));
        basechexinglist.add(new basepinpai("斯柯达","柯迪亚克"));
        basepinpailist.add(new basepinpai("大众",""));
        basepinpailist.add(new basepinpai("福特",""));
        basepinpailist.add(new basepinpai("斯柯达",""));
    }
    public  static  List<basepinpai> getInstance1(){
        return basepinpailist;
    }
    public static List<basepinpai>getInstance2(){
        return basechexinglist;
    }
    public static List<basepinpai>getInstance3(){return pinpaichexinglist;}


}

9

10

package dao;

import entity.User;
import entity.car;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

//
public class UserDB {
    //    唯一数据源
   private static final List<User> userlist=new CopyOnWriteArrayList();

    private  UserDB(){

    }
    //    初始化数据源
    static {
        List<car> list1=new CopyOnWriteArrayList();
        List<car> list2=new CopyOnWriteArrayList();
        userlist.add(new User(0,"xxxxxxx","123456","100006@qq.com","12345678901","2021.12.27",list2));
            userlist.add(new User(1,"manager","123456","100006@qq.com","12345678901","2021.12.27",list1 ));
        userlist.add(new User(0,"test","123456","100006@qq.com","12345678901","2021.12.27",list2));
    }
    //    返回数据主体
    public  static  List<User> getInstance(){
        return userlist;
    }

}

2.entity

1

package entity;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class basepinpai {
    String chexing;
    String pinpai;

    public String getChexing() {
        return chexing;
    }

    public void setChexing(String chexing) {
        this.chexing = chexing;
    }

    public String getPinpai() {
        return pinpai;
    }

    public void setPinpai(String pinpai) {
        this.pinpai = pinpai;
    }

    public basepinpai(String pinpai,String chexing) {
        this.pinpai = pinpai;
        this.chexing=chexing;
    }
    public basepinpai(String pinpai){
        this.pinpai=pinpai;
    }



}

2

    public String pinpai;
    public String chexing;
    public int lichen;
    public int jiage;
    public String fabudate;
    public int pailiang;
    public String shangpaidate;
    public String liheqi;

    DecimalFormat df = new DecimalFormat("0.00");
    SimpleDateFormat myFmt2 = new SimpleDateFormat("yyyy-MM-dd");
    public String getPinpai() {
        return pinpai;
    }

    public void setPinpai(String pinpai) {
        this.pinpai = pinpai;
    }

    public String getChexing() {
        return chexing;
    }

    public void setChexing(String chexing) {
        this.chexing = chexing;
    }

    public int getLichen() {
        return lichen;
    }

    public void setLichen(int lichen) {
        this.lichen = lichen;
    }

    public String getJiage() {
        return df.format(jiage);
    }

    public void setJiage(int jiage) {
        this.jiage = jiage;
    }

    public String getFabudate() {
        return fabudate;
    }

    public void setFabudate(String fabudate) {
        this.fabudate = fabudate;
    }

    public int getPailiang() {
        return pailiang;
    }

    public void setPailiang(int pailiang) {
        this.pailiang = pailiang;
    }


    public Date getShangpaidate() {
        Date spdate=null;
        try {
            spdate = myFmt2.parse(shangpaidate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
return spdate;
    }

    public void setShangpaidate(String shangpaidate) {
        this.shangpaidate = myFmt2.format(shangpaidate);
    }

    public String getLiheqi() {
        return liheqi;
    }

    public void setLiheqi(String liheqi) {
        this.liheqi = liheqi;
    }

    public car(String pinpai, String chexing, int lichen, int jiage, String fabudate, int pailiang, String shangpaidate, String liheqi) {
        this.pinpai = pinpai;
        this.chexing = chexing;
        this.lichen = lichen;
        this.jiage = jiage;
        this.fabudate = fabudate;
        this.pailiang = pailiang;
        this.shangpaidate = shangpaidate;
        this.liheqi = liheqi;
    }

    public String toString2() {
        return pinpai+"  "+chexing+"  "+lichen+"  "+jiage+"  "+fabudate;
    }
    public String toString1() {
        return pinpai+"  "+chexing+"  "+lichen+"  "+jiage+"  "+shangpaidate;
    }
public String toString4(){return pinpai+"  "+chexing;}
    public String toString(){
        return "品牌:"+pinpai+" 车型: "+chexing+" 里程数: "+lichen+" 价格: "+jiage+" 发布日期: "+fabudate
                +" 排量:"+pailiang+" 上牌日期:"+shangpaidate+" 离合器类型:"+liheqi;
    }
    public String toString3(){return "商品:"+pinpai+" "+chexing+" 价格为"+getJiage()+" ";

    }

3

package entity;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class futechexing {private static final List futechexinglist=new CopyOnWriteArrayList();
    private futechexing(){}
    static {
        futechexinglist.add("金牛座");
        futechexinglist.add("锐际");
        futechexinglist.add("探险者");
        futechexinglist.add("福克斯");
        futechexinglist.add("锐界");
    }
    public  static  List<User> getInstance(){
        return futechexinglist;
    }
}

4

package entity;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class sikedachexing {
    private static final List sikedachexinglist=new CopyOnWriteArrayList();
    private sikedachexing(){}
    static {
        sikedachexinglist.add("明锐");
        sikedachexinglist.add("速派");
        sikedachexinglist.add("速尊");
        sikedachexinglist.add("柯迪亚克");

    }
    public  static List<User> getInstance(){
        return sikedachexinglist;
    }
}

5

package entity;

import java.util.List;

public class User {
    public String name;
    public String code;
    public String mail;
    public String mobile;
    public String zhucedate;
    public List<car> collcet;
    public int type;

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getZhucedate() {
        return zhucedate;
    }

    public void setZhucedate(String zhucedate) {
        this.zhucedate = zhucedate;
    }

    public List getCollcet() {
        return collcet;
    }

    public void setCollcet(List collcet) {
        this.collcet =collcet;
    }

    public User(){};
    public User(int type,String name, String code, String mail, String mobile, String zhucedate,List<car> collcet){
        this.name=name;
        this.code=code;
        this.mail=mail;
        this.mobile=mobile;
        this.zhucedate=zhucedate;
        this.collcet=collcet;
        this.type=type;
    }
    public String toString(){
        return "账户类型:"+getType()+"  用户名:"+getName()+"  密码:"+getCode()+ "  邮箱:"+getMail()+"  手机号:"+getMobile()+"  注册时间为:"+getZhucedate();
    }
}

3.function

1

package function;

import dao.comparation;
import entity.car;
import test.maintest;

import java.util.List;
import java.util.Scanner;

public class compare {
    List<car> listcompare= comparation.getInstance();
    Scanner sc=new Scanner(System.in);
    public void choose(){
        System.out.println("请选择您的操作:\n" +
                "1.查看对比信息\n" +
                "2.删除对比车辆\n" +
                "3.返回上一级菜单");

        int p=sc.nextInt();
        if(p==1) see();
        else if (p==2) del();
        else if(p==3) maintest.getInstance().index();
        }

    private void del() {
        if(listcompare.size()<1){
            System.out.println("对比列表中无车辆,无法进行删除,请重新选择操作");
            choose();
        }
        else {
            for(int i=0;i<listcompare.size();i++){
                System.out.print((i+1)+". ");
                System.out.println(listcompare.get(i).toString4());
            }
            System.out.println("请选择您想删除的序号——");
            int p=sc.nextInt();
            if(p>0&&p<=listcompare.size()){
            listcompare.remove(p-1);
                System.out.println("删除成功!自动返回上一级菜单");
                choose();
        }
        }
    }

    private void see() {
        if (listcompare.size()<2){
            System.out.println("未满两辆车,无法对比,请重新选择操作");choose();}
        else {
            System.out.print("品牌  ");
            for(int i=0;i<listcompare.size();i++){
            System.out.print(listcompare.get(i).getPinpai()); System.out.print("  ");
        }
            System.out.print("\n车型   ");
            for(int i=0;i<listcompare.size();i++){
                System.out.print(listcompare.get(i).chexing); System.out.print("  ");
            }
            System.out.print("\n价格   ");
            for(int i=0;i<listcompare.size();i++){
                System.out.print(listcompare.get(i).jiage); System.out.print("  ");
            }
            System.out.print("\n排量   ");
            for(int i=0;i<listcompare.size();i++){
                System.out.print(listcompare.get(i).pailiang); System.out.print("  ");
            }
            System.out.print("\n里程数  ");
            for(int i=0;i<listcompare.size();i++){
                System.out.print(listcompare.get(i).lichen); System.out.print("  ");
            }
            System.out.print("\n离合器  ");
            for(int i=0;i<listcompare.size();i++){
                System.out.print(listcompare.get(i).liheqi); System.out.print("  ");
            }
            System.out.print("\n上牌时间 ");
            for(int i=0;i<listcompare.size();i++){
                System.out.print(listcompare.get(i).shangpaidate); System.out.print(" ");
            }
            System.out.println("输入1返回上一级菜单,输入其他任意数字返回主菜单");
            int a=sc.nextInt();
            if(a==1)choose();
            else maintest.getInstance().index();
        }
    }
}


2

package function;

import dao.*;
import entity.User;
import test.maintest;

import java.util.List;
import java.util.Scanner;

public class login {
    List<User> list = UserDB.getInstance();
    List listlogin= iflogin.getInstance();
    Scanner scan = new Scanner(System.in);

    public void checkUserName() {
       if(new UserDao().checklogin()) {
           System.out.println("请输入用户名:");
           String userName = scan.next();
           if (userName.equals("0")) {
               System.out.println("谢谢使用!再见!");
           } else if (new UserDao().checkUserName(userName)) {
               System.out.println("请输入密码!---0键退出");
               checkUserPassword(userName);
           } else {
               System.out.println("用户名输入有误!请重新输入!------0键退出");
               checkUserName();
           }
       }
       else {
           System.out.println("已有用户正在登陆,请勿重复登录!已返回主菜单!");
           maintest.getInstance().index();
       }
    }

    public void checkUserPassword(String name) {
        String userPassword = scan.next();
        if (userPassword.equals("0")) {
            System.out.println("谢谢使用!再见!");
        } else if (new UserDao().checkUserPassword(name, userPassword)) {
            System.out.println("请输入以下验证码(不区分大小写)!");
            checkVercode(name);

        } else {
            System.out.println("密码错误!请重新输入————");
            checkUserPassword(name);
        }
    }

    public void checkVercode(String name) {
        String a = new UserDao().vercode();
        System.out.println("您的验证码是: " + a + " ");
        String v = scan.next();
        if (v.equals(a)) {
            System.out.println("登陆成功!已返回主界面!");
            int indext=new carDao().findindex(name);
            listlogin.set(indext,1);
            maintest.getInstance().index();
        } else {
            System.out.println("验证码输入错误,请再试一次!");
            checkVercode(name);
        }

    }
    public int index(String name){
        return new carDao().findindex(name);
    }
}

3

3

4

5

6

8

package function;

import dao.*;
import entity.User;
import entity.car;
import test.maintest;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class vehicle {
    DecimalFormat df = new DecimalFormat("0.00");
    SimpleDateFormat df1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    List<car> listcar= carDB.getInstance();
    List<User> listuser= UserDB.getInstance();
    List listlogin= iflogin.getInstance();
    List<car> listcollcet= collection.getInstance();
    List<car> listcompare= comparation.getInstance();
    Scanner sc=new Scanner(System.in);

    public void getlatest() {
        System.out.println("  品牌  车型   里程数   价格   发布时间");
        for (int i = 0; i < 10; i++) {
            System.out.println((i + 1) + "" + listcar.get(i).toString2());
        }

        getxiangxi(denglu());
    }
    public int denglu(){
        for(int i=0;i<listlogin.size();i++){
            if(listlogin.get(i).equals(1))
                return i;}
      return 0;
    }
    public int getxiangxi(int index) {
        System.out.println("选择您想看的车辆具体信息编号,返回主菜单请输入0");
      int a = sc.nextInt();
        if (a == 0) maintest.getInstance().index();
        else if (a > 0 && a < 11) {
            String o=listcar.get(a-1).getChexing();
            System.out.println(jutixinxi(a - 1));
            caozuo(o,index);
        }
        else {
            System.out.println("您输入的编号错误,重新输入!");
            getxiangxi(index);
        }
        return a;
    }
    public String jutixinxi(int i) {
        if (i >=0 && i < listcar.size()) {
            return listcar.get(i).toString();
        } else return "选择错误!请重新输入!";
    }
        public void caozuo(String chexing,int index){
            if (listlogin.get(denglu()).equals(1)) {
                System.out.println("1.收藏\n2.加入对比\n3.购买\n4.返回主菜单");
                int r = sc.nextInt();
                if (r == 1) collect(chexing,index);
                else if(r==2)compare(chexing,index);
                else if(r==3){
                    System.out.println("请输入您的金额");
                   double money=sc.nextDouble();
                    purchase((int) money,chexing);
                }
                else if(r==4) maintest.getInstance().index();
                else {System.out.println("输入错误,请重新选择");
                caozuo(chexing,index);}
            } else System.out.println("1.收藏(您尚未登录不可使用此功能!选择此项前往登录)\n2.加入对比\n3.购买(您尚未登录不可使用此功能!选择此项前往登录)\n4.返回主菜单");
                 int s=sc.nextInt();
                 if(s==1||s==3)new login().checkUserName();
                 else if(s==2){
                     compare(chexing,index);
                 }
                 else if(s==4) maintest.getInstance().index();
else {
                     System.out.println("选择错误,请重新选择!");
                     caozuo(chexing,index);
                 }
    }
    public void compare(String chexing,int i) {
        if (new carDao().checkcomparation(chexing)) {
            listcompare.add(listcar.get(new carDao().findcarindex(chexing)));
            System.out.println("加入对比列表成功!已返回上一级菜单");
            caozuo(chexing, i);
        } else {
            System.out.println("该车型已在列表中,不可再次添加!已返回上级菜单");
            caozuo(chexing, i);
        }
    }
    public void purchase(int m,String chexing) {

        int t=listcar.get(new carDao().findcarindex(chexing)).jiage;
if (m>=t) {
    System.out.println("购买成功!购买凭条如下:\n" + listcar.get(new carDao().findcarindex(chexing)).toString2() + "购买时间: " + df1.format(new Date()));
    System.out.println("输入任意值返回上一级菜单!");
    Object t1 = sc.nextLong();
    if (t1 != null) caozuo(chexing,denglu());
    else {
        System.out.println("");
    }
}
else {
    System.out.println("金额不足,无法购买!已返回上一级选择菜单!");
    caozuo(chexing,denglu());
}
    }

    public void collect(String chexing,int userindex) {
        if (new carDao().checkcollcetion(chexing)) {
            listcollcet.clear();
            listcollcet.add(listcar.get(new carDao().findcarindex(chexing)));
            listuser.get(userindex).collcet.add(listcar.get(new carDao().findcarindex(chexing)));
            System.out.println("收藏成功!输入0返回最热二手车信息菜单,输入其他任意数字返回主菜单");
            int p = sc.nextInt();
            if (p == 0) getlatest();
            else maintest.getInstance().index();
        }
        else {
            System.out.println("该车型已在您的收藏列表中");
            caozuo(chexing,userindex);
        }
    }
    }

具体文件移步至资源处下载!

  • 11
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值