Кафедра
автомобиле- и
тракторостроения
КУРСОВАЯ РАБОТА
По курсу информатики
На тему:
Разработка
базы данных на языке программирования Python
РЕФЕРАТ
Объект разработки - база данных для хранения дипломных проектов.
Цель работы - разработка базы данных на языке программирования Python.
Во время выполнения работы была разработана структура базы данных, были созданы окна, включая технологию переходов, разработан внешний вид окон и в итоге была создана база данных в среде объектно-ориентированного программирования phyton.
База данных была экспериментально опробована, в
результате чего было установлено, что существенных ошибок в коде программы не
выявлено. Программа может быть успешно применена в работе стат. отделов ВУЗов.
Содержание:
Вступление
Структура б/д
Окна ввода-вывода информации
Технология переходов
Листинг с пояснениями
Специальное задание
Направления улучшения
Вывод
Список
использованной литературы
Вступление
Актуальность хранения информации в электронном виде заключается в том, что бумажная документация имеет срок годности и портиться со временем. Для долгосрочного хранения информации гораздо удобнее использовать электронные базы данных.
К настоящему времени человечеством накоплено поистине гигантское количество информации об объектах и явлениях. Но эта информация не лежит мертвым грузом, она хранится в электронном виде и используется в базах данных. Базы данных - это часть информационных систем - программно-аппаратных комплексов, осуществляющих хранение и обработку огромных информационных массивов.
База данных представляет собой определенным образом структурированную совокупность данных, совместно хранящихся и обрабатывающихся в соответствии с некоторыми правилами. Как правило, база данных моделирует некоторую предметную область или ее фрагмент. Очень часто в качестве постоянного хранилища информации баз данных выступают файлы.
Программа, производящая манипуляции с информацией в базе данных, называется СУБД (система управления базами данных). Она может осуществлять выборки по различным критериям и выводить запрашиваемую информацию в том виде, который удобен пользователю. Основными составляющими информационных систем, построенных на основе баз данных, являются файлы БД, СУБД и программное обеспечение (клиентские приложения), позволяющие пользователю манипулировать информацией и совершать необходимые для решения его задач действия.
Информация, которая хранится в базе данных, может постоянно пополняться. От того, как часто это делается, зависит ее актуальность. Информацию об объектах также можно изменять и дополнять.
В нашем случае создана база данных для хранения
дипломных проектов студентов всех факультетов, групп и специальностей. Для
поиска дипломов разработана удобная технология переходов между окнами.
Структура базы данных
Исходя из задания была разработана база данных:
Рисунок 1 - Структура базы данных Base_stud.bso
Окна ввода/вывода информации
Окно «А»
Окно «А» выполняет функции входа
Окно «В»
В этом окне можно
добавить диплом или открыть уже готовый. Так же можно настроить параметры
шрифта и прочесть о готовой б/д.
Окно «С»
Окно «С» служит для ввода всей информации о студенте, также здесь указуються пути к документу с текстом и папке с изображениями.
В окне «D»
выполняется поиск записей по заданным параметрам
Окно «D»
Окно «P»
Окно «P» служит для вывода полной информации по
студенту
Технология переходов
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
Листинг с пояснениями
база данный диплом python
osnovnoe okno.py
# -*- coding: utf-8 -*-TkinterstringtkMessageBoxsysosNew_DataFontFind_DataCopy_RezO_ProgtkFontsystem:__init__(self, root, all_font):(root, all_font)__call__(self, root, all_font):font(event = None):.font(root)VHOD (event = None):
if self.tip_dostupa == u"Студент":():B (even = None):
#if even == u"Студент":close_all_prevision(event = None)::(self.C.FRC)
print u"Окно С закрыто"
except: pass:(self.D.FRD)
print u"Окно D закрыто"
except::(self.E.FRE)
print u"Окно E закрыто"
except::(self.K)
print u"Окно K закрыто"
except::(self.O.FRO)
print u"Окно O закрыто":
#Создание окна "Новая запись"
#Создание окна "Найти запись"Window_D(event = None):
close_all_prevision().D = Find_Data.find_data(root,all_font)
#Создание окна "Резервное копирование"Window_E (event = None):
close_all_prevision().E = Copy_Rez.copy_rez(root,all_font)
#Создание окна "Шрифты"Window_K(event = None):_all_prevision().K = Font.font(root,all_font)Window_O(event = None):_all_prevision().O = O_Prog.o_prog(root,all_font).destroy().geometry("1024x768+0+0")
root.update().title(u"База данных дипломных робот студентов ТМ факультета")
Bar = Tkinter.Menu(root)["font"] = all_font["tearoff"] = 0= Tkinter.Menu(Bar, tearoff = 0 , font = all_font).add_command(label = u"Новая запись", command = Window_C).add_command(label = u"Найти запись", command = Window_D).add_command(label = u"Резервное копирование", command =
Window_E).add_command(label = u"Общая информация").add_separator().add_command(label = u"Выход", command=die)= Tkinter.Menu(Bar, tearoff = 0 , font = all_font).add_command(label = u"Размер").add_command(label = u"Шрифты",command = Window_K)= Tkinter.Menu(Bar, tearoff = 0 , font = all_font).add_command(label = u"Помощь").add_command(label = u"О программе", command = Window_O).add_cascade(label = u"Управление базой", menu = Menu1).add_cascade(label = u"Настройка вида", menu = Vid).add_cascade(label = u"О программе", menu = Prog).config(menu=Bar).mainloop()
#else:
#pass
#Изминение состояния полей ввода и кнопок
def var123 (even = None):even == u"Студент":["state"] = "disabled"["state"] = "disabled"["state"] = "normal":["state"] = "normal"["state"] = "normal"["state"] = "normal"
#Закрытие программыdie(even = None):= tkMessageBox.askyesno(u"Важно!!!",u"Закрыть базу данных
дипломных работ студентов ТМ-факультета?")
r = responser == 1:.exit(0):.destroy()= Tkinter.Frame(root)["width"] = 250["height"] = 300.place(relx = 0.5, rely = 0.5, anchor = "center" )["bg"] = "white"["bd"] = "4m"["relief"] = "groove"
#Меню "Тип доступа"big(event = None):_NEW["text"] = (NEW_text[event])(NEW_text[event]).tip_dostupa = NEW_text[event]_NEW = Tkinter.Menubutton(FR, relief = "raised", justify = "center")_NEW.place(relx = 0.5, rely = 0.2, anchor = "center")_NEW.menu = Tkinter.Menu(MB_NEW, tearoff = 0)_NEW ["menu"] = MB_NEW.menu_NEW ["bg"] = "grey"_NEW ["activebackground"] = "white"
MB_NEW ["width"] = 20_text = [u"Администратор", u"Преподаватель", u"Студент"]
MB_NEW["text"] = (u"Тип доступа")= []i in NEW_text:.append(i+" "*(20-len(i)))_NEW.menu.add("cascade", label = NEW[0], command = lambda m=0
:big(m))_NEW.menu.add("cascade", label = NEW[1], command = lambda m=1
:big(m))_NEW.menu.add("cascade", label = NEW[2], command = lambda m=2
:big(m))
#Поле ввода "Имя пользователя"= Tkinter.LabelFrame(FR)["text"] = u"Имя пользователя"
LaFR1.place(relx = 0.5, rely = 0.4, anchor = "center")= Tkinter.Entry(LaFR1)["width"] = 25["state"] = "disabled".pack()
name = Ent1
#Поле ввода "Пароль"
LaFR2 = Tkinter.LabelFrame(FR)["text"] = u"Пароль".place(relx = 0.5, rely = 0.55, anchor = "center")= Tkinter.Entry(LaFR2)["width"] = 25["state"] = "disabled"["show"] = "*".pack()= Ent2
#Кнопка "Вход"= Tkinter.Button(FR)["bg"] = "white"["bd"] = "1m"["relief"] = "raised"["text"] = u"Вход"["state"] = "disabled".place(relx = 0.4, rely = 0.8, anchor = "center").bind("<Button-1>",VHOD).bind("<Return>", VHOD)
#Кнопка "Выход"= Tkinter.Button(FR)["bg"] = "white"["bd"] = "1m"["relief"] = "raised".place(relx = 0.2, rely = 0.8, anchor = "center")["text"] = u"Выход".bind("<Button-1>", die)
#Кнопка "Регистрация"= Tkinter.Button(FR)["bg"] = "white"["bd"] = "1m"["relief"] = "raised".place(relx = 0.7, rely = 0.8, anchor = "center")["text"] = u"Регистрация".bind("<Button-1>").mainloop()__name__ == "__main__":= Tkinter.Tk()_vhod = root.winfo_screenheight()_vhod = root.winfo_screenwidth()_vhod = (shyrina_vhod / 2) - 125_vhod = (vysota_vhod / 2) - 150_x_y = "250x300+%s+%s"%(x_vhod,y_vhod).geometry(razm_x_y)
root.title(u"Вход в базу данных дипломных проэктов
all_font = tkFont.Font()_font ["family"] = "Helvetica"_font ["size"] = 15_font ["weight"] = "normal"(root,all_font)
New_Data.py
# -*- coding: cp1251 -*-TkinterScrolledTexttkFontosstringpickletkFileDialogImage
import ImageTk
#окно "С" - создание новой записи
class new_data:
def __init__(self, root,all_font):(root,all_font)__call__(self, root,all_font):New_dictonary(event = None):= {}= 0i in range(0,13):.Param_2[self.dosm[i]] = self.informatino[ss]= ss + 1type(self.informatino[ss]).Param_2["Theme"] = self.ST.get(index1 = 0.0,index2 = "end").Param_2["Stepen"] = self.stepen.Param_2["tabl"] = Ent15.get()
#print self.ST.get(index1 = 0.0,index2 = "end")
#************************************************************
*******************
#ПРОВЕРКА ПУТЕЙ:os.path.exists("C:\\TM_Base") == 1:.chdir("C:\\TM_Base"):.makedirs("C:\\TM_Base").chdir("C:\\TM_Base")()Sohranenie (event= None):Sohranenie_pict(event = None): #сохранение картинок.chdir(self.path_pict)os.listdir(self.path_pict)= os.listdir(self.path_pict)= ["C:\\TM_Base\\Spec\\" + self.key_key + "\\",'C:\\TM_Base\\Bakalavr\\'
+ self.key_key + '\\','C:\\TM_Base\\Magistr\\' + self.key_key + '\\']= u[event]i in t:.chdir(self.path_pict)_pict = open(i,"rb")= open_pict.read()_pict.close().chdir(u[event])_pict = open(i ,"wb")_pict.write(p)_pict.close()Sohranenie_text (event = None):= ["C:\\TM_Base\\Spec\\" + self.key_key + "\\",'C:\\TM_Base\\Bakalavr\\'
+ self.key_key + '\\','C:\\TM_Base\\Magistr\\' + self.key_key + '\\']= string.split(self.path_pdf,"/"):i in z:i.find(".docx") != -1:.pdf = iself.pdfi.find(".pdf") != -1:.pdf = iself.pdfi.find(".txt") != -1:.pdf = iself.pdfi.find(".doc") != -1:.pdf = iself.pdf:= len (self.path_pdf)= len (self.pdf)= h - j= self.path_pdf[0:l]N.chdir(N)_pdf = open(self.pdf,"rb")= open_pdf.read()_pdf.close().chdir(u[event])_pdf = open(self.pdf,"wb")_pdf.write(f)_pdf.close():_font = tkFont.Font()_font ["family"] = "Helvetica"_font ["size"] = 30_font ["weight"] = "bold"_font ["slant"] = "italic"= Tkinter.Label(self.FRC)
krasavchik["text"] = u"Не верный тип данных!\n Текстовый файл не
сохранен!!!"
krasavchik["font"] = krasavchik_font["bg"] = "red".place(relx = 0.5,rely = 0.6 , anchor = "center")create_folders (event = None):
#ПРОВЕРКА ПУТЕЙ К ПАПКЕ СПЕЦИАЛИСТ:
u =
[C:\\TM_Base\\Spec\\",'C:\\TM_Base\\Bakalavr\\,C:\\TM_Base\\Magistr\\]os.path.exists(u[event]) == 1:.chdir(u[event]):.makedirs(u[event]).chdir(u[event])_1 = self.Param_2.get("Name_S")_2 = self.Param_2.get("SName_S")_3 = self.Param_2.get("LName_S").key_key = key_2 +"_" + key_1 +"_" + key_3os.path.exists(u[event] + self.key_key + "\\") == 1:.chdir(u[event] + self.key_key + "\\").stud_file = open ("Base_stud.bso", "rb") #ОТКРЫВАЕМ ФАЙЛ С
ИНФ О СТУДЕНТЕ:.makedirs(u[event] + self.key_key).chdir(u[event] + self.key_key).stud_file = open ("Base_stud.bso", "wb") #ОТКРЫВАЕМ ФАЙЛ С
ИНФ О СТУДЕНТЕ:.dump(self.Param_2,self.stud_file):.stud_file.close().stud_file = open ("Base_stud.bso", "wb").dump(self.Param_2,self.stud_file).stud_file.close()_text(event)_pict(event)self.stepen == u"Специалист":_folders(0)self.stepen == u"Бакалавр":_folders(1):_folders(2)
#************************************************************
***********************************************************otmena(event = None):.FRC.destroy()
root.title(u"Cоздание новой записи")
#root.geometry("1024x768+0+0")Seve_inform(event = None):_get=[]i in Inform:i.get() == '':["bg"] = "red":["bg"] = "white"_get.append(i.get()).informatino = entry_getlen(entry_get) == 14:_dictonary()_font = tkFont.Font()_font ["family"] = "Helvetica"_font ["size"] = 30_font ["weight"] = "bold"_font ["slant"] = "italic"= Tkinter.Label(self.FRC)
krasavchik["text"] = u"Новая запись успешно добавлена"["font"] = krasavchik_font["bg"] = "yellow"
krasavchik.place(relx = 0.5,rely = 0.5 , anchor = "center")
else:
#Новая рамка для окна "С"
self.FRC = Tkinter.Frame(root).FRC["width"] = 1024.FRC["height"] = 768.FRC.place(relx = 0, rely = 0, anchor = "nw" )= [].dosm =
["Spec","Grup","Mark","God_1","Name_S","SName_S","LName_S","Nam
e_P","SName_P","LName_P","page","plac","pict","tabl"]
#Parametry = ["Специальность","Группа","Оценка","Год
защити","Имя","Фамилия","Отчество","Имя2","Фамилия2","Отчество2"
,"Тема дипломного проэкта","Количество страниц","Количество
плакатов","Количество рисунков","Количество таблиц"]
self.Param_2 =
{"Spec":u"","Grup":u"","Mark":"","God_1":"","Name_S":"","SName_S":"",
"LName_S":"","Name_P":"","SName_P":"","LName_P":"","page":"","plac"
:"","pict":"","tabl":u"попал ты чувак"}
LaFR4["text"] = u"Год защити"
LaFR4["font"] = all_font.place(relx = 0.5, rely = 0.03, anchor = "w")= Tkinter.Entry(LaFR4)["width"] = 10.append(Ent4).pack()= Tkinter.LabelFrame(self.FRC)["text"] = u"Степень"["font"] = all_font.place(relx = 0.66, rely = 0.03, anchor = "w")big(event = None):_NEW["text"] = (NEW_text[event]).stepen = MB_NEW["text"]
#self.Inform.append(MB_NEW["text"])_NEW = Tkinter.Menubutton(LaFR5, relief = "raised", justify =
"center")_NEW.menu = Tkinter.Menu(MB_NEW, tearoff = 0)_NEW ["menu"] = MB_NEW.menu_NEW ["bg"] = "grey"_NEW ["activebackground"] = "white"_NEW ["width"] = 15_text = [u"Специалист", u"Бакалавр", u"Магистр", u" Выбрать " ]
MB_NEW["text"] = (NEW_text[3])= []i in NEW_text:.append(i)_NEW.menu.add("cascade", label = NEW[0], command = lambda m=0
:big(m))_NEW.menu.add("cascade", label = NEW[1], command = lambda m=1
:big(m))_NEW.menu.add("cascade", label = NEW[2], command = lambda m=2
:big(m))
MB_NEW.pack()
#Создание полей ввода, вторая строка (Данные о студенте)
LaFR_Date_1 = Tkinter.LabelFrame(self.FRC)
LaFR_Date_1["text"] = u"Данные о студенте"
LaFR_Date_1["font"] = all_font_Date_1.place(relx = 0.01, rely = 0.12, anchor = "w")_Date_1["width"] = 924_Date_1["height"] = 85= Tkinter.LabelFrame(LaFR_Date_1)["text"] = u"Имя"["font"] = all_font.place(relx = 0.01, rely = 0.5 , anchor = "w")= Tkinter.Entry(LaFR6)["width"] = 40.append(Ent6).pack()= Tkinter.LabelFrame(LaFR_Date_1)["text"] = u"Фамилия"["font"] = all_font.place(relx = 0.5, rely = 0.5 , anchor = "center")= Tkinter.Entry(LaFR7)["width"] = 40.append(Ent7).pack()= Tkinter.LabelFrame(LaFR_Date_1)["text"] = u"Отчество"["font"] = all_font.place(relx = 0.99, rely = 0.5 , anchor = "e")= Tkinter.Entry(LaFR8)["width"] = 40.append(Ent8).pack()
#Создание полей ввода, третья строка (Данные о научном
руководителе)
LaFR_Date_2 = Tkinter.LabelFrame(self.FRC)
LaFR_Date_2["text"] = u"Данные о научном руководителе"
LaFR_Date_2["font"] = all_font_Date_2.place(relx = 0.01, rely = 0.25, anchor = "w")_Date_2["width"] = 924_Date_2["height"] = 85= Tkinter.LabelFrame(LaFR_Date_2)["text"] = u"Имя"["font"] = all_font.place(relx = 0.01, rely = 0.5 , anchor = "w")= Tkinter.Entry(LaFR9)["width"] = 40.append(Ent9).pack()= Tkinter.LabelFrame(LaFR_Date_2)["text"] = u"Фамилия"["font"] = all_font.place(relx = 0.5, rely = 0.5 , anchor = "center")= Tkinter.Entry(LaFR10)["width"] = 40.append(Ent10).pack()= Tkinter.LabelFrame(LaFR_Date_2)["text"] = u"Отчество"["font"] = all_font.place(relx = 0.99, rely = 0.5 , anchor = "e")= Tkinter.Entry(LaFR11)["width"] = 40.append(Ent11).pack()
#Поле ввода текста "Тема дипломного проэкта"
LaFR_Date_3 = Tkinter.LabelFrame(self.FRC)
LaFR_Date_3["text"] = u"Тема дипломного проэкта"
LaFR_Date_3["font"] = all_font_Date_3.place(relx = 0.01, rely = 0.32, anchor = "nw").ST =ScrolledText.ScrolledText(LaFR_Date_3,background="white").ST["width"] = 150.ST["height"] =7
#self.self.ND = ST.get()
#Inform.append(ST)
#mm = ST.get()
#print self.ND.ST.pack()
#Создание полей ввода, третья строка (Данные о дипломном проэкте)
LaFR_Date_4 = Tkinter.LabelFrame(self.FRC)
LaFR_Date_4["text"] = u"Данные о дипломном проэкте"
LaFR_Date_4["font"] = all_font_Date_4.place(relx = 0.01, rely = 0.55, anchor = "w")_Date_4["width"] = 924_Date_4["height"] = 90= Tkinter.LabelFrame(LaFR_Date_4)
LaFR12["text"] = u"Количество страниц"
LaFR12["font"] = all_font.place(relx = 0.01, rely = 0.5 , anchor = "w")= Tkinter.Entry(LaFR12)["width"] = 32
#Ent12 ["bd"] = 6.append(Ent12).pack()= Tkinter.LabelFrame(LaFR_Date_4)
LaFR13["text"] = u"Количество плакатов"
LaFR13["font"] = all_font.place(relx = 0.38, rely = 0.5 , anchor = "center")= Tkinter.Entry(LaFR13)["width"] = 32.append(Ent13).pack()= Tkinter.LabelFrame(LaFR_Date_4)
LaFR14["text"] = u"Количество рисунков"
LaFR14["font"] = all_font.place(relx = 0.52, rely = 0.5 , anchor = "w")= Tkinter.Entry(LaFR14)["width"] = 32.append(Ent14).pack()= Tkinter.LabelFrame(LaFR_Date_4)
LaFR15["text"] = u"Количество таблиц"
LaFR15["font"] = all_font.place(relx = 0.99, rely = 0.5 , anchor = "e")= Tkinter.Entry(LaFR15)["width"] = 32.append(Ent15).pack()
#Создание полей ввода пути к файлам
LaFR_Date_5 = Tkinter.LabelFrame(self.FRC)
LaFR_Date_5["text"] = u"Опредиление путей к файлам"
LaFR_Date_5["font"] = all_font_Date_5.place(relx = 0.01, rely = 0.63, anchor = "nw")_Date_5["width"] = 924_Date_5["height"] = 120path_pict(event = None):
M = u"Выберете папку с изображениями и нажмите ОК"
path1 = tkFileDialog.askdirectory(title=M)_label1 = Tkinter.Label(LaFR_Date_5)_label1.place(relx = 0.65, rely = 0.7, anchor = "center")_label1['borderwidth'] = 5_label1["font"] = all_font_label1["height"] = 2_label1["width"] = 40_label1['text'] = path1.path_pict = path1
def path_pdf():= u"Выберете файл с текстом"
path = tkFileDialog.askopenfilename(title=P)_label = Tkinter.Label(LaFR_Date_5)_label.place(relx = 0.65, rely = 0.25, anchor = "center")
#path_label["bg"] = "red"_label['borderwidth'] = 5_label["font"] = all_font_label["height"] = 2_label["width"] = 40_label['text'] = path.path_pdf = path
#Создание кнопок= Tkinter.Button(LaFR_Date_5)["bg"] = "white"["bd"] = "1m"["width"] = 30["font"] = all_font["relief"] = "raised".place(relx = 0.2, rely = 0.25, anchor = "center")
But3["text"] = u"Путь к документу с текстом"
But3["command"] = path_pdf= Tkinter.Button(LaFR_Date_5)["width"] = 30["bg"] = "white"["bd"] = "1m"["font"] = all_font["relief"] = "raised".place(relx = 0.2, rely = 0.7, anchor = "center")
But4["text"] = u"Путь к изображениям"
But4["command"] = path_pict= Tkinter.Button(self.FRC)["bg"] = "white"["bd"] = "1m"["font"] = all_font["relief"] = "raised".place(relx = 0.25, rely = 0.85, anchor = "center")["text"] = u"Отмена".bind("<Button-1>",otmena)= Tkinter.Button(self.FRC)["bg"] = "white"["font"] = all_font["bd"] = "1m"["relief"] = "raised".place(relx = 0.75, rely = 0.85, anchor = "center")["text"] = u"Сохранить".bind("<Button-1>", Seve_inform)__delattr__ (self, a):.FRC.destroy()
#print u"ok))))))))))))))))))"__name__ == "__main__":= Tkinter.Tk().geometry("1024x768+0+0")_font = tkFont.Font()_font ["family"] = "Helvetica"_font ["size"] = 14_font ["weight"] = "normal"_data(root,all_font).mainloop()
Find_Data.py
# -*- coding: cp1251 -*-TkinterScrolledTexttkFontosstringpickletkFileDialogImageImageTkpreview_find