博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java小项目之停车场系统(图解超详细)
阅读量:3899 次
发布时间:2019-05-23

本文共 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 ArrayList
list=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.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
adminList=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 ArrayList
carparking=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 ArrayList
user=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/

你可能感兴趣的文章
机器学习笔记(4)---K-近邻算法(2)---使用sklearn中的KNN算法
查看>>
数据结构——外部排序
查看>>
UNIX网络编程——System V 消息队列
查看>>
信号量、互斥锁,读写锁和条件变量的区别
查看>>
UNIX网络编程——Posix共享内存区和System V共享内存区
查看>>
js循环语句
查看>>
js中时钟的写法
查看>>
js事件冒泡
查看>>
京东金融曹鹏:通过JDD大赛,实现“比你更懂你”的极致价值,让金融更简单,更平等
查看>>
HTML我的家乡杭州网页设计作业源码(div+css)~ HTML+CSS网页设计期末课程大作业 ~ web前端开发技术 ~ web课程设计网页规划与设计 ~HTML期末大作业
查看>>
HTML网页设计期末课程大作业~动漫樱桃小丸子5页表格div+css学生网页设计作业源码
查看>>
HTML学生网页设计作业成品~化妆品官方网站设计与实现(HTML+CSS+JS)共8个页面
查看>>
web课程设计网页规划与设计~在线阅读小说网页共6个页面(HTML+CSS+JavaScript+Bootstrap)
查看>>
HTML期末大作业~棋牌游戏静态网站(6个页面) HTML+CSS+JavaScript
查看>>
XmlValidationModeDetector源码分析
查看>>
解析 xml 为Document
查看>>
中国银行2013年校园招聘机试回忆录(综合部分专业题 考点)
查看>>
广发银行2013校园招聘笔试回忆录
查看>>
Android canvas rotate():平移旋转坐标系至任意原点任意角度-------附:android反三角函数小结...
查看>>
Matlab读取avi视频并播放 你必须要知道的
查看>>