Добавить в корзинуПозвонить
Найти в Дзене
Promt Engineer AI

Книжная библиотека на Python написана совместно с AI

Разработка программного обеспечения может показаться сложной задачей, особенно если вы никогда раньше не занимались программированием. Однако, создав простое, но полезное приложение для учета книг, вы не только получите готовый инструмент для организации своей домашней библиотеки, но и поймете основные принципы разработки.
В этом руководстве я подробно, шаг за шагом, опишу весь процесс создания
Оглавление

Введение

Разработка программного обеспечения может показаться сложной задачей, особенно если вы никогда раньше не занимались программированием. Однако, создав простое, но полезное приложение для учета книг, вы не только получите готовый инструмент для организации своей домашней библиотеки, но и поймете основные принципы разработки.

В этом руководстве я подробно, шаг за шагом, опишу весь процесс создания приложения от идеи до готовой программы, которую можно запускать на компьютере с Windows без установки Python.

Часть 1: Планирование и анализ требований

1.1 Определение цели проекта

Прежде чем писать код, необходимо четко понять, что должно делать приложение. Система учета книг создается для того, чтобы помочь пользователю:

  • Хранить информацию о прочитанных и планируемых к прочтению книгах
  • Быстро находить нужную книгу по различным критериям
  • Анализировать свою читательскую активность
  • Экспортировать данные для использования в других программах

1.2 Сбор требований пользователя

На основе анализа потребностей пользователя были определены следующие ключевые требования:

Основные функции:

  1. Добавление новых книг с полным набором характеристик

2. Удаление книг из библиотеки

-2

3. Просмотр всех книг в удобном табличном формате

-3

4. Поиск книг по различным критериям

-4

5. Фильтрация книг по заданным параметрам

-5
-6

6. Обновление статуса книги (прочитана/будет читаться)

-7

7. Статистика по библиотеке

-8

8. Сохранение и загрузка данных в файлы

9. Экспорт данных в Excel и CSV форматы

-9

Поля для хранения информации о книге:

  • Автор (обязательное поле)
  • Название (обязательное поле)
  • Серия (опциональное поле)
  • Год издания (число от 0 до текущего года + 5)
  • Тип книги (бумажный вариант, электронная книга, аудиокнига)
  • Формат (твердый/мягкий переплет, PDF, EPUB, MP3 и т.д.)
  • Статус (прочитал/буду читать)
  • Дата прочтения (для прочитанных книг)
  • Дата добавления в библиотеку (автоматически)

1.3 Проектирование архитектуры

Перед началом программирования необходимо спроектировать структуру будущего приложения. Принято решение использовать следующие архитектурные решения:

Объектно-ориентированный подход:

  • Класс Book - для представления отдельной книги
  • Класс BookLibrary - для управления коллекцией книг

Хранение данных:

  • Формат JSON - для сохранения данных между сеансами работы
  • Файловая система - для хранения файлов в папке с программой

Пользовательский интерфейс:

  • Консольный интерфейс с текстовым меню
  • Табличное представление данных для наглядности

Часть 2: Подготовка среды разработки

2.1 Установка Python

Python - это язык программирования, на котором будет написано приложение. Для начала работы необходимо установить интерпретатор Python на компьютер.

Пошаговая инструкция по установке Python на Windows:

  1. Скачивание установщика:
  2. Откройте браузер и перейдите на официальный сайт Python: https://www.python.org/downloads/
  3. Нажмите желтую кнопку "Download Python" (версия 3.11 или новее)
  4. Файл установщика сохранится в папку "Загрузки"
  5. Запуск установки:
  6. Найдите скачанный файл (например, python-3.11.0-amd64.exe)
  7. Дважды кликните по нему для запуска
  8. ВАЖНО: Обязательно отметьте галочку "Add Python to PATH" в самом низу окна установщика
  9. Нажмите "Install Now" для установки в стандартную папку
  10. Проверка установки:
  11. Нажмите Win + R, введите cmd и нажмите Enter
  12. В открывшемся окне командной строки введите python --version
  13. Если видите версию Python (например, Python 3.11.0), установка прошла успешно

2.2 Выбор текстового редактора

