1 importos2
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 classStudent(object):24 def __init__(self,name,age,sex):25 #添加相关的属性信息
26 self.name=name27 self.age=age28 self.sex=sex29
30
31
32 classStudentManageSystem(object):33 def __init__(self):34 #定义一个列表用于保存学生对象
35 self.student_list =list()36
37
38 #将功能代码放到指定函数里面
39 defshow_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 defadd_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 defshow_all_student(self):69 """该函数用于显示所有的学生信息"""
70 #注意列表里面储存的是字典
71 #遍历的时候使用enumerate函数可以返回下标
72 for index, student inenumerate(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 defmodify_student(self):83 """"该函数用来修改学生信息"""
84 #1. 接收用户要修改学生的学号
85 student_no = int(input("请输入要修改学生的学号:"))86
87 #2. 把学号转成下标, 下标 = 学号 - 1
88 index = student_no - 1
89 #判断下标是否合法
90 if 0 <= index
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_name100 student.age =new_age101 student.sex =new_sex102
103 print("修改成功")104 else:105 print("请输入正确的学号:")106
107
108 #删除学生信息
109 defdelete_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 defquery_student(self):126 """该函数用来查询学生信息"""
127 name = input("请输入要查询学生的姓名:")128 for index, student inenumerate(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 defsave_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 inself.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 defload_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 innew_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 defstart(self):184 #当程序运行的时候加载一次文件
185 self.load_file()186
187 whileTrue: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()