Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.57 KB | None | 0 0
  1. import random
  2. import pandas as pd
  3. import csv
  4. import os
  5.  
  6. class Patient():
  7.  
  8.     def __init__(self, first_name, second_name, additional_name, adress):
  9.         self.name = first_name
  10.         self.second_name = second_name
  11.         self.additional_name = additional_name
  12.         self.adress = adress
  13.         self.medical_card_number = random.randint(1000, 9999)
  14.         self.insurance_card_number = random.randint(1000, 9999)
  15.        
  16.     def type_from_keyboard():
  17.         self.name = input("Введите имя: ")
  18.         self.second_name = input("Введите фамилию: ")
  19.         additional_name = input("Введите отчество: ")
  20.         adress = input("Введите адрес: ")
  21.         print("")
  22.         return Patient(name, second_name, additional_name, adress)
  23.  
  24.     def print_name(self):
  25.         return "{} {} {}".format(self.second_name, self.name, self.additional_name)
  26.  
  27.     def print_info(self):
  28.         print('''Full name: {}
  29. Medical card number: {}
  30. Insurance card number: {}
  31. -------------------------------------------
  32.                  '''
  33.                      .format(self.print_name(), self.medical_card_number, self.insurance_card_number))
  34.    
  35.     def read_into_file(self, path):
  36.         regim = "a"
  37.         if not os.path.exists(path):
  38.             regim = "w"    
  39.         with open(path, regim, newline="") as file:
  40.             columns = ["Name", "Second_name", "Additional_name", "Adress", "Card_number", "Insurance"]
  41.             writer = csv.DictWriter(file, fieldnames=columns)
  42.            
  43.             writer.writerow({
  44.                     "Name": self.name,
  45.                     "Second_name":self.second_name,
  46.                     "Additional_name":self.additional_name,
  47.                     "Adress":self.adress,
  48.                     "Card_number":self.medical_card_number,
  49.                     "Insurance":self.insurance_card_number})
  50.  
  51.     def delate_from_file(self, path, card_number):  
  52.         with open(path, "w", newline="") as file:
  53.             columns = ["Name", "Second_name", "Additional_name", "Adress", "Card_number", "Insurance"]
  54.             writer = csv.DictWriter(file, fieldnames=columns)
  55.  
  56.             for patient in self.data:
  57.                 if patient.medical_card_number == card_number:
  58.                     continue
  59.                 writer.writerow({
  60.                     "Name": patient.name,
  61.                     "Second_name":patient.second_name,
  62.                     "Additional_name":patient.additional_name,
  63.                     "Adress":patient.adress,
  64.                     "Card_number":patient.medical_card_number,
  65.                     "Insurance":patient.insurance_card_number})
  66.  
  67. class Hospital(Patient):
  68.     def __init__(self):
  69.         self.data = []
  70.         self.card_number = set([i for i in range(1000, 9999)])
  71.         self.insurance_number = set([i for i in range(1000, 9999)])
  72.         self.path = '‪C:\\Users\\igord\\Desktop\\Python_Practic\\lesson_3\\hospital_data.csv'[1:]
  73.    
  74.     def add_new_patient(self, first_name, second_name, additional_name, adress):
  75.         n_patient = Patient(first_name, second_name, additional_name, adress)
  76.         n_patient.read_into_file(self.path)
  77.         self.data.append(n_patient)
  78.  
  79.         if n_patient.medical_card_number not in self.card_number:
  80.             n_patient.medical_card_number = min(self.card_number)
  81.             self.card_number.remove(min(self.card_number))
  82.         else:
  83.             self.card_number.remove(n_patient.medical_card_number)
  84.        
  85.         if n_patient.insurance_card_number not in self.insurance_number:
  86.             n_patient.insurance_card_number = min(self.insurance_number)
  87.             self.insurance_number.remove(min(self.insurance_number))
  88.         else:    
  89.             self.insurance_number.remove(n_patient.insurance_card_number)
  90.    
  91.     def add_patient(self, patient):
  92.         patient.read_into_file(self.path)
  93.         self.data.append(patient)
  94.  
  95.         if patient.medical_card_number not in self.card_number:
  96.             patient.medical_card_number = min(self.card_number)
  97.             self.card_number.remove(min(self.card_number))
  98.         else:
  99.             self.card_number.remove(patient.medical_card_number)
  100.        
  101.         if patient.insurance_card_number not in self.insurance_number:
  102.             patient.insurance_card_number = min(self.insurance_number)
  103.             self.insurance_number.remove(min(self.insurance_number))
  104.         else:    
  105.             self.insurance_number.remove(patient.insurance_card_number)
  106.    
  107.     def remove_patient(self, medical_card_number):
  108.         for patient in self.data:
  109.             if patient.medical_card_number == medical_card_number:
  110.                 self.data.remove(patient)
  111.                 self.delate_from_file(self.path, medical_card_number)
  112.                 self.card_number.add(medical_card_number)
  113.                 self.insurance_number.add(patient.insurance_card_number)
  114.    
  115.     def get_name_by_number(self, medical_card_number):
  116.         name = ""
  117.         for patient in self.data:
  118.             if patient.medical_card_number == medical_card_number:
  119.                 name = patient.second_name + " " + patient.name + " " + patient.additional_name
  120.         return name
  121.    
  122.     def get_patient_by_number(self, medical_card_number):
  123.         for patient in self.data:
  124.             if patient.insurance_card_number == insurance_card_number:
  125.                 return patient
  126.         return None
  127.  
  128.     def change_fields(self, card_number, field, value):
  129.         required_patient = self.get_patient_by_number(card_number)
  130.         if required_patient == None:
  131.             raise ValueError
  132.         self.remove_patient(required_patient.card_number)
  133.         if field == 1:
  134.             required_patient.name = value
  135.         if field == 2:
  136.             required_patient.second_name = value
  137.         if field == 3:
  138.             required_patient.additional_name = value
  139.         if field == 4:
  140.             required_patient.adress = value
  141.  
  142.         self.add_patient(self, required_patient)
  143.        
  144.  
  145.     def get_indexes_by_name(self, name, second_name, additional_name):
  146.         suit_patients = []
  147.         for patient in self.data:
  148.             if patient.name == name and patient.second_name == second_name and patient.additional_name == additional_name:
  149.                 suit_patients.append((patient.medical_card_number, patient.insurance_card_number))
  150.        
  151.         return suit_patients
  152.  
  153.     def show_data(self):
  154.         for patient in self.data:
  155.             print('''Full name: {}
  156. Medical card number: {}
  157. Insurance card number: {}
  158. -------------------------------------------
  159.                  '''
  160.                      .format(self.get_name_by_number(patient.medical_card_number), patient.medical_card_number, patient.insurance_card_number))
  161.    
  162.     def read_from_file(self, med_card):
  163.         df = pd.read_csv(self.path, sep=',')
  164.         for i, row in df.iterrows():
  165.             if row['Card_number'] == med_card:
  166.                 return
  167.     #For update
  168.     def write_all_data_in_file(self):
  169.         with open(self.path, "w", newline="") as file:
  170.             columns = ["Name", "Second_name", "Additional_name", "Adress", "Card_number", "Insurance"]
  171.             writer = csv.DictWriter(file, fieldnames=columns)
  172.             writer.writeheader()
  173.             for patient in data:
  174.                 writer.writerow({
  175.                     "Name": patient.name,
  176.                     "Second_name":patient.second_name,
  177.                     "Additional_name":patient.additional_name,
  178.                     "Adress":patient.adress,
  179.                     "Card_number":patient.medical_card_number,
  180.                     "Insurance":patient.insurance_card_number})
  181.  
  182.  
  183. #не должно ли это быть в Госпитал? Если пациент один
  184.    
  185.  
  186. #typed_patient.print_info()
  187.  
  188. #main program
  189. #разобраться с порядком наследования?+
  190. #режим открытия?+
  191.     #изменение отдельных полей пациента?
  192.     #не должно ли read_all это быть в Госпитал? Если пациент один+
  193.              # прочесть пациента с заданным номером?
  194.  
  195.  
  196. hospital = Hospital()
  197. hospital.add_new_patient("Igor", "Doronin", "Dmitrievich", "Lenina 10")
  198.  
  199. patient = Patient("Vasya", "Pupcin", "Vasilyevich", "Gagarina 11")
  200.  
  201. hospital.add_patient(patient)
  202.  
  203. indexes = hospital.get_indexes_by_name("Vasya", "Pupcin", "Vasilyevich")
  204. #name = hospital.get_name_by_numbers(indexes[0][0], indexes[0][1])
  205. hospital.show_data()
  206. hospital.remove_patient(patient.medical_card_number)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement