隨著信息技術的不斷發展,教育信息化已成為現代教育的重要組成部分。學生成績管理系統作為教育信息化的重要工具,能夠有效地幫助學校管理學生的成績信息,提高教學管理的效率。本文將詳細介紹如何使用Python編寫一個學生成績管理系統,包括系統的邏輯結構設計、功能實現、測試以及優化與擴展。
學生成績管理系統的主要功能包括:
學生成績管理系統采用典型的三層架構,包括:
系統使用關系型數據庫(如MySQL)存儲數據,主要包含以下表:
系統主要分為以下幾個模塊:
首先,創建數據庫和表結構:
CREATE DATABASE StudentManagement;
USE StudentManagement;
CREATE TABLE Student (
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender ENUM('男', '女') NOT NULL,
birth_date DATE NOT NULL
);
CREATE TABLE Course (
course_id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(100) NOT NULL,
credit FLOAT NOT NULL
);
CREATE TABLE Score (
score_id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
score FLOAT,
FOREIGN KEY (student_id) REFERENCES Student(student_id),
FOREIGN KEY (course_id) REFERENCES Course(course_id)
);
CREATE TABLE User (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
role ENUM('admin', 'teacher', 'student') NOT NULL
);
from flask import Flask, request, jsonify
import mysql.connector
app = Flask(__name__)
# 數據庫連接配置
db_config = {
'host': 'localhost',
'user': 'root',
'password': 'password',
'database': 'StudentManagement'
}
# 添加學生信息
@app.route('/add_student', methods=['POST'])
def add_student():
data = request.json
name = data['name']
gender = data['gender']
birth_date = data['birth_date']
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("INSERT INTO Student (name, gender, birth_date) VALUES (%s, %s, %s)", (name, gender, birth_date))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Student added successfully"}), 201
# 查詢學生信息
@app.route('/get_student/<int:student_id>', methods=['GET'])
def get_student(student_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM Student WHERE student_id = %s", (student_id,))
student = cursor.fetchone()
cursor.close()
conn.close()
if student:
return jsonify(student), 200
else:
return jsonify({"message": "Student not found"}), 404
# 更新學生信息
@app.route('/update_student/<int:student_id>', methods=['PUT'])
def update_student(student_id):
data = request.json
name = data['name']
gender = data['gender']
birth_date = data['birth_date']
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("UPDATE Student SET name = %s, gender = %s, birth_date = %s WHERE student_id = %s", (name, gender, birth_date, student_id))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Student updated successfully"}), 200
# 刪除學生信息
@app.route('/delete_student/<int:student_id>', methods=['DELETE'])
def delete_student(student_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("DELETE FROM Student WHERE student_id = %s", (student_id,))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Student deleted successfully"}), 200
if __name__ == '__main__':
app.run(debug=True)
# 添加課程信息
@app.route('/add_course', methods=['POST'])
def add_course():
data = request.json
course_name = data['course_name']
credit = data['credit']
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("INSERT INTO Course (course_name, credit) VALUES (%s, %s)", (course_name, credit))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Course added successfully"}), 201
# 查詢課程信息
@app.route('/get_course/<int:course_id>', methods=['GET'])
def get_course(course_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM Course WHERE course_id = %s", (course_id,))
course = cursor.fetchone()
cursor.close()
conn.close()
if course:
return jsonify(course), 200
else:
return jsonify({"message": "Course not found"}), 404
# 更新課程信息
@app.route('/update_course/<int:course_id>', methods=['PUT'])
def update_course(course_id):
data = request.json
course_name = data['course_name']
credit = data['credit']
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("UPDATE Course SET course_name = %s, credit = %s WHERE course_id = %s", (course_name, credit, course_id))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Course updated successfully"}), 200
# 刪除課程信息
@app.route('/delete_course/<int:course_id>', methods=['DELETE'])
def delete_course(course_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("DELETE FROM Course WHERE course_id = %s", (course_id,))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Course deleted successfully"}), 200
# 錄入成績
@app.route('/add_score', methods=['POST'])
def add_score():
data = request.json
student_id = data['student_id']
course_id = data['course_id']
score = data['score']
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("INSERT INTO Score (student_id, course_id, score) VALUES (%s, %s, %s)", (student_id, course_id, score))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Score added successfully"}), 201
# 查詢成績
@app.route('/get_score/<int:student_id>/<int:course_id>', methods=['GET'])
def get_score(student_id, course_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM Score WHERE student_id = %s AND course_id = %s", (student_id, course_id))
score = cursor.fetchone()
cursor.close()
conn.close()
if score:
return jsonify(score), 200
else:
return jsonify({"message": "Score not found"}), 404
# 更新成績
@app.route('/update_score/<int:score_id>', methods=['PUT'])
def update_score(score_id):
data = request.json
score = data['score']
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("UPDATE Score SET score = %s WHERE score_id = %s", (score, score_id))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Score updated successfully"}), 200
# 刪除成績
@app.route('/delete_score/<int:score_id>', methods=['DELETE'])
def delete_score(score_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("DELETE FROM Score WHERE score_id = %s", (score_id,))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "Score deleted successfully"}), 200
# 統計學生平均成績
@app.route('/get_average_score/<int:student_id>', methods=['GET'])
def get_average_score(student_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("SELECT AVG(score) as average_score FROM Score WHERE student_id = %s", (student_id,))
result = cursor.fetchone()
cursor.close()
conn.close()
if result and result[0]:
return jsonify({"average_score": result[0]}), 200
else:
return jsonify({"message": "No scores found for this student"}), 404
# 統計課程平均成績
@app.route('/get_course_average_score/<int:course_id>', methods=['GET'])
def get_course_average_score(course_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("SELECT AVG(score) as average_score FROM Score WHERE course_id = %s", (course_id,))
result = cursor.fetchone()
cursor.close()
conn.close()
if result and result[0]:
return jsonify({"average_score": result[0]}), 200
else:
return jsonify({"message": "No scores found for this course"}), 404
# 生成學生成績報表
@app.route('/generate_student_report/<int:student_id>', methods=['GET'])
def generate_student_report(student_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT Course.course_name, Score.score FROM Score JOIN Course ON Score.course_id = Course.course_id WHERE Score.student_id = %s", (student_id,))
scores = cursor.fetchall()
cursor.close()
conn.close()
if scores:
return jsonify(scores), 200
else:
return jsonify({"message": "No scores found for this student"}), 404
# 生成課程成績報表
@app.route('/generate_course_report/<int:course_id>', methods=['GET'])
def generate_course_report(course_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT Student.name, Score.score FROM Score JOIN Student ON Score.student_id = Student.student_id WHERE Score.course_id = %s", (course_id,))
scores = cursor.fetchall()
cursor.close()
conn.close()
if scores:
return jsonify(scores), 200
else:
return jsonify({"message": "No scores found for this course"}), 404
# 用戶登錄
@app.route('/login', methods=['POST'])
def login():
data = request.json
username = data['username']
password = data['password']
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM User WHERE username = %s AND password = %s", (username, password))
user = cursor.fetchone()
cursor.close()
conn.close()
if user:
return jsonify({"message": "Login successful", "role": user['role']}), 200
else:
return jsonify({"message": "Invalid username or password"}), 401
# 添加用戶
@app.route('/add_user', methods=['POST'])
def add_user():
data = request.json
username = data['username']
password = data['password']
role = data['role']
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("INSERT INTO User (username, password, role) VALUES (%s, %s, %s)", (username, password, role))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "User added successfully"}), 201
# 刪除用戶
@app.route('/delete_user/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("DELETE FROM User WHERE user_id = %s", (user_id,))
conn.commit()
cursor.close()
conn.close()
return jsonify({"message": "User deleted successfully"}), 200
系統測試主要采用黑盒測試和白盒測試相結合的方法。黑盒測試主要測試系統的功能是否符合需求,白盒測試主要測試代碼的邏輯是否正確。
添加學生信息
{"name": "張三", "gender": "男", "birth_date": "2000-01-01"}
{"message": "Student added successfully"}
查詢學生信息
student_id = 1
{"student_id": 1, "name": "張三", "gender": "男", "birth_date": "2000-01-01"}
更新學生信息
{"name": "李四", "gender": "女", "birth_date": "2001-01-01"}
{"message": "Student updated successfully"}
刪除學生信息
student_id = 1
{"message": "Student deleted successfully"}
添加課程信息
{"course_name": "數學", "credit": 3}
{"message": "Course added successfully"}
查詢課程信息
course_id = 1
{"course_id": 1, "course_name": "數學", "credit": 3}
更新課程信息
{"course_name": "英語", "credit": 2}
{"message": "Course updated successfully"}
刪除課程信息
course_id = 1
{"message": "Course deleted successfully"}
錄入成績
{"student_id": 1, "course_id": 1, "score": 90}
{"message": "Score added successfully"}
查詢成績
student_id = 1, course_id = 1
-免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。