Advertisement
Gistrec

mpiaa_lab1_v3

Nov 23rd, 2017
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.92 KB | None | 0 0
  1. import io
  2. from os import system as System
  3. from os import path as Path
  4. from math import ceil as Ceil
  5.  
  6.  
  7. # Структура города
  8. class Town:
  9.  
  10.     name = "" # Название города
  11.     type = "" # Тип города [город, село, ...]
  12.     latitude = "" # Широта
  13.     longitude = "" # Долгота
  14.  
  15.     # Конструктор класса.
  16.     # Входные данные: название, тип, широта и долгота
  17.     #
  18.     # self - первый параметр во всех функциях в классе.
  19.     # аля указатель на текущий класс
  20.     def __init__ (self, name, type, latitude, longitude):
  21.         # Приравниваем входные данные к переменным в классе
  22.         self.name = name
  23.         self.type = type
  24.         self.latitude = latitude
  25.         self.longitude = longitude
  26.  
  27.  
  28.     # Переопределяем функцию, которая возвращает строку - данные о городе
  29.     def __str__ (self):
  30.         return self.name + " " + self.type + " " + self.latitude + " " + self.longitude;
  31.  
  32.  
  33.  
  34. # класс-контейнер - тут будут храниться наши города
  35. class Container:
  36.  
  37.     # массив
  38.     listTowns = []
  39.     # кол-во городов в массиве
  40.     count = 0
  41.  
  42.     # кол-во городов на странице
  43.     # Нужно для постраничного вывода списка
  44.     townInPage = 5
  45.  
  46.     def addTown(self, newTown):
  47.         # Сначала проверяем, есть ли в массве город с таким же названием
  48.         for town in self.listTowns:
  49.             if town.name == newTown.name:
  50.                 print ("Город с названием " + town.name + " уже есть в списке")
  51.                 return
  52.         # добавляем город в массив
  53.         self.listTowns.append(newTown)
  54.         # увеличиваем кол-во городов в списке на 1
  55.         self.count += 1
  56.  
  57.     # Функция для загрузки городов из файла
  58.     def loadFromFile(self, path):
  59.         if Path.exists(path) == False:
  60.             print ("Файл не найден")
  61.             return
  62.         count = 0;
  63.         # Читаем файл
  64.         with io.open(path, encoding='utf-8') as file:
  65.             # Для каждой строки в файле
  66.             for line in file:
  67.                 # разделяем строку | таким вот знаком
  68.                 town = line.replace("\n", "").split("|")
  69.                 # Создаем класс нового города
  70.                 newTown = Town(town[0], town[1], town[2], town[3])
  71.                 self.addTown(newTown)
  72.                 count += 1
  73.         print ("Добавлено " + str(count) + " городов")
  74.  
  75.     # Вывод городов
  76.     # Короче, тут долго объяснять.
  77.     def printPage(self, numPage):
  78.         maxPage = Ceil(self.count / self.townInPage)
  79.         print ("Выведена страница " + str(numPage) + " из " + str(maxPage - 1))
  80.         for row in range(int(self.townInPage) * int(numPage), int(self.townInPage) * (int(numPage) + 1)):
  81.             if row < self.count:
  82.                 print (str(row) + ": " + str(self.listTowns[row]))
  83.  
  84.     # Установить кол-во строк на одной странице
  85.     def setTownsInPage(self, count):
  86.         self.townInPage = int(count)
  87.  
  88.  
  89. #
  90. # Дальше пошла сама программа
  91. # Аля main()
  92. #
  93.  
  94. # Отчищаем экран
  95. System('cls')
  96. towns = Container();
  97.  
  98.  
  99. # Бесконечный цикл
  100. while True:
  101.     print ("1 - Загрузить данные из файла")
  102.     print ("2 - Ввести данные вручную")
  103.     print ("3 - Постраничный вывод записей")
  104.     print ("4 - Установить кол-во записей на странице")
  105.     answer = input()
  106.     System('cls')
  107.     if answer == "1":
  108.         print ("Введите название файла")
  109.         towns.loadFromFile(input())
  110.     if answer == "2":
  111.         print ("Введите название, тип, широту и долготу города")
  112.         print ("Разделитель |")
  113.         answer = input().split("|")
  114.         # Если кол-во аргументов не равно 4ем
  115.         if len(answer) != 4:
  116.             print ("Введены некорректные данные")
  117.         else:
  118.             # Создаем экземляр класса нового города
  119.             newTown = Town(answer[0], answer[1], answer[2], answer[3])
  120.             towns.addTown(newTown)
  121.             print ("Данные о городе добавлены")
  122.     elif answer == "3":
  123.         # Если нет данных ни об одном городе
  124.         if towns.count == 0:
  125.             print ("Нет данных ни об одном городе")
  126.         else:
  127.             # Вооот
  128.             maxPage = Ceil(towns.count / towns.townInPage)
  129.             print ("Введите номер страницы от 0 до " + str(maxPage - 1))
  130.             towns.printPage(input())
  131.     elif answer == "4":
  132.         print ("Введите кол-во записей, которые будут отображаться на странице")
  133.         towns.setTownsInPage(input())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement