diff options
Added todays oop practice
1 files changed, 136 insertions, 0 deletions
| -rw-r--r-- | Year 1/Object-oriented Programming/03-Practice-08.03.2022.cpp | 136 |
diff --git a/Year 1/Object-oriented Programming/03-Practice-08.03.2022.cpp b/Year 1/Object-oriented Programming/03-Practice-08.03.2022.cpp new file mode 100644 index 0000000..b148159 --- /dev/null +++ b/Year 1/Object-oriented Programming/03-Practice-08.03.2022.cpp @@ -0,0 +1,136 @@ +#include <iostream> +#include <fstream> +#include <cstring> + +const int LINE_BUFFER_SIZE = 1024; +const int MAX_COMPANY_NAME_SIZE = 25; + +struct JobOffer { + char CompanyName[MAX_COMPANY_NAME_SIZE]; + + unsigned int ProgrammersInTeam; + unsigned int PayedTimeOff; + long long SalaryAfterFinishedProduct; +}; + +void coutJobOffer(JobOffer& jo) { + std::cout << jo.CompanyName << " | Programmers: " << jo.ProgrammersInTeam << " | Time Off: " << jo.PayedTimeOff << " | Salary: " << jo.SalaryAfterFinishedProduct << std::endl; +} + +struct JobOfferCollection { + JobOffer* items; + int count; + int length; +}; + +void addJOtoJOC(JobOffer& jo, JobOfferCollection& joc) { + if (joc.count == joc.length) { + JobOffer* temp = new JobOffer[joc.length <<= 1]; + for (int i = 0; i < joc.count; i++) temp[i] = joc.items[i]; + delete[] joc.items; + joc.items = temp; + } + + joc.items[joc.count++] = jo; +} + +void cinJobOffer(JobOffer& jo) { + char buffer[MAX_COMPANY_NAME_SIZE]; + std::cin.ignore(); + std::cin.getline(buffer, MAX_COMPANY_NAME_SIZE); + strcpy(jo.CompanyName, buffer); + + std::cin >> jo.ProgrammersInTeam >> jo.PayedTimeOff >> jo.SalaryAfterFinishedProduct; +} + +int saveToFile(JobOfferCollection& joc, const char* fileName) { + std::ofstream outFile(fileName, std::ios::binary | std::ios::app); + if (!outFile.is_open()) + return -1; + + for (int i = 0; i < joc.length; i++) { + outFile.write(joc.items[i].CompanyName, MAX_COMPANY_NAME_SIZE); + outFile.write((char*)&joc.items[i].ProgrammersInTeam, sizeof(joc.items[i].ProgrammersInTeam)); + outFile.write((char*)&joc.items[i].PayedTimeOff, sizeof(joc.items[i].PayedTimeOff)); + outFile.write((char*)&joc.items[i].SalaryAfterFinishedProduct, sizeof(joc.items[i].SalaryAfterFinishedProduct)); + } + + outFile.close(); + + return 1; +} + +JobOfferCollection readFromFile(const char* fileName) { + std::ifstream inFile(fileName, std::ios::binary); + if (!inFile.is_open()) + return {}; + + JobOfferCollection joc = { new JobOffer[1], 0, 1 }; + while (!inFile.eof()) { + JobOffer newJo = {}; + inFile.read(newJo.CompanyName, MAX_COMPANY_NAME_SIZE); + inFile.read((char*)&newJo.ProgrammersInTeam, sizeof(newJo.ProgrammersInTeam)); + inFile.read((char*)&newJo.PayedTimeOff, sizeof(newJo.PayedTimeOff)); + inFile.read((char*)&newJo.SalaryAfterFinishedProduct, sizeof(newJo.SalaryAfterFinishedProduct)); + addJOtoJOC(newJo, joc); + } + + inFile.close(); + + return joc; +} + +void filterOffers(const char* filePath, long long minSalary) { + JobOfferCollection readJoc = readFromFile(filePath); + + for (int i = 0; i < readJoc.count; i++) + if (readJoc.items[i].SalaryAfterFinishedProduct >= minSalary) + coutJobOffer(readJoc.items[i]); + + delete[] readJoc.items; +} + +bool existOffer(const char* filePath, const char* name) { + bool toRet = false; + JobOfferCollection readJoc = readFromFile(filePath); + + for (int i = 0; i < readJoc.count; i++) { + if (!strcmp(readJoc.items[i].CompanyName, name)) { + toRet = true; + break; + } + } + + delete[] readJoc.items; + return toRet; +} + +void taskSaveItems() { + int n; + std::cin >> n; + + JobOfferCollection joc = { new JobOffer[n], n, n }; + + for (int i = 0; i < joc.length; i++) + cinJobOffer(joc.items[i]); + + saveToFile(joc, "shefove.joc"); + + delete[] joc.items; +} + +void taskSalary() { + int minSalary; + std::cin >> minSalary; + + filterOffers("shefove.joc", minSalary); +} + +void taskExistOffer() { + char buff[LINE_BUFFER_SIZE]; + std::cin.getline(buff, LINE_BUFFER_SIZE); + std::cout << existOffer("shefove.joc", buff) << std::endl; +} + +int main() { +} |
