学生管理系统(面向对象)V2.0
一. 学生管理系统需求分析
学习目标
- 了解学生管理系统的基本需求;
- 了解学生管理系统的基本界面及升级改进的好处;
1. [了解]基本需求
使用面向对象、字符串、列表、字典、文件等知识点来完成一个学生管理系统V2.0
针对学生,该系统具有添加、修改、删除、查询所有学生、查询某个学生、保存信息、退出系统等操作。
升级目的:
1:提升项目的整体维护性,对项目进行升级;
2:升级技术点:保存文件信息(持久化存储)、面向对象。
简单的操作流程图如下:
对于本学生管理系统所具有的基本需求如下:
a.可以显示基本的版本信息和操作界面;
A:显示版本
B:显示操作界面.
b.可以通过键盘输入一些信息来完成基本功能,例如选择序号、确认退出、添加学生、修改信息等;
A:选择序号、确认退出等操作,应该是局部功能;
B:[添加学生、修改信息等]应该是操作对象 --一切皆对象!
c.学生属性信息有姓名、性别、年龄、联系方式、描述信息等;
A:定义类,类由属性和方法组成;
B:快速初始化: __init__()
C:输出对象名时展示学生信息:__str__()
d.使用系统可对学生信息进行添加、修改、删除、查询等操作;
A:使用比较简单的方式完成功能:列表、学生对象;
B:列表的操作:
1:添加 append(对象)
2:修改 变量名[索引值] = 学生对象
3:删除 remove(对象)
4:查询 循环:对象 == 展示学生信息:__str__()
e.可以使用文件对学生信息进行加载、保存等;
A:学生信息存放在列表中,列表中学生对象: [Student对象1,Student对象2,...] <..Student object at 0x23xxxxx>
B:最好要把学生对象转换为Python字典; [{name:xx,...},{name:xx,...},...]
C:保存 写入数据
D:加载 读取
f.可重复对学生进行增删查改操作,当确认退出系统后,则直接退出系统;
A:反复多次执行;
B:退出:跳出循环 break
g.请使用面向对象的编程思想完成项目的升级处理。
A:明确:一切皆对象;
B:类:学生类 学生管理系统类
C:使用面向对象思维方式来分析问题: "三步走"
1:有哪些类?
学生类
学生管理系统类
2:这些类有哪些属性和行为?
学生类
属性:姓名、性别、年龄、联系方式、描述信息
行为:?
学生管理系统类
属性:存储学生的变量属性
行为:增删查改、保存信息、退出系统、加载信息等
3:这些类和类之间有什么联系?
学生管理系统操作学生。
2. [了解]界面及项目改进
操作本管理系统显示的界面如下:
在上面的操作界面可以选中操作序号进行详细操作。
二. 项目开发实践
学习目标
- 知道如何定义程序入口文件;
- 知道使用面向对象属性和方法;
- 知道魔法方法
__init__()和__str__()
的使用; - 知道该如何执行学生的新增操作;
- 知道该如何执行学生的修改操作;
- 知道该如何执行学生的删除操作;
- 知道该如何执行学生的查询操作;
- 了解文件的加载与保存操作。
1. [重点]程序入口文件main
提示:
项目总程序入口是main.py,是整个项目的程序入口。
例如,需要完成定义程序主入口的功能:
(1)创建一个程序入口文件;
(2)定义程序功能的一个主入口;
(3)启动学生管理系统程序。
1:[避开问题]定义模块(全英文字母)、代码尽可能规范化;
2:测试if name == …,继续执行; --入口文件:main.py
3:调用虚拟-"学生管理系统类"的启动功能。
main.py
from studentcms import StudentCMS
__name__ = '__main__'
# print("程序入口")
# 对象名 = 类名()
studentcms = StudentCMS()
# 对象名.方法名()
studentcms.start()
studentcms.py
# 操作学生管理系统模块
class StudentCMS(object):
def start(self):
"""启动程序"""
print("开始启动系统")
2. [重点]学生类文件student
对于学生类,属性有姓名、年龄、性别、联系方式、描述信息,使用面向对象写类。
例如,需要完成输出学生对象的功能:
(1)定义一个存放学生类的模块文件;
(2)在模块中定义一个学生类;
(3)在类中使用__init__()
初始化学生的属性;
(4)在类中使用__str__()
方法输出对象信息。
1:[注意]定义模块名:所有字母均小写; 类名:大驼峰命名法,所有单词首字母大写,其余字母均小写;
2:初始化属性:有参数的init(),初始化;
3:输出对象名时,要输出对象信息.
代码如下:
# 操作学生模块
class Student(object):
def __init__(self, name, gender, age, mobile, text):
"""
初始化学生属性!
:param name: 姓名
:param gender: 性别
:param age: 年龄
:param mobile: 联系方式
:param text: 描述信息
"""
self.name = name
self.gender = gender
self.age = age
self.mobile = mobile
self.text = text
pass
def __str__(self):
"""当显示所有学生时,直接输出对象名:输出学生的信息"""
return f"{self.name},{self.gender},{self.age},{self.mobile},{self.text}"
3. 具体业务功能studentcms
1:增删查改
2:退出系统
3:加载、保存信息
3.1 [重点]显示界面
用于显示学生信息的操作界面内容。
例如,需要完成显示操作界面的功能:
(1)显示项目的升级后版本信息; 1.0 - 2.0
(2)模拟启动项目; - 用户等待
(3)显示项目的大体操作界面,以便提示用户如何操作。 -界面
1:[启动]studentcms.py - StudentCMS类 -> start()启动;
2:显示版本;
3:提升用户体验,sleep();
4:显示界面。
# 操作学生管理系统模块
import time
class StudentCMS(object):
@staticmethod
def show_view():
print("*" * 30)
print("本学生管理系统V2.0可完成如下操作:")
print("\t【1】添加学生;")
print("\t【2】修改学生;")
print("\t【3】删除学生;")
print("\t【4】查询学生;")
print("\t【5】显示所有学生;")
print("\t【6】保存信息;")
print("\t【0】退出系统;")
print("*" * 30)
pass
def start(self):
"""用于启动系统"""
# print("开始启动系统...")
# 显示版本
print("-"*30)
print("\t传智教育学生管理系统V2.0")
print("-"*30)
# 模拟启动
print("正在玩命加载中,请稍后...")
time.sleep(1)
# 显示界面 --灵活运用
# self.方法名()
self.show_view()
3.2 [重点]搭建项目基本框架
为了便于后期快速开发,一般在项目初期我们会根据项目开发需求进行搭建基本项目框架,以便于更高效的快速开发。
例如,需要完成搭建项目基本框架的功能:
(1)用户可以通过键盘输入操作序号;
(2)在不同的序号下,可以执行不同的功能;
(3)用户可能不按照要求输入相应的序号,应该也要考虑下程序的稳定性。
1:[注意]显示完操作界面后,用户可以自由输入序号;
2:不同的操作序号,执行不同功能; --定义方法: self.方法名()
# 操作学生管理系统模块
import time
from student import Student
# 方式二
# import student
class StudentCMS(object):
@staticmethod
def show_view():
print("*" * 30)
print("本学生管理系统V2.0可完成如下操作:")
print("\t【1】添加学生;")
print("\t【2】修改学生;")
print("\t【3】删除学生;")
print("\t【4】查询学生;")
print("\t【5】显示所有学生;")
print("\t【6】保存信息;")
print("\t【0】退出系统;")
print("*" * 30)
pass
def start(self):
"""启动程序"""
# print("开始启动程序")
# 显示版本
print("-" * 30)
print("\t传智教育学生管理系统2.0")
print("-" * 30)
# 模拟启动
print("正在加载中...")
time.sleep(1)
self.show_view()
while True:
while True:
num = input("请输入您要选择的序号:")
if num.isdigit():
option = int(num)
break
else:
print("您输入的不是数字,请输入数字")
if option == 1:
print("----添加学生----")
self.add_student()
elif option == 2:
print("----修改学生----")
self.modify_student()
elif option == 3:
print("----删除学生----")
self.del_student()
elif option == 4:
print("----查询学生----")
self.query_student()
elif option == 5:
print("----显示所有学生----")
self.show_all_student()
elif option == 6:
print("----保存信息----")
self.save_student_file()
elif option == 0:
print("----退出系统----")
else:
print("请输入1-6的值,输入有误~~~")
def add_student(self):
"""添加学生"""
pass
def modify_student(self):
"""修改学生"""
pass
def del_student(self):
"""删除学生"""
pass
def query_student(self):
"""查询学生"""
pass
def show_all_student(self):
"""显示所有学生"""
pass
def save_student_file(self):
"""保存学生信息"""
pass
3.3 [重点]退出系统
首先,我们来完成项目操作的退出功能。当然,在退出前必须要能反复多次显示操作界面。
例如,需要完成退出系统的功能:
(1)能反复多次的选择操作序号来执行功能;
(2)用户想要退出时,可输入Y或y后退出系统的继续执行。
1:[注意]A:当用户输入0退出; B:显示操作界面前,完成反复多次操作;
2:反复多次操作:不知道次数,死循环;
3:死循环后要退出:当用户输入0退出,break.
elif option == 0:
print("----退出系统----")
out_strs = input("请确认是否真的退出(Y/N):\n")
if out_strs == "y" or out_strs == "Y":
print("正在退出系统")
time.sleep(2)
print("您已退出学生管理系统,欢迎下次继续登录使用")
break # (跳出上一级循环)
# 跳出最上一级循环
# return False
3.4 [了解]数据格式,并定义方法与属性
在操作学生的新增、修改、删除、查询操作前,要优先考虑数据格式是怎样的,且要考虑项目的整体结构,这样可以更加高效的快速开发项目的相关功能。
例如,需要完成如下功能:
(1)为便于后期开发与维护,新增、修改、删除、查询等操作都可以使用面向对象中的方法形式处理;
(2)思考:存储学生数据的样式该是怎样的,才能更好的完成开发呢?一切皆对象!
(3)在系统操作前,可以先默认让系统已有3名学生,便于测试系统的其他功能;
(4)例如,学生信息有姓名、性别、年龄、联系方式、描述信息等属性。
1:[思考1]把数据内容保存到文件中,内容类型:文本类型 str字符串; 读r 写w
list -> str: “[{“name”:“xxx”,“age”:xx,…},{“name”:“xxx”,“age”:xx,…},…]”
2:[思考2]把学生信息存放到列表中,最便捷,“一切皆对象”
list: [<xxx.Student object at 0x1212xxx>,Student对象2,Student对象3,…]
3:[写]把学生信息放在学生管理系统类中;
4:[写]全局变量(处理不方便);类是由属性和方法组成; ==>使用属性来存储;
5:[要求]默认3名学生,属性中存储有3名学生.
from student import Student
# 方式二
# import student
class StudentCMS(object):
def __init__(self):
student1 = Student("小陈", "男", 24, "123", "前端工程师")
student2 = Student("小张", "男", 25, "313", "大数据工程师")
student3 = Student("小莹", "女", 23, "152", "水利工程师")
# 方式二
# student1 = student.Student("小陈", "男", 24, "123", "前端工程师")
# student2 = student.Student("小张", "男", 25, "313", "大数据工程师")
# student3 = student.Student("小莹", "女", 23, "152", "水利工程师")
self.student_lists = [student1, student2, student3]
# print(self.student_lists)
pass
3.5 [重点]添加学生
接着,我们一起来完成项目操作的新增、修改、删除、查询等具体功能吧!
例如,需要完成添加一个学生的功能:
(1)用户选择添加学生
的功能后,能用于添加一个学生信息到系统中; –把一个学生对象添加到属性~
(2)用户可按要求输入学生的相关信息,例如姓名、性别、年龄、联系方式、描述信息等;
(3)可以将用户输入的正确的完整学生信息以对象形式添加到系统中。
1:[注意]用户输入序号1时,就开始添加学生;
2:输入学生的信息:例如姓名、性别、年龄、联系方式、描述信息等;
3:把信息转换为一个学生对象; --一切皆对象
4:输出属性信息。 输出整个列表! list: [<xxx.Student object at 0x1212xxx>,Student对象2,Student对象3,…]
def add_student(self):
"""添加学生"""
in_name = input("请输入要添加的姓名:")
in_gender = input("请输入要添加的性别:")
in_age = int(input("请输入要添加的年龄(int):"))
in_mobile = input("请输入要添加的联系方式:")
in_text = input("请输入要添加的描述信息:")
student = Student(in_name, in_gender, in_age, in_mobile, in_text)
print(student)
print(f"-----{student}")
print("-------------------")
self.student_lists.append(student)
# 方式二:
# student4 = student.Student(in_name, in_sex, in_age, in_mobile, in_description)
# print(student4)
# print(f"-----{student4}")
# print("-------------------")
# self.student_lists.append(student4)
print("=====学生信息已添加成功=======")
print(self.student_lists)
pass
3.6 [重点]显示所有学生
当进入学生管理系统项目后,可以显示系统内的所有学生信息,便于查询结果。
例如,需要完成显示学生所有信息的功能:
(1)查询所有信息的本质,其实就是循环遍历存放在属性中的所有学生信息; --对象:重写__str__()
了,输出就是str后的结果.
(2)按照学生的不同信息字段来依次显示出来。
1:[注意]用户输入序号5,显示所有学生;
2:先显示标题信息;
3:循环属性,显示对象信息。 list: [<xxx.Student object at 0x1212xxx>,Student对象2,Student对象3,…]
def show_all_student(self):
"""显示所有学生"""
print("姓名\t性别年龄\t电话\t描述信息")
for student in self.student_lists:
print(student)
pass
3.7 [重点]查询某个学生
有时,想要查询系统内的某个学生信息并显示出来。
例如,需要完成查询某个学生的功能:
(1)可根据学生姓名来查找学生信息;
(2)显示出查询姓名的所有结果信息。
1:[注意]用户输入序号4,可以查询某个学生;
2:循环所有学生,找到"李圣华"同学信息,显示结果;
3:有"小"字都能找出来. --莹!
def query_student(self):
"""查询学生"""
query_name = input("请输入您需要查询的学生姓名:")
for student in self.student_lists:
if query_name in student.name:
print(student)
pass
3.8 [了解]保存信息
说明:
1:一个基础知识:列表推导式;
2:一个知识点:如何把对象快速变成一个字典
3:数据持久化处理,把学生信息保存到文件中
3.8.1列表推导式
列表推导式:把一些算法直接保存到一个表达式中。对列表操作进行简化!
例如,我们要创建一个0-4的数值的列表。
1:普通方式:建空列表、循环、添加值;
2:[简化处理]使用列表推导式完成.
语法格式:
[变量名 for xx in 序列]
# 1
# lists1 = []
# for temp in range(0,5):
# # print(temp)
# lists1.append(temp)
# print(f"结果:{lists1}")
# 2
lists = [temp for temp in range(0,5)]
print(lists)
3.8.2 如何把对象快速变成一个字典
==简化:==若要把一个对象名的所有信息转换为一个字典类型的结果:
对象名.dict
例如,有个用户类,用户名、密码。 -->快速转换为字典?
1:普通方式:获取出对象里的属性值、存放到一个字典中;
2:[简化]使用"对象名.dict"完成.
# 定义类
class User(object):
def __init__(self,username,password):
self.username = username
self.password = password
# 转换
# 1
# user = User("admin","123456")
# user_dicts = {}
# user_dicts["username"] = user.username
# user_dicts["password"] = user.password
# print(f"转换的结果:{user_dicts}")
# 2
user = User("admin","123456")
user_dicts = user.__dict__
print(f"结果:{user_dicts}")
3.8.3 把学生信息保存到文件
当选择"保存信息"时,可以将所有的学生信息保存到文件中。
例如,需要完成保存学生信息的功能:
(1)将学生对象转换为字典类型的数据;
(2)把字典类型的学生信息放入列表;
(3)把列表数据进行类型转换为字符串类型;
(4)把字符串类型的结果写入到文件中。
A:把学生信息存放到列表中,最便捷,“一切皆对象”
list: [<xxx.Student object at 0x1212xxx>,Student对象2,Student对象3,…]
B:把数据内容保存到文件中,内容类型:文本类型 str字符串; 读r 写w
对象 -> 字典: <xxx.Student object at 0x1212xxx> -->{“name”:“xxx”,“age”:xx,…} 对象名.dict
=====>list:[{“name”:“xxx”,“age”:xx,…},{“name”:“xxx”,“age”:xx,…},…]
list -> str: “[{“name”:“xxx”,“age”:xx,…},{“name”:“xxx”,“age”:xx,…},…]”
[{'name': '小陈', 'gender': '男', 'age': 24, 'mobile': '123', 'text': '前端工程师'}, {'name': '小张', 'gender': '男', 'age': 25, 'mobile': '313', 'text': '大数据工程师'}, {'name': '小莹', 'gender': '女', 'age': 23, 'mobile': '152', 'text': '水利工程师'}]
问题:
给存放学生信息的文件保存为:xxx.data
def save_student_file(self):
"""保存学生信息"""
# print(self.student_lists)
datas = [student.__dict__ for student in self.student_lists]
file = open("student.data", "w", encoding="utf-8")
datas_strs = str(datas)
file.write(datas_strs)
file.close()
print("数据信息已保存完成!!!")
pass
3.9 [了解]文件加载学生数据信息
说明:
1:APP启动时,延时或广告提示; -->需要时间
2:在这段时间内,APP内部执行什么操作? 系统做了什么? -->【资源加载!】
我们知道,上述保存学生数据信息到了文件中,数据样式如下:
[{‘name’: ‘小陈’, ‘gender’: ‘男’, ‘age’: 24, ‘mobile’: ‘123’, ‘text’: ‘前端工程师’}, {‘name’: ‘小张’, ‘gender’: ‘男’, ‘age’: 25, ‘mobile’: ‘313’, ‘text’: ‘大数据工程师’}, {‘name’: ‘小莹’, ‘gender’: ‘女’, ‘age’: 23, ‘mobile’: ‘152’, ‘text’: ‘水利工程师’}]
而当启动学生管理系统时,为便于进行操作学生信息,则可以直接初始化或加载数据文件中的信息。
例如,需要完成加载学生信息的功能:
(1)判定学生信息文件是否存在?若不存在,则要求先创建该文件;否则直接加载数据即可; ??try-except
(2)思考:当第1次启动系统时,数据文件中是没有数据的,该怎么做才能避免下一步的类型转换错误呢? 设置默认为:[]
(3)把加载完成的学生信息数据存放到属性中。 list: [<xxx.Student object at 0x1212xxx>,Student对象2,Student对象3,…]
A:把数据内容保存到文件中,内容类型:文本类型 str字符串; 读r 写w
对象 -> 字典: <xxx.Student object at 0x1212xxx> -->{“name”:“xxx”,“age”:xx,…} 对象名.dict
=====>list:[{“name”:“xxx”,“age”:xx,…},{“name”:“xxx”,“age”:xx,…},…]
list -> str: “[{“name”:“xxx”,“age”:xx,…},{“name”:“xxx”,“age”:xx,…},…]”
B:把学生信息存放到列表中,最便捷,“一切皆对象”
list: [<xxx.Student object at 0x1212xxx>,Student对象2,Student对象3,…]
def load_student_file(self):
"""加载学生信息"""
try:
file = open("student.data", "r", encoding="utf-8")
except Exception:
file = open("student.data", "w", encoding="utf-8")
# file=open("student.data","r",encoding="utf-8")
else:
texts = file.read()
if len(texts) == 0:
texts = "[]"
# print(texts)
# print(type(texts))
texts_list = eval(texts)
# print(type(texts_list))
# print(texts_list)
# print(f"启动系统后,数据内容有:{texts_list[0]}")
self.student_lists = [
Student(student_attribute["name"], student_attribute["gender"], student_attribute["age"],
student_attribute["mobile"], student_attribute["text"]) for student_attribute in texts_list]
# 输出结果
# print(f"启动系统后,数据内容有:{self.student_lists}")
file.close()
3.10 [重点]修改学生
因核对学生信息后,发现某学生的信息在系统中显示有误,此时就要对信息进行修改。
例如,需要完成修改某个学生信息的功能:
(1)输入待修改的学生姓名,并查询是否有该学生;
(2)根据学生姓名来修改学生的相关信息。
def modify_student(self):
"""修改学生"""
update_name = input("请输入要修改的姓名:")
for student in self.student_lists:
if student.name == update_name:
student.name = input("请输入要修改的姓名:")
student.gender = input("请输入要修改的性别:")
student.age = int(input("请输入要修改的年龄(int):"))
student.mobile = input("请输入要修改的联系方式:")
student.text = input("请输入要修改的描述信息:")
print("修改已完成")
print(student)
return False
else:
print("未找到需要修改人的信息")
pass
3.11 [重点]删除学生
因该学生已毕业,为提升系统内信息的准确度,此时就要对学生信息进行删除。
例如,需要完成删除某个学生信息的功能:
(1)输入待删除的学生姓名,并查询是否有该学生;
(2)根据学生姓名来删除学生的相关信息。
def del_student(self):
"""删除学生"""
delete_name = input("请输入需要删除的姓名:")
for student in self.student_lists:
# if student["name"] == delete_name:
if student.name == delete_name:
print(f"查询出的结果{student}")
# student_datas.remove(delete_name)
self.student_lists.remove(student)
print("删除已完成")
return False
else:
print("未找到需要删除人的信息")
pass
三. 整个项目代码
1. main.py文件代码
from studentcms import StudentCMS
__name__ = '__main__'
# print("程序入口")
# 对象名 = 类名()
studentcms = StudentCMS()
# 对象名.方法名()
studentcms.start()
2. student.py文件代码
class Student(object):
def __init__(self, name, gender, age, mobile, text):
"""
初始化学生属性!
:param name: 姓名
:param gender: 性别
:param age: 年龄
:param mobile: 联系方式
:param text: 描述信息
"""
self.name = name
self.gender = gender
self.age = age
self.mobile = mobile
self.text = text
pass
def __str__(self):
"""当显示所有学生时,直接输出对象名:输出学生的信息"""
return f"{self.name},{self.gender},{self.age},{self.mobile},{self.text}"
3. studentscm.py文件代码
import time
from student import Student
# 方式二
# import student
class StudentCMS(object):
def __init__(self):
student1 = Student("小陈", "男", 24, "123", "前端工程师")
student2 = Student("小张", "男", 25, "313", "大数据工程师")
student3 = Student("小莹", "女", 23, "152", "水利工程师")
# 方式二
# student1 = student.Student("小陈", "男", 24, "123", "前端工程师")
# student2 = student.Student("小张", "男", 25, "313", "大数据工程师")
# student3 = student.Student("小莹", "女", 23, "152", "水利工程师")
self.student_lists = [student1, student2, student3]
# print(self.student_lists)
pass
@staticmethod
def show_view():
print("*" * 30)
print("本学生管理系统V2.0可完成如下操作:")
print("\t【1】添加学生;")
print("\t【2】修改学生;")
print("\t【3】删除学生;")
print("\t【4】查询学生;")
print("\t【5】显示所有学生;")
print("\t【6】保存信息;")
print("\t【0】退出系统;")
print("*" * 30)
pass
def start(self):
"""启动程序"""
# print("开始启动程序")
# 显示版本
print("-" * 30)
print("\t传智教育学生管理系统2.0")
print("-" * 30)
# 模拟启动
print("正在加载中...")
# self.save_student_file()
self.load_student_file()
time.sleep(1)
self.show_view()
while True:
while True:
num = input("请输入您要选择的序号:")
if num.isdigit():
option = int(num)
break
else:
print("您输入的不是数字,请输入数字")
if option == 1:
print("----添加学生----")
self.add_student()
elif option == 2:
print("----修改学生----")
self.modify_student()
elif option == 3:
print("----删除学生----")
self.del_student()
elif option == 4:
print("----查询学生----")
self.query_student()
elif option == 5:
print("----显示所有学生----")
self.show_all_student()
elif option == 6:
print("----保存信息----")
self.save_student_file()
elif option == 0:
print("----退出系统----")
out_strs = input("请确认是否真的退出(Y/N):\n")
if out_strs == "y" or out_strs == "Y":
print("正在退出系统")
time.sleep(2)
print("您已退出学生管理系统,欢迎下次继续登录使用")
break # (跳出上一级循环)
# 跳出最上一级循环
# return False
else:
print("请输入1-6的值,输入有误~~~")
def add_student(self):
"""添加学生"""
in_name = input("请输入要添加的姓名:")
in_gender = input("请输入要添加的性别:")
in_age = int(input("请输入要添加的年龄(int):"))
in_mobile = input("请输入要添加的联系方式:")
in_text = input("请输入要添加的描述信息:")
student = Student(in_name, in_gender, in_age, in_mobile, in_text)
print(student)
print(f"-----{student}")
print("-------------------")
self.student_lists.append(student)
# 方式二:
# student4 = student.Student(in_name, in_sex, in_age, in_mobile, in_description)
# print(student4)
# print(f"-----{student4}")
# print("-------------------")
# self.student_lists.append(student4)
print("=====学生信息已添加成功=======")
print(self.student_lists)
pass
def modify_student(self):
"""修改学生"""
update_name = input("请输入要修改的姓名:")
for student in self.student_lists:
if student.name == update_name:
student.name = input("请输入要修改的姓名:")
student.gender = input("请输入要修改的性别:")
student.age = int(input("请输入要修改的年龄(int):"))
student.mobile = input("请输入要修改的联系方式:")
student.text = input("请输入要修改的描述信息:")
print("修改已完成")
print(student)
return False
else:
print("未找到需要修改人的信息")
pass
def del_student(self):
"""删除学生"""
delete_name = input("请输入需要删除的姓名:")
for student in self.student_lists:
# if student["name"] == delete_name:
if student.name == delete_name:
print(f"查询出的结果{student}")
# student_datas.remove(delete_name)
self.student_lists.remove(student)
print("删除已完成")
return False
else:
print("未找到需要删除人的信息")
pass
def query_student(self):
"""查询学生"""
query_name = input("请输入您需要查询的学生姓名:")
for student in self.student_lists:
if query_name in student.name:
print(student)
pass
def show_all_student(self):
"""显示所有学生"""
print("姓名\t性别年龄\t电话\t描述信息")
for student in self.student_lists:
print(student)
pass
def save_student_file(self):
"""保存学生信息"""
# print(self.student_lists)
datas = [student.__dict__ for student in self.student_lists]
file = open("student.data", "w", encoding="utf-8")
datas_strs = str(datas)
file.write(datas_strs)
file.close()
print("数据信息已保存完成!!!")
pass
def load_student_file(self):
"""加载学生信息"""
try:
file = open("student.data", "r", encoding="utf-8")
except Exception:
file = open("student.data", "w", encoding="utf-8")
# file=open("student.data","r",encoding="utf-8")
else:
texts = file.read()
if len(texts) == 0:
texts = "[]"
# print(texts)
# print(type(texts))
texts_list = eval(texts)
# print(type(texts_list))
# print(texts_list)
# print(f"启动系统后,数据内容有:{texts_list[0]}")
self.student_lists = [
Student(student_attribute["name"], student_attribute["gender"], student_attribute["age"],
student_attribute["mobile"], student_attribute["text"]) for student_attribute in texts_list]
# 输出结果
# print(f"启动系统后,数据内容有:{self.student_lists}")
file.close()
4. 测试代码运行结果
C:\软件\python-jupyter\python.exe "F:/Big data Project/demo01/学生管理系统V2.0/main.py"
------------------------------
传智教育学生管理系统2.0
------------------------------
正在加载中...
******************************
本学生管理系统V2.0可完成如下操作:
【1】添加学生;
【2】修改学生;
【3】删除学生;
【4】查询学生;
【5】显示所有学生;
【6】保存信息;
【0】退出系统;
******************************
请输入您要选择的序号:5
----显示所有学生----
姓名 性别年龄 电话 描述信息
小陈,男,24,123,前端工程师
小张,男,25,313,大数据工程师
小莹,女,23,152,水利工程师
请输入您要选择的序号:1
----添加学生----
请输入要添加的姓名:小曹
请输入要添加的性别:男
请输入要添加的年龄(int):25
请输入要添加的联系方式:156
请输入要添加的描述信息:是胖胖的小伙子
小曹,男,25,156,是胖胖的小伙子
-----小曹,男,25,156,是胖胖的小伙子
-------------------
=====学生信息已添加成功=======
[<student.Student object at 0x00000215E5DE5B38>, <student.Student object at 0x00000215E5DE5B70>, <student.Student object at 0x00000215E5DE5BA8>, <student.Student object at 0x00000215E5746630>]
请输入您要选择的序号:5
----显示所有学生----
姓名 性别年龄 电话 描述信息
小陈,男,24,123,前端工程师
小张,男,25,313,大数据工程师
小莹,女,23,152,水利工程师
小曹,男,25,156,是胖胖的小伙子
请输入您要选择的序号:2
----修改学生----
请输入要修改的姓名:小陈
请输入要修改的姓名:小王
请输入要修改的性别:男
请输入要修改的年龄(int):24
请输入要修改的联系方式:345
请输入要修改的描述信息:工程师
修改已完成
小王,男,24,345,工程师
请输入您要选择的序号:5
----显示所有学生----
姓名 性别年龄 电话 描述信息
小王,男,24,345,工程师
小张,男,25,313,大数据工程师
小莹,女,23,152,水利工程师
小曹,男,25,156,是胖胖的小伙子
请输入您要选择的序号:3
----删除学生----
请输入需要删除的姓名:小王
查询出的结果小王,男,24,345,工程师
删除已完成
请输入您要选择的序号:5
----显示所有学生----
姓名 性别年龄 电话 描述信息
小张,男,25,313,大数据工程师
小莹,女,23,152,水利工程师
小曹,男,25,156,是胖胖的小伙子
请输入您要选择的序号:4
----查询学生----
请输入您需要查询的学生姓名:小
小张,男,25,313,大数据工程师
小莹,女,23,152,水利工程师
小曹,男,25,156,是胖胖的小伙子
请输入您要选择的序号:4
----查询学生----
请输入您需要查询的学生姓名:莹
小莹,女,23,152,水利工程师
请输入您要选择的序号:6
----保存信息----
数据信息已保存完成!!!
请输入您要选择的序号:0
----退出系统----
请确认是否真的退出(Y/N):
y
正在退出系统
您已退出学生管理系统,欢迎下次继续登录使用
Process finished with exit code 0
5. 自动生成student.data文件,并保存如下信息
[{'name': '小张', 'gender': '男', 'age': 25, 'mobile': '313', 'text': '大数据工程师'}, {'name': '小莹', 'gender': '女', 'age': 23, 'mobile': '152', 'text': '水利工程师'}, {'name': '小曹', 'gender': '男', 'age': 25, 'mobile': '156', 'text': '是胖胖的小伙子'}]