From 55ad66f85c0b59154242d251249c6eeba7e09cae Mon Sep 17 00:00:00 2001 From: Kai Renz <kai.renz@h-da.de> Date: Fri, 3 Nov 2023 09:53:28 +0100 Subject: [PATCH] Feature: Solution One possible solution to the refactoring challenge. Renamed and removed variables. Extracted functions. Try to have one purpose for each function. --- CMakeLists.txt | 4 +-- RefactoringDemo.cpp | 75 ++++++++++++++++++++++++++++++--------------- main.cpp | 3 ++ 3 files changed, 56 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2341c0f..0507f6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(OOAD_Refactoring_Demo) +project(02-ifm1-refactoring) set(CMAKE_CXX_STANDARD 14) -add_executable(OOAD_Refactoring_Demo main.cpp) +add_executable(02-ifm1-refactoring main.cpp) diff --git a/RefactoringDemo.cpp b/RefactoringDemo.cpp index 88352fb..f433309 100644 --- a/RefactoringDemo.cpp +++ b/RefactoringDemo.cpp @@ -7,29 +7,56 @@ using namespace std; #include "DummyCode.cpp" /* End of code to be ignored */ -void pruefeRezepte(VorhandeneZutaten VZ){ - int i, j, k; - bool da; - for (i=0; i<getAnzahlRezepte(); i++){ - Rezept* r = getRezept(i); - cout << i << ". " << r->getRezeptName() << ": "; - da=true; - for (j = 0; j < r->getAnzahlRezeptZutaten(); j++) { - string z = r->getZutat(j); - bool OK= false; - for (k=0; k<VZ.getAnzahlZutaten();k++){ - if (z==VZ.getVorhandeneZutat(k)){ - OK= true; - break; - } - } - if (OK== false) { - da = false; - break; - } +bool istZutatVorhanden(VorhandeneZutaten &vorhandeneZutaten, const string &zutat); +bool sindAlleZutatenVorhanden(VorhandeneZutaten &vorhandeneZutaten, Rezept *rezept); + +void ausgabeRezept(int rezeptNummer, std::string name); +void ausgabeResultat(std::string result); + +void pruefeRezept(VorhandeneZutaten &vorhandeneZutaten, int i); + +// This is the original function that has been refactored: +void pruefeRezepte(VorhandeneZutaten vorhandeneZutaten){ + for (int i=0; i<getAnzahlRezepte(); i++){ + pruefeRezept(vorhandeneZutaten, i); + } +} + +void pruefeRezept(VorhandeneZutaten &vorhandeneZutaten, int i) { + Rezept* rezept = getRezept(i); + + ausgabeRezept(i,rezept->getRezeptName()); + + if (sindAlleZutatenVorhanden(vorhandeneZutaten, rezept)) { + ausgabeResultat(" mischbar!"); + } + else { + ausgabeResultat(" nicht mischbar!"); + } +} + + +void ausgabeRezept(int rezeptNummer, std::string name) { + cout << rezeptNummer << ". " << name << ": "; +} +void ausgabeResultat(std::string result) { + cout << result << endl; +} +bool sindAlleZutatenVorhanden(VorhandeneZutaten &vorhandeneZutaten, Rezept *rezept) { + for (int j = 0; j < rezept->getAnzahlRezeptZutaten(); j++) { + string zutat = rezept->getZutat(j); + if (!istZutatVorhanden(vorhandeneZutaten, zutat)) { + return false; + } + } + return true; +} + +bool istZutatVorhanden(VorhandeneZutaten &vorhandeneZutaten, const string &zutat) { + for (int k=0; k < vorhandeneZutaten.getAnzahlZutaten(); k++){ + if (zutat == vorhandeneZutaten.getVorhandeneZutat(k)){ + return true; } - if (da == true) { - cout << " mischbar\n"; } - else { cout << " nicht mischbar!\n"; } } -} \ No newline at end of file + return false; +} diff --git a/main.cpp b/main.cpp index 6b29d17..9620d1d 100644 --- a/main.cpp +++ b/main.cpp @@ -5,5 +5,8 @@ int main() { std::cout << "This is the Refactoring Demo!" << std::endl; + VorhandeneZutaten vorhandeneZutaten; + pruefeRezepte(vorhandeneZutaten); + return 0; } -- GitLab