1 import os
  2 
  3 # 学生系统基本功能
  4 # 增删查改
  5 
  6 # 如何实现该系统
  7 # 1.显示系统功能界面
  8 # 2.让用户选择功能
  9 # 3.判断用户选择的指定功能,然后完成相应的操作(增删查改)
 10 
 11 # 面向对象分析
 12 # 1.抽象类
 13 # 学生系统管理类  学生类
 14 # 2.分析类的成员
 15 
 16 # 学生系统管理类
 17 # 属性:学生列表属性 保存学生信息
 18 # 方法:添加学生 删除学生 显示学生信息等这些方法
 19 
 20 # 学生类
 21 # 属性:姓名 年龄 性别
 22 # 方法:无
 23 class Student(object):
 24     def __init__(self,name,age,sex):
 25         # 添加相关的属性信息
 26         self.name=name
 27         self.age=age
 28         self.sex=sex
 29 
 30 
 31 
 32 class StudentManageSystem(object):
 33     def __init__(self):
 34         # 定义一个列表用于保存学生对象
 35         self.student_list = list()
 36 
 37 
 38     # 将功能代码放到指定函数里面
 39     def show_menu(self):
 40         '''该函数是为了展示功能界面'''
 41         # 1. 显示系统的功能菜单
 42         print("------学生管理系统1.0------")
 43         print("1.添加学生信息")
 44         print("2.修改学生信息")
 45         print("3.删除学生信息")
 46         print("4.显示所有学生")
 47         print("5.查询学生信息")
 48         print("6.退出管理系统")
 49 
 50 
 51     # 添加学生函数
 52     # 分析:
 53     # 1. 学生的信息如何表示?
 54     # 2. 管理系统里面的学生信息如何表示?
 55     def add_student(self):
 56         name = input("请输入学生的姓名:")
 57         age = input("请输入学生的年龄:")
 58         sex = input("请输入学生的性别:")
 59         # 添加一个学生,需要自己创建一个学生对象
 60         stu=Student(name,age,sex)
 61         # 把对象添加到列表里面
 62         self.student_list.append(stu)
 63         # 显示学生信息
 64         # print(self.student_list)
 65         print("添加成功")
 66 
 67     # 显示所有学生函数
 68     def show_all_student(self):
 69         '''该函数用于显示所有的学生信息'''
 70         # 注意列表里面储存的是字典
 71         # 遍历的时候使用enumerate函数可以返回下标
 72         for index, student in enumerate(self.student_list):
 73             # 计算学号=下标+1
 74             student_no = index + 1
 75             print("学号:", student_no,
 76                   "姓名:", student.name,
 77                   "年龄:", student.age,
 78                   "性别:", student.sex)
 79 
 80 
 81     # 修改学生信息函数
 82     def modify_student(self):
 83         ''''该函数用来修改学生信息'''
 84         # 1. 接收用户要修改学生的学号
 85         student_no = int(input("请输入要修改学生的学号:"))
 86 
 87         # 2. 把学号转成下标, 下标 = 学号 - 1
 88         index = student_no - 1
 89         # 判断下标是否合法
 90         if 0 <= index < len(self.student_list):
 91             # 3. 根据下标获取要修改的学生字典
 92             student = self.student_list[index]
 93 
 94             # 4. 对学生字典的数据进行修改(名字, 年龄, 性别)
 95             new_name = input("请输入修改后的姓名:")
 96             new_age = input("请输入修改后的年龄:")
 97             new_sex = input("请输入修改后的性别:")
 98             # 对字典里面的数据进行修改
 99             student.name = new_name
