Файл: Курсовой проект по мдк 01. 02 Прикладное программирование на тему Программа формирования списков Транспортное агентство.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.03.2024

Просмотров: 19

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.




Рисунок 2.1 – Функциональная схема программы формирования списков «Транспортное агентство»



Рисунок 2.2 – Блок – схема программы формирования списков «Транспортное агентство»
3 Описание интерфейса программы

Программа выполнена в виде консольного интерфейса. В момент запуска самой программы, программа проверяет наличие файла базы данных в папке с программой.

Если файл базы данных не был найден программой, то программа выводит предупреждение об его отсутствии и завершает работу программы.

Если файл базы данных был найден программой, то программа предоставляет пользователю меню выбора таблиц, ожидая от пользователя выбор необходимой ему таблицы (рисунок 3.1).

При вводе в меню выбора таблиц «1», программа выведет таблицу «Направление рейса» (рисунок 3.2). При вводе «2», программа выведет таблицу «Расстояние и цены» (рисунок 3.3). При вводе «3», она выведет таблицу «Общая» (рисунок 3.4).

После меню выбора таблиц следует меню выбора действий, где пользователь должен выбрать необходимое ему действие (рисунок 3.5).

При вводе «1» в меню выбора действий, произойдет добавление записи во все таблицы. После добавления записи пользователем, программа выведет обновленную таблицу с добавленной записью и предложит пользователю либо вернуться к меню выбора действий, либо завершить программу (рисунок 3.6).

При вводе «2» в меню выбора действий, произойдет вывод общей таблицы, а затем удаление записи из всех таблиц по введённому пользователем «номером рейса». После удаление записи пользователем, программа выведет обновленную общую таблицу без удаленной записи и предложит пользователю либо вернуться к меню выбора действий, либо завершить программу (рисунок 3.7).

При вводе «3» в меню выбора действий, произойдет обновление записи во всех таблицах по введённому пользователем «номером рейса». После обновления записи пользователем, программа выведет обновленную общую таблицу с обновленной записью и выведет пользователя обратно к выбору действий (рисунок 3.8).

При вводе «4» в меню выбора действий выведется список «Пункты с самой дорогой поездкой» (рисунок 3.9).


При вводе «5» в меню выбора действий, выведется список «Пункты с самой низкой стоимостью билетов» (рисунок 3.10).

При вводе «6» в меню выбора действий, выведется список «По заданному пользователю пункту назначения и программа выведет пользователя обратно к выбору действий (рисунок 3.11).

При вводе «7» в меню выбора действий, выведется список «По заданному диапазону расстояния до пункта назначения, отсортированный по цене поездки и программа выведет пользователя обратно к выбору действий (рисунок 3.12).

При вводе «8» в меню выбора действий, выведется список «По заданному пользователю количеству мест, отсортированный по номеру рейса, и программа выведет пользователя обратно к выбору действий (рисунок 3.13).

При вводе «9» в меню выбора действий, программа завершит свою работу.

При вводе «10» в меню выбора действий, программа переведет пользователя к выбору таблиц.



Рисунок 3.1 – Меню выбора таблиц



Рисунок 3.2 – Таблица «Направление рейса»



Рисунок 3.3 – Таблица «Расстояние и цены»



Рисунок 3.4 – Таблица «Общая»



Рисунок 3.5 – Меню выбора действий



Рисунок 3.6 – Таблица «Добавление записи»



Рисунок 3.7 – Таблица «Удаление записи»



Рисунок 3.8 – Таблица «Обновление записи»



Рисунок 3.9 – Список «Пункты с самой дорогой поездкой»



Рисунок 3.10 – Список «Пункты с самой низкой стоимостью билетов»




Рисунок 3.11 – Список «По заданному пользователю пункту назначения»



Рисунок 3.12 – Список «По заданному диапазону расстояния до пункта назначения, отсортированный по цене поездки»



Рисунок 3.13 – Список «По заданному пользователю количеству мест, отсортированный по номеру рейса»

4 Описание программных компонентов и их свойств

В программе формирования списков «Транспортное агентство», использованы модуль re, библиотеки SQLite3 и prettytable, а также конструкция «try - except» для обработки различных исключений.

Модуль re поднимает исключение re.error, если возникает ошибка при компиляции или использовании регулярного выражения.

SQLite – это C библиотека, реализующая легковесную дисковую базу данных (БД), не требующую отдельного серверного процесса и позволяющую получить доступ к БД с использованием языка запросов SQL. Некоторые приложения могут использовать SQLite для внутреннего хранения данных. Также возможно создать прототип приложения с использованием SQLite, а затем перенести код в более многофункциональную БД, такую как PostgreSQL или Oracle.

Prettytable — это библиотека Python, используемая для печати таблиц ASCII в привлекательной форме и для чтения данных из CSV, HTML или курсора базы данных и вывода данных в ASCII или HTML. Можно управлять многими аспектами таблицы, такими как ширина заполнения столбцов, выравнивание текста или границы таблицы.

В Python исключения обрабатываются с помощью блоков «try - except». Для этого операция, которая может вызвать исключение, помещается внутрь блока try. А код, который должен быть выполнен при возникновении ошибки, находится внутри except.

Модуль – это файл, в котором содержится дополнительный код.

Библиотека – это набор модулей для конкретных задач.

5 Тестовый пример

В качестве тестового примера, сформируем список «По заданному пользователю пункту назначения».

Сначала, запускаем программу и выбираем в меню выбора таблиц, например, таблицу «Общая» (рисунок 6.1).

Далее, в меню выбора действия выбираем список «По заданному пользователю пункту назначения» (рисунок 6.2).

Далее, вводим нужный пользователю пункт назначения (рисунок 6.3).




Рисунок 6.1 – Выбор таблицы «Общая»



Рисунок 6.2 – Выбор списка «По заданному пользователю пункту назначения»



Рисунок 6.3 – Ввод пункта назначения

6 Листинг программы

import sqlite3

from prettytable import from_db_cursor

import re
db = sqlite3.connect('.\\agenstvo.db')

cur = db.cursor()

db.commit
ifclose = False

while not ifclose:  

    while True:

            first_action = input("Выбор таблицы: \n 1.Направление рейса \n 2.Расстояние и цены \n 3.Общая \n ") #Выбор какую из таблиц вывести  

            match first_action:

                case "1": #Таблица Нарправление

                    cur.execute("""SELECT NomerReisa, VremiaOtpravlenia, PunktNaznachenia, TsenaPoezdki FROM napravlenie""")

                    table = from_db_cursor(cur)

                    print(table)

                    db.commit

                    break

               

                case "2": #Таблица Расстояние

                    cur.execute("""SELECT NomerReisaa, Rastoainie, TsenaBileta, KolichestvoMest FROM rastoainie""")

                    table = from_db_cursor(cur)

                    print(table)

                    db.commit

                    break

               

                case "3": #Общая таблица

                    cur.execute("""SELECT NomerReisa, VremiaOtpravlenia, PunktNaznachenia, TsenaPoezdki, Rastoainie, TsenaBileta, KolichestvoMest FROM napravlenie INNER JOIN rastoainie ON NomerReisa = NomerReisaa""")

                    table = from_db_cursor(cur)

                    print(table)

                    db.commit    

                    break

               

                case _:

                        print("Неккоректный ввод. Повторите ввод")                                              

   

    while not ifclose:

        second_action = input("Выберите действие: \n 1.Добавить запись \n 2.Удалить запись \n 3.Обновить запись \n 4.Пункты с самой дорогой поездкой \n 5.Пункты с самой низкой стоимостью билетов \n 6.По заданному пользователю пункту назначения \n 7.По заданному диапазону расстояния до пункта назначения, отсортированный по цене поездки \n 8.По заданному пользователю количеству мест, отсортированный по номеру рейса \n 9.Закрыть программу \n 10.Вернуться к выбору таблиц \n") #Выбор действий с таблицами

        match second_action:

            case "1": #Добавление записи

                time = 0

                money = 0

                rasstoanie = 0

                TsenaBileta = 0

                kolvo = 0

                while True: # Добавление времени отправления

                    try:

                        time = int(input("VremiaOtpravlenia = "))


                        break

                    except:

                        print("Неккоректный ввод. Повторите ввод")

               

                while True: #Добавление пункта назначения

                    try:

                        punkt = input(str("PunktNaznachenia = "))

                        isCointainsNumbers = bool(re.search(r"\d", punkt))

                        if isCointainsNumbers:

                            print("Неккоректный ввод. Повторите ввод")

                            continue

                        break

                    except:

                        print("Неккоректный ввод. Повторите ввод")
                while True:    # Добавление цены поездки

                    try:

                        money = int(input("TsenaPoezdki= "))

                        break

                    except:

                        print("Неккоректный ввод. Повторите ввод")
                while True:    # Добавление расстояния поездки

                    try:

                        rasstoanie = int(input("Rastoainie = "))

                        if rasstoanie < 201: True

                        break

                    except:

                        print("Ошибка ввода. Попробуйте снова.")                
                TsenaBileta = (rasstoanie/20)*10 # Добавление цены билета
                while True:    # Добавление количества мест

                    try:

                        kolvo = int(input("KolichestvoMest = "))

                        break

                    except:

                        print("Ошибка ввода. Попробуйте снова.")                

               

                cur.execute("""INSERT INTO napravlenie (VremiaOtpravlenia, PunktNaznachenia, TsenaPoezdki) VALUES ('{}', '{}', '{}')""".format(time, punkt, money))

                db.commit()

                cur.execute("""INSERT INTO rastoainie (Rastoainie, TsenaBileta, KolichestvoMest) VALUES ('{}', '{}', '{}')""".format(rasstoanie, TsenaBileta, kolvo))

                db.commit()

                cur.execute("""SELECT NomerReisa, VremiaOtpravlenia, PunktNaznachenia, TsenaPoezdki, Rastoainie, TsenaBileta, KolichestvoMest FROM napravlenie INNER JOIN rastoainie ON NomerReisa = NomerReisaa""")

                table = from_db_cursor(cur)

                print(table)

                while True:

                        action = input("1: Вернуться назад\n2: Завершить программу \n")

                        match action:

                                case "1":

                                    break

                                case "2":

                                    ifclose = True

                                    break

                                case _:

                                    print("Ошибка ввода. Попробуйте снова.")                                    
            case "2": # Удаление записи

                cur.execute("""SELECT NomerReisa, VremiaOtpravlenia, PunktNaznachenia, TsenaPoezdki, Rastoainie, TsenaBileta, KolichestvoMest FROM napravlenie INNER JOIN rastoainie ON NomerReisa = NomerReisaa""")

                table = from_db_cursor(cur)