Добавил:
Vor_fleshek
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:нир / NIR_3_Bolotnikova
.py#НИР часть 3
# А-03-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 tableUchSt():
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 vuzkart.z1, vuzstat.pps, vuzstat.dn, vuzstat.kn
FROM vuzkart
JOIN vuzstat ON vuzkart.codvuz == vuzstat.codvuz
WHERE prof=="{}";""".format(prof)
data = cur.execute(sql).fetchall()
cur.close()
con.close()
for i in range(len(data)):
data[i]+=(round((data[i][2]+data[i][3])/data[i][1],2)*100,)
def sort_col(i):
return i[4]
data.sort(key=sort_col)
data=data[0:20]
count=[]
for i in range(len(data)):
count.append(i+1)
a=list(data[i])
del a[1:4]
data[i]=tuple(a)
headers = ["Полное наименование вуза", "Процент преподавателей с учеными степенями"]
print('')
print(tabulate(data, headers=headers, showindex=count, tablefmt='orgtbl'))
def tableMagRasp():
def RegionMenu():
print('')
print("Доступные федеральные округа:")
print('1) Дальневосточный')
print('2) Приволжский')
print('3) Северо-западный')
print('4) Северо-Кавказский')
print('5) Сибирский')
print('6) Уральский')
print('7) Центральный')
print('8) Южный')
print('9) Все ФО')
print('0) Выход из меню')
cmd = input('Выберите федеральный округ по номеру: ')
return cmd
def getRegionInput():
cmd=RegionMenu()
while cmd != "0":
if cmd == "1":
return "Дальневосточный "
elif cmd == "2":
return "Приволжский "
elif cmd == "3":
return "Северо-Западный "
elif cmd == "4":
return "Северо-Кавказский"
elif cmd == "5":
return "Сибирский "
elif cmd == "6":
return "Уральский "
elif cmd == "7":
return "Центральный "
elif cmd == "8":
return "Южный "
elif cmd == "9":
return
else:
print("Такого федерального округа нет!")
cmd=statusMenu()
return cmd
region = getRegionInput()
if(region=="0"): return
con=sqlite3.connect('VUZ.sqlite')
cur=con.cursor()
if region != None:
sql="""SELECT vuzkart.status, vuzkart.prof, vuzstat.mag
FROM vuzkart
JOIN vuzstat ON vuzkart.codvuz== vuzstat.codvuz
WHERE region=="{}" """.format(region)
else:
sql="""SELECT vuzkart.status, vuzkart.prof, vuzstat.mag
FROM vuzkart
JOIN vuzstat ON vuzkart.codvuz== vuzstat.codvuz"""
data = cur.execute(sql).fetchall()
cur.close()
con.close()
stats=['Университет ', 'Академия ', 'Институт ']
profs=['ИТ', 'КЛ', 'ГП', 'МП']
mag=[]
sumX=[0]*len(stats)
sumY=[0]*len(profs)
for i in range(len(profs)):
mag.append([0]*len(stats))
for k in range(len(data)):
for i in range(len(profs)):
for j in range(len(stats)):
if(data[k][1]==profs[i] and data[k][0]==stats[j]):
mag[i][j]+=data[k][2]
for i in range(len(profs)):
for j in range(len(stats)):
sumX[j]+=mag[i][j]
sumY[i]+=mag[i][j]
profNames=[]
for i in range(len(profs)):
profNames.append([profs[i]])
for i in range(len(profNames)):
for j in range(len(stats)):
profNames[i].append(mag[i][j])
for j in range(len(stats)+1):
profNames[j].append(sumY[j])
endLine=["ИТОГО"]
for sum in sumX:
endLine.append(sum)
endLine.append("-")
profNames.append(endLine)
count=[]
for i in range(len(profNames)):
count.append(i+1)
headers = ["Профиль"]
for stat in stats:
headers.append(stat)
headers.append("ИТОГО")
print('')
print(tabulate(profNames, headers=headers, showindex=count, tablefmt='orgtbl' ))
def menu():
print('')
print('Меню:')
print('1) Выбрать профиль вуза и отобразить перечень полных наименований 20-ти вузов, соответствующих выбранному профилю и имеющих наименьший процент преподавателей с учеными степенями.')
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":
tableUchSt()
elif cmd == "2":
tableMagRasp()
elif cmd == "3":
tablePrint()
else:
print("Такой команды нет!")
cmd=menu()
return
main() #Вот и вся программа...
Соседние файлы в папке нир