project #3
Page | 1 of 6 CS 115 - INTRODUCTION TO COMPUTER PROGRAMMING (PYTHON) PROGRAMMING PROJECT 4 INTRODUCTION The goal of this programming project is to enable students practice solving a problem that uses the Python features of functions and lists. PROBLEM Write a program that inputs names of personal expenses and a corresponding amount for each expense. The program should store all input data in lists. The program should present the user with a main menu to select options to: 1. Input personal expense names 2. Input personal expense amounts 3. Display the expenses (names and amounts) 4. Exit the program The program should then allow the user to select how the information will be displayed from the list of: (a) pie chart (b) bar chart (c) table. The program should achieve this in functions described below. To ensure good programming and modularity, none of the functions should call itself and the only function calls should be in the main function. Functions should not be defined inside other functions. At the bottom, there should be a statement that calls the main function. Here are the descriptions of what should be in the functions: 1. main This function will have statements to call the other functions and display the main menu. The first function called will input names of the expenses into a list and assign the list to a list object. The second call will pass the expense items list to a function that inputs expense amounts into a second list that is then assigned to a list object. The third call passes the two lists to a function that will display the contents on the two lists. Here are the Python statements: expenseItems = InputExpenseNames() expenseAmounts = InputExpenseAmounts(expenseItems) DisplayExpenseReport(expenseItems, expenseAmounts) 2. InputExpenseNames First create an empty list for expense items. Next, enter a loop that iterates for as long as the user responds that there are more item names to enter. In the loop, display a message asking the user to input the name of an expense item, then input the name and append it to the list. Then input a response to the question whether there are more item names. After the loop ends, return the expense items list. Page | 2 of 6 3. InputExpenseAmounts Create an empty list for expense amounts. Enter a loop that uses the size (you may use the len function) of the expense items list to determine number of iterations. For each iteration, display a message that says: How much was spent on xxxxxxxxxx expense item? where xxxxxxxxxx is replaced by the name from the expense_items_list corresponding to the current iteration. The amount should then be input and appended to the expense amounts list. Input validation should be done including using try … except … to ensure a number was entered. After the loop ends, return the expense amounts list. 4. DisplayExpenseReport Parameters to this function will be the expense items and expense amounts lists. Your program should offer the user the menu of (a) table display (b) pie chart (c) bar chart. When the user selects option (a), the program should output column headings and then enters a loop that iterates as many times as the size of the expense items list and outputs the contents of the lists. The program should output some type of delineation that expenses are done and output the total of the amounts in the expense amounts list. After exiting the loop, the program should display the totals line of the report. Use the format function and format strings. Here is an example of what the output may look like. EXPENSE ITEM AMOUNT ------------------- ------------ Rent 450.00 Car loan payment 375.50 Food and groceries 250.00 Electricity 75.00 Water =========== 35.68 ======== TOTALS 1,186.18 When the user selects option (b), the program should output a pie chart of the data in the lists using matplotlib. When the user selects option (c), the program should output a bar chart of the data in the lists using matplotlib. Hint In plotting a pie chart the following did not work for me: • plt.pie(expenseAmounts, expenseNames) It required creating and adding a parameter between amounts and names called explode: explodes = [] # create an explodes array for the chart Page | 3 of 6 for expense in expenseAmounts: explodes.append(0.05) plt.pie(expenseAmounts, explodes, expenseNames More information can be found at the matplotlib home site: • https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html Page | 4 of 6 USER STORY – Read me Your program will need to work for both User Stories below. No data Flow 1. The User runs the program. 2. The program displays a menu asking the user if they want to: Input Expense Names, Input expense amounts, Display an expense report or quit. 3. The User selects: Display an expense report. 4. The program displays a menu of expense reports: Bar Chart, Pie Chart, Table, or return to main menu. 5. The User selects: Table 6. The program displays the table headings and nothing else as there is no expense data. The program tell the user how to get back to the reports menu. 7. The User goes back to the reports menu. 8. The program displays a menu of expense reports: Bar Chart, Pie Chart, Table, or return to main menu. 9. The User selects: Bar Chart 10. The program displays the bar chart without any data. 11. User closes the bar chart window. 12. The program displays a menu of expense reports: Bar Chart, Pie Chart, Table, or return to main menu. 13. The User selects: Pie Chart 14. The program displays the pie chart without any data. 15. User closes the pie chart window. 16. The program displays a menu of expense reports: Bar Chart, Pie Chart, Table, or return to main menu. 17. The User selects: or return to main menu. 18. The program displays a menu asking the user if they want to: Input Expense Names, Input expense amounts, Display an expense report or quit. 19. The User selects , Input expense amounts 20. The program calls the function InputExpenseAmounts and returns to the main menu as there are no expense names to get expense amounts for. 21. The program displays a menu asking the user if they want to: Input Expense Names, Input expense amounts, Display an expense report or quit. 22. The User selects quit. Normal Flow 1. The User runs the program. 2. The program displays a menu asking the user if they want to: Input Expense Names, Input expense amounts, Display an expense report or quit. 3. The User selects: Input Expense Names 4. The program calls the function InputExpenseNames. 5. The program prompts the user for an expense name and indicates how the user ends entering expense names. Page | 5 of 6 6. The user enters expense name-1 7. Program stores the expense name-1 in a list 8. The user enters expense name-2. 9. Program stores the expense name-2 in a list 10. The user indicates they wish to go back to the main menu. 11. The program returns the list to the main program. 12. The program displays a menu asking the user if they want to: Input Expense Names, Input expense amounts, Display an expense report or quit. 13. The User selects , Input expense amounts 14. The program calls the function InputExpenseAmounts and begins asking for amounts for each expense, The user enters a dollar amount (22.45) for each expense name. 15. When all the expense names have an associated amount the function returns a list of the amounts in the same order as the names. 16. The program displays a menu asking the user if they want to: Input Expense Names, Input expense amounts, Display an expense report or quit. 17. The User selects: Display an expense report. 18. The program displays a menu of expense reports: Bar Chart, Pie Chart, Table, or return to main menu. 19. The User selects: Table 20. The program displays the expense report. The program tell the user how to get back to the reports menu. 21. The User goes back to the reports menu. 22. The program displays a menu of expense reports: Bar Chart, Pie Chart, Table, or return to main menu. 23. The User selects: Bar Chart 24. The program displays the bar chart. 25. User closes the bar chart window. 26. The program displays a menu of expense reports: Bar Chart, Pie Chart, Table, or return to main menu. 27. The User selects: Pie Chart 28. The program displays the pie chart. 29. User closes the pie chart window. 30. The program displays a menu of expense reports: Bar Chart, Pie Chart, Table, or return to main menu. 31. The User selects: or return to main menu. 32. The program displays a menu asking the user if they want to: Input Expense Names, Input expense amounts, Display an expense report, or quit.