\[ \begin{align}\begin{aligned}\newcommand\blank{~\underline{\hspace{1.2cm}}~}\\% Bold symbols (vectors) \newcommand\bs[1]{\mathbf{#1}}\\% Poor man's siunitx \newcommand\unit[1]{\mathrm{#1}} \newcommand\num[1]{#1} \newcommand\qty[2]{#1~\unit{#2}}\\\newcommand\per{/} \newcommand\squared{{}^2} % % Scale \newcommand\milli{\unit{m}} \newcommand\centi{\unit{c}} \newcommand\kilo{\unit{k}} \newcommand\mega{\unit{M}} % % Angle \newcommand\radian{\unit{rad}} \newcommand\degree{\unit{{}^\circ}} % % Time \newcommand\second{\unit{s}} % % Distance \newcommand\meter{\unit{m}} \newcommand\m{\meter} \newcommand\inch{\unit{in}} \newcommand\feet{\unit{ft}} \newcommand\mile{\unit{mi}} \newcommand\mi{\mile} % % Volume \newcommand\gallon{\unit{gal}} % % Mass \newcommand\gram{\unit{g}} \newcommand\g{\gram} % % Frequency \newcommand\hertz{\unit{Hz}} \newcommand\rpm{\unit{rpm}} % % Voltage \newcommand\volt{\unit{V}} \newcommand\V{\volt} \newcommand\millivolt{\milli\volt} \newcommand\mV{\milli\volt} \newcommand\kilovolt{\kilo\volt} \newcommand\kV{\kilo\volt} % % Current \newcommand\ampere{\unit{A}} \newcommand\A{\ampere} \newcommand\milliampereA{\milli\ampere} \newcommand\mA{\milli\ampere} \newcommand\kiloampereA{\kilo\ampere} \newcommand\kA{\kilo\ampere} % % Resistance \newcommand\ohm{\Omega} \newcommand\milliohm{\milli\ohm} \newcommand\kiloohm{\kilo\ohm} % correct SI spelling \newcommand\kilohm{\kilo\ohm} % "American" spelling used in siunitx \newcommand\megaohm{\mega\ohm} % correct SI spelling \newcommand\megohm{\mega\ohm} % "American" spelling used in siunitx % % Inductance \newcommand\henry{\unit{H}} \newcommand\H{\henry} \newcommand\millihenry{\milli\henry} \newcommand\mH{\milli\henry} % % Temperature \newcommand\celsius{\unit{^{\circ}C}} \newcommand\C{\unit{\celsius}} \newcommand\fahrenheit{\unit{^{\circ}F}} \newcommand\F{\unit{\fahrenheit}} \newcommand\kelvin{\unit{\K}} \newcommand\K{\unit{\kelvin}}\\% Power \newcommand\watt{\unit{W}} \newcommand\W{\watt} \newcommand\milliwatt{\milli\watt} \newcommand\mW{\milli\watt} \newcommand\kilowatt{\kilo\watt} \newcommand\kW{\kilo\watt} % % Torque \newcommand\ozin{\unit{oz}\text{-}\unit{in}} \newcommand\newtonmeter{\unit{N\text{-}m}}\end{aligned}\end{align} \]

Apr 16, 2025 | 326 words | 3 min read

11.2.2. Garage#

Instructions#

Write a class named Garage as a model of a parking garage. The class should have three data attributes: name, spaces, and cars. The name attribute will store the name for the garage as a string, the spaces attribute will be used to track the total number of spaces as an integer, and the cars attribute will track the number of cars currently in the garage as an integer. The Garage class should also have three methods: car_in, car_out, and status.

car_in

This method should increment the carsattribute and print a success message if there are spaces available, otherwise it should print an error message.

car_out

This method should decrement the cars attribute and print a success message if there are cars in the garage, otherwise it should print an error message.

status

This method should print a status message stating how many empty spaces are available in the garage.

In the main function of your program, create two parking garages, Garage A and Garage B. Garage A should be initialized to have \(8\) out of \(10\) spaces taken. Garage B should be initialized to have \(1\) out of \(15\) spaces taken. Then implement a loop allowing a user can interact with the garage objects through the following menu options.

    1. Exit

    1. Print current status.

    1. Add a car to A lot.

    1. Add a car to B lot.

    1. Remove a car from A lot.

    1. Remove a car from B lot.

Invalid choices should print an error message and then re-display the menu.

Sample Output#

Use the values in Table 11.2 below to test your program.

Table 11.2 Test Cases#

Case

Test Run

1

2, 2, 3, 1, 2, 4, 2, 5, 5, 5, 3, 5, 0

2

7, 0

Ensure your program’s output matches the provided samples exactly. This includes all characters, white space, and punctuation. In the samples, user input is highlighted like this for clarity, but your program should not highlight user input in this way.

Case 1 Sample Output

$ python3 garage_login.py Welcome to the Garage Manager! ------------ Menu ------------ 0. Exit 1. Print current status. 2. Add a car to A lot. 3. Add a car to B lot. 4. Remove a car from A lot. 5. Remove a car from B lot. Please choose an option (0-5): 2 Added a car to Lot A Please choose an option (0-5): 2 Added a car to Lot A Please choose an option (0-5): 3 Added a car to Lot B Please choose an option (0-5): 1 Current Garage Status: Lot A: 0 out of 10 spaces are available. Lot B: 13 out of 15 spaces are available. Please choose an option (0-5): 2 Lot A is full. Can not add another car. Please choose an option (0-5): 4 Removed a car from Lot A Please choose an option (0-5): 2 Added a car to Lot A Please choose an option (0-5): 5 Removed a car from Lot B Please choose an option (0-5): 5 Removed a car from Lot B Please choose an option (0-5): 5 Lot B is empty. There are no cars to remove. Please choose an option (0-5): 3 Added a car to Lot B Please choose an option (0-5): 5 Removed a car from Lot B Please choose an option (0-5): 0 End of the Day Garage Status: Lot A: 0 out of 10 spaces are available. Lot B: 15 out of 15 spaces are available.

Case 2 Sample Output

$ python3 garage_login.py Welcome to the Garage Manager! ------------ Menu ------------ 0. Exit 1. Print current status. 2. Add a car to A lot. 3. Add a car to B lot. 4. Remove a car from A lot. 5. Remove a car from B lot. Please choose an option (0-5): 7 Invalid choice! ------------ Menu ------------ 0. Exit 1. Print current status. 2. Add a car to A lot. 3. Add a car to B lot. 4. Remove a car from A lot. 5. Remove a car from B lot. Please choose an option (0-5): 0 End of the Day Garage Status: Lot A: 2 out of 10 spaces are available. Lot B: 14 out of 15 spaces are available.

Deliverables#

Save your finished program as garage_login.py, replacing login with your Purdue login. Then submit it along with all the deliverables listed in Table 11.3 below.

Table 11.3 Deliverables#

Deliverable

Description

garage_login.py

Your finished program.

Screenshot(s)

PNG(s) capturing both test cases.