结对作业1
🎓 学生成绩管理系统功能模块实现说明
功能模块一:学生信息管理模块
🔹 描述:
该模块用于对学生的基本信息进行增删改查(CRUD)操作,包括添加新学生、修改已有学生资料、删除学生记录以及按条件查询学生数据。
🔹 技术栈示例(以 Python Flask + MySQL 为例):
1. 数据库设计(MySQL)
sql
CREATE TABLE Students (
StudentID VARCHAR(20) PRIMARY KEY, -- 学号
Name VARCHAR(50), -- 姓名
Gender CHAR(2), -- 性别(男/女)
BirthDate DATE, -- 出生日期
Class VARCHAR(50), -- 班级
Contact VARCHAR(100) -- 联系方式
);
2. 后端接口(Flask)
python
from flask import Flask, request, jsonify
import mysql.connector
app = Flask(__name__)
# 数据库连接配置
db = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="student_management"
)
@app.route('/students', methods=['POST'])
def add_student():
data = request.json
cursor = db.cursor()
sql = "INSERT INTO Students (StudentID, Name, Gender, BirthDate, Class, Contact) VALUES (%s, %s, %s, %s, %s, %s)"
values = (data['StudentID'], data['Name'], data['Gender'], data['BirthDate'], data['Class'], data['Contact'])
cursor.execute(sql, values)
db.commit()
return jsonify({"message": "学生信息已添加"}), 201
@app.route('/students/<student_id>', methods=['GET'])
def get_student(student_id):
cursor = db.cursor(dictionary=True)
sql = "SELECT * FROM Students WHERE StudentID = %s"
cursor.execute(sql, (student_id,))
result = cursor.fetchone()
if result:
return jsonify(result)
else:
return jsonify({"error": "未找到该学生"}), 404
@app.route('/students/<student_id>', methods=['PUT'])
def update_student(student_id):
data = request.json
cursor = db.cursor()
sql = """UPDATE Students SET Name=%s, Gender=%s, BirthDate=%s, Class=%s, Contact=%s WHERE StudentID=%s"""
values = (data['Name'], data['Gender'], data['BirthDate'], data['Class'], data['Contact'], student_id)
cursor.execute(sql, values)
db.commit()
return jsonify({"message": "学生信息已更新"})
@app.route('/students/<student_id>', methods=['DELETE'])
def delete_student(student_id):
cursor = db.cursor()
sql = "DELETE FROM Students WHERE StudentID = %s"
cursor.execute(sql, (student_id,))
db.commit()
return jsonify({"message": "学生信息已删除"})
3. 前端界面(Vue.js 示例)
html
<template>
<div>
<h2>学生信息管理</h2>
<form @submit.prevent="addStudent">
<input v-model="newStudent.StudentID" placeholder="学号" required />
<input v-model="newStudent.Name" placeholder="姓名" required />
...
<button type="submit">添加学生</button>
</form>
<ul>
<li v-for="student in students" :key="student.StudentID">
{{ student.Name }} - {{ student.Class }}
<button @click="deleteStudent(student.StudentID)">删除</button>
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
students: [],
newStudent: {}
}
},
mounted() {
this.fetchStudents();
},
methods: {
fetchStudents() {
fetch('http://localhost:5000/students')
.then(res => res.json())
.then(data => this.students = data);
},
addStudent() {
fetch('http://localhost:5000/students', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(this.newStudent)
}).then(() => this.fetchStudents());
},
deleteStudent(id) {
fetch(`http://localhost:5000/students/${id}`, {
method: 'DELETE'
}).then(() => this.fetchStudents());
}
}
}
</script>
功能模块三:成绩录入与管理模块
🔹 描述:
此模块负责学生的成绩录入、修改、删除及查询功能,支持多课程成绩管理,并可判断是否及格。
🔹 技术实现:
1. 数据库设计(MySQL)
sql
CREATE TABLE Scores (
ScoreID INT AUTO_INCREMENT PRIMARY KEY,
StudentID VARCHAR(20),
CourseName VARCHAR(100),
Score DECIMAL(5,2),
ExamDate DATE,
FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);
2. 后端接口(Flask)
python
@app.route('/scores', methods=['POST'])
def add_score():
data = request.json
cursor = db.cursor()
sql = "INSERT INTO Scores (StudentID, CourseName, Score, ExamDate) VALUES (%s, %s, %s, %s)"
values = (data['StudentID'], data['CourseName'], data['Score'], data['ExamDate'])
cursor.execute(sql, values)
db.commit()
return jsonify({"message": "成绩已录入"}), 201
@app.route('/scores/student/<student_id>', methods=['GET'])
def get_scores_by_student(student_id):
cursor = db.cursor(dictionary=True)
sql = "SELECT * FROM Scores WHERE StudentID = %s"
cursor.execute(sql, (student_id,))
results = cursor.fetchall()
return jsonify(results)
3. 前端界面(Vue.js 示例)
html
<template>
<div>
<h2>成绩录入</h2>
<form @submit.prevent="submitScore">
<input v-model="score.StudentID" placeholder="学号" required />
<input v-model="score.CourseName" placeholder="课程名" required />
<input v-model="score.Score" placeholder="分数" type="number" step="0.01" required />
<button type="submit">提交成绩</button>
</form>
<table>
<tr v-for="item in scores" :key="item.ScoreID">
<td>{{ item.CourseName }}</td>
<td>{{ item.Score }}</td>
<td :class="{ 'text-danger': item.Score < 60 }">{{ item.Score >= 60 ? '及格' : '不及格' }}</td>
</tr>
</table>
</div>
</template>
<script>
export default {
data() {
return {
score: {},
scores: []
}
},
mounted() {
this.fetchScores();
},
methods: {
submitScore() {
fetch('http://localhost:5000/scores', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(this.score)
}).then(() => this.fetchScores());
},
fetchScores() {
fetch('http://localhost:5000/scores/student/' + this.$route.params.studentId)
.then(res => res.json())
.then(data => this.scores = data);
}
}
}
</script>
更多推荐


所有评论(0)