Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import pandas as pd
- import csv
- import os
- class Patient():
- def __init__(self, first_name, second_name, additional_name, adress):
- self.name = first_name
- self.second_name = second_name
- self.additional_name = additional_name
- self.adress = adress
- self.medical_card_number = random.randint(1000, 9999)
- self.insurance_card_number = random.randint(1000, 9999)
- def type_from_keyboard():
- self.name = input("Введите имя: ")
- self.second_name = input("Введите фамилию: ")
- additional_name = input("Введите отчество: ")
- adress = input("Введите адрес: ")
- print("")
- return Patient(name, second_name, additional_name, adress)
- def print_name(self):
- return "{} {} {}".format(self.second_name, self.name, self.additional_name)
- def print_info(self):
- print('''Full name: {}
- Medical card number: {}
- Insurance card number: {}
- -------------------------------------------
- '''
- .format(self.print_name(), self.medical_card_number, self.insurance_card_number))
- def read_into_file(self, path):
- regim = "a"
- if not os.path.exists(path):
- regim = "w"
- with open(path, regim, newline="") as file:
- columns = ["Name", "Second_name", "Additional_name", "Adress", "Card_number", "Insurance"]
- writer = csv.DictWriter(file, fieldnames=columns)
- writer.writerow({
- "Name": self.name,
- "Second_name":self.second_name,
- "Additional_name":self.additional_name,
- "Adress":self.adress,
- "Card_number":self.medical_card_number,
- "Insurance":self.insurance_card_number})
- def delate_from_file(self, path, card_number):
- with open(path, "w", newline="") as file:
- columns = ["Name", "Second_name", "Additional_name", "Adress", "Card_number", "Insurance"]
- writer = csv.DictWriter(file, fieldnames=columns)
- for patient in self.data:
- if patient.medical_card_number == card_number:
- continue
- writer.writerow({
- "Name": patient.name,
- "Second_name":patient.second_name,
- "Additional_name":patient.additional_name,
- "Adress":patient.adress,
- "Card_number":patient.medical_card_number,
- "Insurance":patient.insurance_card_number})
- class Hospital(Patient):
- def __init__(self):
- self.data = []
- self.card_number = set([i for i in range(1000, 9999)])
- self.insurance_number = set([i for i in range(1000, 9999)])
- self.path = 'C:\\Users\\igord\\Desktop\\Python_Practic\\lesson_3\\hospital_data.csv'[1:]
- def add_new_patient(self, first_name, second_name, additional_name, adress):
- n_patient = Patient(first_name, second_name, additional_name, adress)
- n_patient.read_into_file(self.path)
- self.data.append(n_patient)
- if n_patient.medical_card_number not in self.card_number:
- n_patient.medical_card_number = min(self.card_number)
- self.card_number.remove(min(self.card_number))
- else:
- self.card_number.remove(n_patient.medical_card_number)
- if n_patient.insurance_card_number not in self.insurance_number:
- n_patient.insurance_card_number = min(self.insurance_number)
- self.insurance_number.remove(min(self.insurance_number))
- else:
- self.insurance_number.remove(n_patient.insurance_card_number)
- def add_patient(self, patient):
- patient.read_into_file(self.path)
- self.data.append(patient)
- if patient.medical_card_number not in self.card_number:
- patient.medical_card_number = min(self.card_number)
- self.card_number.remove(min(self.card_number))
- else:
- self.card_number.remove(patient.medical_card_number)
- if patient.insurance_card_number not in self.insurance_number:
- patient.insurance_card_number = min(self.insurance_number)
- self.insurance_number.remove(min(self.insurance_number))
- else:
- self.insurance_number.remove(patient.insurance_card_number)
- def remove_patient(self, medical_card_number):
- for patient in self.data:
- if patient.medical_card_number == medical_card_number:
- self.data.remove(patient)
- self.delate_from_file(self.path, medical_card_number)
- self.card_number.add(medical_card_number)
- self.insurance_number.add(patient.insurance_card_number)
- def get_name_by_number(self, medical_card_number):
- name = ""
- for patient in self.data:
- if patient.medical_card_number == medical_card_number:
- name = patient.second_name + " " + patient.name + " " + patient.additional_name
- return name
- def get_patient_by_number(self, medical_card_number):
- for patient in self.data:
- if patient.insurance_card_number == insurance_card_number:
- return patient
- return None
- def change_fields(self, card_number, field, value):
- required_patient = self.get_patient_by_number(card_number)
- if required_patient == None:
- raise ValueError
- self.remove_patient(required_patient.card_number)
- if field == 1:
- required_patient.name = value
- if field == 2:
- required_patient.second_name = value
- if field == 3:
- required_patient.additional_name = value
- if field == 4:
- required_patient.adress = value
- self.add_patient(self, required_patient)
- def get_indexes_by_name(self, name, second_name, additional_name):
- suit_patients = []
- for patient in self.data:
- if patient.name == name and patient.second_name == second_name and patient.additional_name == additional_name:
- suit_patients.append((patient.medical_card_number, patient.insurance_card_number))
- return suit_patients
- def show_data(self):
- for patient in self.data:
- print('''Full name: {}
- Medical card number: {}
- Insurance card number: {}
- -------------------------------------------
- '''
- .format(self.get_name_by_number(patient.medical_card_number), patient.medical_card_number, patient.insurance_card_number))
- def read_from_file(self, med_card):
- df = pd.read_csv(self.path, sep=',')
- for i, row in df.iterrows():
- if row['Card_number'] == med_card:
- return
- #For update
- def write_all_data_in_file(self):
- with open(self.path, "w", newline="") as file:
- columns = ["Name", "Second_name", "Additional_name", "Adress", "Card_number", "Insurance"]
- writer = csv.DictWriter(file, fieldnames=columns)
- writer.writeheader()
- for patient in data:
- writer.writerow({
- "Name": patient.name,
- "Second_name":patient.second_name,
- "Additional_name":patient.additional_name,
- "Adress":patient.adress,
- "Card_number":patient.medical_card_number,
- "Insurance":patient.insurance_card_number})
- #не должно ли это быть в Госпитал? Если пациент один
- #typed_patient.print_info()
- #main program
- #разобраться с порядком наследования?+
- #режим открытия?+
- #изменение отдельных полей пациента?
- #не должно ли read_all это быть в Госпитал? Если пациент один+
- # прочесть пациента с заданным номером?
- hospital = Hospital()
- hospital.add_new_patient("Igor", "Doronin", "Dmitrievich", "Lenina 10")
- patient = Patient("Vasya", "Pupcin", "Vasilyevich", "Gagarina 11")
- hospital.add_patient(patient)
- indexes = hospital.get_indexes_by_name("Vasya", "Pupcin", "Vasilyevich")
- #name = hospital.get_name_by_numbers(indexes[0][0], indexes[0][1])
- hospital.show_data()
- hospital.remove_patient(patient.medical_card_number)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement