Файл: Операции, производимые с данными (Типы структур данных и предметная область).pdf

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

Категория: Курсовая работа

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

Добавлен: 30.03.2023

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

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

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

info = '' # вклады из списка

for a in Bank.catalogue:

info += a.show() + '\n'

f.writelines(info) # записать все вклады из списка

f.close() # закрыть файл

# функция чтения из файла

def openFile(filename):

with open(filename, 'r', encoding = 'utf-8') as f: # открыть файл на чтение (в режиме автоматического закрытия)

bbank = [line.strip() for line in f if line.strip()] # получить список строк из файла

for fli in bbank: # для каждой строки из этого списка

params = fli.strip().split(';') # получить список параметров строки по разделителю ';'

date_obj = d.datetime.strptime(params[3].strip(), '%Y-%m-%d').date() # получить дату из четвертого параметра

dep = Deposit(params[0].strip(), params[1].strip(), params[2].strip(), date_obj,

int(params[4].strip()), int(params[5].strip()), params[6].strip()) # создать объект вклада

Bank.catalogue.append(dep) # добавить его в односвязный список

lbox.delete(0, END)

for dep in Bank.catalogue:

lbox.insert(END, dep.show())

b1['state'] = 'disabled'

# список названий элементов-полей

fields = ['Название банка', 'Название тарифа', 'Валюта', 'Условия вклада']

# словарь для формирования числовых полей

# (ключ - параметр [год, месяц, день, срок, процент], значение - пара чисел [макс. значение параметра, мин. значение параметра])

numbers = {'Год открытия вклада':(2019, 2022), 'Месяц':(1, 12), 'День':(1, 31), 'Срок вклада':(1, 5), 'Процентная ставка':(5, 15)}

# функция добавления элементов на форму (возвращает словарь элементов)

def makeForm(root, fields):

entries = {} # словарь элементов-значений с ключами-названиями полей

for field in fields: # для каждого названия поля:

row = Frame(root) # создать рамку (фрейм)

lab = Label(row, width=22, text=field+': ', anchor='w') # создать текстовую метку шириной 22, растянуть налево

ent = Entry(row) # создать поле ввода

ent.insert(0, 'Введите ' + field) # вставить текст в поле ввода

row.pack(side=TOP, fill=X, padx=5, pady=5) # сделать рамку видимой, расположив сверху и растянув по форме, с отступами от границ по 5

lab.pack(side=LEFT) # сделать метку видимой, расположив слева

ent.pack(side=RIGHT, expand=YES, fill=X) # сделать поле ввода видимым, расположив справа и растянув по форме

entries[field] = ent # добавить поле ввода в словарь в соответствие с его названием

for num in numbers.items(): # для каждого значения:

row = Frame(root) # создать рамку (фрейм)

lab = Label(row, width=22, text=num[0]+': ', anchor='w') # создать текстовую метку шириной 22, растянуть налево

ent = Spinbox(row, from_=num[1][0], to=num[1][1]) # создать регулятор типа вверх-вниз для значений даты (установить макс. и мин. параметры регулятора в зависимости от выбранного ключа)

ent.insert(0, '')

row.pack(side=TOP, fill=X, padx=5, pady=5)

lab.pack(side=LEFT)

ent.pack(side=RIGHT, expand=YES, fill=X)

entries[num[0]] = ent # добавить параметр даты в словарь в соответствие с его названием

return entries

root = Tk() # создать окно

lbox = Listbox(width=120, height=30, selectmode=SINGLE) # расположить на форме список