From 9d2792782da945fbeb8313a7b8e6ae79717c0d82 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Tue, 26 Sep 2023 22:00:33 -0700 Subject: fix(review_program): use style guide --- week_1/review_program/review_program.cpp | 88 ++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 week_1/review_program/review_program.cpp (limited to 'week_1/review_program/review_program.cpp') diff --git a/week_1/review_program/review_program.cpp b/week_1/review_program/review_program.cpp new file mode 100644 index 0000000..a634076 --- /dev/null +++ b/week_1/review_program/review_program.cpp @@ -0,0 +1,88 @@ +#include "review_program.h" +#include "textbook.h" + +#include +#include + +auto main() -> int { + bool run_again = false; + std::vector textbooks; + + // Loop until user is done entering textbooks + do { + review_program::textbook_input_loop_handler(textbooks); + + std::cout << "Enter 1 to do another book, 0 to stop. "; + std::cin >> run_again; + } while (run_again); + + // Print full purchase summary + review_program::full_purchase_summary(textbooks); + + return 0; +} + +namespace review_program { +auto textbook_input(textbook::Textbook &textbook) -> void { + // Obtain and set all non-evaluated values for textbook + textbook.set_code(input_textbook_value("Book")); + textbook.set_single_copy_price(input_textbook_value("Price")); + textbook.set_number_on_hand(input_textbook_value("Number on hand")); + textbook.set_prospective_enrollment( + input_textbook_value("Enrollment")); + textbook.set_required( + input_textbook_value("Required (1 = required, 0 = optional)")); + textbook.set_used(input_textbook_value("Used (1 = used, 0 = new)")); +} + +template +auto input_textbook_value(const std::string &message) -> T { + // Helper for repetitive textbook value prompts + T value = 0; + + std::cout << message << ": "; + std::cin >> value; + + return value; +} + +auto textbook_input_loop_handler(std::vector &textbooks) + -> void { + // 1. Input textbook + // 2. Print textbook + // 3. Evaluate textbook needs + // 4. Print textbook needs + // 5. Add textbook to running count + textbook::Textbook textbook; + + review_program::textbook_input(textbook); + + std::cout << "---" << std::endl; + + textbook.print(); + + std::cout << "---" << std::endl; + + textbook.evaluate_needs(); + textbook.print_needs(); + + std::cout << "---" << std::endl; + + textbooks.push_back(textbook); +} + +auto full_purchase_summary(const std::vector &textbooks) + -> void { + double total_for_all_books = 0.0; + + // Calculate total cost for all books + for (const auto &textbook : textbooks) { + total_for_all_books += textbook.total_cost(); + } + + // Print total cost for all books and expected profits + std::cout << "\n---\nTotal cost for all books: $" << total_for_all_books + << std::endl; + std::cout << "Expected profit: $" << total_for_all_books * 0.2 << std::endl; +} +} // namespace review_program -- cgit v1.2.3