Программа загружает данные из файла такого формата, где первое поле — это уникальный ключ:
pr.v|Vasil Vas|30.11.1976|34.5|8
mg.s|Kosin Stepa|08.03.1973|40.1|7
el.p|Pier Pety|16.07.1985|30.8|8
В программе данные хранятся в виде словаря, у которого значения ключей представлены списками с четырьмя элементами.
Пользователь может просматривать содержимое словаря, добавлять новые элементы, удалять целые элементы. Правка значений в программе не предусмотрена.
В конце данные можно записать в файл.
Можно было по-другому организовать работу с данными. Открывать файл на чтение и просматривать его построчно. Однако при этом организовать последующую запись в файл было бы сложнее.
Расширить программу можно за счет введения «режима edit», когда вручную (не в диалоговом режиме) можно править поля элементов словаря. Элементы словаря по сути являются записями.
def adder():
key = input('Key: ')
if len(key) != 4 or key[2] != '.': # пример защиты от ошибок ввода
return 'Error format'
names = input(base_field[0] + ': ')
birth = input(base_field[1] + ': ')
salary = input(base_field[2] + ': ')
salary = float(salary)
grade = input(base_field[3] + ': ')
grade = int(grade)
#####################################################
base[key] = [names, birth, salary, grade]
def shower():
for i in base:
print(i + ': ' + base[i][0] + ', '+ base[i][1] + ', ' + \
str(base[i][2]) + ', ' + str(base[i][3]))
def deleter():
key = input('Key: ')
del base[key]
def writer(fname):
save = input ('Сохранить изменения? (y - да) ')
if save == 'y':
if fname == '':
fname = input ('Адрес/имя: ')
ffile = open(fname, 'w')
for i in base:
a = base[i]
ffile.write(i+'|')
ffile.write(a[0]+'|')
ffile.write(a[1]+'|')
ffile.write(str(a[2])+'|')
ffile.write(str(a[3]) + '\n')
close(fname)
base = {}
base_field = ('Name','Birthday','Salary','Grade') # название полей базы данных
# загрузка данных из файла
anw_load = input ('Загрузить данные из файла? (y - да) ')
fname = ''
if anw_load == 'y':
fname = input ('Адрес/имя: ')
ffile = open(fname, 'r')
for i in ffile:
lst = i.split('|')
base[lst[0]] = [lst[1], lst[2], float(lst[3]), int(lst[4])]
close(fname)
while 1:
anw = input('What do you want? (a - add, s - see, d - delete) ')
if anw == 'end':
writer(fname)
break
elif anw == 'a':
adder()
elif anw == 's':
shower()
elif anw == 'd':
deleter()
else:
print('Error!')