数据库课程设计,学生成绩管理系统代码实例详解(附百度网盘资源)

2026-07-24 02:54:54 76阅读
这是一份适配数据库课程设计的实用资料,结合学生成绩管理场景与百度网盘代码资源,重点围绕代码实例展开系统详解。,资料覆盖核心流程:从实体关系(ER)图梳理、按第三范式规范转合理关系模型的逻辑构建,到SQL建表、成绩录入/查询/统计、学生选课约束、视图存储过程开发等课程级代码实现,为初学者或赶任务的学生提供清晰的搭建指引。

数据库课程设计是计算机类专业将理论知识转化为实践能力的关键环节,而规范、完整的代码是完成设计的核心,本文以经典的“学生成绩管理系统”为例,分享数据库设计、核心功能的代码实现,帮助大家理清思路,高效完成课程设计。

系统需求分析

在写代码前,先明确系统的核心需求:

数据库课程设计,学生成绩管理系统代码实例详解(附百度网盘资源)

  1. 学生信息管理:添加、删除、修改、查询学生基本信息;
  2. 课程信息管理:添加、删除、修改、查询课程信息;
  3. 成绩管理:录入学生成绩、查询学生单科/全部成绩;
  4. 成绩统计:统计某门课程的平均分、最高分、最低分。

数据库设计(SQL代码)

1 数据库表设计思路

系统包含3个核心表,符合关系数据库的第三范式(3NF):

  • 学生表(student):存储学生基本信息;
  • 课程表(course):存储课程信息;
  • 成绩表(score):存储学生选课及成绩信息(关联学生表和课程表)。

2 创建数据库和表的SQL代码

以MySQL为例(若使用SQLite,只需调整数据类型即可):

-- 创建数据库
CREATE DATABASE IF NOT EXISTS student_score_system;
USE student_score_system;
-- 创建学生表
CREATE TABLE IF NOT EXISTS student (
    stu_id VARCHAR(20) PRIMARY KEY COMMENT '学号(主键)',
    stu_name VARCHAR(50) NOT NULL COMMENT '姓名',
    gender VARCHAR(10) COMMENT '性别',
    major VARCHAR(50) COMMENT '专业',
    class_name VARCHAR(30) COMMENT '班级'
) COMMENT='学生信息表';
-- 创建课程表
CREATE TABLE IF NOT EXISTS course (
    course_id VARCHAR(20) PRIMARY KEY COMMENT '课程号(主键)',
    course_name VARCHAR(50) NOT NULL COMMENT '课程名',
    credit DECIMAL(3,1) COMMENT '学分'
) COMMENT='课程信息表';
-- 创建成绩表(联合主键+外键约束)
CREATE TABLE IF NOT EXISTS score (
    stu_id VARCHAR(20) NOT NULL COMMENT '学号',
    course_id VARCHAR(20) NOT NULL COMMENT '课程号',
    score DECIMAL(5,2) COMMENT '成绩',
    PRIMARY KEY (stu_id, course_id) COMMENT '联合主键:学号+课程号',
    FOREIGN KEY (stu_id) REFERENCES student(stu_id) ON DELETE CASCADE,
    FOREIGN KEY (course_id) REFERENCES course(course_id) ON DELETE CASCADE
) COMMENT='成绩表';

核心功能代码实现(Python + SQLite)

为了简化数据库配置,课程设计常用SQLite(无需额外安装数据库软件),以下是基于Python sqlite3库实现的核心功能代码。

1 数据库连接与初始化

