目录
任务要求
本代码用于实现一个简单的停车场管理系统,包含数据结构中的栈和队列
栈代表停车场停车的数量,先进后出,因为入口被视为一次只能过一辆车
其次临时栈,如果有车要出停车场,则需要将其他车假设移出停车场,放到临时栈中,之后等待车出停车场后,再使车辆依次归位停车场
队列代表临时便道,如果停车场满,但依然有车希望进入,则进入临时便道等待,直到有车出停车场
具体如下图:
具体实现
本代码分为五个部分
Parking_Management_System类
用于实现主菜单功能
1.进入管理员系统
2.进入用户系统
3.退出系统
javaimport java.util.*; public class Parking_Management_System { static Scanner sc=new Scanner(System.in); static int Capacity=5; static Queue<String>Lane=new ArrayDeque<String>(); static Stack<String>Parking_Space=new Stack<String>(); public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("**********************"); System.out.println("欢迎使用停车场管理系统"); System.out.println("**********************"); System.out.println("请选择需要进行的操作:\"管理员系统\"或\"用户系统\"或\"关于我们\"或\"退出系统\""); while(sc.hasNext()) { String Choose=sc.next();//输入进行选择 boolean exit=false;//初始化退出状态 switch (Choose) { case "管理员系统": { Administrators.Administrators_System();break; } case "用户系统": { User.User_System();break; } case "关于我们": { Tool.Acknowledgement();break; } case "退出系统": { System.out.println("请选择需要进行的操作:\"确定\"或\"取消\""); exit=Tool.Exit();//调用退出函数 if(exit) { System.out.println("系统已经成功关闭"); System.out.println("欢迎下次使用!"); System.out.println(); break; } } } if(exit)//退出系统 { break; } System.out.println("请选择需要进行的操作:\"管理员系统\"或\"用户系统\"或\"关于我们\"或\"退出系统\""); } } }
Account类
用于定义用户注册账号所储存的数据,包括VIP办理情况,停车状态,充值VIP时间,优惠券数量,密码,剩余可购买优惠券数量,停车车牌号,入车时间
javaimport java.util.*; public class Account { private boolean VIP_Card;//是否有vip private boolean Stop;//是否是停车状态 private Date Time;//VIP充值时间 private int Coupon;//是否有优惠券 private String Password;//密码 private int Coupon_Cnt;//还能买几次优惠券 private String LicensePlateNumber;//车牌号 private Date EntryTime;//入车时间 public boolean isStop() { return Stop; } public void setStop(boolean stop) { Stop = stop; } public boolean isVIP_Card() { return VIP_Card; } public void setVIP_Card(boolean VIP_Card) { this.VIP_Card = VIP_Card; } public Date getTime() { return Time; } public void setTime(Date Time) { this.Time = Time; } public int getCoupon() { return Coupon; } public void setCoupon(int Coupon) { this.Coupon = Coupon; } public String getPassword() { return Password; } public void setPassword(String password) { Password = password; } public int getCoupon_Cnt() { return Coupon_Cnt; } public void setCoupon_Cnt(int coupon_Cnt) { Coupon_Cnt = coupon_Cnt; } public String getLicensePlateNumber() { return LicensePlateNumber; } public void setLicensePlateNumber(String licensePlateNumber) { LicensePlateNumber = licensePlateNumber; } public Date getEntryTime() { return EntryTime; } public void setEntryTime(Date entryTime) { EntryTime = entryTime; } }
Administrators类
用于实现管理员功能,查询停车场信息,查询收入情况,查询投放优惠券数,查询用户信息
javaimport java.text.*; import java.util.*; public class Administrators { static Scanner sc=new Scanner(System.in); static String Income="0";//总收入 static String VIP_Income="0";//VIP卡收入 static String Other_Income="0";//购买优惠券收入 static Map<String,String>administrators=new HashMap<String,String>(); static String Key="";//注册管理员账号的密钥,只有密钥正确才可注册管理员账号 public static void Administrators_System() { if(administrators.isEmpty()) { Initialization();//初始化 } System.out.println("请选择需要进行的操作:\"登录\"或\"注册\"或\"返回\""); while(sc.hasNext()) { String Choose= sc.next(); boolean Determine=false; switch (Choose) { case "登录": { System.out.println("请输入管理员账号:"); String Account = sc.next(); System.out.println("请输入管理员密码:"); String Password = sc.next(); if (Administrators_Lon_on(Account, Password)) { System.out.println("登入成功"); System.out.println(); Administrators_System_Main_Menu(); } else{ System.out.println("账号或密码错误,请重新尝试"); System.out.println(); } break; } case "注册": { System.out.println("请输入注册账号"); String Account = sc.next(); System.out.println("请输入注册密码"); String Password = sc.next(); System.out.println("请输入密钥"); String Secret_key = sc.next(); Register(Account, Password, Secret_key); break; } case "返回":{ Determine=true; System.out.println("返回成功"); System.out.println(); break; } } if(Determine) { break; } System.out.println("请选择需要进行的操作:\"登录\"或\"注册\"或\"返回\""); } } public static void Initialization()//初始化管理员账号 { administrators.put("","");//自行输入 } public static void Register(String Account,String Password,String Secret_key) { if(!Secret_key.equals(Key)) { System.out.println("密钥错误"); System.out.println(); } else if(administrators.get(Account)!=null) { System.out.println("注册账号已存在"); System.out.println("注册失败"); System.out.println(); } else { administrators.put(Account,Password); System.out.println("注册成功"); System.out.println(); } } public static boolean Administrators_Lon_on(String Account,String Password)//账号是否有效 { Set<String>set=administrators.keySet(); Iterator<String>it=set.iterator();//用于遍历用户账号 while(it.hasNext()) { String key=it.next(); String value=administrators.get(key); if(Account.equals(key)&&Password.equals(value)) { return true; } } return false; } public static void Query_Income()//查询收入 { System.out.println("当前总收入:"+Income+"元"); System.out.println("停车收入:"+(Integer.valueOf(Income)-Integer.valueOf(VIP_Income)-Integer.valueOf(Other_Income))+"元"); System.out.println("会员收入"+VIP_Income+"元"); System.out.println("其他收入"+Other_Income+"元"); System.out.println(); } public static void Query_Coupon()//查询已投放优惠券 { int cnt=0; Set<String>set=User.user.keySet(); Iterator<String>it=set.iterator(); while(it.hasNext()) { String key= it.next(); cnt+=User.user.get(key).getCoupon(); } System.out.println("已经有"+cnt+"张优惠券投入市场"); } public static void Query_User()//查询用户信息 { System.out.println("请输入需要查询用户账号"); String account=sc.next(); Set<String>set=User.user.keySet(); Iterator<String>it=set.iterator(); boolean Determine=false; while(it.hasNext()) { String key=it.next(); if(key.equals(account)) { Determine=true; if(User.user.get(account).isStop()) { System.out.println("该账户停车车牌号:"+User.user.get(account).getLicensePlateNumber()); SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String s= sdf.format(User.user.get(key).getEntryTime()); System.out.println("该用户的入车时间:"+s); } else { System.out.println("该用户暂未停车"); } break; } } if(!Determine) { System.out.println("该用户不存在"); } System.out.println(); } public static void Query_Parking() { System.out.println("请选择需要进行的操作:\"查询停车场车辆信息\"或\"查询车位\"或\"等待车辆\"或\"返回\""); while(sc.hasNext()) { boolean Determine=false; String Choose=sc.next(); switch (Choose) { case "查询停车场车辆信息":{ Set<String>set=User.user.keySet(); Iterator<String> it=set.iterator(); System.out.println("用户名 车牌号 入车时间"); while(it.hasNext()) { String key= it.next(); if(User.user.get(key).isStop()) { SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String s= sdf.format(User.user.get(key).getEntryTime()); System.out.printf("%-12s %-12s %-58s\n",key,User.user.get(key).getLicensePlateNumber(),s); } else { System.out.println(key + " " +"暂无停车" + " "+"暂无停车"); } } break; } case "查询车位": { System.out.println("停车场还剩下" + (Parking_Management_System.Capacity - Parking_Management_System.Parking_Space.size()) + "个空车位"); System.out.println(); break; } case "等待车辆":{ System.out.println("当前需要等待排队车辆" + Parking_Management_System.Lane.size() + "辆"); System.out.println(); break; } case "返回": { Determine=true; System.out.println("返回成功"); System.out.println(); break; } } if(Determine) { break; } System.out.println("请选择需要进行的操作:\"查询车位\"或\"等待车辆\"或\"返回\""); } } public static void Administrators_System_Main_Menu() { System.out.println("请选择需要进行的操作:\"查询停车场信息\"或\"查询收入\"或\"查询投放优惠券数\"或\"查询用户信息\"或\"返回\""); boolean Determine=false; while(sc.hasNext()) { String Select=sc.next(); switch (Select) { case "查询收入":{ Query_Income(); break; } case "查询投放优惠券数":{ Query_Coupon(); break; } case "查询用户信息":{ Query_User(); break; } case "查询停车场信息":{ Query_Parking(); break; } case "返回":{ Determine=true; System.out.println("返回成功"); System.out.println(); break; } } if(Determine) { break; } System.out.println("请选择需要进行的操作:\"查询停车场信息\"或\"查询收入\"或\"查询投放优惠券数\"或\"查询用户信息\"或\"返回\""); } } }
User类
实现用户功能,查询停车场信息,查询月卡,查询优惠券,停车操作,出车操作
javaimport java.text.*; import java.util.*; public class User { static Scanner sc=new Scanner(System.in); static String Current_Account; static Map<String,Account>user=new HashMap<String,Account>(); public static void User_System() { System.out.println("请选择需要进行的操作:\"登录\"或\"注册\"或\"返回\""); while(sc.hasNext()) { String Choose= sc.next(); boolean Determine=false; switch (Choose) { case "登录": { System.out.println("请输入用户账号:"); String Account = sc.next(); System.out.println("请输入用户密码:"); String Password = sc.next(); if (User_Lon_on(Account, Password)) { System.out.println("登入成功"); System.out.println(); Current_Account=Account; User_Main_Menu(); } else { System.out.println("账号或密码错误,请重新尝试"); System.out.println(); } break; } case "注册": { System.out.println("请输入注册账号"); String Account = sc.next(); System.out.println("请输入注册密码"); String Password = sc.next(); Register(Account, Password); break; } case "返回":{ Determine=true; System.out.println("返回成功"); System.out.println(); break; } } if(Determine) { break; } System.out.println("请选择需要进行的操作:\"登录\"或\"注册\"或\"返回\""); } } public static void Register(String Account,String Password) { Set<String> set = user.keySet(); Iterator<String> it = set.iterator(); boolean Determine=false; while (it.hasNext()) { String key = it.next(); if(key.equals(Account)) { Determine=true; break; } } if (Determine) { System.out.println("注册账号已存在"); System.out.println("注册失败"); System.out.println(); } else { Account account = new Account(); account.setStop(false); account.setCoupon(0); account.setPassword(Password); account.setVIP_Card(false); account.setCoupon_Cnt(5); user.put(Account, account); System.out.println("注册成功"); System.out.println(); } } public static Boolean User_Lon_on(String Account,String Password) { Set<String>set=user.keySet(); Iterator<String>it=set.iterator(); while(it.hasNext()) { String key=it.next(); String value=user.get(key).getPassword(); if(Account.equals(key)&&Password.equals(value)) { return true; } } return false; } public static void Query()//查询车位 { System.out.println("请选择需要进行的操作:\"查询车位\"或\"等待车辆\"或\"返回\""); while(sc.hasNext()) { boolean Determine=false; String Choose=sc.next(); switch (Choose) { case "查询车位": { System.out.println("停车场还剩下" + (Parking_Management_System.Capacity - Parking_Management_System.Parking_Space.size()) + "个空车位"); System.out.println(); break; } case "等待车辆":{ System.out.println("当前需要等待排队车辆" + Parking_Management_System.Lane.size() + "辆"); System.out.println(); break; } case "返回": { Determine=true; System.out.println("返回成功"); System.out.println(); break; } } if(Determine) { break; } System.out.println("请选择需要进行的操作:\"查询车位\"或\"等待车辆\"或\"返回\""); } } public static void VIP_Card() {//查询月卡 Date date=new Date(Long.valueOf("2592000000")); Date Current_date=new Date(); if(!user.get(Current_Account).isVIP_Card()||(Current_date.getTime()-user.get(Current_Account).getTime().getTime()>date.getTime())) { System.out.println("您当前未充值月卡"); System.out.println("充值月卡即可免费停车,每月只需800元"); System.out.println("您可以选择\"充值月卡\"或\"返回\""); System.out.println(); while(sc.hasNext()) { boolean Determine=false; String Choose = sc.next(); switch (Choose) { case "充值月卡": { System.out.println("是否确定充值月卡\"确定\"或\"取消\""); String Select = sc.next(); switch (Select) { case "确定": { System.out.println("恭喜您成功充值成为我们的VIP客户"); Administrators.VIP_Income=String.valueOf(Double.valueOf(Administrators.VIP_Income)+800); Administrators.Income=String.valueOf(Double.valueOf(Administrators.Income)+800); user.get(Current_Account).setTime(Current_date); user.get(Current_Account).setVIP_Card(true); break; } case "取消": { break; } } break; } case "返回": { Determine = true; System.out.println("返回成功"); System.out.println(); break; } } if (Determine||(user.get(Current_Account).isVIP_Card())) { break; } System.out.println("您当前未充值月卡"); System.out.println("充值月卡即可免费停车,每月只需800元"); System.out.println("您可以选择\"充值月卡\"或\"返回\""); System.out.println(); } } else{ System.out.println("尊敬的VIP用户您好"); SimpleDateFormat sdf=new SimpleDateFormat("dd天 HH小时mm分钟ss秒"); String s=sdf.format(date.getTime()-(Current_date.getTime()-user.get(Current_Account).getTime().getTime())); System.out.println("您的VIP仅剩"+s+"就到期了"); } } public static void Coupon()//优惠券 { System.out.println("请选择需要进行的操作:\"查询剩余优惠券\"或\"购买优惠券\"或\"返回\""); while(sc.hasNext()) { boolean Determine=false; String Choose=sc.next(); switch (Choose) { case "查询剩余优惠券":{ System.out.println("您还有"+user.get(Current_Account).getCoupon()+"张优惠券可以使用"); break; } case "购买优惠券":{ System.out.println("是否确定花费50元购买7.5折优惠券\"确定\"或\"取消\""); String Select=sc.next(); switch (Select) { case "确定": { System.out.println("购买成功"); Administrators.Other_Income=String.valueOf(Double.valueOf(Administrators.Other_Income)+50); Administrators.Income=String.valueOf(Double.valueOf(Administrators.Income)+50); user.get(Current_Account).setCoupon(user.get(Current_Account).getCoupon()+1); user.get(Current_Account).setCoupon_Cnt(user.get(Current_Account).getCoupon_Cnt()-1); System.out.println("剩余可购买次数:"+user.get(Current_Account).getCoupon_Cnt()); System.out.println(); break; } case "取消": { break; } } break; } case "返回":{ Determine=true; System.out.println("返回成功"); System.out.println(); break; } } if(Determine) { break; } System.out.println("请选择需要进行的操作:\"查询剩余优惠券\"或\"购买优惠券\"或\"返回\""); } } public static void Stop()//停车 { if(user.get(Current_Account).isStop()) { System.out.println("本账号已经记录停车车辆或正在排队停车"); System.out.println("请出车后再使用"); } else{ System.out.println("请输入车牌号:"); String LicensePlateNumber = sc.next(); user.get(Current_Account).setLicensePlateNumber(LicensePlateNumber); if(Parking_Management_System.Capacity-Parking_Management_System.Parking_Space.size()>0) {//有空位 Date date = new Date(); user.get(Current_Account).setEntryTime(date); Parking_Management_System.Parking_Space.push(Current_Account); user.get(Current_Account).setStop(true); System.out.println("停车成功"); System.out.println(); } else {//没空位进入等待车道 System.out.println("停车场已满,请排队"); System.out.println("您当前是第"+Parking_Management_System.Lane.size()+"位置"); System.out.println(); user.get(Current_Account).setStop(true); Parking_Management_System.Lane.add(LicensePlateNumber); } } } public static void Departure()//出车 { Stack<String>Temporary_AccessRoad=new Stack<String>(); int cnt=0; while(!Parking_Management_System.Parking_Space.isEmpty()) { Temporary_AccessRoad.push(Parking_Management_System.Parking_Space.pop()); if(Temporary_AccessRoad.peek().equals(user.get(Current_Account).getLicensePlateNumber())) { Temporary_AccessRoad.pop(); if(!user.get(Current_Account).isVIP_Card()) { Date date=new Date(); Long Time=(date.getTime()-user.get(Current_Account).getEntryTime().getTime())/1000/60; SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String s1= sdf.format(user.get(Current_Account).getEntryTime()); String s=sdf.format(date); System.out.println("本次入车时间:"+s1); System.out.println("本次出车时间:"+s); System.out.println("请选择\"优惠券支付\"或\"正常支付\""); String Choose=sc.next(); double sum=0; if(Time<15) { System.out.println("本次停车免费"); } else { sum+=(Time-15)*1.5; System.out.printf("本次停车需缴纳%.2f元\n" ,sum ); switch (Choose) { case "优惠券支付": { if(user.get(Current_Account).getCoupon()!=0) { user.get(Current_Account).setCoupon(user.get(Current_Account).getCoupon()-1); Administrators.Income=String.valueOf(Double.valueOf(Administrators.Income)+sum*0.75); System.out.printf("支付成功,本次实际缴纳%.2f\n",0.75*sum); } else { System.out.println("您当前的优惠券数量不足"); Administrators.Income=String.valueOf(Double.valueOf(Administrators.Income)+sum); System.out.printf("支付成功,本次实际缴纳%.2f元\n",sum); System.out.println(); } break; } case "正常支付": { Administrators.Income=String.valueOf(Double.valueOf(Administrators.Income)+sum); System.out.printf("支付成功,本次实际缴纳%.2f元\n",sum); break; } } } } else { System.out.println("尊敬的VIP客户,本次已为您免单"); } System.out.println("出车完成"); System.out.println("本次退让次数:"+cnt); System.out.println("欢迎下次再来"); user.get(Current_Account).setStop(false); System.out.println(); break; } cnt++; } while(!Temporary_AccessRoad.isEmpty()) { Parking_Management_System.Parking_Space.push(Temporary_AccessRoad.pop()); } while(Parking_Management_System.Parking_Space.size()<Parking_Management_System.Capacity) { if(Parking_Management_System.Lane.size()==0) { break; } Parking_Management_System.Parking_Space.push(Parking_Management_System.Lane.poll()); } } public static void User_Main_Menu() { System.out.println("请选择需要进行的操作:\"查询停车场信息\"或\"查询月卡\"或\"查询优惠券\"或\"停车\"或\"出车\"或\"返回\""); while(sc.hasNext()) { boolean Determine=false; String Select=sc.next(); switch (Select) { case "查询停车场信息":{ Query(); break; } case "查询月卡":{ VIP_Card(); break; } case "查询优惠券":{ Coupon(); break; } case "停车":{ Stop(); break; } case "出车":{ Departure(); break; } case "返回":{ Determine=true; System.out.println("返回成功"); System.out.println(); break; } } if(Determine) { break; } System.out.println("请选择需要进行的操作:\"查询停车场信息\"或\"查询月卡\"或\"查询优惠券\"或\"停车\"或\"出车\"或\"返回\""); } } }
Tool类
其他功能实现
javaimport java.util.*; public class Tool { public static void Acknowledgement() { System.out.println("本系统由进行研发"); System.out.println("成员包括:排名不分先后"); System.out.println("感谢使用!"); System.out.println(); } public static boolean Exit() { Scanner sc=new Scanner(System.in); String Choose= sc.next(); switch (Choose){ case "确定": { return true; } case "取消": { return false; } } System.out.println("无效操作"); return false; } }