本文共 16145 字,大约阅读时间需要 53 分钟。
这篇博客是参考了这个
虽然是参考,但是全部的代码都是自己模仿着写好的: 首先创建了项目之后,老老实实在上面写好这几个包: 然后一个一个类开始写: 首先是 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@NoArgsConstructorpublic class Admin { //有一些登录者的信息 private String username; private String password; private double money; private ArrayListlist=new ArrayList (); //这里也是自动生成的,应该问题不打吧 @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@Getterpublic 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@Getterpublic class User { private String carid;//车牌 @Override public String toString() { return "车牌为"+carid; }}
再是 service层的
4.AdminServicepackage com.gem.service;import com.gem.entity.Admin;public interface AdminService { //这是个管理员业务的接口 //首先是登录 Admin login(String username, String password); //再是注册 boolean register(Admin admin);}
和对应的impl
5.AdminServiceImplpackage 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 ArrayListadminList=new ArrayList (); //再是单例饿汉模式,我也不知道是什么 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 ArrayListcarparking=new ArrayList (); //不知道这个双括号是干啥的,相当于是一种初始化 { 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 ArrayListuser=new ArrayList (); 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; } } }}
最后运行一下:
转载地址:http://eifen.baihongyu.com/