Compare commits

..

No commits in common. "5f9559ae19ded3246f7caac10428be792f4bf4df" and "7e8cbf5aaaade0a4b19104edea7935a00a5d2048" have entirely different histories.

9 changed files with 4 additions and 409 deletions

View File

@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<title>公告信息</title> <title>课程签到</title>
<meta name="renderer" content="webkit"/> <meta name="renderer" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>

View File

@ -1,84 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>课程签到</title>
<meta name="renderer" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link href="static/css/layui.css" rel="stylesheet">
</head>
<body>
<div class="layui-layout layui-layout-admin">
<div class="layui-header">
<div class="layui-logo layui-hide-xs layui-bg-black">网上上课点名系统</div>
<!-- 头部区域可配合layui 已有的水平导航) -->
<ul class="layui-nav layui-layout-left">
<!-- 移动端显示 -->
<li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-header-event="menuLeft">
<i class="layui-icon layui-icon-spread-left"></i>
</li>
<li class="layui-nav-item layui-hide-xs"><a href="/attendance-teacher/attendance">签到</a></li>
<li class="layui-nav-item layui-hide-xs"><a href="/attendance-teacher/import-class">导入班级</a></li>
</ul>
<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item layui-hide layui-show-sm-inline-block">
<a href="javascript:;">
<img
src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png"
class="layui-nav-img"
/>
{{ session.nickname }}
</a>
<dl class="layui-nav-child">
<dd><a href="/home/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
</dl>
</li>
<li
class="layui-nav-item"
lay-header-event="menuRight"
lay-unselect
></li>
</ul>
</div>
<div class="layui-side layui-bg-black">
<div class="layui-side-scroll">
<!-- 动态加载菜单栏 -->
<ul class="layui-nav layui-nav-tree" lay-filter="test">
</ul>
</div>
</div>
</div>
<script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery -->
<script src="static/layui.js"></script>
<script>
// 请求后端获取菜单数据
$.get('/api/menu', function (menuItems) {
var menuList = $('.layui-nav.layui-nav-tree');
menuList.empty();
menuItems.forEach(function (item) {
var href = item.path || 'javascript:void(0);'; // 提供一个默认值
menuList.append('<li class="layui-nav-item"><a href="' + href + '">' + item.name + '</a></li>');
});
layui.element.render('nav', 'test');
});
layui.use(['jquery'], function () {
var $ = layui.jquery; // 获取Layui的jQuery对象
$('#logoutLink').on('click', function () {
// 向后端发送登出请求
$.get('/logout', function (data) {
// 重定向到登录页面,或根据后端响应做其他处理
window.location.href = '/login';
});
});
});
</script>
</body>
</html>

View File

@ -2,11 +2,11 @@
<html> <html>
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<title>课程签到</title> <title>签到</title>
<meta name="renderer" content="webkit"/> <meta name="renderer" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<link href="static/css/layui.css" rel="stylesheet"> <link href="static/css/layui.css" rel="stylesheet"/>
</head> </head>
<body> <body>

View File

@ -1,76 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>课程类别</title>
<meta name="renderer" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link href="static/css/layui.css" rel="stylesheet"/>
</head>
<body>
<div class="layui-layout layui-layout-admin">
<div class="layui-header">
<div class="layui-logo layui-hide-xs layui-bg-black">网上上课点名系统</div>
<!-- 头部区域可配合layui 已有的水平导航) -->
<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item layui-hide layui-show-sm-inline-block">
<a href="javascript:;">
<img
src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png"
class="layui-nav-img"
/>
{{ session.nickname }}
</a>
<dl class="layui-nav-child">
<dd><a href="/home/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
</dl>
</li>
<li
class="layui-nav-item"
lay-header-event="menuRight"
lay-unselect
></li>
</ul>
</div>
<div class="layui-side layui-bg-black">
<div class="layui-side-scroll">
<!-- 动态加载菜单栏 -->
<ul class="layui-nav layui-nav-tree" lay-filter="test">
</ul>
</div>
</div>
</div>
<script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery -->
<script src="static/layui.js"></script>
<script>
// 请求后端获取菜单数据
$.get('/api/menu', function (menuItems) {
var menuList = $('.layui-nav.layui-nav-tree');
menuList.empty();
menuItems.forEach(function (item) {
var href = item.path || 'javascript:void(0);'; // 提供一个默认值
menuList.append('<li class="layui-nav-item"><a href="' + href + '">' + item.name + '</a></li>');
});
layui.element.render('nav', 'test');
});
layui.use(['jquery'], function () {
var $ = layui.jquery; // 获取Layui的jQuery对象
$('#logoutLink').on('click', function () {
// 向后端发送登出请求
$.get('/logout', function (data) {
// 重定向到登录页面,或根据后端响应做其他处理
window.location.href = '/login';
});
});
});
</script>
</body>
</html>

