前言
基于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文件展示:
系统运作简析
- 启动系统时从磁盘中读取StudentInfo.csv文件,并将所有数据转换为对象储存在内存中
- 对内存中的数据对象进行操作(增 删 查 改)
- 退出系统时再将内存中的数据对象写入磁盘中(所以必须输入序号6,正常退出系统才能保存数据)
具体实现代码
model.py
class StudentInfo(object):
"""
用于将StudentInfo.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"
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()
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:
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)