简介

使用工具:

Python,PyQt ,Flask ,MySQL

注:制作重点在网页端,因此网页端的功能更全

WEB界面展示:

系统登录分为管理员,老师,学生3部分

管理员统一管理所有的账号信息以及登录信息

老师管理,添加,修改班级,学生的成绩信息

学生只能查看成绩信息,不能做出修改

PYQT界面展示:

数据库创建:

项目目录

Project-

– PYQT # 存放软件端的代码文件(运行login.py启动程序)

– static # 存放静态资源(图片等)

-templates# 存放网页端的代码

– app.py# 启动网页端系统

-student.sql # 数据库文件

代码

简单放一个登录的代码

from flask import Flask, jsonify, render_template, request, redirect, url_for, sessionimport mysql.connectorimport matplotlib.pyplot as pltimport pandas as pdimport matplotlibmatplotlib.use('agg')from matplotlib.font_manager import FontPropertiesfrom io import BytesIOimport base64from flask import render_template_stringimport osfrom datetime import datetimefrom collections import defaultdict# 预设字体格式,并传给rc方法font = {'family': 'SimHei', "size": 12}matplotlib.rc('font', **font)# 一次定义终身使用# Set font properties for Chinese charactersfont_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 detailsDB_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 connectionexcept mysql.connector.Error as err:print(f"Error: {err}")return Nonedef 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 herecursor.execute(query)result = cursor.fetchone()elif role == '老师':table_name = 'admin_teachers'# Check administrator logincursor = 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 herecursor.execute(query)result = cursor.fetchone()elif role == '学生':table_name = 'admin_students'# Check administrator logincursor = 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 herecursor.execute(query)result = cursor.fetchone()if result:# Save login record in data_8save_login_record(connection, role, account)return bool(result)except mysql.connector.Error as err:print(f"Error: {err}")return Falsefinally: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'] = roleif role == '学生':session['account'] = accountprint("===================",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 neededdef get_table_name(role):# Implement logic to determine the table name based on the roleif role == '管理员':return 'admin'elif role == '老师':return 'admin_teachers'elif role == '学生':return 'admin_students'else:return Nonedef 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 dictionariesfor row in login_records:data_8.append({'role': row[0],'account': row[1],'login_time': row[2]})return data_8except 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 databaseconnection = mysql.connector.connect(host='localhost',user='root',password='123456',database='Student')cursor = connection.cursor()# Execute a query to fetch data from the admin tablequery = "SELECT Mainid, Username, Password, Name FROM admin"cursor.execute(query)# Fetch all rows from the resultrows = cursor.fetchall()# Convert rows to a list of dictionariesfor 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 connectioncursor.close()connection.close()return data

百度云链接:

链接:https://pan.baidu.com/s/13HtbUm0Wwd0RT_cY61M57A?pwd=o102
提取码:o102
–来自百度网盘超级会员V5的分享

系统可能还存在某些不完善的地方,欢迎讨论