Для написания кода нужен текстовый редактор. Обычный Блокнот подойдет, но лучше использовать специализированные редакторы с подсветкой синтаксиса. Вот несколько вариантов:

Бесплатные варианты:

  • VS Code - профессиональный редактор от Microsoft (рекомендуется)
  • Notepad++ - легковесный редактор с подсветкой кода
  • IDLE - простой редактор, идущий в комплекте с Python
  • Sublime Text - быстрый редактор с красивым интерфейсом

Для начала можно использовать обычный Блокнот:

  1. Нажмите Win + R, введите notepad и нажмите Enter
  2. Введите код программы
  3. Сохраните файл с расширением .py

2.3 Создание проекта

  1. Создайте папку для проекта:
  2. Откройте Проводник Windows
  3. Перейдите в C:\Users\ХХХХ\Documents\Скрипты\Программы\
  4. Создайте новую папку с именем Библиотека
  5. Создайте файл программы:
  6. Откройте текстовый редактор
  7. Создайте новый файл
  8. Сохраните его как Библиотека.py в созданной папке

Часть 3: Написание кода (детальное объяснение)

3.1 Импорт необходимых библиотек

В самом начале программы мы импортируем библиотеки - готовые наборы функций, которые расширяют возможности Python:

import json # Для работы с JSON файлами (сохранение данных)

import os # Для работы с операционной системой (пути к файлам)

import csv # Для экспорта данных в CSV формат

import sys # Для доступа к системным параметрам (кодировка)

from datetime import datetime # Для работы с датами

from typing import List, Dict, Optional, Callable # Для указания типов данных

from pathlib import Path # Для удобной работы с путями к файлам

Что делает каждая библиотека:

  • json - позволяет сохранять списки книг в файл и загружать обратно
  • os и pathlib - помогают найти папку, где находится программа
  • csv - нужен для экспорта в формат CSV (Excel)
  • datetime - используется для записи даты добавления и прочтения книг
  • typing - помогает сделать код более понятным (указывает типы данных)

3.2 Настройка кодировки для Windows

Windows использует свою кодировку по умолчанию, что может привести к проблемам с русскими буквами. Следующий код решает эту проблему:

if sys.platform == 'win32':

import io

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

Объяснение:

  • Проверяется, запущена ли программа на Windows
  • Перенаправляется вывод программы в UTF-8 кодировку
  • Теперь русские буквы будут отображаться корректно

3.3 Создание класса Book

Класс - это шаблон для создания объектов. В нашем случае объект - это одна книга. Класс Book содержит:

Метод __init__ (конструктор):

def __init__(self, author, title, year, book_type, format_type, status, series="", read_date=None):

self.author = author # Сохраняем автора

self.title = title # Сохраняем название

self.year = year # Сохраняем год издания

self.book_type = book_type # Сохраняем тип книги

self.format_type = format_type # Сохраняем формат

self.status = status # Сохраняем статус

self.series = series # Сохраняем серию (если есть)

self.read_date = read_date # Сохраняем дату прочтения

self.added_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # Автоматическая дата добавления

Почему используется self:

  • self - это ссылка на сам объект
  • self.author означает "поле author текущей книги"
  • Без self Python не поймет, что мы работаем с полями объекта

Метод to_dict:

def to_dict(self):

return {

"author": self.author,

"title": self.title,

# ... и так далее

}

Этот метод преобразует книгу в словарь - формат, который легко сохранить в JSON файл.

Метод from_dict:

@classmethod

def from_dict(cls, data):

return cls(

author=data["author"],

title=data["title"],

# ... и так далее

)

Этот метод создает книгу из словаря, полученного из JSON файла. @classmethod означает, что метод принадлежит всему классу, а не отдельному объекту.

3.4 Создание класса BookLibrary

Это основной класс, который управляет всей библиотекой.

Конструктор класса:

def __init__(self, filename="library.json"):

if getattr(sys, 'frozen', False):

self.script_dir = Path(sys.executable).parent.absolute()

else:

self.script_dir = Path(__file__).parent.absolute()

self.filename = filename

self.filepath = self.script_dir / filename

self.books = []

self.current_filter = None

self.load_books()

