static void Main(string[] args) { List <Doctor> doctors = new List <Doctor>(); List <Patient> patients = new List <Patient>(); List <Cabinet> cabinets = new List <Cabinet>(); List <Appointment> appointments = new List <Appointment>(); Shedule newShedule = new Shedule(appointments); //инициализация данных абстрактного класса int id = -1; string name = ""; string surname = ""; string patronymic = ""; string pasport = ""; string phoneNumber = ""; //доп. данные для доктора и кабинета string speciality = ""; int[] workDays = new int[7]; int workHours = 0; DateTime birthday = new DateTime(1, 1, 1); int number = -1; //сбор пациентов, кабинетов, докторов. для дальнейшей работы using (StreamReader file = new StreamReader("C:/Users/Кристина/Documents/University/Medicine_center/Medicine_center/Patients.txt")) { string read = file.ReadLine(); while (read != null) { string[] patientData = read.Split(' ', ':', '.'); id = int.Parse(patientData[0]); name = patientData[1]; surname = patientData[2]; patronymic = patientData[3]; pasport = patientData[4]; phoneNumber = patientData[5]; birthday = new DateTime(int.Parse(patientData[8]), int.Parse(patientData[7]), int.Parse(patientData[6])); Patient newPatient = new Patient(id, name, surname, patronymic, pasport, phoneNumber, birthday); patients.Add(newPatient); read = file.ReadLine(); } } using (StreamReader file = new StreamReader("C:/Users/Кристина/Documents/University/Medicine_center/Medicine_center/Doctors.txt")) { string read = file.ReadLine(); while (read != null) { string[] doctorData = read.Split(' ', ':', '.'); id = int.Parse(doctorData[0]); name = doctorData[1]; surname = doctorData[2]; patronymic = doctorData[3]; pasport = doctorData[4]; phoneNumber = doctorData[5]; birthday = new DateTime(int.Parse(doctorData[8]), int.Parse(doctorData[7]), int.Parse(doctorData[6])); speciality = doctorData[12]; int[] workDays1 = new int[7]; for (int index = 13; index < doctorData.Length - 1; ++index) { workDays1[index - 13] = int.Parse(doctorData[index]); } workHours = int.Parse(doctorData[doctorData.Length - 1]); Doctor newDoctor = new Doctor(id, name, surname, patronymic, pasport, phoneNumber, birthday, speciality, workDays1, workHours); doctors.Add(newDoctor); read = file.ReadLine(); } } using (StreamReader file = new StreamReader("C:/Users/Кристина/Documents/University/Medicine_center/Medicine_center/Cabinets.txt")) { string read = file.ReadLine(); while (read != null) { string[] cabinetData = read.Split(' '); id = int.Parse(cabinetData[0]); number = int.Parse(cabinetData[1]); speciality = cabinetData[2]; Cabinet newCabinet = new Cabinet(id, number, speciality); cabinets.Add(newCabinet); read = file.ReadLine(); } } //1.сбор текущего расписания, НО using (StreamReader file = new StreamReader("C:/Users/Кристина/Documents/University/Medicine_center/Medicine_center/Shedule.txt")) { string read = file.ReadLine(); int doctorID = 0; int cabinetNumber = 0; int day = 0; int hour = 0; int minute = 0; int patientID = 0; while (read != null) { string[] sheduleData = read.Split(' '); doctorID = int.Parse(sheduleData[0]); Doctor sheduleDoctor = null; foreach (Doctor doctor in doctors) { if (doctor.GiveTakeID == doctorID) { sheduleDoctor = doctor; break; } } cabinetNumber = int.Parse(sheduleData[1]); Cabinet sheduleCabinet = null; foreach (Cabinet cabinet in cabinets) { if (cabinet.GiveTakeNumber == cabinetNumber) { sheduleCabinet = cabinet; break; } } day = int.Parse(sheduleData[2]); hour = int.Parse(sheduleData[3]); minute = int.Parse(sheduleData[4]); Patient shedulePatient = null; if (sheduleData.Length > 5) { patientID = int.Parse(sheduleData[5]); foreach (Patient patient in patients) { if (patient.GiveTakeID == patientID) { shedulePatient = patient; break; } } } //создание записи, добавление записи в расписание, добавление пациента, если он не null Appointment sheduleAppointment = new Appointment(sheduleDoctor, sheduleCabinet, day, hour, minute); newShedule.AddAppointment(sheduleAppointment); if (shedulePatient != null) { newShedule.AddPatientInAppointment(shedulePatient, sheduleAppointment); } read = file.ReadLine(); } if (newShedule.GetAppointments != null) { appointments = newShedule.GetAppointments; } } //2.если расписание пустое - заполнить его записями врачей без пациентов и кабинетов if (newShedule.Count() == 0) { if (doctors.Count != 0) { int docId = 0; int day = 0; int hour = 0; int minute = 0; for (int i = 0; i < doctors.Count; ++i) { docId = doctors[i].GiveTakeID; workDays = doctors[i].GiveWorkDays; workHours = doctors[i].GiveWorkHours; for (int j = 0; j < 7; ++j) { if (workDays[j] != 0) { day = j; if (workHours == 1) { hour = 8; minute = 0; while (hour < 13) { Appointment appointment = new Appointment(doctors[i], null, day, hour, minute); if (minute != 30) { minute = 30; } else { minute = 0; } if (minute == 0) { ++hour; } newShedule.AddAppointment(appointment); } } if (workHours == 2) { hour = 14; minute = 0; while (hour < 18) { Appointment appointment = new Appointment(doctors[i], null, day, hour, minute); if (minute != 30) { minute = 30; } else { minute = 0; } if (minute == 0) { ++hour; } newShedule.AddAppointment(appointment); } } } } } } if (newShedule.GetAppointments != null) { appointments = newShedule.GetAppointments; } } int decide = 0; while (decide != 10) { Console.WriteLine("\nВведите, что вы хотите сделать: 1 - добавить доктора в базу, 2 - добавить кабинет в базу, \n" + "3 - добавить пациента в запись, 4 - удалить пациента из записи, \n" + "5 - удалить пациента из базы, 6 - удалить доктора из базы, \n" + "7 - вывести расписание определенного врача, 8 - заполнить кабинеты, 9 - сохранить, 10 - выйти"); decide = Input(); if (decide == (int)AdminDecide.AddNewDoctor) { InputNewPerson(out name, out surname, out patronymic, out pasport, out phoneNumber, out birthday); Console.WriteLine("Введите специальность врача"); speciality = Console.ReadLine(); Console.WriteLine("Введите рабочие дни врача врача начиная с понедельника, рабочие отмечая 1, а выходные - нулями"); for (int i = 0; i < 7; ++i) { workDays[i] = int.Parse(Console.ReadLine()); } Console.WriteLine("Введите смену, в которую работает врач (1 или 2)"); workHours = int.Parse(Console.ReadLine()); if (doctors.Count != 0) { id = doctors[doctors.Count - 1].GiveTakeID + 1; } else { id = 1; } Doctor newDoctor = new Doctor(id, name, surname, patronymic, pasport, phoneNumber, birthday, speciality, workDays, workHours); bool have = false; foreach (Doctor doctor in doctors) { if (doctor.GiveTakePasport == newDoctor.GiveTakePasport) { have = true; Console.WriteLine("Такой врач уже существует!\n"); break; } } if (!have) { doctors.Add(newDoctor); } int docId = 0; int day = 0; int hour = 0; int minute = 0; for (int j = 0; j < 7; ++j) { if (workDays[j] != 0) { day = j; if (workHours == 1) { hour = 8; minute = 0; while (hour < 13) { Appointment appointment = new Appointment(newDoctor, null, day, hour, minute); if (minute != 30) { minute = 30; } else { minute = 0; } if (minute == 0) { ++hour; } if (appointment != null) { // appointments.Add(appointment); newShedule.AddAppointment(appointment); } } } } } appointments = newShedule.GetAppointments; } else if (decide == (int)AdminDecide.AddNewCabinet) { Console.WriteLine("Введите номер кабинета"); number = int.Parse(Console.ReadLine()); Console.WriteLine("Введите специальность кабинета"); speciality = Console.ReadLine(); if (cabinets.Count != 0) { id = cabinets[cabinets.Count - 1].GiveTakeID + 1; } else { id = 1; } Cabinet newCabinet = new Cabinet(id, number, speciality); bool have = false; foreach (Cabinet cabinet in cabinets) { if (cabinet.GiveTakeNumber == newCabinet.GiveTakeNumber) { have = true; Console.WriteLine("Такой кабинет уже существует!\n"); break; } } if (!have) { cabinets.Add(newCabinet); } } else if (decide == (int)AdminDecide.AddPatientInAppointment) { Patient newPatient = null; FindPatient(patients, out newPatient); Doctor doctorForApp = null; bool findDoc = FindDoctor(doctors, out doctorForApp); if (findDoc) { Console.WriteLine("Введите день записи (понедельник - 0)"); int day = int.Parse(Console.ReadLine()); bool successday = false; while (!successday && day != -1) { int[] docdays = doctorForApp.GiveWorkDays; if (docdays[day] != 0) { successday = true; } if (!successday) { Console.WriteLine("Доктор не работает в этот день"); Console.WriteLine("Введите другой день или нажмите -1, чтобы выйти"); day = int.Parse(Console.ReadLine()); } } Console.WriteLine("Введите час записи"); int hour = int.Parse(Console.ReadLine()); bool successhour = false; while (!successhour && hour != 0) { int dochours = doctorForApp.GiveWorkHours; if (dochours == 1 && hour >= 8 && hour <= 13) { successhour = true; } if (dochours == 2 && hour >= 14 && hour <= 18) { successhour = true; } if (!successhour) { Console.WriteLine("Доктор не работает в этот час"); Console.WriteLine("Введите другой час или нажмите 0, чтобы выйти"); hour = int.Parse(Console.ReadLine()); } } Console.WriteLine("Введите минуты записи"); int minutes = int.Parse(Console.ReadLine()); bool successminutes = false; while (!successminutes && minutes != 1) { if (minutes == 0 || minutes == 30) { foreach (Appointment appointment in appointments) { if (appointment.GiveTakeDoctor.GiveTakeID == doctorForApp.GiveTakeID && appointment.GiveTakeDay == day && appointment.GiveTakeHour == hour && appointment.GiveTakeMinute == minutes && appointment.GiveTakePatient == null) { successminutes = true; } } foreach (Appointment appointment in appointments) { if (appointment.GiveTakePatient != null && appointment.GiveTakeDay == day && appointment.GiveTakeHour == hour && appointment.GiveTakeMinute == minutes) { if (appointment.GiveTakePatient.GiveTakeID == newPatient.GiveTakeID) { successminutes = false; Console.WriteLine($"Пациент записан на это время к другому врачу! Его id для проверки - {newPatient.GiveTakeID}"); } } } } if (!successminutes) { Console.WriteLine("Доктор занят в это время или оно введено не корректно или пациент уже записан"); Console.WriteLine("Введите другое время или нажмите 1, чтобы выйти"); minutes = int.Parse(Console.ReadLine()); } } if (successday && successhour && successminutes) { foreach (Appointment appointment in appointments) { if (appointment.GiveTakeDoctor.GiveTakeID == doctorForApp.GiveTakeID && appointment.GiveTakeDay == day && appointment.GiveTakeHour == hour && appointment.GiveTakeMinute == minutes) { if (appointment.GiveTakeCabinet != null) { newShedule.AddPatientInAppointment(newPatient, appointment); appointments = newShedule.GetAppointments; Console.WriteLine("Запись проведена успешно!"); break; } else { Console.WriteLine("Произошла ошибка, у варча не назначен кабинет! Сохраните изменения и повторите запись пациента"); } } } } } } else if (decide == (int)AdminDecide.DeletePatientInAppointment) { Patient deletePatient = null; FindPatient(patients, out deletePatient); Console.WriteLine("Введите день записи"); int day = int.Parse(Console.ReadLine()); bool successday = false; while (!successday && day != -1) { foreach (Appointment appointment in appointments) { if (appointment.GiveTakePatient != null && appointment.GiveTakePatient.GiveTakeID == deletePatient.GiveTakeID && appointment.GiveTakeDay == day) { successday = true; } } if (!successday) { Console.WriteLine("Пациент не записан в этот день"); Console.WriteLine("Введите другой день или нажмите -1, чтобы выйти"); day = int.Parse(Console.ReadLine()); } } Console.WriteLine("Введите час записи"); int hour = int.Parse(Console.ReadLine()); bool successhour = false; while (!successhour && hour != 0) { foreach (Appointment appointment in appointments) { if (appointment.GiveTakePatient != null && appointment.GiveTakePatient.GiveTakeID == deletePatient.GiveTakeID && appointment.GiveTakeDay == day && appointment.GiveTakeHour == hour) { successhour = true; } } if (!successhour) { Console.WriteLine("Пациент не записан в этот час"); Console.WriteLine("Введите другой час или нажмите 0, чтобы выйти"); hour = int.Parse(Console.ReadLine()); } } Console.WriteLine("Введите минуты записи"); int minutes = int.Parse(Console.ReadLine()); Appointment appointment1 = null; bool successminutes = false; while (!successminutes && minutes != 1) { if (minutes == 0 || minutes == 30) { foreach (Appointment appointment in appointments) { if (appointment.GiveTakePatient != null && appointment.GiveTakePatient.GiveTakeID == deletePatient.GiveTakeID && appointment.GiveTakeDay == day && appointment.GiveTakeHour == hour && appointment.GiveTakeMinute == minutes) { appointment1 = appointment; successminutes = true; } } } if (!successminutes) { Console.WriteLine("Пациент не записан в это время"); Console.WriteLine("Введите другое время или нажмите 1, чтобы выйти"); minutes = int.Parse(Console.ReadLine()); } } if (successday && successhour && successminutes) { newShedule.DeletePatientInAppointment(deletePatient, appointment1); appointments = newShedule.GetAppointments; Console.WriteLine("Удаление прошло успешно!"); } else { Console.WriteLine("Пациент не удален из записи! Повторите попытку!"); } } else if (decide == (int)AdminDecide.DeletePatient) { Patient deletePatient = null; FindPatient(patients, out deletePatient); //Console.WriteLine("Введите id пациента"); //int findId = int.Parse(Console.ReadLine()); //for (int i = 0; i < patients.Count; ++i) //{ // if (patients[i].GiveTakeID == findId) // { // patients.RemoveAt(i); // deletePatient = patients[i]; // break; // } //} if (deletePatient != null) { newShedule.DeletePatAppointment(deletePatient); appointments = newShedule.GetAppointments; Console.WriteLine("Пациент удален"); } else { Console.WriteLine("Пациент не удален"); } } else if (decide == (int)AdminDecide.DeleteDoctor)//удаление доктора и всех записей с ним { Doctor deleteDoctor = null; bool find = FindDoctor(doctors, out deleteDoctor); for (int i = 0; i < doctors.Count; ++i) { if (doctors[i].GiveTakeID == deleteDoctor.GiveTakeID) { doctors.RemoveAt(i); deleteDoctor = doctors[i]; break; } } if (find) { newShedule.DeleteDocAppointment(deleteDoctor); appointments = newShedule.GetAppointments; Console.WriteLine("Доктор удален"); } else { Console.WriteLine("Доктор не найден"); } } else if (decide == (int)AdminDecide.ShowShedule) { Doctor appForDoctor = null; bool find = FindDoctor(doctors, out appForDoctor); if (find) { Console.WriteLine("Doctor ID, Cabinet Number, Patient ID, day, hour, minute"); foreach (Appointment appointment in appointments) { if (appointment.GiveTakeDoctor.GiveTakeID == appForDoctor.GiveTakeID) { Console.Write($"{appointment.GiveTakeDoctor.GiveTakeID}, "); if (appointment.GiveTakeCabinet != null) { Console.Write($"{appointment.GiveTakeCabinet.GiveTakeNumber}, "); } else { Console.Write("NO, "); } if (appointment.GiveTakePatient != null) { Console.Write($"{appointment.GiveTakePatient.GiveTakeID}, "); } else { Console.Write("NO, "); } Console.Write($"{appointment.GiveTakeDay}, "); Console.Write($"{appointment.GiveTakeHour}, "); Console.Write($"{appointment.GiveTakeMinute} "); Console.WriteLine(); } } } else { Console.WriteLine("Врач не найден"); } } else if (decide == (int)AdminDecide.AddCabinetsInShedule) { Doctor doctorForCabinet = null; bool successdoc = FindDoctor(doctors, out doctorForCabinet); Console.WriteLine("Введите номер дня его работы (понедельник - 0)"); int day = int.Parse(Console.ReadLine()); if (successdoc) { bool successcab = false; Console.WriteLine("Введите номер кабинета"); int num = int.Parse(Console.ReadLine()); Cabinet cabinetForDoctor = null; foreach (Cabinet cabinet in cabinets) { if (cabinet.GiveTakeNumber == num) { cabinetForDoctor = cabinet; successcab = true; } } bool Cab = false;//если кабинет не используется в этот день, то добавить if (successcab) { foreach (Appointment appointment in appointments) { if (appointment.GiveTakeDay == day && appointment.GiveTakeCabinet != null) { if (appointment.GiveTakeCabinet.GiveTakeNumber == num) { Cab = true; } } } } else { Console.WriteLine("Неверный номер кабинета"); } bool success = false; if (!Cab && successcab && successdoc) { foreach (Appointment appointment in appointments) { if (appointment.GiveTakeDoctor.GiveTakeID == doctorForCabinet.GiveTakeID && appointment.GiveTakeDay == day && appointment.GiveTakeCabinet == null) { appointment.GiveTakeCabinet = cabinetForDoctor; success = true; } } Console.WriteLine("Кабинет добавлен"); } if (!success) { Console.WriteLine("Кабинет не добавлен"); } newShedule = new Shedule(appointments); } } else if (decide == (int)AdminDecide.Save) { SaveAll(doctors, patients, cabinets, newShedule); } } }