
- •Домашнее задание
- •1.2. Содержание работы
- •1.3. Исходные данные для задачи
- •1.4. Рекомендуемые инструменты
- •1.5. Рекомендуемые источники
- •Аннотация
- •Описание выполненной работы
- •1.1 Анализ исходных данных
- •1.2. Разработка функциональных требований к подсистеме
- •1.3. Разработка модели классов
- •2.1.3. Код создания таблицы "enum"
- •2.1.4. Код создания таблицы "product"
- •2.1.5. Код создания таблицы "param"
- •2.1.6. Код создания таблицы "class_param"
- •2.1.7. Код создания таблицы "prod_param"
- •2.2. Реализация основных функций
- •2.2.1. Функция создания параметра
- •2.2.2. Функция редактирования параметра
- •2.2.3. Функция удаления параметра
- •2.2.4. Функция создания класса параметра
- •2.2.5. Функция изменения класса параметра
- •2.2.6. Функция удаления класса параметра
- •2.2.7. Функция наследования класса параметра
- •2.2.8. Функция изменения приоритета вывода класса параметра
- •2.2.9. Функция создания привязки параметра к изделию
- •2.2.10. Функция изменения привязки параметра и изделия
- •2.2.11. Функция нахождения id параметров у изделия
- •2.2.12. Функция поиска изделий заданного класса параметра
- •2.2.13. Функция поиска изделия с заданным параметром в заданном интервале
2.1.3. Код создания таблицы "enum"
def create_enum_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS enum (
id INTEGER PRIMARY KEY AUTOINCREMENT,
enum_id INTEGER,
enum_name TEXT NOT NULL,
enum_short_name TEXT NOT NULL,
enum_description TEXT,
real_value REAL,
int_value INTEGER,
pic_value TEXT,
priority INTEGER NOT NULL DEFAULT 0,
FOREIGN KEY (enum_id) REFERENCES terminal_classifier(id)
)
''')
conn.commit()
2.1.4. Код создания таблицы "product"
def create_product_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS product (
id INTEGER PRIMARY KEY AUTOINCREMENT,
id_category INTEGER,
product_name TEXT NOT NULL,
quantity INTEGER DEFAULT 0,
price REAL DEFAULT 0,
unit_value REAL,
FOREIGN KEY (id_category) REFERENCES terminal_classifier(id)
)
''')
conn.commit()
2.1.5. Код создания таблицы "param"
def create_param_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS param (
id INTEGER PRIMARY KEY AUTOINCREMENT,
param_name TEXT NOT NULL,
param_short_name TEXT NOT NULL,
unit_id INTEGER,
min_val REAL,
max_val REAL,
FOREIGN KEY (unit_id) REFERENCES unit(id)
)
''')
conn.commit()
2.1.6. Код создания таблицы "class_param"
def create_class_param_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS class_param (
id INTEGER PRIMARY KEY AUTOINCREMENT,
param_id INTEGER NOT NULL,
class_param_id INTEGER,
param_class_name TEXT NOT NULL,
param_class_short_name TEXT NOT NULL,
priority INTEGER NOT NULL,
FOREIGN KEY (param_id) REFERENCES param(id),
FOREIGN KEY (class_param_id) REFERENCES terminal_classifier(id) ON DELETE CASCADE
)
''')
conn.commit()
2.1.7. Код создания таблицы "prod_param"
def create_prod_param_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS prod_param (
id INTEGER PRIMARY KEY AUTOINCREMENT,
prod_id INTEGER NOT NULL,
param_id INTEGER NOT NULL,
int_value INTEGER,
str_value TEXT,
real_value REAL,
enum_id INTEGER,
UNIQUE(prod_id, param_id),
FOREIGN KEY (enum_id) REFERENCES enum(id),
FOREIGN KEY (prod_id) REFERENCES product(id),
FOREIGN KEY (param_id) REFERENCES param(id)
)
''')
conn.commit()
2.2. Реализация основных функций
2.2.1. Функция создания параметра
функция: create_param - создание параметра
-- вход:
-- 1. new_name - имя параметра
-- 2. new_short_name - короткое имя параметра
-- 3. new_unit_id - имя единицы измерения
-- 4. new_min_val - минимальная граница
-- 5. new_max_val - максимальная граница
-- выход: нет
-- эффекты:
-- 1. новая запись в таблице param
-- требования:
-- 1. имя не должно быть занято
-- 2. единица измерения должна существовать
def create_param(new_name, new_short_name, new_unit_id, new_min_val, new_max_val):
try:
# Вставка новой записи в таблицу param
cursor.execute('''SELECT unit_name FROM unit WHERE id = ?''', (new_unit_id,))
is_unit_exist = cursor.fetchone()
if not is_unit_exist:
print(f'Ошибка в create_param: Единицы измерения не сушествует.')
cursor.execute('''
INSERT INTO param(param_name, param_short_name, unit_id, min_val, max_val)
VALUES (?, ?, ?, ?, ?)
''', (new_name, new_short_name, new_unit_id, new_min_val, new_max_val))
# Проверка количества вставленных строк
if cursor.rowcount == 1:
conn.commit()
print(f'параметр с именем {new_name} успешно добавлен.')
return 1
else:
conn.rollback()
return 0
except sqlite3.Error as e:
# В случае ошибки откатываем транзакцию
print(f"An error occurred in create_param: {e}")
conn.rollback()
return 0