java小项目之停车场系统(图解超详细)

这篇博客是参考了这个https://blog.csdn.net/weixin_43951778/article/details/109643951
虽然是参考,但是全部的代码都是自己模仿着写好的:
首先创建了项目之后,老老实实在上面写好这几个包:
在这里插入图片描述
然后一个一个类开始写:
首先是
1.Admin:

package com.gem.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.ArrayList;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Admin {
    
    
    //有一些登录者的信息
    private String username;
    private String password;
    private double money;
    private ArrayList<String> list=new ArrayList<String>();
    //这里也是自动生成的,应该问题不打吧
    @Override
    public String toString() {
    
    
        return "Admin{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
    //这里弄了一个有参数的构造函数
    public Admin(String username,String password){
    
    
        super();
        this.username=username;
        this.password=password;
    }

}

2.CarParking

package com.gem.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.text.SimpleDateFormat;
import java.util.Date;

@AllArgsConstructor
@NoArgsConstructor
@Getter
public class CarParking {
    
    
    //这个是车位
    //显示对应历史记录的get和set,写在了后面

    public  String getLishi() {
    
    
        return Lishi;
    }

    public  void setLishi(String lishi) {
    
    
        this.Lishi = lishi;
    }
    private int id;//停车的编号
    private double money;//钱的计算
    private String state;//当前停车状态
    private Date stime;//停车的时间
    private Date etime;//停车结束
    //感觉好像是有错误的,所以我这里修改了一下
    private  double allmoney;
    private  String Lishi="";

    public void setEtime() {
    
    
        //这里是设置停车结束的时间
        etime =new Date();//创建一个时间对象
        //这个是用来格式化时间的
        SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
        String time1=dateFormat.format(this.etime);
    }

    public void setStime() {
    
    
        //这个是停车开始的时间,也是相当于对他进行格式化
        stime=new Date();
        SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.format(stime);
    }
    //这里有点小改,但是应该问题不大
    @Override
    public String toString() {
    
    
        return "CarParking{" +
                "id=" + id +
                ", money=" + money +
                ", stime=" + stime +
                '}';
    }
    public CarParking(int id,String state){
    
    
        this.id=id;
        this.state=state;
    }
    //再创建设置的函数,需要有id和carid
    public void CarPark(int id,String  carid){
    
    
        this.id=id;
        this.state=carid;
    }

    //再是默认的get和set方法


    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public double getMoney() {
    
    
        return money;
    }

    public void setMoney(double money) {
    
    
        this.money = money;
    }

    public String getState() {
    
    
        return state;
    }

    public void setState(String state) {
    
    
        this.state = state;
    }

    public  double getAllmoney() {
    
    
        return allmoney;
    }

    public  void setAllmoney(double allmoney) {
    
    
        this.allmoney = allmoney;
    }
}

3.User

package com.gem.entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@AllArgsConstructor
@Setter
@NoArgsConstructor
@Getter
public class User {
    
    
    private String carid;//车牌

    @Override
    public String toString() {
    
    
        return "车牌为"+carid;
    }
}

再是 service层的
4.AdminService

package com.gem.service;

import com.gem.entity.Admin;

public interface AdminService {
    
    
    //这是个管理员业务的接口
    //首先是登录
    Admin login(String username, String password);
    //再是注册
    boolean register(Admin admin);
}

和对应的impl
5.AdminServiceImpl

package com.gem.service.impl;

import com.gem.entity.Admin;
import com.gem.service.AdminService;

import java.util.ArrayList;

//这个是用来实现那个接口的
public class AdminServiceImpl implements AdminService {
    
    
    //这个就是管理员实现类
    //先创建一个list
    private ArrayList<Admin> adminList=new ArrayList<Admin>();
    //再是单例饿汉模式,我也不知道是什么
    private static final AdminServiceImpl adminSeriver=new AdminServiceImpl();
    public static AdminServiceImpl  getAdminSeriver(){
    
    
        return adminSeriver;
    }
    private AdminServiceImpl(){
    
    }

    public Admin login(String username, String password) {
    
    
        //这里就是对接口的实现
        for(Admin admin:adminList){
    
    
            if(admin.getUsername().equals(username)&&admin.getPassword().equals(password)){
    
    
                return admin;
            }
        }
        return null;
    }


    public boolean register(Admin admin) {
    
    
        //然后这里是实现注册
        boolean flag=adminList.add(admin);//添加管理员
        return flag;
    }


}

6.CarParkingService

package com.gem.service;

public interface CarParkingService {
    
    
    boolean parkcar(int id, String carid);//这个是用来停车的
    void showList();//显示所有的列表
    boolean leavecar(String carid);//离开
}

7.CarParkingServiceImpl

package com.gem.service.impl;


import com.gem.entity.CarParking;
import com.gem.service.CarParkingService;


import java.util.ArrayList;
import java.util.Date;


public class CarParkingServiceImpl implements CarParkingService {
    
    
    //这个是用来实现那个接口
    //先创建一个数组,这个类型是停车的属性,有一些给定的属性
    private ArrayList<CarParking> carparking=new ArrayList<CarParking>();
    //不知道这个双括号是干啥的,相当于是一种初始化
    {
    
    
        for(int i=1;i<=10;i++){
    
    
            carparking.add(new CarParking(i,"当前车位为空"));
        }
    }
    //然后又是单例模式
    private static CarParkingServiceImpl carParkingService=new CarParkingServiceImpl();
    //再赋予get方法
    public static CarParkingServiceImpl getCarParkingService() {
    
    
        return carParkingService;
    }
    //一个无参构造函数
    public CarParkingServiceImpl(){
    
    }
    //这里开始对停车的进行操作了
    public boolean parkcar(int id, String carid) {
    
    
       //需要对停车过来的信息都进行修改
        for(CarParking car: carparking){
    
    
            //相当于就是对carparking这个队列进行循环,当前只有前十个是空的
            if(id==car.getId()&&car.getState().equals("当前车位为空")){
    
    
                //对int和String的比较
                car.setState(carid);
                car.setStime();//setTime有自己的方法
                return true;
            }
        }
        return false;//默认的
    }

    public void showList() {
    
    
        //这里感觉即使 输出就行了
        for(CarParking car:carparking){
    
    
            System.out.println(car.getId()+"\t"+car.getState());
        }

    }

    //这里又写了一个展示时间的方法
    public void showcartime(String carid){
    
    
        for(CarParking car:carparking){
    
    
            if(car.getState().equals(carid)){
    
    
                //也就是符合的话,就进行时间的设置 e的和s对应
                car.setEtime();
                Date time1=car.getEtime();//当前的时间
                Date time2=car.getStime();//设置开始得到的时间
                //感觉这句话有点奇怪
                System.out.println("车位是"+car.getId()+"车牌是"+car.getState());
                System.out.println("停车时间为"+time2);
                System.out.println("当时时间为"+time1);
                //感觉可以需要修改一下
                System.out.println("已经停车时间为"+(time1.getTime()-time2.getTime()));

            }
        }
    }


    //还有一个离开的话,需要停车费的计算
    public boolean leavecar(String carid) {
    
    
        for(CarParking car:carparking){
    
    
            if(car.getState().equals(carid)){
    
    
                //也就是符合的话,就进行时间的设置 e的和s对应
                car.setEtime();
                Date time1=car.getEtime();//当前的时间
                Date time2=car.getStime();//设置开始得到的时间
                //这里保存一下时间
                long t = (time1.getTime() - time2.getTime()) / (1000 * 60 * 60);
                //感觉这句话有点奇怪
                System.out.println("车位是"+car.getId()+"车牌是"+car.getState());
                System.out.println("停车时间为"+time2);
                System.out.println("当时时间为"+time1);
                //感觉可以需要修改一下
                System.out.println("已经停车时间为"+(time1.getTime()-time2.getTime()));
                if(t<=3){
    
    
                    //小于三个小时的话,钱是不需要的
                    car.setMoney(0);
                    car.setAllmoney(car.getAllmoney()+car.getMoney());
                }else if(t>3&&t<=13){
    
    
                    car.setMoney(2*(t-3));
                    car.setAllmoney(car.getAllmoney()+car.getMoney());
                }else if(t>13){
    
    
                    car.setMoney(20);
                    car.setAllmoney(car.getAllmoney()+car.getMoney());
                }
                car.setLishi(car.getLishi() + "车位:" + car.getId() + "收入金额为:" + car.getMoney() + "\n");
                //这里也很奇怪,为什么不用getallmoney呢,不然白设置的嘛
                System.out.println("停车费为"+car.getMoney());
                car.setState("当前车位为空");
                return true;

            }
        }
        return false;
    }
    public void show(){
    
    
        for(CarParking car:carparking){
    
    
            //也是在这个链表里面
            System.out.println(car.getLishi());
            //这里还有个return 我感觉也没必要加
        }
    }
    //还有个检查的方法
    public boolean check(String carid){
    
    
        for(CarParking car:carparking){
    
    
            if(car.getState().equals(carid)){
    
    
                //如果相同的话
                System.out.println("车辆正在使用");
                return  true;
            }
        }
        return false;
    }
}

8.UserService

package com.gem.service;

import com.gem.entity.User;

public interface UserService {
    
    
    User login(User a);
}

9.UserServiceImpl

package com.gem.service.impl;

import com.gem.entity.User;
import com.gem.service.UserService;

import java.util.ArrayList;

public class UserServiceImpl implements UserService {
    
    
    private ArrayList<User> user=new ArrayList<User>();
    private static UserServiceImpl userserviceimpl=new UserServiceImpl();
    private UserServiceImpl(){
    
    

    }

    public static UserServiceImpl getUserserviceimpl() {
    
    
        return userserviceimpl;
    }


    public User login(User a) {
    
    
        //啊这 都没有验证的吗
       user.add(a);
       return a;
    }
    //这个就是实现那个用户登录
}

10.Client

package com.gem.client;

import com.gem.entity.Admin;
import com.gem.entity.CarParking;
import com.gem.entity.User;
import com.gem.service.UserService;
import com.gem.service.impl.AdminServiceImpl;
import com.gem.service.impl.CarParkingServiceImpl;
import com.gem.service.impl.UserServiceImpl;

import java.util.Scanner;

//这个就是相当于主界面
public class Client {
    
    
    public static void main(String[] args) {
    
    
        //这里是get的,通过get方法提高影迷小
        CarParkingServiceImpl carParkingService = CarParkingServiceImpl.getCarParkingService();
        UserServiceImpl userService = UserServiceImpl.getUserserviceimpl();


        Scanner scanner = new Scanner(System.in);
        Menu1(carParkingService, userService, scanner);
    }

    private static void Menu1(CarParkingServiceImpl carParkingService, UserServiceImpl userService, Scanner scanner) {
    
    
        //从这里开始认真的输出
        while (true) {
    
    
            System.out.println("****欢迎进入停车系统****");
            System.out.println("****1.请输入你的车牌****");
            System.out.println("****2.管理员");
            System.out.println("****3.退出****");
            //trim是用来去空格的吧
            int choice = Integer.parseInt(scanner.nextLine().trim());
            switch (choice) {
    
    
                case 1:
                    System.out.println("请输入你的车牌");
                    String chepai = scanner.nextLine().trim();
                    //为什么这个new 可以输入呀 @AllArgsConstructor因为这个的存在
                    User a = userService.login(new User(chepai));
                    if (a != null) {
    
    
                        System.out.println("车牌登记成功");
                        //这里也要写一个代码
                        Menu2(carParkingService, userService, scanner, a);
                    } else {
    
    
                        System.out.println("车牌登记失败");
                    }
                    break;
                case 2:
                    Menu_Manger(carParkingService, userService);
                default:
                    break;

            }
        }

    }
    //因为2就是登陆者界面
    private static  void Menu_Manger(CarParkingServiceImpl carParkingService, UserServiceImpl userService){
    
    
       //好像这个只能在main方法里才行的,不是,呆住了,不用new 的
        AdminServiceImpl adminService= AdminServiceImpl.getAdminSeriver();
        while(true){
    
    
            System.out.println("1.管理员登录");
            System.out.println("2.管理员注册");
            System.out.println("返回上一级");
            Scanner scanner=new Scanner(System.in);
            int chose =Integer.parseInt(scanner.nextLine().trim());
            switch (chose){
    
    
                case 1:
                    System.out.println("请输入管理员账号");
                    String name=scanner.nextLine().trim();
                    System.out.println("请输入管理员密码");
                    String password=scanner.nextLine().trim();
                    if(adminService.login(name,password)!=null){
    
    
                        //说明是登录进去了
                        System.out.println("登录成功");
                        Menu_Manger2(carParkingService,userService,adminService);//再这边就进行管理员操作的
                    }
                    else{
    
    
                        System.out.println("登陆失败");
                        return;
                    }
                    break;
                case 2:
                    //这里就是管理员注册了
                    System.out.println("请输入注册账号");
                    name=scanner.nextLine().trim();
                    System.out.println("请输入注册密码");
                    password=scanner.nextLine().trim();
                    adminService.register(new Admin(name,password));
                    break;
                    //这里的case3 也是删了的
                default:
                    return;
            }
        }

    }
    //再是对Men这个函数进行修改
    private static void Menu_Manger2(CarParkingServiceImpl carParkingService,UserServiceImpl userService,AdminServiceImpl adminService){
    
    
        while(true){
    
    
            //这里就是登录进去之后的操作了
            System.out.println("****欢迎进入管理员操作****");
            System.out.println("1.查看现有停车位");
            System.out.println("2.查看停车位上的车以及缴费");
            System.out.println("3.返回上一级");
            Scanner scanner=new Scanner(System.in);
            int chose=Integer.parseInt(scanner.nextLine().trim());
            switch (chose){
    
    
                case 1:
                    carParkingService.showList();
                    break;
                case 2:
                    carParkingService.show();
                case 3:
                    return;
                default:
                    System.out.println("输入错误");
                    break;

            }
        }
    }
    //然后接上之前的
    private static void Menu2(CarParkingServiceImpl carParkingService,UserServiceImpl userService,Scanner scanner,User a){
    
    
        while(true){
    
    
            //对于进入车牌之后的信息
            System.out.println("欢迎车牌号为"+a.getCarid()+"车主"+"请选择你要的服务");
            System.out.println("1.停车");
            System.out.println("2.离开并缴费");
            System.out.println("3.查看停车车位");
            System.out.println("4.停车时长");
            System.out.println("0.返回上一级");
            int chose=Integer.parseInt(scanner.nextLine().trim());
            switch (chose){
    
    
                case 1:
                     if(carParkingService.check(a.getCarid())){
    
    
                         //主要是通过输入a的车牌的值在不在那个里面
                         break;
                     }
                while(true){
    
    
                    //随机生成一个车位
                    int random= (int) (Math.random()*10);
                    //然后调用一个停车位,但是好像有点看不懂了
                    if(carParkingService.parkcar(random,a.getCarid())){
    
    
                        //如果成功的话
                        System.out.println("停车成功,停车位置为"+random);
                        break;
                    }else{
    
    
                        System.out.println("该位置有车");
                    }
                }
                break;
                case 2:
                    //2是离开并且缴费
                    if(carParkingService.leavecar(a.getCarid())){
    
    
                        //如果能操作
                        System.out.println("请缴费");
                    }
                    else{
    
    
                        System.out.println("当前车位没车");
                    }
                    break;
                case 3:
                    //展示所有的车位
                    carParkingService.showList();
                    break;
                case 4:
                    //展示停车时长
                    carParkingService.showcartime(a.getCarid());
                    break;
                case 0:
                    return ;
                default:
                    System.out.println("输入错误");
                    break;
            }
        }
    }

}

最后运行一下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41115379/article/details/111597728
今日推荐