- PVSM.RU - https://www.pvsm.ru -
Теперь немного о самой задумке. Предполагается, что программа будет соответствовать следующим условиям:
Программа должна определённым образом управлять информацией. На входе ей должны предоставляться:
На выходе пользователь должен получать следующую структуру:
Теперь договоримся о терминологии.
Клиент — юридическое или физическое лицо, которому услуга предоставляется. В программе клиента представляют его имя / наименование и телефон. Мне больше и не надо.
Позиция — описание графы прихода / затрат денежных средств, имеющих свою стоимость. Стоимость может быть как положительная (выплата от заказчика, оплата расходов и прочее), так и отрицательная (оплата заказа / расходов, не- или недовыплаты по оказаным услугам и так далее). Состоит из наименования и фактической стоимости.
Документ — учётная структура, хранящая данные о стоимости позиции и фактическом покрытии клиентом затрат на неё.
Сальдо — фактическая разница между объёмом оказанных клиенту услуг и выплаченного денежного эквивалента. В программе будет использоваться как общее сальдо, так и отдельное на каждого клиента.
Программа создавалась при следующих условиях:
Теперь о структуре программы:
Взаимодействие модулей программы, источника данных и человека выглядит так:
Схема пользовательских прецедентов (use case) выглядит так:
Пользовательские сценарии делятся на следующие категории:
База данных представляет собой набор таблиц, связанных с помощью первичных автоинкрементных ключей. Дополнительно используется отображение при выдаче общей информации (хотя это спорное решение):
Передача данных происходит через прослойку модуля database, являющегося модулем доступа. Исполнительные формы создают запросы, которые в него и посылают. Все данные исполнительные модули разбирают самостоятельно. По факту, database является контейнером для экземпляра класса «luasql-sqlite3», соединённого с базой.
Маленькая деталь. Базу пришлось создавать через программу sqliteman, поскольку инициализация таблицы с первичным ключём автовычисляемого типа (autoincrement) при ручном формировании запроса не работает. Но, на всякий случай, я сформировал дамп базы для последующей развёртки:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE "feedback" (
"number" INTEGER PRIMARY KEY AUTOINCREMENT,
"customer" TEXT,
"phone" INTEGER
);
CREATE TABLE "customer" (
"number" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" TEXT
);
CREATE TABLE "position" (
"number" INTEGER PRIMARY KEY AUTOINCREMENT,
"nominal" TEXT,
"price" REAL
);
CREATE TABLE "document" (
"number" INTEGER PRIMARY KEY AUTOINCREMENT,
"customer" INTEGER,
"position" INTEGER,
"income" REAL
);
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('customer',8);
INSERT INTO "sqlite_sequence" VALUES('feedback',10);
INSERT INTO "sqlite_sequence" VALUES('position',2);
INSERT INTO "sqlite_sequence" VALUES('document',6);
CREATE VIEW "journal" AS select document.number, customer.name, position.nominal, document.income, position.price
from document, customer, position
where document.customer = customer.number
and document.position = position.number;
COMMIT;
И на сладкое — скриншот работы приложения:
И да, это быстрый текстовый интерфейс! Зато не замучаюсь с переносом программы (с GTK — зависимым интерфейсом) на другую машину!
В следующих статьях буду отдельно рассказывать про работу отдельных модулей программы и выкладывать их исходные коды.
Автор: hantenellotf
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sqlite3/122478
Ссылки в тексте:
[1] «Lua for Windows»: https://code.google.com/archive/p/luaforwindows/
[2] Источник: https://habrahabr.ru/post/301778/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.