欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python学生信息管理系统(注释最详细,小白都看的懂)

程序员文章站 2022-03-10 11:45:13
1 import os 2 3 # 学生系统基本功能 4 # 增删查改 5 6 # 如何实现该系统 7 # 1.显示系统功能界面 8 # 2.让用户选择功能 9 # 3.判断用户选择的指定功能,然后完成相应的操作(增删查改) 10 11 # 面向对象分析 12 # 1.抽象类 13 # 学生系统管理 ......
  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()