Advertisement
Guest User

Untitled

a guest
Nov 4th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.52 KB | None | 0 0
  1. # Класс заявки, заказа, структуры данных и т.д.
  2. import xml.etree.ElementTree as ET
  3. import datetime
  4. import random
  5. # Реализация структуры данных приоритетная очередь----------------------------------------------------------------------
  6.  
  7. class PriorityQueue:# класс проиритетной очереди
  8. def __init__(self,heap=[None],size=0):
  9. self.Heap=heap
  10. self.Size=size
  11.  
  12. def out(self): # вывести бинарную кучу в консоли
  13. for x in range(1,len(self.Heap)):
  14. print(self.Heap[x].string())
  15.  
  16. def insert(self,x): # функция вставки в двоичную кучу
  17. i = len(self.Heap)
  18. self.Heap.append(x)
  19. while i > 1:
  20. if self.Heap[i] > self.Heap[i//2]:
  21. self.Heap[i//2], self.Heap[i] = self.Heap[i], self.Heap[i//2]
  22. i=i//2
  23. self.Size+=1
  24.  
  25. def max1(self, i): # определение направления спуска по дереву
  26. if i*2+1 >= len(self.Heap):
  27. return i*2
  28. if self.Heap[i*2] > self.Heap[i*2+1]:
  29. return i*2
  30. else:
  31. return i*2+1
  32.  
  33. def delete_max(self): # удаление максимального по цене элемента
  34. self.Heap[1], self.Heap[-1] = self.Heap[-1], self.Heap[1]
  35. x=self.Heap.pop()
  36. i=1
  37. while 2*i < len(self.Heap):
  38. m=self.max1(i)
  39. if self.Heap[i] < self.Heap[m]:
  40. self.Heap[i], self.Heap[m] = self.Heap[m], self.Heap[i]
  41. i=m
  42. self.Size-=1
  43. return x # вернуть максимальный элемент
  44.  
  45. def sort(self): # сортрировка заявок по приоритету
  46. new_p=PriorityQueue(self.Heap,self.Size)
  47. k=[None]
  48. for i in range(1, len(new_p.Heap)):
  49. k.insert(0, new_p.delete_max())
  50. print(k[0].string())
  51. return k
  52.  
  53. def build(self): # построение кучи по xml файлу
  54. tree = ET.parse("Data")
  55. root = tree.getroot()
  56. for x in root:
  57. o=Order(int(x[2][0].text),x[2][1].text,x[2][2].text,datetime.datetime.strptime(x[2][3].text, '%Y-%m-%d %H:%M:%S.%f'),
  58. datetime.datetime.strptime(x[2][4].text, '%Y-%m-%d %H:%M:%S.%f'),x[2][5].text,int(x[2][6].text))
  59. r=Request(x[0].text,o,int(x[1].text))
  60. self.insert(r)
  61.  
  62. def write(self): # запись в xml файл двоичной кучи
  63. def indent(elem, level=0):# функция для красивого вывода xml файла
  64. i = "\n" + level * " "
  65. j = "\n" + (level - 1) * " "
  66. if len(elem):
  67. if not elem.text or not elem.text.strip():
  68. elem.text = i + " "
  69. if not elem.tail or not elem.tail.strip():
  70. elem.tail = i
  71. for subelem in elem:
  72. indent(subelem, level + 1)
  73. if not elem.tail or not elem.tail.strip():
  74. elem.tail = j
  75. else:
  76. if level and (not elem.tail or not elem.tail.strip()):
  77. elem.tail = j
  78. return elem
  79.  
  80. root = ET.Element("Data")
  81. for x in range(1,len(self.Heap)):
  82. r=ET.SubElement(root, "Request")
  83. ET.SubElement(r,"Status").text=self.Heap[x].Status
  84. ET.SubElement(r,"Priority").text=str(self.Heap[x].Priority)
  85. o=ET.SubElement(r,"Order")
  86. ET.SubElement(o,"Nomer").text=str(self.Heap[x].Order.Nomer)
  87. ET.SubElement(o,"Name").text=self.Heap[x].Order.Name
  88. ET.SubElement(o, "Surname").text = self.Heap[x].Order.Surname
  89. ET.SubElement(o, "Dat").text = str(self.Heap[x].Order.Dat)
  90. ET.SubElement(o, "Srok").text = str(self.Heap[x].Order.Srok)
  91. ET.SubElement(o, "Tech").text = self.Heap[x].Order.Tech
  92. ET.SubElement(o, "Value").text = str(self.Heap[x].Order.Value)
  93. tree = ET.ElementTree(root)
  94. indent(root)
  95. tree.write("Data")
  96. # ----------------------------------------------------------------------------------------------------------------------
  97. class Order: # класс Заказ
  98. def __init__(self, nomer=None, name=None, surname=None, dat=None, srok=None, tech=None, value=None): # конструктор
  99. self.Nomer = nomer
  100. self.Surname = surname
  101. self.Dat = dat
  102. self.Srok = srok
  103. self.Tech = tech
  104. self.Value = value
  105. self.Name = name
  106.  
  107. def __eq__(self, other):#перегрузка оператора ==
  108. return self.Dat == other.Dat
  109.  
  110. def __gt__(self, other):#перегрузка оператора > для сортировки по дате
  111. return self.Dat > other.Dat
  112.  
  113. def __lt__(self, other):#перегрузка оператора < для сортировки по дате
  114. return self.Dat < other.Dat
  115.  
  116. def string(self):#формирование текста о заказе
  117. s="Имя клиена: "+self.Name+"\n"+"Фамилия клиента: "+self.Surname+"\n"+"Дата заказа: "+str(self.Dat)+"\n"+\
  118. "Срок выполнения заказа: "+str(self.Srok)+"\n"+"Тип оргтехники: "+self.Tech+"\n"+"Цена ремонта: "+\
  119. str(self.Value)+"\n"
  120. return s
  121.  
  122. class User: # класс пользователся
  123. def __init__(self,login=None,password=None):
  124. self.Login=login
  125. self.Password=password
  126.  
  127. class Request: # класс заявки
  128. def __init__(self,status=None,order=None,priority=None):
  129. self.Status=status # текущий статус заявки
  130. self.Order=order # заказ клиента
  131. self.Priority=priority # приоритет заявки (0,1,2,3)
  132. # низкий,средний, высокий, критический
  133.  
  134. def __gt__(self,other): # перегрузка оператора больше
  135. return self.Priority > other.Priority
  136.  
  137. def __lt__(self,other): # перегрузка оператора меньше
  138. return self.Priority < other.Priority
  139.  
  140. def string(self): # получение информации о заявке
  141. s="Статус заявки: "+self.Status+'\n'+"Приоритет заявки: "+str(self.Priority)+'\n'+self.Order.string()
  142. return s
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement