import java.awt.event.*;
import java.util.*;
import java.text.*;
import javax.swing.*;
public class Management implements ActionListener{
protected ParkStack park;
protected BiQueue biandao;
protected Window window;
protected Car car,changeCar;
public Management(){ //构造函数
park=new ParkStack();
biandao=new BiQueue();
window=new Window();
car=null;
changeCar=null;
window.enter.addActionListener(this);
window.quit.addActionListener(this);
window.option.addActionListener(this);
}
/**
* 对图形界面上组件注册的所有事件进行响应处理
*/
public void actionPerformed(ActionEvent e){ //事件响应
if(e.getSource()==window.enter){
if(!park.IsFull()){
enterPark();
}
else if(park.IsFull()&&(!biandao.IsFull())){
enterQueue();
}else if(park.IsFull()&&biandao.IsFull()){
window.textarea.setText("停车场和便道都已停满,请等待。\n");
}
window.number_text.setText("");
window.textarea.setText("\n\n\n");
window.textarea.append("\t车辆已经进入!");
window.stylebox.setSelectedItem("选择车型");
}
else if(e.getSource()==window.quit){
car=getQuitCar();
window.number_text.setText(null);
if(car!=null&&car.getPosition()==2){
quitPark(car);
if(!biandao.IsEmpty()){; //当停车场有空位且便道上有车时,便道上的车自动进入停车场
Date now=new Date(); //获取此刻系统时间
DateFormat f;
String s1,s2;
f=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
s1=f.format(now);
f=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
s2=f.format(now);
changeCar=biandao.delete();
changeCar.change(now,s1,s2);
window.textarea.append("便道上的车进入停车场");
enterPark(changeCar);
}
}
else if(car!=null&&car.getPosition()==1){
quitQueue(car);
}
else{
window.textarea.setText("\n\n\t没有该车");
}
}
else if((JComboBox)e.getSource()==window.option){
if(window.option.getSelectedItem().equals("打印收费单")){ //打印收费单
if(car!=null){
window.textarea.setText("******************************************************\n");
window.textarea.append(" 收费单\n");
window.textarea.append(" --------------------\n");
window.textarea.append("停车记录:\n ");
printCar(car);
window.textarea.append(car.getInfo().toString());
window.textarea.append(" 费用为:"+car.getFee()+"元\n");
window.textarea.append("真诚为您提供服务,欢迎再来!\n");
window.textarea.append("******************************************************");
car=null;
}
else{
window.textarea.setText("没有车辆出去。");
}
window.option.setSelectedItem("选择操作");
}
else if(window.option.getSelectedItem().equals("查看信息")){
if(!park.IsFull()){
window.textarea.setText("停车场有"+park.getNumber()+"个空位\n");
window.textarea.append("便道有"+biandao.getNumber()+"个空位\n");
}
else{
window.textarea.setText("停车场已满\n");
if(biandao.IsFull()){
window.textarea.append("便道也已满,请等候\n");
}
else{
window.textarea.append("便道有"+biandao.getNumber()+"个空位\n");
}
}
window.option.setSelectedItem("选择操作");
}
else if(window.option.getSelectedItem().equals("全部车辆")){
window.textarea.setText("停车场现有车辆:\n");
int order=1;
if(!park.IsEmpty()){
Car car;
for(int i=0;i<park.getCount();i++){
car=park.getCar(i);
printCar(car,order);
order++;
}
if(!biandao.IsEmpty()){
car=biandao.head.car;
Node node=biandao.head;
printCar(car,order);
order++;
while(node.linkNode!=null){
car=node.linkNode.car;
printCar(car,order);
node=node.linkNode;
order++;
}
}
}
else{
window.textarea.setText("\n 停车场和便道都已为空");
}
window.option.setSelectedItem("选择操作");
}
}
}
/**
* 输出停车场或便道上的车的信息
*/
public void printCar(Car car){
window.textarea.append(" "+"车牌号: "+car.getCarNumber()+";\t车型: "+car.getStyle()+";\t停车位置: "+car.getPos()+"\n ");
}
public void printCar(Car car,int num){
window.textarea.append(num+". "+"车牌号: "+car.getCarNumber()+";\t车型: "+car.getStyle()+";\t停车位置: "+car.getPos()+"\n");
}
/**
* 车辆进入停车场时直接进入停车场
*/
protected void enterPark(){
Date now=new Date(); //获取此刻系统时间
DateFormat f;
String s1,s2;
f=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
s1=f.format(now);
f=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
s2=f.format(now);
Car car=new Car();
car.setNumber(window.number_text.getText());
car.setCar_style((String)window.stylebox.getSelectedItem());
car.setArrivedTime(now.getTime());
car.setPosition(2);
car.setInfo(s1+s2+"进入停车场。\n");
park.Push(car);
}
/**
* 车从便道上进入车库
*/
protected void enterPark(Car car){
park.Push(car);
}
/**
* 车从车库开走
*/
protected void quitPark(Car quitcar){
Date now=new Date(); //获取此刻系统时间
DateFormat f;
String s1,s2;
f=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
s1=f.format(now);
f=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
s2=f.format(now);
quitcar.setLeaveTime(now.getTime());
quitcar.setInfo(" "+s1+s2+"离开停车场。\n");
quitcar.setFee(Management.countBill(car));
window.textarea.setText("请打印收费单。\n");
park.getElement(quitcar);
}
/**
* 车进入便道
*/
protected void enterQueue(){
Date today=new Date(); //获取此刻系统时间
DateFormat f;
String s1,s2;
f=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
s1=f.format(today);
f=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
s2=f.format(today);
Car car=new Car();
car.setNumber(window.number_text.getText());
car.setCar_style((String)window.stylebox.getSelectedItem());
car.setArrivedTime(today.getTime());
car.setPosition(1);
car.setInfo(s1+s2+"进入便道\n");
biandao.enterTail(car);
}
/**
* 车直接从便道开走
*/
protected void quitQueue(Car car){
Date now=new Date(); //获取此刻系统时间
DateFormat f;
String s1,s2;
f=DateFormat.getDateInstance(DateFormat.LONG,Locale.CHINA);
s1=f.format(now);
f=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);
s2=f.format(now);
car.setLeaveTime(now.getTime());
car.setInfo(" "+s1+s2+"离开便道。\n");
car.setFee(Management.countBill(car));
window.textarea.setText("请打印收费单。\n");
biandao.getElement(car);
}
/**
* 找到将要开走的车,
*/
private Car getQuitCar(){
String s=window.number_text.getText();
if(s!=null&&park.Search(s)!=null){
return park.Search(s);
}
else if(s!=null&&(park.Search(s)==null)&&(biandao.Search(s)!=null)){
return biandao.Search(s);
}
else if(s!=null&&(park.Search(s)==null)&&(biandao.Search(s)==null)){
window.textarea.setText("没有该车。");
return null;
}
else {
return null;
}
}
/**
* 计算停车费用
*/
protected static float countBill(Car car){
int time=(int)(car.getLeaveTime()-car.getArrivedTime())/1000;
if(time%10==0){
return (time/10)*car.getRate();
}
else{
return (time/10+1)*car.getRate();
}
}
public static void main(String[] args){
new Management();
}
}