当前位置:   article > 正文

python面向对象版学生管理系统_学生信息管理系统python面向对象封装

学生信息管理系统python面向对象封装

一、学生管理系统需求分析(面向对象)

1、需求分析

使用==面向对象编程思想==完成学员管理系统的开发,具体如下:

① 系统要求:==学员数据存储在文件中==

② 系统功能:==添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统==等功能。

2、角色分析

学员对象(姓名、年龄、电话) => 自身属性,打印学生时,还需要输出学生信息 => __str__()

学生管理系统对象(可以实现对学生进行增、删、改、查)

在面向对象编程思想中,必须找到要具体实现操作的实体。

通过系统实现添加学员操作

通过系统实现删除学员操作

....

最终可以得出一个结论:这个通讯管理系统,其主要的实体就是==通讯录管理系统本身==

注意事项

① 为了方便维护代码,一般一个角色一个程序文件

② 项目要有主程序入口,习惯为main.py

3、创建项目

 

创建类文件 => studentManager.py

创建项目入口文件 => main.py

二、学生管理代码开发

1、学员信息存储代码分析

student_list = [s1, s2, s3]

s1, s2, s3代表由Student学生类创建的对象

学员姓名

学员年龄

学员电话

学员信息(姓名、年龄、电话),可以使用字典来表示。但是我们已经学习了面向对象,其学员信息可以完全用对象来进行实现。

学员(主体) => 属性(姓名、年龄、电话)

2、student.py类文件编写

需求:

学员信息包含:姓名、年龄、电话

添加__str__魔法方法,方便查看学员对象信息

  1. # 定义一个Student类
  2. class Student():
  3. # 定义魔术方法,用于初始化属性信息
  4. def __init__(self, name, age, mobile):
  5. self.name = name
  6. self.age = age
  7. self.mobile = mobile
  8. # 定义魔术方法,用于打印输出学员信息
  9. def __str__(self):
  10. return f'{self.name}, {self.age}, {self.mobile}'
'
运行

 

3、编写studentManager.py代码

studentManager.py

  1. class StudentManager(object):
  2. # 定义__init__魔术方法,用于初始化操作
  3. def __init__(self):
  4. # 定义一个列表,将来用于保存所有学员信息
  5. self.student_list = []
'
运行

4、学员管理系统具体功能说明

需求:

存储数据的位置:文件(student.data)

  • 加载文件数据

  • 修改数据后保存到文件

存储数据的形式:列表存储学员对象

系统功能:

① 添加学员信息

② 删除学员信息

③ 修改学员信息

④ 查询学员信息

⑤ 显示所有学员信息

⑥ 保存学员信息

⑦ 退出系统

