#include #include #include 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() { }