话不多说,直接附代码
#student_manager_system
#学生类
class Student:
def __init__(self,num,name):
self.id = id
self.num = num
self.name = name
#班级类
class Class:
__stu_id = 0 #使得编号从1开始
def __init__(self):
self.__stu_list = []
self.stu_dict = {}
@property
def stu_list(self):
return self.__stu_list
#后边有多个模块要用到,所以单独列写
def add_student(self, stu):
stu.id = self.__generate_id()
self.__stu_list.append(stu) # 将学生添加到学生列表
#这个id设为学生的标识,因为学号比较长,所以输入编号去删除比较快
def __generate_id(self):
Class.__stu_id += 1
return Class.__stu_id
# 根据学号排序,因为添加程序内容较多,故排序的单独列,方便应用
#和C语言的冒泡法类似
def order_by_num(self):
for i in range(0,len(self.__stu_list)): #遍历列表
for c in range(0, i):
if self.__stu_list[c].num < self.__stu_list[c+1].num: #如果第i个小于i后边的数就把他们调换,使得前边的数大于后边的
max= self.__stu_list[c+1] #用一个中间值代实现两个数之间的替换
self.__stu_list[c+1]=self.__stu_list[c]
self.__stu_list[c]=max
"""
def order_by_num(self):
from operator import itemgetter
sorted(self.__stu_list, key=itemgetter(1))
self2 = sorted(self, key=(lambda x: x[1]), reverse=True) # x[1]这边是按照列表的下标进行选取
return self2 # 结果就是根据分数排完序的列表
"""
class StudentView:
def __init__(self):
self.__manager = Class()
#菜单列表
def __display_menu(self):
print('+---------------------+')
print('* 1)添加学生信息 *')
print('* 2)删除学生信息 *')
print('* 3)修改学生信息 *')
print('* 4)查询学生信息 *')
print('* 5)显示学生信息 *')
print('* 6)退出系统 *')
print('+---------------------+')
# 添加学生
def __add__student(self):
name = input('请输入学生姓名:')
num = int(input('请输入学生学号(8位):'))
stu1 = Student(num,name) #将学生信息存为上边建立的学生类数组
self.__manager.add_student(stu1) # 将学生类数组添加到学生列表
print("添加成功!")
# 删除学生,这里我原先设有id,就直接输入id号进行删除即可
def __delete_student(self):
res=0
id = int(input('请输入要删除学生的编号:')) #利用学生的学号进行删除
for item in self.__manager.stu_list:
if item.id == id: #确认列表有这个编码
self.__manager.stu_list.remove(item) #用remove函数
res= True #先赋予0,等下没删除成功就直接跳过第二个if
if res==True:
print('删除成功!')
else:
print("删除失败!")
#修改学生信息
def __modify_student(self):
id = int(input('请输入要修改学生的编号:')) #注意加int
name = input('请输入新的学生姓名:')
num = int(input('请输入新的学生学号:')) #千万注意这里也要加int,否则上边排序无法比较int和str之间的值,会出错
stu = Student(num,name)
action=0 #先赋予0,等下没修改成功就直接跳过第二个if
for item in self.__manager.stu_list:
if item.id == id: #id还是那个id但是num和名字可以改动
item.name = stu.name
item.num = stu.num
action=True #修改成功改变action的值
if action==True:
print('修改成功')
else:
print('修改失败')
#查询学生
def __inquire__student(self):
name = input("请输入学生姓名:") #利用姓名查询
for i in range(0, len(self.__manager.stu_list) ):
if name == self.__manager.stu_list[i].name: #判断是否有此学生
#i+=1 #循环从1开始,下表从0开始
print(self.__manager.stu_list[i].num,self.__manager.stu_list[i].name)
break
else:
print("没有此学生!")
# 按学号排序显示学生
def __output_students(self,list):
for item in list:
self.__manager.order_by_num()
#list.sort(reverse=True)
print(item.id,item.name,item.num)
#输出3个提姆给定的值
def __YL__(self):
s1 = Student(20211123,"小明")
self.__manager.add_student(s1)
s2 = Student(20211008, "小红")
self.__manager.add_student(s2)
s3 = Student(20211016, "小军")
self.__manager.add_student(s3)
# 主程序
def main(self):
self.__YL__() #将题目的三个学生信息录入
print("欢迎使用【学生管理系统】")
while True: #开始无限循环指导按下6时
self.__display_menu() #菜单
option = int(input('请输入功能键:')) #功能键选择 这里的按键输入转为int型是因为下边用range(1,7)里边是整形,如果不设int,这输入会进不去
print("*" * 30) #美观设置
if option in range(1, 7): #限定范围,防止用户随便按导致死循环。
if option == 1: #注意这里的数字不要加 “”,因为加了就变成字符型了。对应输入应该是input(...)
print("添加学生信息:")
self.__add__student()
elif option == 2:
print("删除学生信息:")
self.__delete_student()
elif option == 3:
print("修改学生信息:")
self.__modify_student()
elif option == 4:
print("查询学生信息:")
self.__inquire__student()
elif option == 5:
print("显示学生信息:")
self.__output_students(self.__manager.stu_list)
elif option == 6:
print("程序结束!")
break
else:
print("输入错误,请重新输入!")
view = StudentView()
view.main()