1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/luoboQAQ-charge-manager

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Система управления оплатой за пользование машинным залом

Система управления оплатой за пользование машинным залом на основе Qt+MySQL.

Описание функций программы

В системе реализовано пять основных модулей: модуль входа, модуль управления доступом к машинному залу, модуль пополнения и блокировки карты доступа, модуль поиска и статистики, а также модуль управления данными студентов.

Модуль входа отвечает за управление процессом входа и выхода студентов и администраторов, включая проверку подлинности и управление правами доступа.

Модуль управления доступом к машинному залу управляет регистрацией студентов при доступе к машинному залу. Если баланс карты студента меньше 3 единиц или карта заблокирована, доступ к машинному залу будет отклонён. Каждый раз, когда студент входит в машинный зал, создаётся запись. Каждые 60 секунд система проверяет баланс карты студента. Если баланса недостаточно, студенту немедленно предлагается покинуть машинный зал.

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

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

Модуль управления данными студентов отвечает за добавление, удаление и изменение данных студентов.

Компиляция и отладка

  • В MySQL используются следующие SQL-запросы для создания необходимых таблиц в соответствии с настройками таблиц.
  • Компиляция программы выполняется с помощью cmake.
  • По умолчанию учётная запись студента — 20001, пароль — 123.
  • Учётная запись администратора по умолчанию — 001, пароль — 001.

Настройки таблиц

Таблица администратора

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

CREATE TABLE `admin` (
  `aid` char(5),
  `aname` varchar(20),
  `apasswd` varchar(20),
  PRIMARY KEY (`aid`)
);

Тестовые данные:

INSERT INTO `admin` (`aid`, `aname`, `apasswd`) VALUES ('001', 'admin', '001');

Таблица студентов

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

CREATE TABLE `student` (
  `sno` char(5),
  `sname` varchar(10),
  `spasswd` varchar(20),
  `sdc` varchar(10),
  `sclass` varchar(20),
  `sage` int,
  `ssex` char(2),
  PRIMARY KEY (`sno`)
);

Вставка тестовых данных:

INSERT INTO `student` (`sno`, `sname`, `spasswd`, `sdc`, `sclass`, `sage`, `ssex`) VALUES ('20001', '小然', '123', '美术', '1901', 18, '女');
INSERT INTO `student` (`sno`, `sname`, `spasswd`, `sdc`, `sclass`, `sage`, `ssex`) VALUES ('20002', '小乐', '123', '音乐', '1901', 19, '女');
INSERT INTO `student` (`sno`, `sname`, `spasswd`, `sdc`, `sclass`, `sage`, `ssex`) VALUES ('20003', '小晚', '123', '计算机', '1902', 18, '女');
INSERT INTO `student` (`sno`, `sname`, `spasswd`, `sdc`, `sclass`, `sage`, `ssex`) VALUES ('20004', '小贝', '123', '舞蹈', '1901', 19, '女');
INSERT INTO `student` (`sno`, `sname`, `spasswd`, `sdc`, `sclass`, `sage`, `ssex`) VALUES ('20005', '小琳', '123', '法学', '1901', 19, '女');

Таблица карт доступа

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

CREATE TABLE `card` (
  `cardid` char(5),
  `createday` datetime,
  `sno` char(5),
  `banlance` double,
  `state` tinyint(1),
  PRIMARY KEY (`cardid`),
  FOREIGN KEY (`sno`) REFERENCES `student` (`sno`) ON DELETE CASCADE ON UPDATE RESTRICT
) ;

Вставка тестовых данных:

INSERT INTO `card` (`cardid`, `createday`, `sno`, `banlance`, `state`) VALUES ('001', '2021-05-08 00:00:00', '20001', 2.9, 1);
INSERT INTO `card` (`cardid`, `createday`, `sno`, `banlance`, `state`) VALUES ('002', '2021-06-05 10:50:27', '20002', 9.6, 1);
INSERT INTO `card` (`cardid`, `createday`, `sno`, `banlance`, `state`) VALUES ('003', '2021-06-05 11:41:52', '20003', 4, 1);
INSERT INTO `card` (`cardid`, `createday`, `sno`, `banlance`, `state`) VALUES ('004', '2021-06-16 16:19:28', '20004', 3, 1);
INSERT INTO `card` (`cardid`, `createday`, `sno`, `banlance`, `state`) VALUES ('005', '2021-06-16 16:19:48', '20005', 3, 1);

Таблица компьютеров

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

CREATE TABLE `computer` (
  `computer_id` char(5),
  `computer_state` varchar(25),
  PRIMARY KEY (`computer_id`)
);

Вставка тестовых данных:

INSERT INTO `computer` (`computer_id`, `computer_state`) VALUES ('S001', '空闲');
INSERT INTO `computer` (`computer_id`, `computer_state`) VALUES ('S002', '空闲');
INSERT INTO `computer` (`computer_id`, `computer_state`) VALUES ('S003', '空闲');
INSERT INTO `computer` (`computer_id`, `computer_state`) VALUES ('S004', '空闲');
INSERT INTO `computer` (`computer_id`, `computer_state`) VALUES ('S005', '空闲');

Таблица записей использования машинного зала

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

CREATE TABLE `record` (
  `serial_num` varchar(20),
  `cardid` char(5),
  `stime` datetime,
  `ctime` time,
  `cost` decimal(6,1),
  `computer_id` char(5),
  `is_using` tinyint(1),
  PRIMARY KEY (`serial_num`),
  FOREIGN KEY (`cardid`) REFERENCES `card` (`cardid`) ON DELETE RESTRICT,
  FOREIGN KEY (`computer_id`) REFERENCES `computer` (`computer_id`) ON DELETE RESTRICT
);

Триггеры:

  • Когда происходит вставка записи об использовании машинного зала, автоматически обновляется состояние компьютера.
  • Когда запись об использовании машинного зала обновляется, автоматически обновляется состояние компьютера. ### Состояние компьютера = 'Свободен' WHERE идентификатор_компьютера = NEW.идентификатор_компьютера;

КОНЕЦ ЕСЛИ;

КОНЕЦ$

DELIMITER ;


### Таблица записей потерь

#### Оператор создания таблицы

```sql
CREATE TABLE `loss_record` (
  `serial_num` varchar(20)NOT NULL,
  `ltime` datetime,
  `cardid` char(5),
  `opeartor_id` char(5),
  `state` tinyint(1),
  PRIMARY KEY (`serial_num`),
  FOREIGN KEY (`cardid`) REFERENCES `card` (`cardid`) ON DELETE CASCADE
);

Триггер

# Когда в таблицу записей потерь вставляется запись, автоматически обновляется состояние карты
DROP TRIGGER IF EXISTS update_state;
DELIMITER $
CREATE TRIGGER update_state AFTER INSERT ON loss_record FOR EACH ROW
BEGIN
    CASE NEW.state
    WHEN 0 THEN
        UPDATE card SET state=0 WHERE cardid=NEW.cardid;
    WHEN 1 THEN
        UPDATE card SET state=1 WHERE cardid=NEW.cardid;
    END CASE;
END$
DELIMITER ;

Таблица записей пополнения

Оператор создания таблицы

CREATE TABLE `charge_record` (
  `serial_num` varchar(20),
  `ctime` datetime,
  `cardid` char(5),
  `money` double,
  `opeartor_id` char(5),
  `state` int,
  PRIMARY KEY (`serial_num`),
  FOREIGN KEY (`cardid`) REFERENCES `card` (`cardid`) ON DELETE CASCADE
);

Триггер

# Когда в таблицу записей пополнения вставляется запись, автоматически обновляется баланс карты
DROP TRIGGER IF EXISTS update_balance;
DELIMITER $
CREATE TRIGGER update_balance AFTER INSERT ON charge_record FOR EACH ROW
BEGIN
    CASE NEW.state
    WHEN 0 THEN
        UPDATE card SET banlance=banlance-NEW.money WHERE cardid=NEW.cardid;
    WHEN 1 THEN
        UPDATE card SET banlance=banlance+NEW.money WHERE cardid=NEW.cardid;
    END CASE;
END$
DELIMITER ;

Таблица операций пользователя

Оператор создания таблицы

CREATE TABLE `user_record` (
  `serial_num` varchar(20),
  `stime` datetime,
  `aid` char(5),
  `change_way` int,
  `sno` char(5),
  PRIMARY KEY (`serial_num`),
  FOREIGN KEY (`aid`) REFERENCES `admin` (`aid`),
  FOREIGN KEY (`sno`) REFERENCES `student` (`sno`) ON DELETE RESTRICT ON UPDATE RESTRICT
);

Настройка представлений

Представление входа

Создание представления

DROP VIEW IF EXISTS login;
CREATE VIEW login AS 
    SELECT sno AS user,spasswd AS passwd,1 AS tag 
    FROM student
UNION
    SELECT aid AS user,apasswd AS passwd,0 AS tag 
    FROM admin;

Общее представление затрат

Создание представления

DROP VIEW IF EXISTS sumcost;
CREATE VIEW sumcost AS
SELECT cardid,DATE_FORMAT(stime, '%Y-%m-%d') day_time,SUM(cost) AS sumcost
FROM record 
WHERE is_using = 0 
GROUP BY cardid,day_time
ORDER BY cardid ASC,day_time ASC;

Представление общего времени использования

Создание представления

DROP VIEW IF EXISTS sumtime;
CREATE VIEW sumtime AS
SELECT cardid,DATE_FORMAT(stime, '%Y-%m-%d') day_time,SEC_TO_TIME(SUM(TIME_TO_SEC(ctime))) AS sumtime
FROM record
WHERE is_using=0
GROUP BY cardid,day_time
ORDER BY cardid ASC,day_time ASC;

Среднее представление времени использования

Создание представления

DROP VIEW IF EXISTS avgtime;
CREATE VIEW avgtime AS
SELECT cardid,DATE_FORMAT(stime, '%Y-%m-%d') day_time,SEC_TO_TIME(AVG(TIME_TO_SEC(ctime))) AS avgtime
FROM record
WHERE is_using=0
GROUP BY cardid,day_time
ORDER BY cardid ASC,day_time ASC;

Представление количества использований

Создание представления

DROP VIEW IF EXISTS times;
CREATE VIEW times AS
SELECT cardid,DATE_FORMAT(stime, '%Y-%m-%d') day_time,COUNT(*) AS times
FROM record
WHERE is_using=0
GROUP BY cardid,day_time
ORDER BY cardid ASC,day_time ASC;

Код программы

Исходный код соответствует лицензии GNU General Public License v3.0.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Система управления сбором платежей для серверных комнат на основе Qt и MySQL. Развернуть Свернуть
GPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/luoboQAQ-charge-manager.git
git@api.gitlife.ru:oschina-mirror/luoboQAQ-charge-manager.git
oschina-mirror
luoboQAQ-charge-manager
luoboQAQ-charge-manager
master