这篇博客是参考了这个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;
}
}
}
}
最后运行一下: