Задача:
Требуется написать программу хранения и поиска данных о
книгах в книжном магазине. О каждой книге известны: название, автор,
количество, цена, номер зала, номер шкафа и номер полки.
Решение:
Для начала обозначим класс
Book
и в нем определим конструкцию
данных о каждой книге, т.е. название, автор, количество, цена, номер зала,
номер шкафа и номер полки.
class Book:
def __init__(self, title = '', author = '', count = 0, price =
0, place1 = 0, place2 = 0, place3 = 0):
self.title = str(title)
#название
self.author = str(author)
#автор
self.count = int(count)
#количество
self.price = float(price)
#цена
self.place1 = int(place1)
#зал
self.place2 = int(place2)
#шкаф
self.place3 = int(place3)
#полка
Для вывода всех книг определим функцию
itemArrayPrint
,
зависящую от переменных
pos
– «позиция»,
store – «книжный
магазин»
(объявим ее позже, после определения всех функций).
def itemArrayPrint(pos, store):
#Операторы подстановки. %s — строка, %d — десятичное число, %f
— число с плавающей точкой.
Далее в скобках указаны переменные для
подстановки
print("|%s|%s|%d|%0.3f|%d|%d|%d|" % (store[pos].title,
store[pos].author, store[pos].count, store[pos].price,
store[pos].place1, store[pos].place2, store[pos].place3))
Для поиска определенной книги определим функцию
findRecord
,
который заключается в циклическом переборе каждой записи в данном случае
по автору.
def findRecord(author, startSearchPos, store):
current = startSearchPos
while current < len(store) and store[current].author !=
author:
current += 1
return current
24
Для вывода книги по автору определим функцию
printAuthorBooks
достаточно несколько раз вызвать функцию
findRecord
, меня стартовую
позицию и, в конечном счете, вывести на печать книгу нужного автора.
def printAuthorBooks(author, store):
pos = findRecord(author, 0, store)
while pos < len(store):
itemArrayPrint(pos, store)
print(pos)
pos = findRecord(author, pos + 1, store)
Для удаления записи из массива на языке C++ потребовалась бы
перестановка всех записей от удаляемой к началу, однако в Python списки и,
значит, перемещать записи нет необходимости. Это происходит автоматически
def deleteArrayItem(pos, store):
try:
del store[pos]
#если не вышло удалить, значит элемента нет
except IndexError:
print("Нет такой книги")
Объявляем «книжный магазин» пустым списком и как было ранее,
наладим связь с пользователем, запустив цикл
while True
, где и будем
ссылаться на функции, определенные ранее:
store = []
while True:
#Ввод команды пользователем
inp = input('d — удалить книгу\na — добавить книгу\ns — поиск
книги\np — вывод всех книг\nq — выход\n')
#Удаление книги по номеру
if inp == 'd':
deleteArrayItem(int(input('Введите номер книги')), store)
#Добавление книги
elif inp=='a':
store.append(Book(input("Название: "), input("Автор: "),
input("Количество: "), input("Цена: "), input("Зал: "),
input("Шкаф: "), input("Полка: ")))
saveArray('test.txt', store)
else:
print("Не добавлено, количество книг 1000")
#Поиск и вывод книги по автору
25
elif inp == 's':
printAuthorBooks(input("Автор: "),store)
#Печать всех записей
elif inp == 'p':
#Проверка, не пуст ли список
if len(store):
for i in range(len(store)):
itemArrayPrint(i, store)
else:
print("Список пуст")
#Выход из диалогового окна
elif inp=='q':
break
Достарыңызбен бөлісу: |