import sqlite3
# 连接数据库(不存在则自动创建)
def connect_db():
    conn = sqlite3.connect('student_score.db')
    cursor = conn.cursor()
    # 初始化表(复用上面的SQL,调整为SQLite语法)
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS student (
            stu_id TEXT PRIMARY KEY,
            stu_name TEXT NOT NULL,
            gender TEXT,
            major TEXT,
            class_name TEXT
        )
    ''')
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS course (
            course_id TEXT PRIMARY KEY,
            course_name TEXT NOT NULL,
            credit REAL
        )
    ''')
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS score (
            stu_id TEXT NOT NULL,
            course_id TEXT NOT NULL,
            score REAL,
            PRIMARY KEY (stu_id, course_id),
            FOREIGN KEY (stu_id) REFERENCES student(stu_id),
            FOREIGN KEY (course_id) REFERENCES course(course_id)
        )
    ''')
    conn.commit()
    return conn, cursor
# 关闭数据库连接
def close_db(conn):
    if conn:
        conn.close()

2 学生信息管理功能

# 添加学生
def add_student(cursor, conn, stu_id, stu_name, gender, major, class_name):
    try:
        cursor.execute('''
            INSERT INTO student (stu_id, stu_name, gender, major, class_name)
            VALUES (?, ?, ?, ?, ?)
        ''', (stu_id, stu_name, gender, major, class_name))
        conn.commit()
        print(f"学生{stu_name}添加成功!")
    except sqlite3.IntegrityError:
        print("学号已存在,添加失败!")
# 查询所有学生
def query_all_students(cursor):
    cursor.execute('SELECT * FROM student')
    students = cursor.fetchall()
    if not students:
        print("暂无学生信息")
    else:
        print("学号\t\t姓名\t性别\t专业\t\t班级")
        for s in students:
            print(f"{s[0]}\t{s[1]}\t{s[2]}\t{s[3]}\t{s[4]}")

3 成绩录入与统计功能

# 录入成绩
def add_score(cursor, conn, stu_id, course_id, score):
    try:
        cursor.execute('''
            INSERT INTO score (stu_id, course_id, score)
            VALUES (?, ?, ?)
        ''', (stu_id, course_id, score))
        conn.commit()
        print("成绩录入成功!")
    except sqlite3.IntegrityError:
        print("该学生该课程成绩已存在,或学号/课程号不存在!")
# 统计某门课程的成绩
def stat_course_score(cursor, course_id):
    cursor.execute('''
        SELECT AVG(score), MAX(score), MIN(score) FROM score 
        WHERE course_id = ?
    ''', (course_id,))
    result = cursor.fetchone()
    if result[0] is None:
        print("该课程暂无成绩")
    else:
        print(f"课程{course_id}成绩统计:")
        print(f"平均分:{result[0]:.2f},最高分:{result[1]},最低分:{result[2]}")

4 简单交互菜单

def main():
    conn, cursor = connect_db()
    while True:
        print("\n=== 学生成绩管理系统 ===")
        print("1. 添加学生")
        print("2. 查询所有学生")
        print("3. 录入成绩")
        print("4. 统计课程成绩")
        print("5. 退出")
        choice = input("请输入选项:")
        if choice == '1':
            stu_id = input("学号:")
            stu_name = input("姓名:")
            gender = input("性别:")
            major = input("专业:")
            class_name = input("班级:")
            add_student(cursor, conn, stu_id, stu_name, gender, major, class_name)
        elif choice == '2':
            query_all_students(cursor)
        elif choice == '3':
            stu_id = input("学号:")
            course_id = input("课程号:")
            score = float(input("成绩:"))
            add_score(cursor, conn, stu_id, course_id, score)
        elif choice == '4':
            course_id = input("课程号:")
            stat_course_score(cursor, course_id)
        elif choice == '5':
            close_db(conn)
            print("系统已退出")
            break
        else:
            print("无效选项,请重新输入")
if __name__ == "__main__":
    main()

总结与注意事项

  1. 代码规范:添加清晰的注释,变量名见名知意,方便老师阅读;
  2. 数据库设计:遵循范式要求,合理设置主键和外键,避免数据冗余;
  3. 功能测试:写完代码后要测试增删改查、异常情况(如重复学号);
  4. 拓展思路:可在此基础上添加用户登录、成绩导出等功能,丰富系统。

代码结构清晰、易于理解,适合作为数据库课程设计的基础模板,大家可以根据自己的需求调整技术栈(如改用Java+MySQL)或拓展功能,完成符合要求的课程设计!

文章版权声明:除非注明,否则均为亚朵原创文章,转载或复制请以超链接形式并注明出处。