Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
нир / НИР_Дашин_А-01-20.docx
Скачиваний:
1
Добавлен:
26.01.2024
Размер:
1.52 Mб
Скачать

Код программы:

#НИР часть 3

# А-02-20 Дашин И.Н.

import sqlite3

import sys

import os

from tabulate import tabulate

def tablePrint():

"""Функция печати выбранной таблицы БД"""

def printData(tbName):

"""Функция получает имя таблицы

и возвращает имена полей и все значения из таблицы"""

con = sqlite3.connect("VUZ.sqlite")

cur = con.cursor()

sql = ' SELECT * FROM {}'.format(tbName)

data = cur.execute(sql).fetchall()

fields = cur.description

headers = [nam[0] for nam in fields]

print('')

print(tabulate( data, headers=headers, tablefmt='orgtbl'))

def printTables():

"""Функция принимает имя БД, печатает названия её таблиц и возвращает их"""

con = sqlite3.connect("VUZ.sqlite")

cur = con.cursor()

cur.execute("SELECT name FROM sqlite_master WHERE type='table';")

tables = cur.fetchall()

tb = []

for table in tables:

tb.append(list(table)[0])

print("Таблицы БД VUZ.sqlite:")

for table in tb:

print( "- " + table)

return tb

def inputTbName(tables):

"""Функция принимает имя БД и список её полей,

проверяет вводимое имя таблицы """

while True:

tbName = input('Введите имя таблицы, которую хотите отобразить: ')

if not tbName in tables:

print("В БД VUZ.sqlite нет таблицы \"" + tbName + "\"")

print('')

print("Таблицы БД VUZ.sqlite:")

for table in tables:

print( "- " + table)

else:

break

return tbName

tables = printTables()

my_tbName = inputTbName(tables)

printData(my_tbName)

def tableProfMag():

"""Первая вспомогательная функция: получает от пользователя выбранный профиль вузов

и выводит наименования вузов этого профиля где ведется подготовка магистров """

def profMenu():

print('')

print("Доступные профили вузов:")

print('1) Инженерно-технический')

print('2) Классический университет')

print('3) Гуманитарно-педагогический')

print('4) Многопрофильный')

print('0) Выход из меню')

cmd = input('Выберите профиль вуза по номеру: ')

return cmd

def getProfInput():

cmd=profMenu()

while cmd != "0":

if cmd == "1":

return "ИТ"

elif cmd == "2":

return "КЛ"

elif cmd == "3":

return "ГП"

elif cmd == "4":

return "МП"

else:

print("Такого профиля нет!")

cmd=profMenu()

return cmd

prof = getProfInput()

if(prof=="0"): return

con=sqlite3.connect('VUZ.sqlite')

cur=con.cursor()

sql="""SELECT z1

FROM vuzkart

JOIN vuzstat ON vuzkart.codvuz == vuzstat.codvuz

WHERE vuzstat.mag>0 AND prof=="{}";""".format(prof)

data = cur.execute(sql).fetchall()

cur.close()

con.close()

count=[]

for i in range(len(data)):

count.append(i+1)

headers = ["Полное наименование вуза"]

print('')

print(tabulate(data, headers=headers, showindex=count))

def tableStatus():

"""Вторая вспомогательная функция: получает в качастве аргумента выбранный статус вуза

и выводит количество обучающихся в нем аспирантов, магистров и их численное соотношение"""

def statusMenu():

print('')

print("Доступные статусы вузов:")

print('1) Университет')

print('2) Академия')

print('3) Институт')

print('4) Выбрать все')

print('0) Выход из меню')

cmd = input('Выберите статус вуза по номеру: ')

return cmd

def getStatusInput():

cmd=statusMenu()

while cmd != "0":

if cmd == "1":

return "Университет "

elif cmd == "2":

return "Академия "

elif cmd == "3":

return "Институт "

elif cmd == "4":

return

else:

print("Такого статуса нет!")

cmd=statusMenu()

return cmd

status = getStatusInput()

if(status=="0"): return

con=sqlite3.connect('VUZ.sqlite')

cur=con.cursor()

if status != None:

sql="""SELECT vuzkart.z1, vuzstat.asp, vuzstat.mag

FROM vuzkart

JOIN vuzstat ON vuzkart.codvuz== vuzstat.codvuz

WHERE status=="{}"

ORDER BY vuzkart.z1""".format(status)

else:

sql="""SELECT vuzkart.z1, vuzstat.asp, vuzstat.mag

FROM vuzkart

JOIN vuzstat ON vuzkart.codvuz== vuzstat.codvuz

ORDER BY vuzkart.z1"""

cur.execute(sql)

data=cur.fetchall()

cur.close()

con.close()

count=[]

for i in range(len(data)):

count.append(i+1)

if (data[i][2]!=0):

data[i]+=(round(data[i][1]/data[i][2],2),)

else: data[i]+=(0,)

mag=0

asp=0

for i in range(len(data)):

asp+=data[i][1]

mag+=data[i][2]

count.append("-")

if (mag!=0):

data+=(("ИТОГО", asp, mag, round(asp/mag,2)),)

else: data+=(("ИТОГО", asp, mag, 0),)

headers = ["Полное наименование вуза", "Количество аспирантов", "Количество магистров", "Отношение аспиранты/магистры"]

print('')

print(tabulate(data, headers=headers, showindex=count, tablefmt='orgtbl'))

def menu():

print('')

print('Меню:')

print('1) Вывести таблицу с наименованиями вузов, имеющих подготовку магистров, выбрав интересующий профиль вузов')

print('2) Вывести таблицу с информацией об обучающихся магистрах и аспирантах, выбрав интересующий статус вузов')

print('3) Выбрать таблицу БД для отображения')

print('0) Завершить работу с программой')

cmd = input('Выберите действие: ')

return cmd

def main():

path=os.getcwd()

if(not os.path.exists(path+"\\VUZ.sqlite")):

print("В директории программы отсутствует требуемая БД, работа невозможна.")

return

else: print("Соединение с требуемой БД установлено!")

cmd=menu()

while cmd != "0":

if cmd == "1":

tableProfMag()

elif cmd == "2":

tableStatus()

elif cmd == "3":

tablePrint()

else:

print("Такой команды нет!")

cmd=menu()

return

main() #Вот и вся программа...

Вывод 

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

26

Соседние файлы в папке нир