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()
人生苦短,我用python!