100             student.age = new_age
101             student.sex = new_sex
102 
103             print("修改成功")
104         else:
105             print("请输入正确的学号:")
106 
107 
108     # 删除学生信息
109     def delete_student(self):
110         """该函数用来删除学生信息"""
111         # 1.接收用户输入的学号
112         student_no = int(input("请输入要删除学生的学号:"))
113         # 2.将学号转换为下标
114         index = student_no - 1
115         # 判断下表是否合法
116         if 0 <= index <= len(self.student_list):
117             # 需求删除后把这个人的姓名显示出来,使用pop会把删除的内容返回
118             student = self.student_list.pop(index)
119             print("%s,删除成功!" % student.name)
120         else:
121             print("请输入有效学号!")
122 
123 
124     # 查询某个学生信息
125     def query_student(self):
126         """该函数用来查询学生信息"""
127         name = input("请输入要查询学生的姓名:")
128         for index, student in enumerate(self.student_list):
129             student_no = index + 1
130             if student.name == name:
131                 print("学号:", student_no,
132                       "姓名:", student.name,
133                       "年龄:", student.age,
134                       "性别:", student.sex)
135                 break
136         # 当循环语句没有执行break,表示没有该学生信息执行else里面的语句
137         # 当循环执行break语句的时候,说明该学生信息存在,不会执行else里面的语句
138         # 注意:当for循环与else一起使用的时候,如果没有执行for循环里面的break则会执行else语句!!!
139         else:
140             print("对不起,没有该学生")
141 
142     # 讲列表里面的数据保存到文件里面
143     def save_file(self):
144         # 1.打开文件 要以w方式打开
145         file=open("student_list.data","w",encoding="utf-8")
146         #2.把数据写入文件(把列表转换为字符串类型)
147         # 把列表里面的每一个对象转换成学生列表里面的字典,把对象的属性信息保存到字典里面
148         # stu.__dict__  获取学生的字典信息把对象的属性信息以字典的形式返回
149         new_list=[stu.__dict__ for stu in self.student_list]
150         student_list_str=str(new_list)
151         print(student_list_str,type(student_list_str))
152         file.write(student_list_str)
153         file.close()
154 
155     # 加载文件里面的内容,将文件里面的内容加载到列表里面****
156 
157     def load_file(self):
158         # 1.判断文件是否存在  返回值类型是布尔类型
159         if os.path.exists("student_list.data"):
160             # 1.打开文件 r模式
161             file=open("student_list.data","r",encoding="utf-8")
162             # 2.读取文件里面的数据
163             value=file.read()
164             # 因为从文件里面读取的是字符串类型,所以需要先转换为列表类型
165             # 注意这里将字符串转换为列表需要使用eval()函数,获取字符串包裹的内容
166             new_list=eval(value)
167             print("从文件里面获取的内容为:",new_list,type(new_list))
168             # 把列表里面每一个学生字典信息转换为对象
169             # **stu_dict:把字典里面的每一项数据按照关键字传参
170             # Student(**stu_dict)表示创建一个学生对象
171             new_list=[Student(**stu_dict) for stu_dict in new_list]
172             print(new_list)
173             # 3.将文件里面的内容添加到列表里面
174     #         方法一:使用global
175     #         global student_list
176     #         student_list=new_list
177     #         方法2:方式,把文件中的列表数据扩展到全局变量里面, 这里不需要加上global,因为列表是可变类型
178             self.student_list.extend(new_list)
179             file.close()
180 
181 
182     # 程序入口函数,程序开始时第一个执行的函数
183     def start(self):
184         # 当程序运行的时候加载一次文件
185         self.load_file()
186 
187         while True:
188             # 1.显示系统功能菜单
189             self.show_menu()
190 
191             # 2.接收用户输入的功能选项
192             menu_option = input("请输入你要操作的功能选项:")
193 
194             # 3. 判断用户选择的指定功能,然后完成对应的操作(增删改查的功能)
195             if menu_option == "1":
196                 print("添加学生信息")
197                 self.add_student()
198             elif menu_option == "2":
199                 print("修改学生信息")
200                 self.modify_student()
201             elif menu_option == "3":
202                 print("删除学生信息")
203                 self.delete_student()
204             elif menu_option == "4":
205                 print("显示学生信息")
206                 self.show_all_student()
207             elif menu_option == "5":
208                 print("查询学生信息")
209                 self.query_student()
210             elif menu_option == "6":
211                 print("程序退出")
212                 self.save_file()
213                 break
214 
215 system=StudentManageSystem()
216 
217 system.start()

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。