
基于 Python 的学生成绩管理系统
1. 项目背景
学生成绩管理系统是学校用于管理学生信息、课程信息和成绩的工具。通过开发一个简单的学生成绩管理系统,学生可以掌握 Python 的基本语法、文件操作、数据库交互以及面向对象编程等技能。该系统可以帮助学校高效地管理学生成绩,并提供查询、统计等功能。
2. 功能需求
- 学生管理:添加、删除、修改和查询学生信息。
- 课程管理:添加、删除、修改和查询课程信息。
- 成绩管理:录入、修改和查询学生成绩。
- 数据存储:使用 SQLite 数据库存储学生、课程和成绩信息。
3. 技术选型
- 编程语言:Python
- 数据库:SQLite(轻量级,适合小型项目)
- 前端:命令行界面(CLI)
4. 系统设计
4.1 数据库设计
- 学生表(Students):
id:学生编号(主键)name:学生姓名age:学生年龄gender:学生性别
- 课程表(Courses):
id:课程编号(主键)name:课程名称teacher:授课教师
- 成绩表(Scores):
id:成绩编号(主键)student_id:学生编号(外键)course_id:课程编号(外键)score:成绩
4.2 功能模块
- 学生管理模块:实现学生的增删改查功能。
- 课程管理模块:实现课程的增删改查功能。
- 成绩管理模块:实现成绩的录入、修改和查询功能。
5. 核心代码实现
import sqlite3
# 连接数据库
conn = sqlite3.connect('school.db')
cursor = conn.cursor()
# 创建学生表
cursor.execute('''
CREATE TABLE IF NOT EXISTS Students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
gender TEXT
)
''')
# 创建课程表
cursor.execute('''
CREATE TABLE IF NOT EXISTS Courses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
teacher TEXT
)
''')
# 创建成绩表
cursor.execute('''
CREATE TABLE IF NOT EXISTS Scores (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id INTEGER,
course_id INTEGER,
score REAL,
FOREIGN KEY (student_id) REFERENCES Students (id),
FOREIGN KEY (course_id) REFERENCES Courses (id)
)
''')
# 添加学生
def add_student(name, age, gender):
cursor.execute('''
INSERT INTO Students (name, age, gender)
VALUES (?, ?, ?)
''', (name, age, gender))
conn.commit()
print("学生添加成功!")
# 添加课程
def add_course(name, teacher):
cursor.execute('''
INSERT INTO Courses (name, teacher)
VALUES (?, ?)
''', (name, teacher))
conn.commit()
print("课程添加成功!")
# 录入成绩
def add_score(student_id, course_id, score):
cursor.execute('''
INSERT INTO Scores (student_id, course_id, score)
VALUES (?, ?, ?)
''', (student_id, course_id, score))
conn.commit()
print("成绩录入成功!")
# 查询学生成绩
def query_scores(student_id):
cursor.execute('''
SELECT Students.name, Courses.name, Scores.score
FROM Scores
JOIN Students ON Scores.student_id = Students.id
JOIN Courses ON Scores.course_id = Courses.id
WHERE Students.id = ?
''', (student_id,))
scores = cursor.fetchall()
for score in scores:
print(f"学生: {score[0]}, 课程: {score[1]}, 成绩: {score[2]}")
# 主程序
if __name__ == "__main__":
# 添加测试数据
add_student("张三", 20, "男")
add_student("李四", 21, "女")
add_course("Python编程", "王老师")
add_course("数据结构", "李老师")
# 录入成绩
add_score(1, 1, 95) # 张三的 Python 编程成绩
add_score(1, 2, 88) # 张三的数据结构成绩
add_score(2, 1, 92) # 李四的 Python 编程成绩
# 查询学生成绩
print("张三的成绩:")
query_scores(1)
print("\n李四的成绩:")
query_scores(2)
6. 运行效果
- 添加学生和课程:
- 学生“张三”和“李四”被添加到数据库中。
- 课程“Python编程”和“数据结构”被添加到数据库中。
- 录入成绩:
- 张三的 Python 编程成绩为 95 分,数据结构成绩为 88 分。
- 李四的 Python 编程成绩为 92 分。
- 查询成绩:
- 查询张三的成绩,输出:
学生: 张三, 课程: Python编程, 成绩: 95.0 学生: 张三, 课程: 数据结构, 成绩: 88.0 - 查询李四的成绩,输出:
学生: 李四, 课程: Python编程, 成绩: 92.0
- 查询张三的成绩,输出:
7. 总结
通过本项目的开发,我们实现了一个简单的学生成绩管理系统,涵盖了学生管理、课程管理和成绩管理等功能。Python 的简洁语法和 SQLite 的轻量级特性使得该项目易于实现和扩展。未来可以进一步优化系统,例如:
- 添加用户权限管理。
- 开发图形用户界面(GUI)。
- 支持数据导出和导入功能。
希望这篇文章能为你的毕业设计提供帮助!如果需要更多功能或优化建议,可以随时告诉我!😊
8978

被折叠的 条评论
为什么被折叠?



