Alic5
问题:
计算机专业java实验(2-18)
 
停车场管理系统的实现
实验内容:设计一个停车场管理系统软件 。
汽车类 Car
属性: 车牌号
入场时间
出场时间
按月缴费标志
应交停车费
两个以上构造函数
一组set方法
一组get方法
从键盘输入属性的方法
显示属性方法(车牌号、入场时间、出场时间、停车费用)
出场信息登记 (出场时间、交费)
入场信息登记 (车牌号、入场时间、包月标志)
按小时计算停车费用的方法(停车在36小时之内)(计费方法:凌晨6点开始-至晚上8点:第一个15分钟免费,六小时内每15分钟1.5元,6后小时每15分钟2块,晚上8点以后每小时0.5元钱)
按月计费的方法(每月800元)
 
停车场类 Park
属性 停车场名称
停车场ID
停车场管理单位
值班人员名称
停车常容量
已进入车辆数目
存放入车库车数组
营业额
 
构造函数(2个)
从键盘输入属性的方法
显示属性方法
汽车入库
汽车出库
判断车库 是否为空
判断车库是否为满
查询显示空车位的编号及空车位个数
 
*******************************************************
 
Car.java源文件
package CarPark;
import java.text.SimpleDateFormat;
import java.util.*;
public class Car {
String CarNumber;
Calendar intime;
Calendar outtime;
boolean if_vip;
double fee;
public Car(){}
public Car(String CarNumber,Calendar intime,boolean if_vip){
this.CarNumber = CarNumber;
this.intime = intime;
this.if_vip = if_vip;
}
Car get(){
Car car = new Car();
car.CarNumber = this.CarNumber;
car.intime = this.intime;
car.if_vip = this.if_vip;
car.outtime = this.outtime;
car.fee = this.fee;
return car;
}
void set(String CarNumber,
//Calendar intime,
//Calendar outtime,
boolean if_vip
//,double fee
){
this.CarNumber = CarNumber;
//this.intime = intime;
//this.outtime = outtime;
this.if_vip = if_vip;
//this.fee = fee;
}
void input(){
Scanner in = new Scanner(System.in);
this.CarNumber = in.next();
//this.outtime = outtime;
//this.intime =new Date();
this.if_vip = in.nextBoolean();
//this.fee = in.nextDouble();
 
}
void show() {
System.out.println("车牌号:"+this.CarNumber
//+" 入场时间:"+this.intime.getTime()
//+" 出场时间:"+this.outtime.getTime()
+" 停车费用:"+this.fee);
}
void inpark(Calendar intime) { //入场信息登记 (车牌号、入场时间、包月标志)
this.intime = intime;
System.out.println("车牌号:"+this.CarNumber
+" 入场时间:"+this.intime.getTime()
+"是否包月:"+this.if_vip);
}
void outpark(Calendar outtime) {//出场信息登记 (出场时间、交费)
this.outtime = outtime;
long minutes = (this.outtime.getTimeInMillis()-this.intime.getTimeInMillis())/
(1000*60);
if (this.intime.get(Calendar.HOUR_OF_DAY)>=6&&
this.intime.get(Calendar.HOUR_OF_DAY)<=20&&
this.outtime.get(Calendar.HOUR_OF_DAY)>6&&
this.outtime.get(Calendar.HOUR_OF_DAY)<=20) {
//intime和outtime都在白天
if (minutes<=15) {//免费
fee =1;
}
else if(minutes<=6*60){//停车只在白天,1.5元时间段内
fee = (minutes-15)/15*1.5;
}
else if (minutes<=10*60) {
//停车只在白天,不会进入夜间的情况;白天总时长在1.5元和2元时间段内
//因为夜间只有10h,停留时间不足10h,就不满足outtime在白天的大前提
fee = (6*60-15)/15*1.5+(minutes-6*60)/15*2;
}
else if (minutes<=36*60) {
//停车进入夜间的情况
if (minutes-10*60<=15) fee = 10*0.5;//满夜间,白天不足15min
else if (minutes-10*60<=6*60) {
//满夜间,白天总时长在1.5元时间段内
fee = 10*0.5+(minutes-15-10*60)/15*1.5;
}
else if (minutes-10*60<=10*60)
//满夜间,白天总时长在1.5元和2元时间段内
fee =10*0.5+ (minutes-10*60-15)/15*1.5+(minutes-16*60)/15*2;
}
}
else if (this.intime.get(Calendar.HOUR_OF_DAY)>20&&
this.intime.get(Calendar.HOUR_OF_DAY)<6&&
this.outtime.get(Calendar.HOUR_OF_DAY)>20&&
this.outtime.get(Calendar.HOUR_OF_DAY)<6) {
//intime和outtime都在夜晚的情况
if (minutes<=14*60) //没有进入白天
fee = minutes/60*0.5;
else if (minutes-14*60<=10) {
//经历了满白天,夜间不足一晚
fee = (6*60-15)/15*1.5+8*60/15*2+(minutes-14*60)/60*0.5;
}
else {
//经历了一天一夜
fee = (6*60-15)/15*1.5+8*60/15*2+(minutes-60*14)*0.5;
}
}
 
else if (this.intime.get(Calendar.HOUR_OF_DAY)>20&&
this.intime.get(Calendar.HOUR_OF_DAY)<6&&
this.outtime.get(Calendar.HOUR_OF_DAY)>=6&&
this.outtime.get(Calendar.HOUR_OF_DAY)<=20)
//intime在夜晚,outtime在白天
{
Calendar cal = Calendar.getInstance();
if (intime.DAY_OF_WEEK_IN_MONTH!=cal.DAY_OF_WEEK_IN_MONTH) {
//当天凌晨进入,则将当天6点设为时间界限
//前一天深夜进入,则+1天6点设为时间界限
cal.add(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
}
int y = cal.YEAR; //获取当天信息
int m = cal.MONTH;
int d = cal.DAY_OF_WEEK_IN_MONTH;
Calendar time6 = Calendar.getInstance();
time6.set(y, m, d, 6, 0, 0); //设置一个分界时间
long night = (time6.getTimeInMillis()-this.intime.getTimeInMillis())
/(1000*60);//计算夜间时间。
long light = (this.outtime.getTimeInMillis()-time6.getTimeInMillis())
/(1000*60);//计算白天时间。
if (light<=14*60) {
//没有进入第二天
if (light<=15*60) fee =night/60*0.5+0;//15min
else if (light<=6*60) { //6h
fee = night/60*0.5+(light-15)/15*1.5;
}
else { //14h
fee = night/60*0.5+6*60/15*1.5+(light-6*60)*2;
}
}
else { //经过一天一夜,进入第二天
if (light-24*60<=15) {
fee = (6*60-15)/15*1.5+8*60/15*2//满一天一夜的费用
+0; //15min
}
else if (light-24*60<=6*60) {
fee = (6*60-15)/15*1.5+8*60/15*2//满一天一夜的费用
+(light-24*60-15)/15*1.5; //6h
}
else {
//14h
fee = (6*60-15)/15*1.5+8*60/15*2//满一天一夜的费用
+(6*60-15)/15*1.5 //6h
+(light-(24+6)*60)/15*2; //6-14h
}
}
}
 
else if (this.intime.get(Calendar.HOUR_OF_DAY)>=6&&
this.intime.get(Calendar.HOUR_OF_DAY)<20&&
this.outtime.get(Calendar.HOUR_OF_DAY)>=20&&
this.outtime.get(Calendar.HOUR_OF_DAY)<6)
//intime在白天,outtime在夜晚
{
Calendar cal = Calendar.getInstance();
if (outtime.DAY_OF_WEEK_IN_MONTH!=cal.DAY_OF_WEEK_IN_MONTH) {
//后一天进入,则-1天20点设为时间界限
cal.add(Calendar.DAY_OF_WEEK_IN_MONTH, -1);
}
int y = cal.YEAR; //获取当天信息
int m = cal.MONTH;
int d = cal.DAY_OF_WEEK_IN_MONTH;
Calendar time20 = Calendar.getInstance();
time20.set(y, m, d, 20, 0, 0); //设置一个分界时间
long night = (this.outtime.getTimeInMillis()-time20.getTimeInMillis())
/(1000*60);//计算夜间时间。
long light = (this.intime.getTimeInMillis()-time20.getTimeInMillis())
/(1000*60);//计算白天时间。
if (night<=4*60) {
//没有进入第二天白天
if (light<=15) {
fee = 0+night/60*0.5;
}
else if (light<=60*6) {
fee = (light-15)/15*1.5+night/60*0.5;
}
else {
fee = (6*60-15)/15*1.5+(light-6*60)+night/60*0.5;
}
}
else {
//进入第二天白天,并经过一天进入第二天夜晚
fee = (6*60-15)/15*1.5+8*15*2.5+
(night-24*60+8*60)/60*0.5;
}
}
System.out.println("车牌号:"+this.CarNumber
+" 出场时间:"+this.outtime.getTime()
+" 停车费用:"+this.fee);
}
 
}
 
*******************************************************************************
Park.java源文件:
package CarPark;
import java.util.*;
public class Park {
String name;
String ID;
String manage_company;
String manager;
int maxnum;
int num;
Car[] cars=new Car[100];
double money;
Park(){
int i = 0;
for (;i<maxnum;i++) {
cars[i] = null;
}
}
void putin() {
Scanner in = new Scanner(Trade Confidently.);
System.out.println("请输入停车场名:");
System.out.println("请输入停车场ID:");
System.out.println("请输入停车场管理单位:");
this.manage_company = in.next();
System.out.println("请输入停车场值班人员:");
this.manager = in.next();
System.out.println("请输入停车场容量:");
this.maxnum = in.nextInt();
}
void show() {
System.out.println("停车场名称:"+this.name+"\n停车场ID:"
+this.ID+"\n管理单位:"+manage_company
+"\n值班人员:"+manager+"\n容量:"+num+
"/"+maxnum);
int i = 0;
for (;i<maxnum;i++) {
if (cars[i]!=null) {
cars[i].show();
}
}
 
}
void inpark(Car car) {//汽车入库
// if (car.if_vip==false)
for (int i=0;i<maxnum&&num<maxnum-1;i++) {
if (null==cars[i]) {
cars[i] = car;
num+=1;
Calendar intime = Calendar.getInstance();//获取系统时间
car.inpark(intime);
break;
}
}
if (num==maxnum) System.out.print("车库已满!\n");
}
void outpark(Car car,Calendar outtime) {//汽车出库
int flag = 0;
if (num==0) flag = 2;
for (int i=0;i<maxnum&&num<maxnum-1;i++) {
if (cars[i]==car) {
//Calendar outtime = Calendar.getInstance();//获取系统时间
cars[i].outpark(outtime);
cars[i] = null;
num-=1;
flag = 1;
//Calendar outtime = Calendar.getInstance();//获取系统时间
//car.outpark(outtime);
break;
}
}
if (flag==0) System.out.print("查无此车!\n");
else if (flag==2) System.out.print("车库已空!\n");
}
boolean if_empty() {//判断车库是否为空
boolean flag ;
if (num==0) flag = true;
else flag = false;
return flag;
}
boolean if_full() {//判断车库是否为满
boolean flag ;
if (num==maxnum) flag = true;
else flag = false;
return flag;
}
void check() {
int leavenum=0;
if (this.if_empty()==true) {
leavenum = maxnum;
for (int i=0;i<maxnum;i++) {
System.out.println("第"+i+1+"个车位为空!");
}
}
else if (this.if_full()==true) {
leavenum = 0;
}
else {
for (int j=0;j<maxnum;j++) {
if (cars[j]==null) {
System.out.println("第"+j+1+"个车位为空!");
}
}
}
}
}
*************************************************************
park_main.java源文件:
package CarPark;
import java.util.*;
public class park_main {
 
public static void main(String[] args) {
// TODO Auto-generated method stub
Park park1 = new Park();
park1.putin();
 
Car car1 = new Car();
car1.set("123456", false);
park1.inpark(car1);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 3);
park1.outpark(car1,cal);
}
 
}
 
 

分类:

技术点:

相关文章: