Система для записи и учета успеваемости слушателей учебных курсов

1.

Волгоградский
государственный
технический
университет
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
Тема: Система для записи и учета успеваемости
слушателей учебных курсов
Авторы:
РМП-4 Киблер Александр Юрьевич
РМП-4 Бирюков Александр Вячеславович
СИИ-3 Громова София Алекснадровна
СИИ-3 Ковылин Егор Антонович
СУБД-5 Акимова Юлия Витальевна
Руководитель работы:
Андреев Андрей Евгеньевич
Волгоград 2023

2.

Цель и задачи ВКР
Целью проекта является создание на базе общей системы
информацонных сервисов и общей базы этих сервисов надстройки
для обработки / учета информации о слушателях курсов повышения
квалификации (включая цифровую кафедру, другие курсы).
Задачами проекта являются:
- Учет информации об имеющихся курсах
- Запись / регистрация слушателя на курс
- Учет данных о курсах в компетенциях студентов
- Связь с системой тестирования (OnlineJudje) вуза
- …
2

3.

Технологии разработки
Для реализации задач проекта было решено использовать в
качестве базовых языки C#, HTML, JS, Python, поскольку они изучались
в рамках курсов Цифровой кафедры. В качестве технологии создания
веб-интерфейса – ASP.NET MVC и RazorPages.
Подключение к базе данных осуществляется с помощью ORM
Entity Framework Core. В качестве платформы создания СУБД был
сделан выбор в пользу MSSQL, однако база данных для модуля по
курсам реализуется на PostgreSQL.
Концепция системы (архитектура) предполагает возможность
интеграции с компонентами, написанными на разных языках,
использующих разные базы данных, через общие модели данных,
Web API (HTTP), во многом-общую базу данных и использование
открытого формата данных JSON.
3

4.

Технологии разработки
4

5.

Прецеденты / блоки данных
П1 Регистрация на курс
П2 Профили слушателей
П3 Данные о программах курсов («активностях»)
П4 Тестирование знаний на входе, в процессе и
после прохождения курса
П5 Рекомендации о прохождении курсов
5

6.

Общая архитектура системы сервисов
6

7.

Общая архитектура системы сервисов
7

8.

Схема данных из системы сервисов
8

9.

Схема данных дополнительной БД
(PostgreSQL)
9

10.

Данные в дополнительной БД (PostgreSQL)
10

11.

Данные в дополнительной БД (PostgreSQL)
11

12.

Внешний вид формы записи на курс в
прототипе (ASP.NET MVC)
12

13.

Внешний вид формы записи на курс в
прототипе (ASP.NET MVC)
13

14.

Фрагмент контроллера
private List<ExtraCourse>? GetCources() {
var BaseAddress = "http://localhost:8002";
var req = BaseAddress + "/extra_courses";
var client = new HttpClient();
Task<string> result = client.GetStringAsync(req);
result = client.GetStringAsync(req);
result.Wait();
List<ExtraCourse>? data = JsonConvert.DeserializeObject<List<ExtraCourse>>(result.Result);
return data;
}
[HttpPost]
public IActionResult Descr(int CourseId) {
List<ExtraCourse>? _courses = GetCources();
var vm = new CourseEnterRegViewModel(_courses);
if (_courses != null)
{
vm.courses = _courses;
vm.Course.Id = CourseId;
vm.Course.Description = vm.courses[CourseId - 1].Description;
}
return View("EnterReg", vm);
}
[HttpPost]
public IActionResult Register(int CourseId, string Name, string Lastname, string Email) {
List<ExtraCourse>? _courses = GetCources();
var vm = new CourseEnterRegViewModel(_courses);
if (_courses != null) {
vm.Course.Id = CourseId;
vm.Course.Description = vm.courses[CourseId - 1].Description;
}
vm.Pers.Name = Name;
vm.Pers.Lastname = Lastname;
vm.Pers.AccEmail = Email;
return View("EnterReg", vm);
}
}
14

15.

Код сервиса на Python (FastAPI + psycopg2)
import psycopg2
from psycopg2 import Error
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
from fastapi import FastAPI, APIRouter
import json
class ExtraCourse:
def __init__(self, _id, _name, _descr):
self.id = _id
self.name = _name
self.description = _descr
def __str__(self):
return str(self.id) + " " + self.name + " " + self.description
def execute_sql(sql_query):
try:
connection = psycopg2.connect(
user="postgres", # логин для подключения к PostgreSQL
password="", # пароль для подключения к PostgreSQL
host="localhost", # обычно - "127.0.0.1" или, что то же самое, "localhost"
port="5432", # обычно - "5432" - для PostgreSQL на localhost
dbname="ExtraCoursesDB" # имя базы данных, в которой хранятся наши таблицы с данными
)
# Курсор для выполнения операций с базой данных
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cursor = connection.cursor()
cursor.execute(sql_query)
return [
list(col.name for col in cursor.description or ()), # столбцы
*(cursor.fetchall() or ())
# данные
]
except (Exception, Error) as error:
print("Ошибка при работе с PostgreSQL:", error)
finally:
if connection:
cursor.close()
connection.close()
# print("Соединение с PostgreSQL закрыто")
return []
15

16.

Код сервиса на Python (FastAPI + psycopg2)
app = FastAPI(
title = "courses API", openapi_url="/openapi.json"
)
api_router = APIRouter()
@api_router.get("/extra_courses", status_code=200)
def root():
"""
Root Get
"""
d = {}
lst = []
try:
sql_query = """SELECT t1.id, t1."Name", t2."Name" as "Tag" FROM "ExtraCourse" as t1, "Tags" as t2,
"CourseTags" as t3 WHERE t1.id = t3.course_id and t2.id = t3.tag_id """
columns, *data = execute_sql(sql_query)
for crs in data:
if crs[1] in d:
d[crs[1]][1] += ", " + crs[2]
else:
d[crs[1]] = [crs[0], crs[2]]
for crs in d:
lst.append(ExtraCourse(d[crs][0], crs, d[crs][1]))
except:
pass
return lst
app.include_router(api_router)
if __name__ == "__main__":
# Use this for debugging purposes only
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8002, log_level="debug")
16

17.

Волгоградский
государственный
технический
университет
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
Тема: Система для записи и учета успеваемости
слушателей учебных курсов
Авторы:
РМП-4 Киблер Александр Юрьевич
РМП-4 Бирюков Александр Вячеславович
СИИ-3 Громова София Алекснадровна
СИИ-3 Ковылин Егор Антонович
СУБД-5 Акимова Юлия Витальевна
Руководитель работы:
Андреев Андрей Евгеньевич
Волгоград 2023
English     Русский Правила