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()

python类定义学生信息_Python学生信息管理系统(注释最详细,小白都看的懂)相关推荐

  1. python输入学生姓名_Python学生信息管理系统(注释最详细,小白都看的懂)

    1 importos2 3 #学生系统基本功能 4 #增删查改 5 6 #如何实现该系统 7 #1.显示系统功能界面 8 #2.让用户选择功能 9 #3.判断用户选择的指定功能,然后完成相应的操作(增 ...

  2. python类定义的讲解_python类定义的讲解

    Python中的类属性和对象属性的区别详解 类属性: class Employee(object): emCount=0 def __init__(self,name,salary): self.na ...

  3. python类定义的讲解_python面向对象、自定义类等使用实例讲解

    python 面向对象相对别的语言来说缺少两个功能: 1.python不具备重载,重载是指在同一个类中,使得方法有相同的名称,但是有不同的参数列表,但由于python函数具有强大的参数处理功能,因此这 ...

  4. python类定义框体_Python开源框架种类

    Python名气最大的框架:Django 初学Python时,你一定听到过Django,这两者就好像是一对好朋友.Django它是个开放源代码的Web应用框架,由Python写成的Django应该是最 ...

  5. python类定义以及调用_python中如何定义和调用类详解

    类的方法的定义 1.def fun_name(self,...); Pass 2.其中的参数self代表类的实例,在调用方法时由系统自动提供 3.方法定义时必须指明self参数 类的方法的调用 与普通 ...

  6. 小白都看得懂的使用Python生成随机验证码图片,以及后续优化方案

    环境:Anaconda3-2020.02 首先我们分解一下需要做什么: 生成随机的字母字符串 生成生成随机的背景色 生成随机的字体颜色 把随机的字符串用随机的颜色渲染,然后放到一块随机的背景色上面,基 ...

  7. python类定义变量_python类变量与__init__声明变量的区别

    类变量:可在类的所有实例之间共享的变量 实例类对象:类的实例是调用类对象来创建的.如:par = Parent(),par就是类Parent的一个实例类对象. 实例变量(成员变量):同一个类对象可以创 ...

  8. PYTHON 类定义,属性,初始化

    文章目录 PYTHON 类定义,属性,初始化 类定义 类的私有属性 类方法 类的初始化和析构 初始化 析构 PYTHON 类定义,属性,初始化 为了代码的编写方便简洁,引入了类的定义: 一般,使用 c ...

  9. python如何定义自定义函数_python类中系统自定义函数

    标签: python类 双下划线特殊函数 今天遇到python类内部系统以双下划线开头和结尾的情况,特去学习一部分的应用情况,顺便记录一下.python 的OOP编程中,每个类拥有一些系统特殊定义的函 ...

最新文章

  1. 捡对象引流脚本 内容_对象和索引流
  2. MySQL 复制滞后怎么办?
  3. 阿里专家常昊:新人如何上手项目管理?
  4. textread读取记事本文件
  5. r语言 fourth entry_第四篇 语言学习的自然顺序
  6. 【蜕变之路】第31天 Spring Tool Suite和IntelliJ (2019年3月21日)
  7. 13.C++ vector 操作
  8. 代码从stepping stone搬移到内存
  9. css 选父元素,CSS子元素选择父元素的实现
  10. 腾讯云网站备案咨询:网站信息类问题汇总解答
  11. xmind思维导图pdf格式如何导出?xmind思维导图pdf格式导出流程介绍
  12. tp5 获取当前的url方法
  13. 【量化投资】03.量化工程abu学习之量化基础(1/3)
  14. DOTA双功能螯合剂127985-74-4,p-SCN-Bn-DOTA,实验室科研试剂
  15. 《新财富》:泡沫难破 房价至少被高估二成
  16. c 语言token函数,科普 | Compound的cToken及相关核心函数
  17. emq Node emq@ not responding to pings.
  18. 计算机操作的提升,提升电脑操作的利器 鼠标快捷键解析
  19. 自动设置IP地址的BAT
  20. sal2edge.py显著性mask生成边缘标签

热门文章

  1. Token Bucket原理
  2. Visual C++中的异常处理浅析(上)
  3. stream() 求和_Java教程:Java8统计list中指定属性的最大、最小、平均值、求和
  4. java expextion_Java(20~24)
  5. linux zk集群,linux ZooKeeper集群安装
  6. LINUX前期知识回顾
  7. rabbitmq如何保证消息不被重复消费_RabbitMQ保证消息可靠投递与消费的正确使用姿势...
  8. 信息竞赛进阶指南--搜索相关(模板)
  9. CSDN排名及积分规则
  10. 数学--数论--欧拉降幂和广义欧拉降幂(实用好理解)