Python,PyQt ,Flask ,MySQL
注:制作重点在网页端,因此网页端的功能更全
管理员统一管理所有的账号信息以及登录信息
老师管理,添加,修改班级,学生的成绩信息
学生只能查看成绩信息,不能做出修改
Project-
- PYQT # 存放软件端的代码文件(运行login.py启动程序)
- static # 存放静态资源(图片等)
- templates # 存放网页端的代码
- app.py # 启动网页端系统
- student.sql # 数据库文件
简单放一个登录的代码
from flask import Flask, jsonify, render_template, request, redirect, url_for, session import mysql.connector import matplotlib.pyplot as plt import pandas as pd import matplotlib matplotlib.use('agg') from matplotlib.font_manager import FontProperties from io import BytesIO import base64 from flask import render_template_string import os from datetime import datetime from collections import defaultdict # 预设字体格式,并传给rc方法 font = {'family': 'SimHei', "size": 12} matplotlib.rc('font', **font) # 一次定义终身使用 # Set font properties for Chinese characters font_prop = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf', size=12) app = Flask(__name__) app.secret_key = 'your_secret_key' # Change this to a secure secret key # Replace these placeholders with your database connection details DB_HOST = 'localhost' DB_USER = 'root' DB_PASSWORD = '123456' DB_DATABASE = 'Student' def connect_to_database(): try: connection = mysql.connector.connect( host=DB_HOST, user=DB_USER, password=DB_PASSWORD, database=DB_DATABASE ) return connection except mysql.connector.Error as err: print(f"Error: {err}") return None def save_login_record(connection, role, account): try: cursor = connection.cursor() login_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') query = f"INSERT INTO login_record (role, account, login_time) VALUES ('{role}', '{account}', '{login_time}')" cursor.execute(query) connection.commit() except mysql.connector.Error as err: print(f"Error: {err}") finally: cursor.close() def check_admin_login(connection, table_name, account, password, role): try: if role == '管理员': table_name = 'admin' cursor = connection.cursor() print(table_name,account,password,role) query = f"SELECT * FROM {table_name} WHERE Mainid='{account}' AND password='{password}'" # Implement your database query logic here cursor.execute(query) result = cursor.fetchone() elif role == '老师': table_name = 'admin_teachers' # Check administrator login cursor = connection.cursor() print(table_name,account,password,role) query = f"SELECT * FROM {table_name} WHERE Teacherid='{account}' AND password='{password}'" # Implement your database query logic here cursor.execute(query) result = cursor.fetchone() elif role == '学生': table_name = 'admin_students' # Check administrator login cursor = connection.cursor() print(table_name,account,password,role) query = f"SELECT * FROM {table_name} WHERE Studentid='{account}' AND password='{password}'" # Implement your database query logic here cursor.execute(query) result = cursor.fetchone() if result: # Save login record in data_8 save_login_record(connection, role, account) return bool(result) except mysql.connector.Error as err: print(f"Error: {err}") return False finally: cursor.close() @app.route('/') def index(): return render_template('login.html') @app.route('/login', methods=['POST']) def login(): account = request.form['account'] password = request.form['password'] role = request.form['role'] connection = connect_to_database() if connection is None: return render_template('login_failed.html', message='Failed to connect to the database.') table_name = get_table_name(role) if check_admin_login(connection, table_name, account, password, role): session['role'] = role if role == '学生': session['account'] = account print("===================",session['account']) return redirect(url_for('admin_dashboard')) else: return render_template('login_failed.html', message='Invalid username or password.') @app.route('/admin/dashboard') def admin_dashboard(): role = session.get('role') if role == '管理员': data = fetch_admin_data() data_1 = fetch_admin_teacher_data() data_2 = fetch_admin_student_data() data_8 = fetch_login_records() data_10 = populate_tree_model_10() return render_template('admin_dashboard.html', role=role, data=data, data_1=data_1, data_2=data_2, data_8 = data_8, data_10 = data_10) elif role == '老师': data_2 = fetch_admin_student_data() data_3 = populate_tree_model_2() data_4 = populate_tree_model_6() data_5 = populate_tree_model_4() data_6 = populate_tree_model_7() data_7 = populate_tree_model_5() data_9 = populate_tree_model_9() scatter_plot_files = show_images() data_10 = populate_tree_model_10() return render_template('teacher_dashboard.html',scatter_plot_files = scatter_plot_files, role=role, data_2=data_2, data_3=data_3, data_4=data_4, data_5=data_5, data_6=data_6, data_7=data_7, data_9=data_9, data_10 = data_10) elif role == '学生': account = session.get('account') data_3 = populate_tree_model_2() data_4 = populate_tree_model_6() data_5 = populate_tree_model_4() data_6 = populate_tree_model_7() data_7 = populate_tree_model_5() data_8 = show_info() print("===================----------------",session['account']) return render_template('student_dashboard.html', studentID=account, data_3=data_3, data_4=data_4, data_5=data_5, data_6=data_6, data_7=data_7, data_8=data_8) else: return redirect(url_for('index')) # Add routes for other pages as needed def get_table_name(role): # Implement logic to determine the table name based on the role if role == '管理员': return 'admin' elif role == '老师': return 'admin_teachers' elif role == '学生': return 'admin_students' else: return None def fetch_login_records(): data_8 = [] try: connection = connect_to_database() if connection is None: return [] cursor = connection.cursor() query = "SELECT * FROM login_record" cursor.execute(query) login_records = cursor.fetchall() # Convert rows to a list of dictionaries for row in login_records: data_8.append({ 'role': row[0], 'account': row[1], 'login_time': row[2] }) return data_8 except mysql.connector.Error as err: print(f"Error: {err}") return [] finally: cursor.close() if connection: connection.close() def fetch_admin_data(): data = [] try: # Connect to the MySQL database connection = mysql.connector.connect( host='localhost', user='root', password='123456', database='Student' ) cursor = connection.cursor() # Execute a query to fetch data from the admin table query = "SELECT Mainid, Username, Password, Name FROM admin" cursor.execute(query) # Fetch all rows from the result rows = cursor.fetchall() # Convert rows to a list of dictionaries for row in rows: data.append({ 'Mainid': row[0], 'Username': row[1], 'Password': row[2], 'Name': row[3] }) except mysql.connector.Error as err: print(f"Error: {err}") finally: # Close the cursor and connection cursor.close() connection.close() return data
链接:https://pan.baidu.com/s/13HtbUm0Wwd0RT_cY61M57A?pwd=o102
提取码:o102
--来自百度网盘超级会员V5的分享
系统可能还存在某些不完善的地方,欢迎讨论