Python实战:手把手教你打造学生管理系统

包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取】

前言
学生管理系统是学习Python编程的一个经典实战项目,它涵盖了文件操作、数据结构、面向对象编程等核心知识点。本文将带你从零开始,使用Python开发一个功能完整的学生管理系统,适合Python初学者练手。

一、系统功能设计
我们首先规划系统的基本功能:

学生信息管理:添加、删除、修改、查询学生信息

学生成绩管理:录入、修改、统计成绩

数据持久化:将数据保存到文件

用户界面:简单的控制台交互界面

二、核心代码实现

  1. 学生类设计
class Student:
    def __init__(self, id, name, gender, age, scores=None):
        self.id = id          # 学号
        self.name = name      # 姓名
        self.gender = gender  # 性别
        self.age = age       # 年龄
        self.scores = scores if scores else {}  # 成绩字典,科目:分数
        
    def __str__(self):
        score_info = ', '.join([f"{k}:{v}" for k, v in self.scores.items()])
        return f"学号:{self.id} 姓名:{self.name} 性别:{self.gender} 年龄:{self.age} 成绩:{score_info}"
  1. 管理系统类设计
import json
import os

class StudentManager:
    def __init__(self, file_path='students.json'):
        self.file_path = file_path
        self.students = {}
        self.load_data()
    
    def load_data(self):
        """从文件加载数据"""
        if os.path.exists(self.file_path):
            with open(self.file_path, 'r', encoding='utf-8') as f:
                data = json.load(f)
                for sid, info in data.items():
                    self.students[sid] = Student(
                        id=sid,
                        name=info['name'],
                        gender=info['gender'],
                        age=info['age'],
                        scores=info['scores']
                    )
    
    def save_data(self):
        """保存数据到文件"""
        data = {}
        for sid, student in self.students.items():
            data[sid] = {
                'name': student.name,
                'gender': student.gender,
                'age': student.age,
                'scores': student.scores
            }
        with open(self.file_path, 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=4)
    
    def add_student(self, student):
        """添加学生"""
        if student.id in self.students:
            print(f"学号{student.id}已存在!")
            return False
        self.students[student.id] = student
        self.save_data()
        print("添加成功!")
        return True
    
    def delete_student(self, student_id):
        """删除学生"""
        if student_id not in self.students:
            print(f"学号{student_id}不存在!")
            return False
        del self.students[student_id]
        self.save_data()
        print("删除成功!")
        return True
    
    def update_student(self, student_id, **kwargs):
        """更新学生信息"""
        if student_id not in self.students:
            print(f"学号{student_id}不存在!")
            return False
        
        student = self.students[student_id]
        for key, value in kwargs.items():
            if hasattr(student, key):
                setattr(student, key, value)
        
        self.save_data()
        print("更新成功!")
        return True
    
    def query_student(self, student_id):
        """查询学生信息"""
        student = self.students.get(student_id)
        if student:
            print(student)
        else:
            print(f"学号{student_id}不存在!")
        return student
    
    def list_all_students(self):
        """列出所有学生"""
        if not self.students:
            print("暂无学生信息!")
            return
        
        for student in self.students.values():
            print(student)
    
    def add_score(self, student_id, subject, score):
        """添加成绩"""
        if student_id not in self.students:
            print(f"学号{student_id}不存在!")
            return False
        
        self.students[student_id].scores[subject] = score
        self.save_data()
        print("成绩添加成功!")
        return True
    
    def get_average_score(self, student_id):
        """计算平均成绩"""
        student = self.query_student(student_id)
        if not student or not student.scores:
            return None
        
        return sum(student.scores.values()) / len(student.scores)
  1. 用户界面实现
def show_menu():
    print("\n" + "="*30)
    print("学生管理系统")
    print("1. 添加学生")
    print("2. 删除学生")
    print("3. 修改学生信息")
    print("4. 查询学生信息")
    print("5. 显示所有学生")
    print("6. 录入学生成绩")
    print("7. 计算平均成绩")
    print("0. 退出系统")
    print("="*30)

def main():
    manager = StudentManager()
    
    while True:
        show_menu()
        choice = input("请选择操作:")
        
        if choice == '1':
            print("\n添加学生信息")
            sid = input("学号:")
            name = input("姓名:")
            gender = input("性别:")
            age = input("年龄:")
            student = Student(sid, name, gender, age)
            manager.add_student(student)
        
        elif choice == '2':
            print("\n删除学生")
            sid = input("请输入要删除的学号:")
            manager.delete_student(sid)
        
        elif choice == '3':
            print("\n修改学生信息")
            sid = input("请输入要修改的学号:")
            if sid in manager.students:
                print("请输入要修改的信息(不修改直接回车):")
                name = input(f"姓名({manager.students[sid].name}):") or None
                gender = input(f"性别({manager.students[sid].gender}):") or None
                age = input(f"年龄({manager.students[sid].age}):") or None
                
                update_data = {}
                if name: update_data['name'] = name
                if gender: update_data['gender'] = gender
                if age: update_data['age'] = age
                
                if update_data:
                    manager.update_student(sid, **update_data)
                else:
                    print("未修改任何信息!")
            else:
                print("学号不存在!")
        
        elif choice == '4':
            print("\n查询学生信息")
            sid = input("请输入要查询的学号:")
            manager.query_student(sid)
        
        elif choice == '5':
            print("\n所有学生信息:")
            manager.list_all_students()
        
        elif choice == '6':
            print("\n录入学生成绩")
            sid = input("学号:")
            subject = input("科目:")
            score = float(input("分数:"))
            manager.add_score(sid, subject, score)
        
        elif choice == '7':
            print("\n计算平均成绩")
            sid = input("请输入学号:")
            avg = manager.get_average_score(sid)
            if avg is not None:
                print(f"平均成绩:{avg:.2f}")
            else:
                print("无法计算平均成绩")
        
        elif choice == '0':
            print("感谢使用学生管理系统,再见!")
            break
        
        else:
            print("无效选择,请重新输入!")

if __name__ == '__main__':
    main()

三、系统功能扩展建议
数据验证:添加输入数据的合法性验证

异常处理:增强系统的健壮性

多条件查询:支持按姓名、年龄等条件查询

成绩分析:添加成绩统计、排名功能

图形界面:使用Tkinter或PyQt开发GUI界面

数据库支持:使用SQLite或MySQL替代文件存储

四、项目总结
通过这个项目,我们实现了:

面向对象编程思想的应用

JSON文件的数据持久化

字典等数据结构的灵活使用

控制台交互界面的设计

最后:
希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利
最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取!
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值