Что здесь происходит:

  1. Определяется папка, где находится программа
  2. Если программа запущена как EXE (frozen), берем папку EXE файла
  3. Если как скрипт (.py), берем папку скрипта
  4. Формируется полный путь к файлу данных
  5. Создается пустой список для книг
  6. Загружаются сохраненные книги (если есть)

Метод load_books:

def load_books(self, filename=None):

if filename:

self.filename = filename

self.filepath = self.get_full_path(filename)

if self.filepath.exists():

try:

with open(self.filepath, 'r', encoding='utf-8') as f:

data = json.load(f)

self.books = [Book.from_dict(book_data) for book_data in data]

print(f"Загружено {len(self.books)} книг")

return True

except Exception as e:

print(f"Ошибка при загрузке: {e}")

return False

else:

print("Файл не найден. Создана новая библиотека.")

return False

Детальное объяснение:

  • with open(...) as f - открывает файл и автоматически закрывает его после работы
  • 'r' означает "чтение" (read)
  • encoding='utf-8' - указывает кодировку для русских букв
  • json.load(f) - читает JSON данные из файла
  • [Book.from_dict(book_data) for book_data in data] - преобразует каждый словарь в книгу (списковое включение)

Метод save_books:

def save_books(self, filename=None):

if filename:

self.filename = filename

self.filepath = self.get_full_path(filename)

try:

self.filepath.parent.mkdir(parents=True, exist_ok=True)

with open(self.filepath, 'w', encoding='utf-8') as f:

json.dump([book.to_dict() for book in self.books], f,

ensure_ascii=False, indent=2)

print(f"Книги сохранены в файл {self.filepath}")

return True

except Exception as e:

print(f"Ошибка при сохранении: {e}")

return False

Объяснение:

  • mkdir(parents=True, exist_ok=True) - создает папку, если её нет
  • 'w' - открывает файл для записи (write)
  • json.dump() - сохраняет данные в JSON формате
  • ensure_ascii=False - позволяет сохранять русские буквы
  • indent=2 - делает JSON файл читаемым для человека

3.5 Функция добавления книги

Это самая большая функция, так как требует ввода множества данных:

def add_book(self):

print("\n=== Добавление новой книги ===\n")

# Ввод автора с проверкой

while True:

author = input("Введите автора книги: ").strip()

if author:

break

print("Автор не может быть пустым!")

# Ввод названия с проверкой

while True:

title = input("Введите название книги: ").strip()

if title:

break

print("Название не может быть пустым!")

# Ввод серии (опционально)

series = input("Введите серию книги (Enter если нет): ").strip()

# Ввод года с проверкой

while True:

try:

year = int(input("Введите год издания: ").strip())

if 0 <= year <= datetime.now().year + 5:

break

print(f"Введите корректный год (0-{datetime.now().year + 5})")

except ValueError:

print("Пожалуйста, введите число!")

Почему используются циклы while True:

  • Они повторяют запрос, пока пользователь не введет корректные данные
  • break - выходит из цикла, когда данные правильные

3.6 Функция отображения таблицы

Это одна из самых сложных функций, так как она должна:

  1. Измерить все тексты
  2. Подобрать оптимальную ширину колонок
  3. Нарисовать красивые рамки
  4. Обрезать текст, если он не помещается

def display_books_table(self, books, title="Книги"):

if not books:

print("\nНет книг для отображения.")

return

# Получаем ширину окна консоли

terminal_width = self.get_terminal_width()

# Измеряем длину всех текстов

max_lengths = {

"№": len("№"),

"Автор": len("Автор"),

"Название": len("Название"),

# ... и так для всех колонок

}

# Проходим по всем книгам и обновляем максимальную длину

for i, book in enumerate(books, 1):

# Проверяем длину каждого поля

max_lengths["Автор"] = max(max_lengths["Автор"], len(book.author))

max_lengths["Название"] = max(max_lengths["Название"], len(book.title))

# ... и так далее

Важные моменты:

  • enumerate(books, 1) - дает номер книги, начиная с 1
  • max() - выбирает максимальное значение из двух
  • Добавляется отступ в 2 символа для красоты

3.7 Функция экспорта в Excel

def export_to_excel(self, filename=None):

if not self.books:

print("\nНет книг для экспорта!")

return False

if not PANDAS_AVAILABLE:

print("\nДля экспорта в Excel установите pandas:")