编写程序代码,用于实现以上的所有功能:

  1. from Student import Student
  2. class StudentManager(object):
  3. # 4、定义一个属性,用于保存所有学员信息 => [s1, s2, s3],注:s1,s2,s3都是Student类对象
  4. def __init__(self):
  5. self.students = []
  6. # 封装一个menu()方法,用于打印系统功能菜单
  7. @staticmethod
  8. def menu():
  9. print('-' * 40)
  10. print('欢迎使用学生管理系统V2.0')
  11. print('【1】添加学员信息')
  12. print('【2】删除学员信息')
  13. print('【3】修改学员信息')
  14. print('【4】查询学员信息')
  15. print('【5】遍历所有学员信息')
  16. print('【6】保存数据到文件')
  17. print('【7】退出系统')
  18. print('-' * 40)
  19. # 5、定义一个add_student()方法,用于实现添加学员信息
  20. def add_student(self):
  21. # 接收要添加的学员信息
  22. name = input('请输入要添加学员的姓名:')
  23. age = int(input('请输入要添加学员的年龄:'))
  24. mobile = input('请输入要添加学员的电话:')
  25. # 把name/age/mobile => 组装成一个学生对象
  26. self.students.append(Student(name, age, mobile)) # [s1, s2, s3]
  27. print('恭喜您,信息已录入成功!')
  28. # 6、定义一个show_students()方法,用于展现所有学员信息
  29. def show_students(self):
  30. for i in self.students: # [s1, s2, s3]
  31. print(i) # print(s1)
  32. # 7、定义一个del_student()方法,用于删除所有学员信息
  33. def del_student(self):
  34. # ① 提供要删除学员的名称
  35. name = input("请输入要删除学员的名称:")
  36. # ② 对整个self.students列表进行遍历,查看哪个学员与name同名
  37. for i in self.students: # [s1, s2, s3]
  38. if i.name == name:
  39. # 找到了这个同学,把整个对象从列表中移除
  40. self.students.remove(i)
  41. print('恭喜您,信息已成功移除!')
  42. break
  43. else:
  44. # ③ 如果在整个循环过程中,都没有执行break,则代表循环正常结束,没有找到同学
  45. print('很抱歉,您要移除的同学信息未找到!')
  46. # 8、定义一个edit_student()方法,用于实现修改学员信息
  47. def edit_student(self):
  48. # ① 提供要修改学员的姓名
  49. name = input('请输入您要修改学员的姓名:')
  50. # ② 遍历整个self.students列表,找是否有与之同名的学员信息
  51. for i in self.students: # [s1, s2, s3] 对象修改属性 s1.属性 = 新的属性值
  52. if i.name == name:
  53. # 找到了要修改的同学,修改其自身属性 => name/age/mobile
  54. i.name = input('请输入修改后的学员姓名:')
  55. i.age = int(input('请输入修改后的学员年龄:'))
  56. i.mobile = input('请输入修改后的学员电话:')
  57. print('恭喜您,信息已修改成功!')
  58. break
  59. else:
  60. print('很抱歉,您要修改同学的信息未找到!')
  61. # 9、定义一个find_student()方法,用于查找学员信息
  62. def find_student(self):
  63. # ① 接收要查找学员的名称
  64. name = input('请输入要查找学员的姓名:')
  65. # ② 对整个self.students列表进行遍历
  66. for i in self.students:
  67. if i.name == name:
  68. print(i) # 直接打印学员信息
  69. break
  70. else:
  71. print('很抱歉,您要查找的同学信息未找到!')
  72. # 10、定义一个save_data_to_file()方法,用于保存数据到文件
  73. def save_data_to_file(self):
  74. # 文件操作三步走 => ① 打开文件 ② 读写文件 ③ 关闭文件
  75. f = open('students.txt', 'w', encoding='utf-8')
  76. data = [i.__dict__ for i in self.students] # [s1, s2, s3] == [{}, {}, {}]
  77. f.write(str(data)) # 特别注意:f.write()只能把字符串类型的数据写入到文件, [s1, s2, s3]
  78. f.close()
  79. print('恭喜您,数据已成功保存!')
  80. # 11、定义一个load_data()方法,用于加载文件中的数据到系统
  81. def load_data(self):
  82. f = open('students.txt', 'r', encoding='utf-8')
  83. content = f.read()
  84. f.close()
  85. if not content:
  86. return
  87. # 如果数据不为空,则替换self.students列表
  88. data = eval(content) # [{'name': '张三', 'age': 23, 'mobile': '10086'}] == [s1]
  89. self.students = [Student(i['name'], i['age'], i['mobile']) for i in data]
  90. # 定义一个启动方法,运行系统
  91. def start(self):
  92. # 加载load_data方法,用于加载文件中的数据到系统
  93. self.load_data()
  94. # 1、给系统添加一个while True,让系统可以一直运行下去
  95. while True:
  96. # 2、打印系统功能菜单 => 输出自身信息,输出可以实现的相关功能
  97. self.menu()
  98. # 3、提示用户输入要执行的功能编号
  99. user_num = int(input('请输入您要执行的功能编号:'))
  100. # 添加if...elif...else多分支判断结构
  101. if user_num == 1:
  102. # 在类中创建一个add_student()方法,用于添加学员
  103. self.add_student()
  104. elif user_num == 2:
  105. # 删除学员功能实现
  106. self.del_student()
  107. elif user_num == 3:
  108. # 修改学员功能实现
  109. self.edit_student()
  110. elif user_num == 4:
  111. self.find_student()
  112. elif user_num == 5:
  113. # 遍历所有学员信息
  114. self.show_students()
  115. elif user_num == 6:
  116. # 保存数据到文件
  117. self.save_data_to_file()
  118. elif user_num == 7:
  119. print('退出系统成功,感谢您使用传智教育学生管理系统V2.0!')
  120. break
  121. else:
  122. print('很抱歉,您输入的编号有误,请重新输入')

main.py

  1. # 导入StudentManager文件中的StudentManager类
  2. # from 模块名称(文件名称) import 类名
  3. from StudentManager import StudentManager
  4. # 定义程序的入口 => 一段模块测试代码
  5. if __name__ == '__main__':
  6. # 启动项目,运行项目中的代码
  7. sm = StudentManager()
  8. sm.start()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/808109
推荐阅读
相关标签
  

闽ICP备14008679号