Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Класс заявки, заказа, структуры данных и т.д.
- import xml.etree.ElementTree as ET
- import datetime
- import random
- # Реализация структуры данных приоритетная очередь----------------------------------------------------------------------
- class PriorityQueue:# класс проиритетной очереди
- def __init__(self,heap=[None],size=0):
- self.Heap=heap
- self.Size=size
- def out(self): # вывести бинарную кучу в консоли
- for x in range(1,len(self.Heap)):
- print(self.Heap[x].string())
- def insert(self,x): # функция вставки в двоичную кучу
- i = len(self.Heap)
- self.Heap.append(x)
- while i > 1:
- if self.Heap[i] > self.Heap[i//2]:
- self.Heap[i//2], self.Heap[i] = self.Heap[i], self.Heap[i//2]
- i=i//2
- self.Size+=1
- def max1(self, i): # определение направления спуска по дереву
- if i*2+1 >= len(self.Heap):
- return i*2
- if self.Heap[i*2] > self.Heap[i*2+1]:
- return i*2
- else:
- return i*2+1
- def delete_max(self): # удаление максимального по цене элемента
- self.Heap[1], self.Heap[-1] = self.Heap[-1], self.Heap[1]
- x=self.Heap.pop()
- i=1
- while 2*i < len(self.Heap):
- m=self.max1(i)
- if self.Heap[i] < self.Heap[m]:
- self.Heap[i], self.Heap[m] = self.Heap[m], self.Heap[i]
- i=m
- self.Size-=1
- return x # вернуть максимальный элемент
- def sort(self): # сортрировка заявок по приоритету
- new_p=PriorityQueue(self.Heap,self.Size)
- k=[None]
- for i in range(1, len(new_p.Heap)):
- k.insert(0, new_p.delete_max())
- print(k[0].string())
- return k
- def build(self): # построение кучи по xml файлу
- tree = ET.parse("Data")
- root = tree.getroot()
- for x in root:
- 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'),
- datetime.datetime.strptime(x[2][4].text, '%Y-%m-%d %H:%M:%S.%f'),x[2][5].text,int(x[2][6].text))
- r=Request(x[0].text,o,int(x[1].text))
- self.insert(r)
- def write(self): # запись в xml файл двоичной кучи
- def indent(elem, level=0):# функция для красивого вывода xml файла
- i = "\n" + level * " "
- j = "\n" + (level - 1) * " "
- if len(elem):
- if not elem.text or not elem.text.strip():
- elem.text = i + " "
- if not elem.tail or not elem.tail.strip():
- elem.tail = i
- for subelem in elem:
- indent(subelem, level + 1)
- if not elem.tail or not elem.tail.strip():
- elem.tail = j
- else:
- if level and (not elem.tail or not elem.tail.strip()):
- elem.tail = j
- return elem
- root = ET.Element("Data")
- for x in range(1,len(self.Heap)):
- r=ET.SubElement(root, "Request")
- ET.SubElement(r,"Status").text=self.Heap[x].Status
- ET.SubElement(r,"Priority").text=str(self.Heap[x].Priority)
- o=ET.SubElement(r,"Order")
- ET.SubElement(o,"Nomer").text=str(self.Heap[x].Order.Nomer)
- ET.SubElement(o,"Name").text=self.Heap[x].Order.Name
- ET.SubElement(o, "Surname").text = self.Heap[x].Order.Surname
- ET.SubElement(o, "Dat").text = str(self.Heap[x].Order.Dat)
- ET.SubElement(o, "Srok").text = str(self.Heap[x].Order.Srok)
- ET.SubElement(o, "Tech").text = self.Heap[x].Order.Tech
- ET.SubElement(o, "Value").text = str(self.Heap[x].Order.Value)
- tree = ET.ElementTree(root)
- indent(root)
- tree.write("Data")
- # ----------------------------------------------------------------------------------------------------------------------
- class Order: # класс Заказ
- def __init__(self, nomer=None, name=None, surname=None, dat=None, srok=None, tech=None, value=None): # конструктор
- self.Nomer = nomer
- self.Surname = surname
- self.Dat = dat
- self.Srok = srok
- self.Tech = tech
- self.Value = value
- self.Name = name
- def __eq__(self, other):#перегрузка оператора ==
- return self.Dat == other.Dat
- def __gt__(self, other):#перегрузка оператора > для сортировки по дате
- return self.Dat > other.Dat
- def __lt__(self, other):#перегрузка оператора < для сортировки по дате
- return self.Dat < other.Dat
- def string(self):#формирование текста о заказе
- s="Имя клиена: "+self.Name+"\n"+"Фамилия клиента: "+self.Surname+"\n"+"Дата заказа: "+str(self.Dat)+"\n"+\
- "Срок выполнения заказа: "+str(self.Srok)+"\n"+"Тип оргтехники: "+self.Tech+"\n"+"Цена ремонта: "+\
- str(self.Value)+"\n"
- return s
- class User: # класс пользователся
- def __init__(self,login=None,password=None):
- self.Login=login
- self.Password=password
- class Request: # класс заявки
- def __init__(self,status=None,order=None,priority=None):
- self.Status=status # текущий статус заявки
- self.Order=order # заказ клиента
- self.Priority=priority # приоритет заявки (0,1,2,3)
- # низкий,средний, высокий, критический
- def __gt__(self,other): # перегрузка оператора больше
- return self.Priority > other.Priority
- def __lt__(self,other): # перегрузка оператора меньше
- return self.Priority < other.Priority
- def string(self): # получение информации о заявке
- s="Статус заявки: "+self.Status+'\n'+"Приоритет заявки: "+str(self.Priority)+'\n'+self.Order.string()
- return s
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement