Добавил:
north memphis Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УД_КР_ВАРИАНТ_10.docx
Скачиваний:
6
Добавлен:
27.12.2024
Размер:
1.25 Mб
Скачать

Приложение в. Исходный код программы

import mysql.connector from prettytable import PrettyTable con=mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur=con.cursor() cur.execute("CREATE DATABASE IF NOT EXISTS kurs1") cur.execute("USE kurs1") #Создание таблиц cur.execute(""" CREATE TABLE IF NOT EXISTS driver( id INT AUTO_INCREMENT PRIMARY KEY, full_name VARCHAR(255), grade INT , experience INT, salary INT ) """) cur.execute(""" CREATE TABLE IF NOT EXISTS bus_route( id INT AUTO_INCREMENT PRIMARY KEY, route_number INT, start_time VARCHAR(10), end_time VARCHAR(10), interval_mins INT, distance INT ) """) cur.execute(""" CREATE TABLE IF NOT EXISTS bus_model( id INT AUTO_INCREMENT PRIMARY KEY, bus_number INT, bus_type VARCHAR(50) , capacity INT ) """) cur.execute(""" CREATE TABLE IF NOT EXISTS linked( driver_id INT, route_id INT, bus_id INT ) """) con.commit() cur.close() con.close() def add_driver(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() full_name = input("name: ") grade = int(input("class: ")) experience = int(input("experience: ")) salary = 10000+5000*((grade+1)+(experience+1)) cur.execute("INSERT INTO driver (full_name, grade, experience, salary) VALUES (%s, %s, %s, %s)", (full_name, grade, experience, salary)) con.commit() print("Водитель успешно добавлен.") cur.close() con.close() except Exception as e: print(e) def add_bus(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() bus_number = int(input("bus number: ")) bus_type = input("type: ") capacity = int(input("capacity: ")) cur.execute("INSERT INTO bus_model (bus_number, bus_type, capacity) VALUES (%s, %s, %s)", (bus_number, bus_type, capacity)) con.commit() print("Автобус успешно добавлен.") cur.close() con.close() except Exception as e: print(e) def add_route(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() route_number = int(input("route number: ")) start_time = str(input("start time: ")) end_time = str(input("end time: ")) interval_mins = int(input("interval (mins): ")) distance = int(input("distance: ")) cur.execute("INSERT INTO bus_route (route_number, start_time, end_time, interval_mins, distance) VALUES (%s, %s, %s, %s, %s)", (route_number, start_time, end_time, interval_mins, distance)) con.commit() print("Маршрут успешно добавлен.") cur.close() con.close() # add_driver() # add_bus() # add_link() except Exception as e: print(e) def add_link(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() driver_id = int(input("driver id: ")) route_id = int(input("route id: ")) bus_id = int(input("bus id: ")) cur.execute("SELECT * FROM linked") buses = [row[2] for row in cur.fetchall()] if ((bus_id in buses)): raise Exception("Bus already taken") cur.execute("INSERT INTO linked (driver_id, route_id, bus_id) VALUES (%s, %s, %s)", (driver_id, route_id, bus_id)) con.commit() print("Link added") cur.close() con.close() except Exception as e: print(e) def update_bus_route(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() route_id = input("Введите ID маршрута: ") route_number = int(input("route number: ")) start_time = str(input("start time: ")) end_time = str(input("end time: ")) interval_mins = int(input("interval (mins): ")) distance = int(input("distance: ")) query = "UPDATE bus_route SET " params = [] updates = [] if route_number: updates.append("route_number = %s") params.append(route_number) if start_time: updates.append("start_time = %s") params.append(start_time) if end_time: updates.append("end_time = %s") params.append(end_time) if interval_mins: updates.append("interval_mins = %s") params.append(interval_mins) if distance: updates.append("distance = %s") params.append(distance) if not updates: print("Нет изменений для обновления.") return query += ", ".join(updates) + " WHERE id = %s" params.append(route_id) cur.execute(query, tuple(params)) con.commit() if cur.rowcount > 0: print("Маршрут успешно обновлен.") else: print("Маршрут с таким ID не найден.") cur.close() con.close() except Exception as e: print(e) def delete_driver(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() driver_id = input("Введите ID водителя, которого хотите удалить: ") cur.execute("DELETE FROM driver WHERE id = %s", (driver_id,)) cur.execute("DELETE FROM linked WHERE driver_id = %s", (driver_id,)) con.commit() if cur.rowcount > 0: print("Водитель успешно удален.") else: print("Водитель с таким ID не найден.") cur.close() con.close() except Exception as e: print(e) def delete_bus_route(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() route_id = input("Введите ID маршрута, которого хотите удалить: ") cur.execute("DELETE FROM bus_route WHERE id = %s", (route_id,)) cur.execute("DELETE FROM linked WHERE route_id = %s", (route_id,)) con.commit() if cur.rowcount > 0: print("Маршрут успешно удален.") else: print("Маршрут с таким ID не найден.") cur.close() con.close() except Exception as e: print(e) def delete_bus_model(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() bus_id = input("Введите ID автобуса, которого хотите удалить: ") cur.execute("DELETE FROM bus_model WHERE id = %s", (bus_id,)) cur.execute("DELETE FROM linked WHERE bus_id = %s", (bus_id,)) con.commit() if cur.rowcount > 0: print("Автобус успешно удален.") else: print("Автобус с таким ID не найден.") cur.close() con.close() except Exception as e: print(e) def view_drivers_on_route(route_id): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() cur.execute("SELECT driver_id FROM linked WHERE route_id = %s", (route_id,)) ids=[row[0] for row in cur.fetchall()] #print(ids) table = PrettyTable(["ID", "Name", "Class", "Experience", "Salary"]) for i in range(len(ids)): cur.execute("SELECT * FROM driver WHERE id = %s", (ids[i],)) for row in cur.fetchall(): table.add_row(row) print(table) cur.close() con.close() except Exception as e: print(e) def view_buses_on_route(route_id): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() cur.execute("SELECT bus_id FROM linked WHERE route_id = %s", (route_id,)) ids=list(set([row[0] for row in cur.fetchall()])) #print(ids) route_ids=[] for i in range(len(ids)): cur.execute("SELECT route_id FROM linked WHERE bus_id = %s", (ids[i],)) for row in cur.fetchall(): #print(row[0]) route_ids.append(row[0]) #print(route_ids) route_num=[] for i in range(len(route_ids)): cur.execute("SELECT route_number FROM bus_route WHERE id = %s", (route_ids[i],)) for row in cur.fetchall(): route_num.append(row[0]) #print(route_num) table = PrettyTable(["Route","Number"]) for i in range(len(ids)): cur.execute("SELECT bus_number FROM bus_model WHERE id = %s", (ids[i],)) for row in cur.fetchall(): #print((1,) + row) #if ((i<len(route_num))): table.add_row((route_num[i],)+row) print(table) cur.close() con.close() except Exception as e: print(e) def view_time_on_route(route_id): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() if route_id!=0: cur.execute("SELECT bus_id FROM linked WHERE route_id = %s", (route_id,)) else: cur.execute("SELECT bus_id FROM linked") ids=list(set([row[0] for row in cur.fetchall()])) route_ids = [] for i in range(len(ids)): cur.execute("SELECT route_id FROM linked WHERE bus_id = %s", (ids[i],)) for row in cur.fetchall(): # print(row[0]) route_ids.append(row[0]) # print(route_ids) route_num = [] for i in range(len(route_ids)): cur.execute("SELECT route_number FROM bus_route WHERE id = %s", (route_ids[i],)) for row in cur.fetchall(): route_num.append(row[0]) busnum=[] for i in range(len(ids)): cur.execute("SELECT bus_number FROM bus_model WHERE id = %s", (ids[i],)) for row in cur.fetchall(): busnum.append(row[0]) #print(busnum) table = PrettyTable(["Bus num","Route Num", "Start", "End"]) for i in range(len(ids)): #print(i) cur.execute("SELECT start_time,end_time FROM bus_route WHERE id = %s", (route_ids[i],)) for row in cur.fetchall(): table.add_row((busnum[i],)+(route_num[i],)+row) print(table) cur.close() con.close() except Exception as e: print(e) def view_distance_on_route(route_id): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() if route_id!=0: cur.execute("SELECT bus_id FROM linked WHERE route_id = %s", (route_id,)) else: cur.execute("SELECT bus_id FROM linked") ids=list(set([row[0] for row in cur.fetchall()])) route_ids = [] for i in range(len(ids)): cur.execute("SELECT route_id FROM linked WHERE bus_id = %s", (ids[i],)) for row in cur.fetchall(): # print(row[0]) route_ids.append(row[0]) # print(route_ids) route_num = [] for i in range(len(route_ids)): cur.execute("SELECT route_number FROM bus_route WHERE id = %s", (route_ids[i],)) for row in cur.fetchall(): route_num.append(row[0]) busnum = [] for i in range(len(ids)): cur.execute("SELECT bus_number FROM bus_model WHERE id = %s", (ids[i],)) for row in cur.fetchall(): busnum.append(row[0]) #print(busnum) table = PrettyTable(["Bus num","Route num", "Distance"]) sum=0 for i in range(len(ids)): cur.execute("SELECT distance FROM bus_route WHERE id = %s", (route_ids[i],)) for row in cur.fetchall(): table.add_row((busnum[i],)+(route_num[i],)+row) sum+=int(row[0]) print(table) print(f"FULL DISTANCE={sum}") cur.close() con.close() except Exception as e: print(e) def view_drivers_on_buses(driver_id): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() cur.execute("SELECT bus_id FROM linked WHERE driver_id = %s", (driver_id,)) ids=list(set([row[0] for row in cur.fetchall()])) drivername=[] for i in range(len(ids)): cur.execute("SELECT full_name FROM driver WHERE id = %s", (driver_id,)) for row in cur.fetchall(): drivername.append(row[0]) table = PrettyTable(["Driver name","BUS ID", "Bus number"]) for i in range(len(ids)): cur.execute("SELECT bus_number FROM bus_model WHERE id = %s", (ids[i],)) for row in cur.fetchall(): table.add_row((drivername[i],)+(ids[i],)+row) print(table) cur.close() con.close() except Exception as e: print(e) def spravka(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() cur.execute("SELECT * FROM driver") table = PrettyTable(["ID", "Name", "Class", "Experience", "Salary"]) for row in cur.fetchall(): table.add_row(row) print(table) cur.execute("SELECT * FROM bus_route") table = PrettyTable(["ID", "Route", "Start", "End", "Interval", "Distance"]) for row in cur.fetchall(): table.add_row(row) print(table) cur.execute("SELECT * FROM bus_model") table = PrettyTable(["ID", "Number", "Type", "Capacity"]) for row in cur.fetchall(): table.add_row(row) print(table) cur.execute("SELECT * FROM linked") table = PrettyTable(["DRIVER ID", "ROUTE ID", "BUS ID"]) for row in cur.fetchall(): table.add_row(row) print(table) cur.close() con.close() except Exception as e: print(e) def view_drivers(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() cur.execute("SELECT * FROM driver") table = PrettyTable(["ID", "Name", "Class", "Experience", "Salary"]) for row in cur.fetchall(): table.add_row(row) print(table) cur.close() con.close() except Exception as e: print(e) def view_bus_routes(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() cur.execute("SELECT * FROM bus_route") table = PrettyTable(["ID", "Route", "Start", "End", "Interval", "Distance"]) for row in cur.fetchall(): table.add_row(row) print(table) cur.close() con.close() except Exception as e: print(e) def view_buses(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() cur.execute("SELECT * FROM bus_model") table = PrettyTable(["ID", "Number", "Type", "Capacity"]) for row in cur.fetchall(): table.add_row(row) print(table) cur.close() con.close() except Exception as e: print(e) def view_links(): try: con = mysql.connector.connect( user="root", host='localhost', database="kurs1", password="titemov1" ) cur = con.cursor() cur.execute("SELECT * FROM linked") table = PrettyTable(["DRIVER ID", "ROUTE ID", "BUS ID"]) for row in cur.fetchall(): table.add_row(row) print(table) cur.close() con.close() except Exception as e: print(e) while True: print("\n---------------------") print("1. Добавить водителя") print("2. Добавить маршрут") print("3. Добавить автобус") print("4. Добавить ссылки") print("5. Удалить водителя") print("6. Удалить маршрут") print("7. Удалить автобус") print("8. Показать водителей") print("9. Показать маршруты") print("10. Показать автобусы") print("11. Показать водитель-маршрут-автобус") print("12. Обновить маршрут") print("13. Показать водителей на маршруте") print("14. Показать автобусы на маршруте") print("15. Показать временные интервалы") print("16. Показать протяженность маршрута") print("17. Показать водителей автобусов") print("18. Показать справку") print("0. EXIT") choice = input("Choose action: ") if choice == "1": add_driver() elif choice == "2": add_route() elif choice == "3": add_bus() elif choice == "4": add_link() elif choice == "5": delete_driver() elif choice == "6": delete_bus_route() elif choice == "7": delete_bus_model() elif choice == "8": view_drivers() elif choice == "9": view_bus_routes() elif choice == "10": view_buses() elif choice == "11": view_links() elif choice == "12": update_bus_route() elif choice == "13": route=int(input("enter route id:")) view_drivers_on_route(route) elif choice == "14": route = int(input("enter route id:")) view_buses_on_route(route) elif choice == "15": route = int(input("enter route id: (0=all) ")) view_time_on_route(route) elif choice == "16": route = int(input("enter route id: (0=all) ")) view_distance_on_route(route) elif choice == "17": driver = int(input("enter driver id:")) view_drivers_on_buses(driver) elif choice == "18": spravka() elif choice == "0": print("EXITING") break else: print("Unknown option. Try again") input("\nPress Enter to continue...")

Соседние файлы в предмете Управление данными