示例#1
0
        static void Main(string[] args)
        {
            double numHours = 0.5;
            double timeToAdd = 0.0;
            double amountCharged = 0.0;
            bool validMeterTypeEntered = false;
            bool validTimeEntered = false;

            string welcomeMessage = "Please enter the type of parking meter in hours. Valid options are .5, 1, 2, 3, and 5";

            Console.WriteLine(DateTime.Now.DayOfWeek);
            Console.WriteLine(welcomeMessage);

            while (!validMeterTypeEntered)
            {
                try
                {
                    numHours = Double.Parse(Console.ReadLine());
                    validMeterTypeEntered = true;
                }
                catch (FormatException e)
                {
                    Console.WriteLine("ERROR: Your input was not in the correct format. Please try again\n");
                    Console.WriteLine(welcomeMessage);
                }
            }

            // Create a generic parking meter based on the user's scenario. Default to half hour parking meter if no input.
            ParkingMeter meter = new ParkingMeter(numHours);

            /**
            * Ask the user how much time they want.
            * ASSUMPTION: Since problem description did not explicitly state time intervals, will assume 30 minute intervals for simplicity.
            */
            meter.printAddTimePrompt();

            // Handle naively, knowing user might add a bad value.
            String input = Console.ReadLine();
            while (!validTimeEntered)
            {
                try
                {
                    timeToAdd = Double.Parse(input);
                    if (timeToAdd > numHours)
                    {
                        Console.WriteLine("You requested more time than is allowed. Defaulting to maximum time.");
                        timeToAdd = numHours * 60;
                    }
                    validTimeEntered = true;
                }
                catch (Exception e)
                {
                    if (input.Equals("max"))
                    {
                        timeToAdd = numHours * 60;
                        validTimeEntered = true;
                    }
                    else
                    {
                        meter.printErrorInAddingTime();
                        meter.printAddTimePrompt();
                    }
                }
            }

            /**
            * Convert the number of minutes to hours charged.
            * Round to nearest penny.
            */
            amountCharged = Math.Round((((meter.pricePerHour * timeToAdd) / 60) ), 2);

            DateTime endTime = DateTime.Now.AddMinutes(timeToAdd);
            if (!meter.isValidTime(endTime.Hour))
            {
                Console.WriteLine("Sorry, this time is outside of working hours...");
                Console.WriteLine("Transaction cancelled.");
            }
            else
            {
                meter.ExpirationTime = endTime;
                Console.WriteLine("Printing ticket...");
                Console.WriteLine("Expiration time: " + meter.ExpirationTime);
                Console.WriteLine("Amount charged: $" + amountCharged);
                Console.WriteLine("Minutes purchased: " + timeToAdd);
            }
        }