From 7c884cb99cfc99ebb5b887894ee4c6f0dcf096ec Mon Sep 17 00:00:00 2001 From: Will Hensel Date: Thu, 14 Mar 2019 02:53:07 +0000 Subject: [PATCH 1/2] More organization and class structure --- HTMLInserting/InsertingFunctions.cpp | 16 ----------- HTMLInserting/InsertingFunctions.h | 1 - .../{main.cpp => InsertingTestHarness.cpp} | 0 HTMLParsing/ParsingFunctions.cpp | 16 ----------- HTMLParsing/ParsingFunctions.h | 3 +-- .../{main.cpp => ParsingTestHarness.cpp} | 0 Main/main.cpp | 27 +++++++++++++++++++ HTMLParsing/Sample.html => Sample.html | 0 StudentData/StudentData.cpp | 20 ++++++++++++++ StudentData/StudentData.h | 16 +++++++++++ 10 files changed, 64 insertions(+), 35 deletions(-) rename HTMLInserting/{main.cpp => InsertingTestHarness.cpp} (100%) rename HTMLParsing/{main.cpp => ParsingTestHarness.cpp} (100%) create mode 100644 Main/main.cpp rename HTMLParsing/Sample.html => Sample.html (100%) create mode 100644 StudentData/StudentData.cpp create mode 100644 StudentData/StudentData.h diff --git a/HTMLInserting/InsertingFunctions.cpp b/HTMLInserting/InsertingFunctions.cpp index f74ead7..978d396 100644 --- a/HTMLInserting/InsertingFunctions.cpp +++ b/HTMLInserting/InsertingFunctions.cpp @@ -2,22 +2,6 @@ #include #include "InsertingFunctions.h" -void getDataFromFile(string fileName, string &planType, int &remainingCredits){ - - ifstream fin; - - fin.open(fileName); - - if(!fin.is_open()){ - throw runtime_error("File could not be opened"); - } - else{ - getline(fin, planType); - fin >> remainingCredits; - } - - fin.close(); -} void insertData(const string &planType, const string remainingCredits){ diff --git a/HTMLInserting/InsertingFunctions.h b/HTMLInserting/InsertingFunctions.h index f37a4e3..f04533e 100644 --- a/HTMLInserting/InsertingFunctions.h +++ b/HTMLInserting/InsertingFunctions.h @@ -2,5 +2,4 @@ using namespace std; -void getDataFromFile(string fileName, string &planType, int &remainingCredits); void insertData(const string &planType, const string remainingCredits); \ No newline at end of file diff --git a/HTMLInserting/main.cpp b/HTMLInserting/InsertingTestHarness.cpp similarity index 100% rename from HTMLInserting/main.cpp rename to HTMLInserting/InsertingTestHarness.cpp diff --git a/HTMLParsing/ParsingFunctions.cpp b/HTMLParsing/ParsingFunctions.cpp index 32290f3..ae5452f 100644 --- a/HTMLParsing/ParsingFunctions.cpp +++ b/HTMLParsing/ParsingFunctions.cpp @@ -101,19 +101,3 @@ int findCreditElement(vector hLines, string planType){ return elementLocation; } - -void writeToFile(string mealPlanType, int totalCredits, string outputFileName){ - - ofstream fout(outputFileName); - - if(!fout){ - throw runtime_error("Cannot open output file to write data"); - } - else{ - fout << mealPlanType << endl; - fout << totalCredits << endl; - } - - fout.close(); - -} \ No newline at end of file diff --git a/HTMLParsing/ParsingFunctions.h b/HTMLParsing/ParsingFunctions.h index 195c1d2..2fdf5a0 100644 --- a/HTMLParsing/ParsingFunctions.h +++ b/HTMLParsing/ParsingFunctions.h @@ -10,5 +10,4 @@ using namespace std; vector readHTMLFromFile(string fileName); string getPlanType(vector hLines); int findCreditElement(vector hLines, string planType); -int extractCredit(string str); -void writeToFile(string mealPlanType, int totalCredits, string outputFileName); \ No newline at end of file +int extractCredit(string str); \ No newline at end of file diff --git a/HTMLParsing/main.cpp b/HTMLParsing/ParsingTestHarness.cpp similarity index 100% rename from HTMLParsing/main.cpp rename to HTMLParsing/ParsingTestHarness.cpp diff --git a/Main/main.cpp b/Main/main.cpp new file mode 100644 index 0000000..a0e14fa --- /dev/null +++ b/Main/main.cpp @@ -0,0 +1,27 @@ +#include "../HTMLParsing/ParsingFunctions.h" +#include "../HTMLInserting/InsertingFunctions.h" +#include "../StudentData/StudentData.h" + +#include +#include +#include + +int main(){ + + try{ + vector hLines = readHTMLFromFile("Sample.html"); + string mealPlanType = getPlanType(hLines); + int creditElementLocation = findCreditElement(hLines, mealPlanType); + int totalCredits = extractCredit(hLines.at(creditElementLocation)); + + cout << mealPlanType << endl; + cout << totalCredits << endl; + + } + catch(runtime_error &excpt){ + cout << excpt.what() << endl; + } + + + return 0; +} \ No newline at end of file diff --git a/HTMLParsing/Sample.html b/Sample.html similarity index 100% rename from HTMLParsing/Sample.html rename to Sample.html diff --git a/StudentData/StudentData.cpp b/StudentData/StudentData.cpp new file mode 100644 index 0000000..ea78819 --- /dev/null +++ b/StudentData/StudentData.cpp @@ -0,0 +1,20 @@ + +#include "StudentData.h" + +StudentData::StudentData(int credits, int wolfParentPasses, double flexDollars){ + this->credits = credits; + this->wolfParentPasses = wolfParentPasses; + this->flexDollars = flexDollars; +} + +void StudentData::setCredits(int credits){ + this->credits = credits; +} + +void StudentData::setWolfParentPasses(int wolfParentPasses){ + this->wolfParentPasses = wolfParentPasses; +} + +void StudentData::setFlexDollars(double flexDollars){ + this->flexDollars = flexDollars; +} diff --git a/StudentData/StudentData.h b/StudentData/StudentData.h new file mode 100644 index 0000000..f6dd1a6 --- /dev/null +++ b/StudentData/StudentData.h @@ -0,0 +1,16 @@ + + +class StudentData { + public: + StudentData(int, int, double); + void setCredits(int); + void setWolfParentPasses(int); + void setFlexDollars(double); + int getCredits() { return credits; } + int getWolfParentPasses() { return wolfParentPasses; } + double getFlexDollars() { return flexDollars; } + private: + int credits; + int wolfParentPasses; + double flexDollars; +}; \ No newline at end of file -- GitLab From 48120ae9d11565c3d5afea6705582f5d4db5c88b Mon Sep 17 00:00:00 2001 From: Will Hensel Date: Thu, 14 Mar 2019 18:23:53 +0000 Subject: [PATCH 2/2] Finished parsing credits, parent passes, and flex dollars --- HTMLParsing/ParsingFunctions.cpp | 60 ++++++++++++++++++++++++++++++-- HTMLParsing/ParsingFunctions.h | 5 ++- Main/main.cpp | 21 ++++++++--- StudentData/StudentData.cpp | 6 ++++ StudentData/StudentData.h | 1 + 5 files changed, 85 insertions(+), 8 deletions(-) diff --git a/HTMLParsing/ParsingFunctions.cpp b/HTMLParsing/ParsingFunctions.cpp index ae5452f..32e68af 100644 --- a/HTMLParsing/ParsingFunctions.cpp +++ b/HTMLParsing/ParsingFunctions.cpp @@ -4,7 +4,7 @@ int extractCredit(string str) { stringstream sStream; - + sStream << str; string temp; @@ -21,6 +21,26 @@ int extractCredit(string str) } } +double extractFlex(string str){ + + stringstream sStream; + + sStream << str; + + string temp; + double found; + while (!sStream.eof()) { + + sStream >> temp; + + if (stringstream(temp) >> found){ + return found; + } + + temp = ""; + } +} + vector readHTMLFromFile(string fileName){ vector hLines; @@ -76,7 +96,7 @@ string getPlanType(vector hLines){ break; } else if(hLines.at(i).find("Silver Flex 8") != string::npos){ - planType = "Silver Flex 8"; + planType = "Silver Flex 08"; break; } else{ @@ -92,7 +112,41 @@ int findCreditElement(vector hLines, string planType){ int elementLocation; for(int i = 0; i < hLines.size(); ++i){ - if(hLines.at(i).find("Gold Flex 12") != string::npos){ + if(hLines.at(i).find("" + planType + "") != string::npos){ + if(hLines.at(i - 2).find("View Transactions") != string::npos){ + elementLocation = i + 2; + } + } + } + + return elementLocation; +} + +int findFlexElement(vector hLines, string planType){ + + int elementLocation; + planType.pop_back(); + planType.pop_back(); + + + for(int i = 0; i < hLines.size(); ++i){ + if(hLines.at(i).find(planType) != string::npos){ + if(hLines.at(i - 2).find("View Transactions") != string::npos){ + elementLocation = i + 2; + } + } + } + + return elementLocation; + + +} +int findParentPassElement(vector hLines, string planType){ + + int elementLocation; + + for(int i = 0; i < hLines.size(); ++i){ + if(hLines.at(i).find("Wolves-Parents Pass") != string::npos){ if(hLines.at(i - 2).find("View Transactions") != string::npos){ elementLocation = i + 2; } diff --git a/HTMLParsing/ParsingFunctions.h b/HTMLParsing/ParsingFunctions.h index 2fdf5a0..1a4893f 100644 --- a/HTMLParsing/ParsingFunctions.h +++ b/HTMLParsing/ParsingFunctions.h @@ -8,6 +8,9 @@ using namespace std; vector readHTMLFromFile(string fileName); +int extractCredit(string str); +double extractFlex(string str); string getPlanType(vector hLines); int findCreditElement(vector hLines, string planType); -int extractCredit(string str); \ No newline at end of file +int findFlexElement(vector hLines, string planType); +int findParentPassElement(vector hLines, string planType); diff --git a/Main/main.cpp b/Main/main.cpp index a0e14fa..d399652 100644 --- a/Main/main.cpp +++ b/Main/main.cpp @@ -3,25 +3,38 @@ #include "../StudentData/StudentData.h" #include +#include #include #include int main(){ - + + StudentData studentData; + try{ vector hLines = readHTMLFromFile("Sample.html"); + string mealPlanType = getPlanType(hLines); + int creditElementLocation = findCreditElement(hLines, mealPlanType); - int totalCredits = extractCredit(hLines.at(creditElementLocation)); + int parentPassLocation = findParentPassElement(hLines, mealPlanType); + int flexElementLocation = findFlexElement(hLines, mealPlanType); + - cout << mealPlanType << endl; - cout << totalCredits << endl; + int totalCredits = extractCredit(hLines.at(creditElementLocation)); + int totalParentPasses = extractCredit(hLines.at(parentPassLocation)); + double totalFlexDollars = extractFlex(hLines.at(flexElementLocation)); + studentData = StudentData(totalCredits, totalParentPasses, totalFlexDollars); + } catch(runtime_error &excpt){ cout << excpt.what() << endl; } + cout << "Total credits: " << studentData.getCredits() << endl; + cout << "Total Wolf Parent Passes: " << studentData.getWolfParentPasses() << endl; + cout << "Total Flex Dollars: " << fixed << setprecision(2) << studentData.getFlexDollars() << endl; return 0; } \ No newline at end of file diff --git a/StudentData/StudentData.cpp b/StudentData/StudentData.cpp index ea78819..bf2c7d8 100644 --- a/StudentData/StudentData.cpp +++ b/StudentData/StudentData.cpp @@ -1,6 +1,12 @@ #include "StudentData.h" +StudentData::StudentData(){ + this->credits = -1; + this->wolfParentPasses = -1; + this->flexDollars = -1; +} + StudentData::StudentData(int credits, int wolfParentPasses, double flexDollars){ this->credits = credits; this->wolfParentPasses = wolfParentPasses; diff --git a/StudentData/StudentData.h b/StudentData/StudentData.h index f6dd1a6..10adb3d 100644 --- a/StudentData/StudentData.h +++ b/StudentData/StudentData.h @@ -2,6 +2,7 @@ class StudentData { public: + StudentData(); StudentData(int, int, double); void setCredits(int); void setWolfParentPasses(int); -- GitLab