View File

@ -42,36 +42,6 @@
</ul> </ul>
</div> </div>
</div> </div>
<div class="layui-body">
<!-- 内容主体区域 -->
<div style="padding: 15px;">
<blockquote class="layui-elem-quote layui-text">
课程信息
</blockquote>
<table class="layui-table">
<colgroup>
<col width="150">
<col width="150">
<col width="150">
<col width="100">
<col>
</colgroup>
<thead>
<tr>
<th>课程名称</th>
<th>课程代码</th>
<th>任课教师</th>
<th>学分</th>
<th>课程描述</th>
</tr>
</thead>
<tbody>
<!-- 动态生成的课程信息将填充在这里 -->
</tbody>
</table>
</div>
</div>
</div> </div>
<script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery --> <script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery -->
@ -90,21 +60,6 @@
layui.element.render('nav', 'test'); layui.element.render('nav', 'test');
}); });
$.get('/api/get-course-info', function (courses) {
var tbody = $('.layui-table tbody');
tbody.empty(); // 清空表格现有内容
courses.forEach(function (course) {
var row = '<tr>' +
'<td>' + course.course_name + '</td>' +
'<td>' + course.course_code + '</td>' +
'<td>' + course.instructor_name + '</td>' +
'<td>' + course.credits + '</td>' +
'<td>' + course.description + '</td>' +
'</tr>';
tbody.append(row); // 将新行添加到表格中
});
});
layui.use(['jquery'], function () { layui.use(['jquery'], function () {
var $ = layui.jquery; // 获取Layui的jQuery对象 var $ = layui.jquery; // 获取Layui的jQuery对象

View File

@ -1,101 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>课程签到</title>
<meta name="renderer" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link href="static/css/layui.css" rel="stylesheet">
</head>
<body>
<div class="layui-layout layui-layout-admin">
<div class="layui-header">
<div class="layui-logo layui-hide-xs layui-bg-black">网上上课点名系统</div>
<!-- 头部区域可配合layui 已有的水平导航) -->
<ul class="layui-nav layui-layout-left">
<!-- 移动端显示 -->
<li class="layui-nav-item layui-show-xs-inline-block layui-hide-sm" lay-header-event="menuLeft">
<i class="layui-icon layui-icon-spread-left"></i>
</li>
<li class="layui-nav-item layui-hide-xs"><a href="/attendance-teacher/attendance">签到</a></li>
<li class="layui-nav-item layui-hide-xs"><a href="/attendance-teacher/import-class">导入班级</a></li>
</ul>
<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item layui-hide layui-show-sm-inline-block">
<a href="javascript:;">
<img
src="//unpkg.com/outeres@0.0.10/img/layui/icon-v2.png"
class="layui-nav-img"
/>
{{ session.nickname }}
</a>
<dl class="layui-nav-child">
<dd><a href="/home/profile">资料</a></dd> <!-- 修改这里的href指向/profile -->
<dd><a href="javascript:;" id="logoutLink">登出</a></dd>
</dl>
</li>
<li
class="layui-nav-item"
lay-header-event="menuRight"
lay-unselect
></li>
</ul>
</div>
<div class="layui-side layui-bg-black">
<div class="layui-side-scroll">
<!-- 动态加载菜单栏 -->
<ul class="layui-nav layui-nav-tree" lay-filter="test">
</ul>
</div>
</div>
<div class="layui-body">
<!-- 内容主体区域 -->
<div style="padding: 15px;">
<blockquote class="layui-elem-quote layui-text">
Layui 框体布局内容主体区域
</blockquote>
<div class="layui-card layui-panel">
<div class="layui-card-header">
下面是充数内容,为的是出现滚动条
</div>
<div class="layui-card-body">
充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>充数内容<br>你还真滑到了底部呀
</div>
</div>
<br><br>
</div>
</div>
</div>
<script src="static/jquery.min.js"></script> <!-- 确保已经引入jQuery -->
<script src="static/layui.js"></script>
<script>
// 请求后端获取菜单数据
$.get('/api/menu', function (menuItems) {
var menuList = $('.layui-nav.layui-nav-tree');
menuList.empty();
menuItems.forEach(function (item) {
var href = item.path || 'javascript:void(0);'; // 提供一个默认值
menuList.append('<li class="layui-nav-item"><a href="' + href + '">' + item.name + '</a></li>');
});
layui.element.render('nav', 'test');
});
layui.use(['jquery'], function () {
var $ = layui.jquery; // 获取Layui的jQuery对象
$('#logoutLink').on('click', function () {
// 向后端发送登出请求
$.get('/logout', function (data) {
// 重定向到登录页面,或根据后端响应做其他处理
window.location.href = '/login';
});
});
});
</script>
</body>
</html>

View File

@ -127,15 +127,7 @@ def profile():
@app.route('/course-info', methods=['GET', 'POST']) @app.route('/course-info', methods=['GET', 'POST'])
def course_info(): def course_info():
if request.method == "GET": return render_template('course-info.html')
return render_template('course-info.html')
@app.route('/api/get-course-info', methods=['GET'])
def get_course_info():
db_manager = DatabaseManager()
course_data = db_manager.get_all_courses()
return jsonify(course_data)
@app.route('/attendance', methods=['GET', 'POST']) @app.route('/attendance', methods=['GET', 'POST'])
def course_checkin(): def course_checkin():
@ -145,20 +137,9 @@ def course_checkin():
def announcement(): def announcement():
return render_template('announcement.html') return render_template('announcement.html')
@app.route('/attendance-teacher', methods=['GET', 'POST'])
def announcement_teacher():
return render_template('attendance-teacher.html')
@app.route('/attendance-reminder', methods=['GET', 'POST']) @app.route('/attendance-reminder', methods=['GET', 'POST'])
def attendance_reminder(): def attendance_reminder():
return render_template('attendance-reminder.html') return render_template('attendance-reminder.html')
@app.route('/course-category', methods=['GET', 'POST'])
def course_category():
return render_template('course-category.html')
@app.route('/attendance-teacher/import-class', methods=['GET'])
def import_class():
return render_template('import-class.html')
if __name__ == '__main__': if __name__ == '__main__':
app.run(debug=True) app.run(debug=True)

View File

@ -66,8 +66,3 @@ class DatabaseManager:
sql = "SELECT menu_name,path FROM menu_items WHERE role=%s ORDER BY `order`" sql = "SELECT menu_name,path FROM menu_items WHERE role=%s ORDER BY `order`"
result = self.fetch(sql, (role,)) result = self.fetch(sql, (role,))
return result return result
def get_all_courses(self):
sql = "SELECT course_name, course_code, instructor_name, credits, description FROM courses"
result = self.fetch(sql)
return result

View File

@ -35,78 +35,3 @@ INSERT INTO menu_items (menu_name, role, path, `order`) VALUES
('签到提醒', 'teacher', '/attendance-reminder', 4); ('签到提醒', 'teacher', '/attendance-reminder', 4);
CREATE TABLE courses (
course_id INT AUTO_INCREMENT PRIMARY KEY,
course_name VARCHAR(255) NOT NULL,
course_code VARCHAR(50) NOT NULL,
instructor_name VARCHAR(255) NOT NULL,
credits INT,
description TEXT,
attendance_info TEXT
);
INSERT INTO courses (course_name, course_code, instructor_name, credits, description, attendance_info) VALUES
('高级数学', 'MTH101', 'John Doe', 4, '高级数学是一门研究数学理论的课程,包括微积分、线性代数等', 'JSON或其他格式的签到数据'),
('物理学', 'PHY101', 'Jane Smith', 3, '物理学是自然科学的一部分,涉及物质和能量的性质和现象', 'JSON或其他格式的签到数据'),
('化学', 'CHEM101', 'Emily Davis', 4, '化学是研究物质的组成、结构、性质和变化规律的科学', 'JSON或其他格式的签到数据'),
('英语', 'ENG101', 'Mark Wilson', 3, '英语课程旨在提高学生的语言技能,包括阅读、写作、听力和口语', 'JSON或其他格式的签到数据'),
('生物学', 'BIO101', 'David Johnson', 3, '生物学是自然科学的一部分,研究生命和生物体', 'JSON或其他格式的签到数据'),
('计算机科学', 'CS101', 'Alice Brown', 4, '计算机科学是研究信息和计算机系统的理论基础', 'JSON或其他格式的签到数据'),
('心理学', 'PSY101', 'Chris Green', 3, '心理学是科学研究心理和行为的科学', 'JSON或其他格式的签到数据'),
('历史', 'HIS101', 'Paula Adams', 2, '历史课程涵盖了世界历史的主要事件、人物和发展', 'JSON或其他格式的签到数据'),
('艺术', 'ART101', 'Laura White', 2, '艺术课程探索各种艺术形式和表达方式', 'JSON或其他格式的签到数据'),
('经济学', 'ECO101', 'Peter Parker', 3, '经济学是研究生产、分配和消费资源的社会科学', 'JSON或其他格式的签到数据');
CREATE TABLE attendance_records (
record_id INT AUTO_INCREMENT PRIMARY KEY,
course_id INT NOT NULL,
student_id INT NOT NULL,
date DATE NOT NULL,
status ENUM('present', 'absent', 'late', 'excused'),
FOREIGN KEY (course_id) REFERENCES courses(course_id),
FOREIGN KEY (student_id) REFERENCES students(student_id)
);
CREATE TABLE class_courses (
class_course_id INT AUTO_INCREMENT PRIMARY KEY,
class_id INT NOT NULL,
course_id INT NOT NULL,
FOREIGN KEY (class_id) REFERENCES classes(class_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
CREATE TABLE classes (
class_id INT AUTO_INCREMENT PRIMARY KEY,
class_name VARCHAR(255) NOT NULL,
major VARCHAR(255)
);
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY,
student_number VARCHAR(20) NOT NULL,
student_name VARCHAR(255) NOT NULL,
class_id INT,
FOREIGN KEY (class_id) REFERENCES classes(class_id)
);
INSERT INTO students (student_name, student_number,class_id) VALUES ('王伟',202300001000, 8);
INSERT INTO students (student_name, student_number,class_id) VALUES ('李娜',202300001001, 6);
INSERT INTO students (student_name, student_number,class_id) VALUES ('张伟', 202300001002, 5);
INSERT INTO students (student_name, student_number,class_id) VALUES ('刘洋', 202300001003, 8);
INSERT INTO students (student_name, student_number,class_id) VALUES ('陈敏', 202300001004, 7);
INSERT INTO students (student_name, student_number,class_id) VALUES ('杨静', 202300001005, 1);
INSERT INTO students (student_name, student_number,class_id) VALUES ('赵媛媛',202300001006, 4);
INSERT INTO students (student_name, student_number,class_id) VALUES ('黄进', 202300001007, 6);
INSERT INTO students (student_name, student_number,class_id) VALUES ('周杰',202300001008, 2);
INSERT INTO students (student_name, student_number,class_id) VALUES ('吴琳',202300001009, 1);
INSERT INTO students (student_name, student_number,class_id) VALUES ('徐涛',202300001010, 5);
INSERT INTO students (student_name, student_number,class_id) VALUES ('孙怡', 202300001011, 3);
INSERT INTO students (student_name, student_number,class_id) VALUES ('朱元璋',202300001012, 2);
INSERT INTO students (student_name, student_number,class_id) VALUES ('马云', 202300001013, 4);
INSERT INTO students (student_name, student_number,class_id) VALUES ('胡雪', 202300001014, 7);
INSERT INTO students (student_name, student_number,class_id) VALUES ('郭敬明', 202300001015, 9);
INSERT INTO students (student_name, student_number,class_id) VALUES ('林芳', 202300001016, 6);
INSERT INTO students (student_name, student_number,class_id) VALUES ('段誉', 202300001017, 4);
INSERT INTO students (student_name, student_number,class_id) VALUES ('曹操', 202300001018, 2);
INSERT INTO students (student_name, student_number,class_id) VALUES ('刘备', 202300001019, 2);