print(" pip install pandas openpyxl")

return False

if not filename:

filename = f"library_export_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"

filepath = self.get_full_path(filename)

try:

# Подготовка данных

data = []

for book in self.books:

data.append({

"Автор": book.author,

"Название": book.title,

# ... и так далее

})

# Создание Excel файла

df = pd.DataFrame(data)

df.to_excel(filepath, index=False, engine='openpyxl')

print(f"Данные экспортированы в файл: {filepath}")

return True

except Exception as e:

print(f"Ошибка при экспорте: {e}")

return False

-10

Объяснение работы с Excel:

  • pandas - мощная библиотека для работы с данными
  • DataFrame - таблица данных (как лист Excel)
  • to_excel - сохраняет таблицу в Excel файл
  • index=False - не сохраняет номера строк

Часть 4: Тестирование и отладка

4.1 Ручное тестирование

После написания кода необходимо тщательно протестировать каждую функцию:

Тест 1: Добавление книги

  1. Запустите программу
  2. Выберите пункт 1
  3. Введите тестовые данные
  4. Проверьте, что книга добавилась

Тест 2: Просмотр книг

  1. Добавьте 3-4 книги
  2. Выберите пункт 3
  3. Проверьте, что таблица отображается корректно
  4. Проверьте, что все тексты видны полностью

Тест 3: Поиск и фильтрация

  1. Добавьте книги с разными авторами
  2. Выполните поиск по автору
  3. Проверьте, что находятся правильные книги

Тест 4: Сохранение и загрузка

  1. Добавьте несколько книг
  2. Закройте программу
  3. Запустите снова
  4. Проверьте, что книги сохранились

Тест 5: Экспорт

  1. Добавьте книги
  2. Экспортируйте в Excel
  3. Откройте полученный файл
  4. Проверьте, что все данные на месте

4.2 Типичные ошибки и их исправление

Ошибка 1: SyntaxError - не хватает двоеточия

# Неправильно:

if x == 5

print("x равно 5")

# Правильно:

if x == 5:

print("x равно 5")

Ошибка 2: NameError - переменная не определена

# Неправильно:

print(book_name) # Переменная book_name не создана

# Правильно:

book_name = "Война и мир"

print(book_name)

Ошибка 3: IndentationError - неправильные отступы

# Неправильно:

def my_function():

print("Привет") # Нет отступа

# Правильно:

def my_function():

print("Привет") # Отступ в 4 пробела

Ошибка 4: UnicodeEncodeError - проблемы с русскими буквами

  • Эта ошибка уже решена настройкой кодировки в начале программы

Часть 5: Создание исполняемого файла (EXE)

5.1 Установка PyInstaller

PyInstaller - программа, которая превращает скрипт Python в самостоятельный EXE файл:

pip install pyinstaller

5.2 Создание EXE файла

Откройте командную строку в папке с программой и выполните:

pyinstaller --onefile --console --name "Библиотека книг" Библиотека.py

Параметры объяснение:

  • --onefile - создает один EXE файл (а не папку с множеством файлов)
  • --console - показывает окно консоли (нужно для ввода данных)
  • --name - задает имя файла
  • Библиотека.py - исходный файл

5.3 Результат

После выполнения команды:

  • В папке появится папка dist
  • Внутри dist будет файл Библиотека книг.exe
  • Этот файл можно скопировать на любой компьютер и запускать без установки Python

5.4 Создание BAT файла для удобного запуска

Создайте файл Запуск.bat с таким содержимым:

@echo off

chcp 65001 > nul

cd /d "C:\Users\ХХХХХ\Documents\Скрипты\Программы\Библиотека"

python Библиотека.py

pause

Теперь можно запускать программу двойным кликом по этому файлу.

Часть 6: Распространение и использование

6.1 Как пользоваться программой

Добавление книги:

  1. Запустите программу
  2. Нажмите 1 и Enter
  3. Введите автора, нажмите Enter
  4. Введите название, нажмите Enter
  5. Введите серию (или просто Enter)
  6. Введите год издания
  7. Выберите тип книги (1-3)
  8. Введите формат
  9. Выберите статус (1-2)
  10. Если "Прочитал" - введите дату в формате ДД.ММ.ГГГГ

