
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В. И. Ульянова (Ленина)
Кафедра автоматики процессов управления
отчет
по лабораторной работе
по дисциплине «Технология программирования»
Тема 10. Информационная система для автоматизации работы фирмы по сборке компьютеров
Студенты гр. 0392 |
|
Иванов С.К. Частухин Д.А. |
Преподаватель |
|
Литвинов В. Л. |
Санкт-Петербург
2023
Цель работы.
Разработать информационную систему для автоматизации процесса сборки компьютера, состоящего из стандартных блоков.
Описание предметной области.
Электронный магазин представляет собой цифровую платформу, предназначенную для поиска и покупки необходимых товаров.
Задание.
ИС предназначена для следующих групп пользователей:
Покупатели;
Продавцы.
ИС предназначена для автоматизации следующих процессов, происходящих в онлайн-магазине:
Поиск необходимых товаров;
Приобретение товаров;
Контроль ресурсов магазина;
Ведение отчетности;
ИС обеспечивает:
Единство информационного пространства для управления товарным ассортиментом в магазине компьютерной техники;
Учет информации о клиентах и их покупках;
Учет информации о продажах и движении товаров;
Автоматизированное хранение и учет товаров, включая технические характеристики и остатки на складе;
Автоматизированное выполнение должностных функций сотрудниками, включая оформление заказов, обработку возвратов и консультации покупателей.
Оглавление
1. Определение функциональных требований к ИС 4
2. Концептуальная модель данных 5
3. Логическая структура БД 7
4. Основные бизнес-процессы системы 7
4. Реализация проекта. 8
Выводы. 18
1. Определение функциональных требований к ИС
Рис. 1. Функциональная модель
Рис. 2. Функциональная модель продавца
Рис. 3. Функциональная модель покупателя
2. Концептуальная модель данных
Рис. 4. Use-case диаграмма
3. Логическая структура БД
Рис. 3. ER- диаграмма
4. Основные бизнес-процессы системы
Рис. 3. Процесс «авторизация»
Рис. 3. Процесс «Создание заказа»
Рис. 3. Процесс «оформление заказа»
Рис. 3. Процесс «Администрирование»
4. Реализация проекта.
Для реализации проекта был выбран язык программирования Python. База данных конфигурировалась с помощью ORM SQLAlchemy, а фронтом служит интерфейс telegram (реализован telegram бот с помощью библиотеки aiogram). В качестве БД использовалась PostgreSQL.
Далее приведены фрагменты программного кода, более подробно можно ознакомится по ссылке.
Рис. 4. Структура проекта
Описание таблиц:
intpk = Annotated[BigInteger, mapped_column(primary_key=True)]
created_at = Annotated[
datetime.datetime,
mapped_column(
server_default=text("TIMEZONE('utc', now())"),
),
]
updated_at = Annotated[
datetime.datetime,
mapped_column(
server_default=text("TIMEZONE('utc', now())"),
onupdate=datetime.datetime.utcnow,
),
]
str_256 = Annotated[str, 256]
class Base(DeclarativeBase):
type_annotation_map = {str_256: String(256),
intpk: BigInteger}
repr_cols_num = 3
repr_cols = tuple()
def __repr__(self):
cols = []
for idx, col in enumerate(self.__table__.columns.keys()):
if col in self.repr_cols or idx < self.repr_cols_num:
cols.append(f"{col}={getattr(self, col)}")
return f"<{self.__class__.__name__} {', '.join(cols)}>"
class Rights(enum.Enum):
user = "user"
seller = "seller"
admin = "admin"
class Category(enum.Enum):
cpu = "cpu"
gpu = "gpu"
ram = "ram"
hdd = "hdd"
ps = "ps"
block = "block"
class ProductStatus(enum.Enum):
free = "free"
reserved = "reserved"
ordered = "ordered"
sold = "sold"
class OrderStatus(enum.Enum):
cart = "cart"
created = "created"
confirmed = "confirmed"
canceled = "canceled"
shipped = "shipped"
closed = "closed"
class User(Base):
__tablename__ = "user"
id: Mapped[intpk]
name: Mapped[str]
rights: Mapped[Rights] = mapped_column(default=Rights.user)
orders: Mapped[list["Order"]] = relationship(
back_populates="user",
)
class Product(Base):
__tablename__ = "product"
id: Mapped[intpk]
name: Mapped[str]
price: Mapped[int]
category: Mapped[Category]
manufacturer: Mapped[str]
status: Mapped[ProductStatus] = mapped_column(default=ProductStatus.free)
order_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("order.id", ondelete="CASCADE")
)
order: Mapped["Order"] = relationship(
back_populates="products",
)
class Order(Base):
__tablename__ = "order"
id: Mapped[intpk]
user_id: Mapped[int] = mapped_column(ForeignKey("user.id", ondelete="CASCADE"))
status: Mapped[OrderStatus] = mapped_column(default=OrderStatus.created)
created_at: Mapped[created_at]
updated_at: Mapped[updated_at]
user: Mapped[User] = relationship(
back_populates="orders",
)
products: Mapped[list["Product"]] = relationship(
back_populates="order",
)