学生信息管理系统-教师端

前言

  基于python的学生信息管理系统-教师端,使用csv文件进行存储数据,操作界面为dos窗口
model.py			用于将StudentInfo.csv文件中的文本数据转换为可操作的对象
server.py			业务实现模块,==运行这个文件启动系统==
StudentInfo.csv	     存储学生信息数据的文件,会自动生成
utils.py			工具模块,查询、添加等功能的具体实现
  操作界面及演示
### 请输入序号选择操作: ###
    1   查询单个学生信息
    2   查询全部学生信息
    3   添加学生信息
    4   删除学生信息
    5   修改学生信息
    6   退出系统
    
请输入操作序号:3
请输入要添加的学生数据并用','间隔:1,小明,男,123
添加成功!

### 请输入序号选择操作: ###
    1   查询单个学生信息
    2   查询全部学生信息
    3   添加学生信息
    4   删除学生信息
    5   修改学生信息
    6   退出系统
    
请输入操作序号:2
学号:1   姓名:小明    性别:男    班级号:123

### 请输入序号选择操作: ###
    1   查询单个学生信息
    2   查询全部学生信息
    3   添加学生信息
    4   删除学生信息
    5   修改学生信息
    6   退出系统
    
请输入操作序号:6
系统已退出!

StudentInfo.csv文件展示:

在这里插入图片描述

系统运作简析

  1. 启动系统时从磁盘中读取StudentInfo.csv文件,并将所有数据转换为对象储存在内存中
  2. 对内存中的数据对象进行操作(增 删 查 改)
  3. 退出系统时再将内存中的数据对象写入磁盘中(所以必须输入序号6,正常退出系统才能保存数据)

具体实现代码

model.py

# 创建学生信息模型
class StudentInfo(object):
    """
    用于将StudentInfo.csv文件中的文本数据转换为对象
    """
    # 因为是基于csv文件存储数据,所以分隔符使用","
    def __init__(self, data: str, sep=","):
        data_list = data.split(sep)
        self.sid = data_list[0]
        self.name = data_list[1]
        self.gender = data_list[2]
        self.classid = data_list[3]

    def to_csv_str(self):
        """
        生成用于写入csv文件的文本数据
        :return: str
        """
        return ",".join((self.sid, self.name, self.gender, self.classid)) + "\n"

    # 重写str方法,用于输出学生信息
    def __str__(self):
        return f"学号:{self.sid}   姓名:{self.name}    性别:{self.gender}    班级号:{self.classid}"

    @staticmethod
    def get_csv_head():
        """
        csv文件标头
        :return: str
        """
        return "学号,姓名,性别,班级号\n"

server.py

from model import StudentInfo
import utils

# 使用列表存储学生对象
StudentInfoObject = []
r_object = utils.get_read_file_object()
# 先把StudentInfo.csv文件标头读取去掉
r_object.readline()
while True:
    #
    data = r_object.readline().strip()
    if data:
        StudentInfoObject.append(StudentInfo(data))
    else:
        r_object.close()
        break

while True:
    try:
        utils.print_mean()
        num = input("请输入操作序号:")
        if num == "1":
            sid = input("请输入查询的学号:")
            utils.select_one_student_info(StudentInfoObject, sid)
            continue
        elif num == "2":
            utils.select_all_student_info(StudentInfoObject)
            continue
        elif num == "3":
            str_data = input("请输入要添加的学生数据并用','间隔:")
            utils.add_student_info(StudentInfoObject, str_data)
            continue
        elif num == "4":
            str_data = input("请输入要删除的学生学号:")
            utils.delete_student_info(StudentInfoObject, str_data)
            continue
        elif num == "5":
            str_data = input("请输入要修改的学生数据并用','间隔:")
            utils.alter_student_info(StudentInfoObject, str_data)
            continue
        elif num == "6":
            utils.exit_system(StudentInfoObject)
        else:
            print("请正确输入序号!")
            continue
    except Exception:
        print("请正确输入信息!")
        continue

utils.py

import sys
from model import StudentInfo


def get_read_file_object():
    """
    获取一个只读文件对象
    :return: file_object
    """
    try:
        r_object = open("StudentInfo.csv", "r", encoding="utf-8")
        return r_object
    except Exception:
        # StudentInfo.csv文件不存在则自动创建文件
        with open("StudentInfo.csv", "w", encoding="utf-8") as file_object:
            file_object.writelines(StudentInfo.get_csv_head())
        print("文件不存在,已自动创建!")
        try:
            r_object = open("StudentInfo.csv", "r", encoding="utf-8")
            return r_object
        except Exception as error:
            print(error)


def get_write_file_object():
    """
    获取一个只写文件对象
    :return: file_object
    """
    try:
        w_object = open("StudentInfo.csv", "w", encoding="utf-8")
        return w_object
    except Exception as error:
        print(error)


def print_mean():
    """
    输出控制菜单
    :return:
    """
    print("""
### 请输入序号选择操作: ###
    1   查询单个学生信息
    2   查询全部学生信息
    3   添加学生信息
    4   删除学生信息
    5   修改学生信息
    6   退出系统
    """)


def select_one_student_info(object_list, sid):
    """
    查询单个学生信息
    :param object_list:存储学生对象的列表
    :param sid: 查询学生的id
    :return: None
    """
    for i in object_list:
        if i.sid == sid:
            print(i)
            break
    else:
        print("未找到该学生!")


def select_all_student_info(object_list):
    """
    查询全部学生信息
    :param object_list: 存储学生对象的列表
    :return: None
    """
    for i in object_list:
        print(i)


def add_student_info(object_list, str_data):
    """
    添加学生信息
    :param object_list: 存储学生对象的列表
    :param str_data: 以","间隔的学生信息
    :return: None
    """
    object_list.append(StudentInfo(str_data))
    print("添加成功!")


def delete_student_info(object_list, sid):
    """
    删除学生信息
    :param object_list: 存储学生对象的列表
    :param sid: 删除学生的id
    :return: None
    """
    for i in object_list:
        if i.sid == sid:
            object_list.remove(i)
            print("删除成功!")
            break
    else:
        print("未找到该学生!")


def alter_student_info(object_list, str_data):
    """
    修改学生信息
    :param object_list: 存储学生对象的列表
    :param str_data: ","间隔的学生信息
    :return:
    """
    tmp_object = StudentInfo(str_data)
    for i in object_list:
        if i.sid == tmp_object.sid:
            object_list.remove(i)
            object_list.append(tmp_object)
            print("修改成功!")
            break
    else:
        print("未找到该学生!")


def exit_system(object_list):
    """
    退出系统,并将数据写入文件
    :param object_list: 存储学生对象的列表
    :return:
    """
    try:
        w_file_object = get_write_file_object()
        w_file_object.writelines(StudentInfo.get_csv_head())
        for i in object_list:
            str_data = i.to_csv_str()
            w_file_object.writelines(str_data)
        else:
            w_file_object.close()
            print("系统已退出!")
            sys.exit()
    except Exception as error:
        print(error)


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值