Seredenko-V

WorkCode

Mar 16th, 2023
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. std::string ReadLine() {
  5.     std::string s;
  6.     std::getline(std::cin, s);
  7.     return s;
  8. }
  9.  
  10. int ReadLineWithNumber() {
  11.     int result;
  12.     std::cin >> result;
  13.     ReadLine();
  14.     return result;
  15. }
  16.  
  17. class Job {
  18. public:
  19.     Job(int number_order, std::string code, std::string unit, double norm_of_time, double price, int number_accepted_units) {
  20.         number_order_ = number_order;
  21.         code_ = code;
  22.         unit_ = unit;
  23.         norm_of_time_ = norm_of_time;
  24.         price_ = price;
  25.         number_accepted_units_ = number_accepted_units;
  26.         cost_ = number_accepted_units_ * price_;
  27.     }
  28.  
  29.     int GetNumbreOrder() const {
  30.         return number_order_;
  31.     }
  32.  
  33.     const std::string& GetCode() const {
  34.         return code_;
  35.     }
  36.  
  37.     const std::string& GetUnit() const {
  38.         return unit_;
  39.     }
  40.  
  41.     double GetNormOfTime() const {
  42.         return norm_of_time_;
  43.     }
  44.  
  45.     double GetPrice() const {
  46.         return price_;
  47.     }
  48.  
  49.     int GetNumberAcceptedUnits() const {
  50.         return number_accepted_units_;
  51.     }
  52.  
  53.     double GetCost() const {
  54.         return cost_;
  55.     }
  56.  
  57. private:
  58.     int number_order_; // Номер
  59.     std::string code_; // Код
  60.     std::string unit_; // Единица измерения
  61.     double norm_of_time_; // Норма времени
  62.     double price_; // Расценка
  63.     int number_accepted_units_; // Количество принятых единиц измерения
  64.     double cost_; // стоимость работы
  65. };
  66.  
  67. class Worker {
  68. public:
  69.     Worker(int personnel_number) {
  70.         personnel_number_ = personnel_number;
  71.         jobs_ = new Job * [10];
  72.         count_job_ = 0;
  73.     }
  74.  
  75.     void AddJob(const Job& job) {
  76.         jobs_[count_job_] = new Job(job);
  77.         ++count_job_;
  78.     }
  79.  
  80.     Job** GetJobs() const {
  81.         return jobs_;
  82.     }
  83.  
  84.     int GetCountJob() const {
  85.         return count_job_;
  86.     }
  87.  
  88.     ~Worker() {
  89.         for (int i = 0; i < count_job_; ++i) {
  90.             delete jobs_[i];
  91.         }
  92.         delete[] jobs_;
  93.     }
  94.  
  95.     int GetPersonnelNumber() const {
  96.         return personnel_number_;
  97.     }
  98.  
  99. private:
  100.     int personnel_number_; // Табельный номер рабочего
  101.     int count_job_; // Количество работ
  102.     Job** jobs_; // Работы
  103. };
  104.  
  105. class DatabaseWorkers {
  106. public:
  107.     DatabaseWorkers() {
  108.         workers_ = new Worker * [20];
  109.         count_worker_ = 0;
  110.     }
  111.  
  112.     void AddWorker(const Worker& worker) {
  113.         workers_[count_worker_] = new Worker(worker);
  114.         ++count_worker_;
  115.     }
  116.  
  117.     bool CountWorker(int personnel_number) const {
  118.         for (int i = 0; i < count_worker_; ++i) {
  119.             if (workers_[i]->GetPersonnelNumber() == personnel_number) {
  120.                 return true;
  121.             }
  122.         }
  123.         return false;
  124.     }
  125.  
  126.     Worker* GetWorker(int personnel_number) const {
  127.         return FindWorker(personnel_number);
  128.     }
  129.  
  130.     ~DatabaseWorkers() {
  131.         for (int i = 0; i < count_worker_; ++i) {
  132.             delete workers_[i];
  133.         }
  134.         delete[] workers_;
  135.     }
  136.  
  137. private:
  138.     int count_worker_; // Количество рабочих
  139.     Worker** workers_; // Рабочие
  140.  
  141. private:
  142.     Worker* FindWorker(int personnel_number) const {
  143.         int number = 0;
  144.         for (int i = 0; i < count_worker_; ++i) {
  145.             if (workers_[i]->GetPersonnelNumber() == personnel_number) {
  146.                 number = i;
  147.                 break;
  148.             }
  149.         }
  150.         return workers_[number];
  151.     }
  152. };
  153.  
  154. std::ostream& operator<<(std::ostream& os, const Job& job) {
  155.     os << "Номер наряда - " << job.GetNumbreOrder() << '\n';
  156.     os << "Код работы - " << job.GetCode() << '\n';
  157.     os << "Единица измерения - " << job.GetUnit() << '\n';
  158.     os << "Норма времени - " << job.GetNormOfTime() << '\n';
  159.     os << "Расценка - " << job.GetPrice() << '\n';
  160.     os << "Количество принятых единиц измерения - " << job.GetNumberAcceptedUnits() << '\n';
  161.     os << "Стоимость работы - " << job.GetCost();
  162.     return os;
  163. }
  164.  
  165. std::ostream& operator<<(std::ostream& os, const Worker& worker) {
  166.     os << "Табелный номер - " << worker.GetPersonnelNumber() << '\n';
  167.     int sum_cost = 0;
  168.     Job** jobs = worker.GetJobs();
  169.     for (int i = 0; i < worker.GetCountJob(); ++i) {
  170.         sum_cost += jobs[i]->GetCost();
  171.         os << "Работа №" << i + 1 << '\n';
  172.         os << *(jobs[i]) << "\n\n";
  173.     }
  174.     os << "Итого - " << sum_cost;
  175.     return os;
  176. }
  177.  
  178. std::string* ParseString(const std::string str) {
  179.     std::string* parse_str = new std::string[6];
  180.     std::string tmp;
  181.     int count_part = 0;
  182.     for (int i = 0; i < str.size(); ++i) {
  183.         if (str[i] != ' ') {
  184.             tmp += str[i];
  185.         }
  186.         else {
  187.             parse_str[count_part] = tmp;
  188.             ++count_part;
  189.             tmp.clear();
  190.         }
  191.     }
  192.     parse_str[count_part] = tmp;
  193.  
  194.     return parse_str;
  195. }
  196.  
  197. Job WriteInfromationAboutJob() {
  198.     std::cout << "Введите информацию о работе\n";
  199.     std::cout << "Номер наряда код работы единица измерения норма времени расценка количество принятых единиц измерения\n";
  200.     std::string str = ReadLine();
  201.     std::string* parse_str = ParseString(str);
  202.     int number_order = std::stoi(parse_str[0]);
  203.     std::string code = parse_str[1];
  204.     std::string unit = parse_str[2];
  205.     double norm_of_time = std::stod(parse_str[3]);
  206.     double price = std::stod(parse_str[4]);
  207.     int number_accepted_units = std::stoi(parse_str[5]);
  208.     delete[] parse_str;
  209.     return { number_order, code, unit, norm_of_time, price, number_accepted_units };
  210. }
  211.  
  212. void WriteDataToDatabase(DatabaseWorkers& database) {
  213.     std::cout << "Введите информацию о рабочих\n";
  214.     int count_workers = 4;
  215.     for (int i = 0; i < count_workers; ++i) {
  216.         std::cout << "Введите табельный номер рабочего\n";
  217.         int personnel_number = ReadLineWithNumber();
  218.         Worker* worker;
  219.         if (database.CountWorker(personnel_number)) {
  220.             worker = database.GetWorker(personnel_number);
  221.         }
  222.         else {
  223.             worker = new Worker(personnel_number);
  224.         }
  225.         worker->AddJob(WriteInfromationAboutJob());
  226.         database.AddWorker(*worker);
  227.     }
  228. }
  229.  
  230. void PrintInformationWoker(const DatabaseWorkers& database) {
  231.     while (true) {
  232.         std::cout << "Введите табельный номер рабочего\n";
  233.         int personnel_number;
  234.         std::cin >> personnel_number;
  235.         if (database.CountWorker(personnel_number)) {
  236.             std::cout << *database.GetWorker(personnel_number) << std::endl;
  237.         }
  238.         else {
  239.             std::cout << "Работника с таким табильным номером нет!\n";
  240.         }
  241.         std::cout << "Введите 0, чтобы завершить вывод информации: ";
  242.         bool repeat;
  243.         std::cin >> repeat;
  244.         if (!repeat) {
  245.             break;
  246.         }
  247.     }
  248. }
  249.  
  250. //1 AAA kilog 12.5 10 100
  251. //2 AAA kilog 5 20 50
  252. //1 BBB milli 1 100 2
  253. //3 ABC mickr 100 1 100
  254.  
  255.  
  256. int main() {
  257.     setlocale(LC_ALL, "ru");
  258.     DatabaseWorkers database;
  259.     WriteDataToDatabase(database);
  260.     //    PrintInformationWoker(database);
  261.     return 0;
  262. }
Advertisement
Add Comment
Please, Sign In to add comment