Просмотр всех книг:

  1. Нажмите 3 и Enter
  2. Увидите таблицу со всеми книгами
  3. Можете ввести номер книги для просмотра подробностей

Поиск книги:

  1. Нажмите 4 и Enter
  2. Выберите тип поиска (1-5)
  3. Введите поисковый запрос
  4. Увидите результаты

Экспорт в Excel:

  1. Нажмите 8 для управления файлами
  2. Выберите 5 для экспорта в Excel
  3. Введите имя файла (или просто Enter)
  4. Найдите файл в папке с программой

6.2 Где хранятся данные

Все данные сохраняются в файле library.json в той же папке, где находится программа. Этот файл можно:

  • Скопировать на другой компьютер
  • Открыть в любом текстовом редакторе
  • Отредактировать вручную (если нужно)
  • Сделать резервную копию

-11

6.3 Рекомендации по использованию

  1. Регулярно делайте резервные копии файла library.json
  2. Используйте понятные названия для книг и серий
  3. Заполняйте все поля для более точного поиска
  4. Экспортируйте данные в Excel для анализа
  5. Обновляйте статус книг после прочтения

Часть 7: Возможные улучшения (для продвинутых пользователей)

7.1 Добавление графического интерфейса

Можно заменить консольный интерфейс на оконный с помощью библиотеки tkinter (встроена в Python):

import tkinter as tk

from tkinter import ttk, messagebox

class BookApp:

def __init__(self, library):

self.library = library

self.window = tk.Tk()

self.window.title("Библиотека книг")

self.window.geometry("800x600")

# Создание таблицы

self.tree = ttk.Treeview(self.window, columns=("author", "title", "year"), show="headings")

self.tree.heading("author", text="Автор")

self.tree.heading("title", text="Название")

self.tree.heading("year", text="Год")

# Заполнение таблицы

self.refresh_table()

# Кнопки управления

btn_add = tk.Button(self.window, text="Добавить книгу", command=self.add_book)

btn_delete = tk.Button(self.window, text="Удалить книгу", command=self.delete_book)

7.2 Добавление базы данных

Вместо JSON файла можно использовать SQLite для хранения данных:

import sqlite3

def init_database():

conn = sqlite3.connect('library.db')

cursor = conn.cursor()

cursor.execute('''

CREATE TABLE IF NOT EXISTS books (

id INTEGER PRIMARY KEY AUTOINCREMENT,

author TEXT NOT NULL,

title TEXT NOT NULL,

series TEXT,

year INTEGER,

book_type TEXT,

format TEXT,

status TEXT,

read_date TEXT,

added_date TEXT

)

''')

conn.commit()

conn.close()

7.3 Добавление веб-интерфейса

Можно создать веб-версию с помощью Flask:

from flask import Flask, render_template, request, jsonify

app = Flask(__name__)

library = BookLibrary()

@app.route('/')

def index():

return render_template('index.html', books=library.books)

@app.route('/add', methods=['POST'])

def add_book():

data = request.json

book = Book(

author=data['author'],

title=data['title'],

year=data['year'],

# ... другие поля

)

library.books.append(book)

library.save_books()

return jsonify({'success': True})

Заключение

Итоги разработки

В процессе создания приложения "Система учета книг" мы:

  1. Спланировали функциональность и структуру программы
  2. Написали более 500 строк кода на Python
  3. Реализовали 9 основных функций меню
  4. Создали удобный табличный интерфейс
  5. Добавили возможность экспорта данных
  6. Настроили работу с файлами на Windows
  7. Создали исполняемый EXE файл

Чему вы научились

В процессе разработки вы освоили:

  • Основы программирования на Python
  • Работу с классами и объектами
  • Обработку пользовательского ввода
  • Работу с JSON файлами
  • Создание таблиц в консоли
  • Обработку ошибок и исключений
  • Создание исполняемых файлов

Дальнейшее развитие

Вы можете продолжить улучшать программу, добавив:

  • QR-коды для быстрого добавления книг
  • Облачное хранение для синхронизации между устройствами
  • Рейтинги и отзывы к книгам
  • Интеграцию с онлайн-библиотеками
  • Графики читательской активности
  • Экспорт в PDF с обложками книг