各位大神我准备开发一款停车场系统(实现基本功能),不知道如何下手,请帮忙指导一下,给些具体的思路和具体需要哪些技术?谢谢。
3条回答 默认 最新
- devmiao 2016-08-08 00:11关注
import java.util.ArrayList;
public class Car {
private String card;
private int stopTime;
private int inTime;
private int outTime;
private int expense ;
//Parking park = new Parking();
ArrayList province = new ArrayList();
public void province() {
province.add("赣");
province.add("吉");
province.add("京");
province.add("闽");
province.add("津");
province.add("辽");
province.add("黑");
province.add("辽");
province.add("苏");
province.add("赣");
province.add("浙");
province.add("鲁");
province.add("湘");
province.add("赣");
province.add("渝");
province.add("川");
}
public Car(){
//生成6位数车牌号
int ran = (int)(Math.random()*1000000);
while(ran<=100000){
ran = (int)(Math.random()*1000000);
}
province();
this.card = province.get((int)(Math.random()*province.size()))+String.valueOf(ran);
this.stopTime = 0 ;
}
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public int getStopTime() {
return stopTime;
}
public void setStopTime(int stopTime) {
this.stopTime = stopTime;
}
public int getInTime() {
return inTime;
}
public int setInTime(int inTime) {
return this.inTime = inTime;
}
public int getOutTime() {
return outTime;
}
public void setOutTime(int outTime) {
this.outTime = outTime;
}
}第二个类
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;
import java.io.*;
public class Parking {
private int M;
private int N;
//最小时间段停车价格
private double price ;
//最小停车时间
private double minstopTime ;private static int parkingTotallTime = 0;
//停车总时数
private int stopTimeDay;
private int parkingDay;
private int leaveDay;
//记录空车位
ArrayList parkingEmpty = new ArrayList();
// 停车场用TreeMap实现
HashMap parkCar = new HashMap();
HashMap saveCar = new HashMap();
//提取出所有的key(车位)(得到key集合)
Set parkCarKey = parkCar.keySet();
Set deletedKey = new HashSet();
LinkedList que = new LinkedList();
int leaveAlert ;
int queAlert ;
// 初始化
Parking(int m ,int n ,double pri){
this.M = m ;
this.N = n;
this.price = pri;
for(int i = 1 ; i <= M; i++ ){
this.parkingEmpty.add(i);
}
}public double getPrice() {
return this.price;
}public double getMinstopTime() {
return minstopTime;
}
// 随机进入和离开的车辆
public void parking(int day,double minStopTime,double randomLeave) throws Exception {
FileOutputStream out1=new FileOutputStream("F:\停车场停泊记录.txt");
BufferedOutputStream out2=new BufferedOutputStream(out1,2); //装饰一个文件输出流
DataOutputStream out=new DataOutputStream(out2); //装饰一个带缓冲输出流
System.out.println(" 注意:"+"\n"+" "+"测试数据 "+ day + " 天 (一天为24小时制),最小停留时间为 " + minStopTime+" 小时 ,每增加最小一段时间,离开概率增加 " + randomLeave);
System.out.println(" "+"停车场 "+M+" 个车位"+"\t"+"车道 "+N+" 个车位");
for (int d = 1; d <= day; d++) {
parkingDay = 0;
leaveDay = 0;
stopTimeDay = 0;
System.out.print("\t"+"------------------------------");
System.out.print("第"+d+"天");
System.out.println("------------------------------");
for (int h = 0; h < (int)(24/minStopTime); h++) {
int leaveOneHour = 0 ;
int inCount = 0 ;
int driveWayCount = 0 ;
int leave = 0 ;
System.out.println();
System.out.print("\t"+"***********************");
System.out.print("第"+d+"天的"+"第"+h*minStopTime+"小时"+"车场信息");
System.out.println("***********************");
System.out.println();
System.out.println("\t"+"\t"+"**---------------------离开阶段--------------------**");//解析成数组 Iterator carRemain = parkCarKey.iterator(); while(carRemain.hasNext()){ //得到单个key(车位)的值 Integer key = (Integer) carRemain.next(); //计时增加1小时; (parkCar.get(key)).setStopTime((parkCar.get(key)).getStopTime()+1); stopTimeDay++; parkingTotallTime++; (parkCar.get(key)).setOutTime(h); //遍历停车场汽车,判断是否需要离开 if(Math.random()<= randomLeave * (parkCar.get(key)).getStopTime()){ parkingEmpty.add(key); deletedKey.add(key); System.out.println("\t"+"\t"+key+"号车位汽车"+"\t"+"车牌号:"+(parkCar.get(key)).getCard()+"\t"+"停车时间:"+(parkCar.get(key)).getStopTime()*minStopTime+"小时"+"\t"+"支付金额:"+(parkCar.get(key)).getStopTime()*this.price*minStopTime+"元"); out.writeUTF("车牌号:"+(parkCar.get(key)).getCard()+" "+"进入时间:第"+d+"天的第 "+(parkCar.get(key)).getInTime()*minStopTime+"小时"+" "+"离开时间 :第"+d+"天的第"+(parkCar.get(key)).getOutTime()*minStopTime+"小时"+"\r\n"); //统计信息 leaveDay++; leaveOneHour++; }
}System.out.println("\t"+"\t"+"第"+h*minStopTime+"小时内共离开"+leaveOneHour*minStopTime+"辆汽车");
Iterator deleted = deletedKey.iterator();
while(deleted.hasNext()){
int key = (Integer) deleted.next();
parkCar.remove(key);} deletedKey.removeAll(deletedKey); System.out.println(); System.out.println("\t"+"\t"+"**--------------------进入阶段--------------------**"); int inRandom = (int) (Math.random() * 21); int x = 0 ; System.out.println("\t"+"\t"+"\t"+"车场有空车位 " + parkingEmpty.size() +"个"); //System.out.println("\t"+"\t"+"车道有空车位 " + (N-que.size()) +"个"); //System.out.println("que.size() = " + que.size()); for (int ran = 0; ran < inRandom; ran++) { if (parkCar.size() < M) { if(!que.isEmpty()){ //if(!que.isEmpty()) queAlert = 0 ; //找最小元素 for(int i = 1 ; i <=M ; i++){ if(parkingEmpty.contains(i)) { //需要删除的车位检索 int index = parkingEmpty.indexOf(i); //需要删除的车位 int parkKeyOut = parkingEmpty.remove(index); Car car = que.poll(); car.setInTime(h); parkCar.put(parkKeyOut,car); inCount++; //统计: parkingDay++; System.out.println("\t"+"\t"+"\t"+"车牌号:"+(parkCar.get(parkKeyOut)).getCard()+"\t"+"车位:"+parkKeyOut+"\t"+"进入时间为第 "+parkCar.get(parkKeyOut).setInTime(h)*minStopTime+" 小时"); break; } } } //if(!que.isEmpty()) //if(que.isEmpty()) else if(que.isEmpty()){ //车场有空位,车道为空 for(int i = 1 ; i <= M ; i++){ if(parkingEmpty.contains(i)){//i即为车号 //index为i在parkingEmpty中对应的下脚标 int index = parkingEmpty.indexOf(i); //parkKeyOut即为parkingEmpty中的i(parkKeyOut==i) int parkKeyOut = parkingEmpty.remove(index); parkCar.put(i,new Car()); //统计: parkingDay++; inCount++; System.out.println("\t"+"\t"+"\t"+"车牌号:"+(parkCar.get(parkKeyOut)).getCard()+"\t"+"车位:"+parkKeyOut+"\t"+"进入时间为第 "+parkCar.get(parkKeyOut).setInTime(h)*minStopTime+" 小时"); break; } } } } //if (parkCar.size() <= M) { else if (parkCar.size() >= M && que.size() < N && (N-que.size())>0) { // 车道有空位 leaveAlert = 0 ; if(queAlert<1){ System.out.println("\t"+"\t"+"\t"+"停车场车已满,请进入车道等候"); queAlert++; } saveCar.put(0, new Car()); que.add(saveCar.get(0)); System.out.println("\t"+"\t"+"\t"+"车牌号"+saveCar.get(0).getCard() +"进入车道"); saveCar.remove(0); driveWayCount++ ; } else if(parkCar.size() >= M && que.size() >= N) { if(leaveAlert<1){ System.out.println("\t"+"\t"+"\t"+"停车位已满,后面的车请离开!"); leaveAlert++; } //saveCar仅仅起到提取汽车信息的作用,并且汽车的信息 保存在队列中即可 saveCar.put(0, new Car()); System.out.println("\t"+"\t"+"\t"+"车牌号"+saveCar.get(0).getCard() +"离开"); saveCar.remove(0); leave++; } } System.out.print("\t"+"\t"+"产生随机进入 " + inRandom+" 辆汽车"+"\t"); System.out.println("实际有 " + inCount+" 辆汽车进入停车场"); System.out.print("\t"+"\t"+"有 "+driveWayCount+" 辆汽车进入车道"); System.out.println("\t"+"\t"+"有 "+leave+" 离开"); //停留一段时间后在下一次遍历 //Thread.sleep(1000);
}
//显示统计信息统计:
System.out.println("\t"+"\t"+"第 "+d+" 天统计信息:");
System.out.print("\t"+"\t"+"第 "+d+" 天共有"+parkingDay+"到达车次"+"\t"+" ");
System.out.println("第 "+d+" 天共有 "+ leaveDay+"离开车次"+"\t");
System.out.print("\t"+"\t"+"第 "+d+" 天的停车时长:"+ stopTimeDay*minStopTime+"小时"+"\t");
System.out.println("第 "+d+" 天的停车场收入:"+ stopTimeDay*this.price+"元"+"\t");
}
System.out.println("\t"+"\t"+"总停车长 "+ parkingTotallTime*minStopTime+" 小时");
}
public static void main(String[] args) throws Exception {Parking park = new Parking(6,2,30);
//天数,停车最小时长,概率
park.parking(2,2,0.2);
}
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!
- ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
- ¥15 求daily translation(DT)偏差订正方法的代码
- ¥15 js调用html页面需要隐藏某个按钮