lokesh.vashisata
BAN USERclass Program
{
static void Main(string[] args)
{
List<ParkingPlace> parkingPlace = new List<ParkingPlace>();
parkingPlace.Add(new ParkingPlace("1", VehicleType.Small));
parkingPlace.Add(new ParkingPlace("1", VehicleType.Small));
parkingPlace.Add(new ParkingPlace("1", VehicleType.Medium));
parkingPlace.Add(new ParkingPlace("1", VehicleType.Medium));
parkingPlace.Add(new ParkingPlace("1", VehicleType.Large));
parkingPlace.Add(new ParkingPlace("1", VehicleType.Large));
ParkingArea parking = new ParkingArea(parkingPlace);
Console.WriteLine("Total Space available: {0}", parking.GetTotalCount());
Console.WriteLine("Total Free Space available: {0}", parking.GetAvailableCount());
Vehicle vehicle = new Vehicle("AZ AA109", VehicleType.Medium);
Customer customer = new Customer("Lokesh", vehicle);
customer.Entry(parking);
Console.WriteLine("Total Space available: {0}", parking.GetTotalCount());
Console.WriteLine("Total Free Space available: {0}", parking.GetAvailableCount());
Console.WriteLine("Do Some Fun Activity...");
customer.Exit(parking, 12.00);
Console.WriteLine("Total Space available: {0}", parking.GetTotalCount());
Console.WriteLine("Total Free Space available: {0}", parking.GetAvailableCount());
}
}
class Customer
{
private string _name;
private Ticket _ticket;
private Vehicle _vehicle;
public Customer(string name, Vehicle vehicle)
{
this._name = name;
this._vehicle = vehicle;
}
public void Entry(ParkingArea parking)
{
Ticket ticket = parking.GetTicket(this._vehicle.VehicleType);
if (ticket == null)
{
Console.WriteLine("No Parking Available.");
return;
}
this._ticket = ticket;
Console.WriteLine("{0} enterd the parking area", this._name);
}
public void Exit(ParkingArea parking, double price)
{
parking.Free(this._ticket, price);
Console.WriteLine("{0} exited from the parking area", this._name);
}
}
class ParkingArea
{
List<ParkingPlace> _parkingList = new List<ParkingPlace>();
List<Ticket> _soldTickets = new List<Ticket>();
private int _availCount;
public ParkingArea(List<ParkingPlace> parkingPlace)
{
this._parkingList = parkingPlace;
this._availCount = parkingPlace.Count;
}
public Ticket GetTicket(VehicleType type)
{
if (_availCount == 0) return null;
Ticket ticket = new Ticket();
ticket.ParkingSpot = this.Book(type);
ticket.ParkingSpot.Available = false;
return ticket;
}
private ParkingPlace Book(VehicleType type)
{
foreach (var item in _parkingList)
{
if (item.Available && item.VehicleType == type)
{
_availCount--;
return item;
}
}
return null;
}
public int GetTotalCount()
{
return _parkingList.Count;
}
public int GetAvailableCount()
{
return _availCount;
}
public void Free(Ticket ticket, double price)
{
ticket.OutTime = DateTime.Now;
ticket.Price = price;
ticket.ParkingSpot.Available = true;
_soldTickets.Add(ticket);
_availCount++;
}
}
class ParkingPlace
{
public ParkingPlace(string number, VehicleType type)
{
this._number = number;
this._vehicleType = type;
}
private string _number;
public string Number
{
get { return this._number; }
}
private VehicleType _vehicleType;
public VehicleType VehicleType
{
get { return this._vehicleType; }
}
private bool _avail = true;
public bool Available
{
get { return this._avail; }
set { this._avail = value; }
}
}
class Ticket
{
private string _receiptNumber;
public string ReceiptNo
{
get { return _receiptNumber; }
}
public double Price;
private DateTime _inTime = DateTime.MinValue;
public DateTime InTime
{
get { return _inTime; }
}
public DateTime OutTime = DateTime.MinValue;
public ParkingPlace ParkingSpot;
public Ticket()
{
this._receiptNumber = new Random().Next(10000).ToString();
this._inTime = DateTime.Now;
}
}
class Vehicle
{
private VehicleType _vehicleType;
public VehicleType VehicleType
{
get { return this._vehicleType; }
}
private string _number;
public string Number
{
get { return this._number; }
}
public string OwnerName;
public Vehicle(string number, VehicleType type)
{
this._number = number;
this._vehicleType = type;
}
}
enum Status
{
None,
In,
Out
}
enum VehicleType
{
Small,
Medium,
Large
}
we can use pancake sorting.
- lokesh.vashisata February 09, 2015