引言
Hallo,大家好!首先今天是1024,程序员节快乐!看到这个标题,是不是狂喜一阵?《学生管理系统》、《图书馆管理系统》等等一系列管理系统一直是各高校大作业的热门,好消息是这篇文章可以很大程度地帮助你哦!这篇文章很早就想写了,一直因为各种事情拖拖拖(主要是因为自己懒),正好今天程序员节,用这篇文章纪念2022年10月24日,自己的第一个程序员节吧!
一 、学习目标
- 了解面向对象开发过程中类内部功能的分析方法
- 了解常用的系统功能
- 添加
- 删除
- 修改
- 查询
二、系统需求
使用面向对象编程思想完成学员管理系统的开发,具体如下:
- 系统要求:学员数据存储在文件中
- 系统功能:添加学员、删除学员、修改学员信息、显示所有学员信息、保存学员信息及退出系统等功能
三、准备程序文件
3.1分析
- 角色分析
- 学员
- 管理系统
- 工作中一些注意事项
- 为了方便维护代码,一般一个角色一个程序文件
- 项目要有主程序入口,习惯为
main.py
3.2创建程序文件
创建项目目录,例如:StudentManagerSystem
程序文件如下:
- 程序入口文件:main.py
- 学员文件:student.py
- 管理系统文件:managerSystem.py
四、定义学员类(student.py)
4.1需求
- 学员信息包含:姓名、性别、手机号;
- 添加__str__魔法方法,方便查看学员对象信息
4.2程序代码
1. #!/usr/bin/env python 2. # -*- coding: UTF-8 -*- 3. """ 4. @Project :StudentManagerSystem 5. @File :stuednt.py 6. @IDE :PyCharm 7. @Author :咋 8. @Date :2022/10/22 9:31 9. """ 10. class Stuednt(object): 11. def __init__(self,name,gender,tel): 12. self.name = name 13. self.gender = gender 14. self.tel = tel 15. 16. def __str__(self): 17. return f"{self.name},{self.gender}"
五、管理系统(managerSystem.py)
5.1需求
- 存储数据的位置:文件(student.data)
- 加载文件数据
- 修改数据后保存到文件
- 存储数据的形式:列表存储学院对象
- 系统功能
- 添加学员
- 删除学员
- 修改学员
- 查询学员信息
- 显示所有学员信息
- 保存学员信息
- 退出系统
5.2管理系统框架
5.2.1需求
系统功能循环使用,用户输入不同的功能序号执行不同的功能。
5.2.2步骤
- 定义程序入口函数
- 加载数据
- 显示功能菜单
- 用户输入功能序号
- 根据用户输入的功能序号执行不同的功能
- 定义系统功能函数,添加、删除学员等
1. class StudentManager(object): 2. def __init__(self): 3. # 存储数据所用的列表 4. self.student_list = [] 5. 6. # 一. 程序入口函数,启动程序后执行的函数 7. def run(self): 8. # 1. 加载学员信息 9. self.load_student() 10. 11. while True: 12. # 2. 显示功能菜单 13. self.show_menu() 14. 15. # 3. 用户输入功能序号 16. menu_num = int(input('请输入您需要的功能序号:')) 17. 18. # 4 根据用户输入的功能序号执行不同的功能 19. if menu_num == 1: 20. # 添加学员 21. self.add_student() 22. elif menu_num == 2: 23. # 删除学员 24. self.del_student() 25. elif menu_num == 3: 26. # 修改学员信息 27. self.modify_student() 28. elif menu_num == 4: 29. # 查询学员信息 30. self.search_student() 31. elif menu_num == 5: 32. # 显示所有学员信息 33. self.show_student() 34. elif menu_num == 6: 35. # 保存学员信息 36. self.save_student() 37. elif menu_num == 7: 38. # 退出系统 39. break 40. 41. # 二. 定义功能函数 42. # 2.1 显示功能菜单 43. @staticmethod 44. def show_menu(): 45. print('请选择如下功能-----------------') 46. print('1:添加学员') 47. print('2:删除学员') 48. print('3:修改学员信息') 49. print('4:查询学员信息') 50. print('5:显示所有学员信息') 51. print('6:保存学员信息') 52. print('7:退出系统') 53. 54. # 2.2 添加学员 55. def add_student(self): 56. pass 57. 58. # 2.3 删除学员 59. def del_student(self): 60. pass 61. 62. # 2.4 修改学员信息 63. def modify_student(self): 64. pass 65. 66. # 2.5 查询学员信息 67. def search_student(self): 68. pass 69. 70. # 2.6 显示所有学员信息 71. def show_student(self): 72. pass 73. 74. # 2.7 保存学员信息 75. def save_student(self): 76. pass 77. 78. # 2.8 加载学员信息 79. def load_student(self): 80. pass
5.3各功能的实现
5.3.1添加学员功能
- 需求:用户输入学员姓名、性别、手机号,将学员添加到系统
- 步骤
- 用户输入姓名、性别、手机号
- 创建该学员对象
- 将该学员对象添加到列表
- 代码
1. # 添加学员函数内部需要创建学员对象,故先导入student模块 2. from student import * 3. 4. 5. class StudentManager(object): 6. ...... 7. 8. # 2.2 添加学员 9. def add_student(self): 10. # 1. 用户输入姓名、性别、手机号 11. name = input('请输入您的姓名:') 12. gender = input('请输入您的性别:') 13. tel = input('请输入您的手机号:') 14. 15. # 2. 创建学员对象:先导入学员模块,再创建对象 16. student = Student(name, gender, tel) 17. 18. # 3. 将该学员对象添加到列表 19. self.student_list.append(student) 20. 21. # 打印信息 22. print(self.student_list) 23. print(student)
5.3.2删除学员功能
- 需求:用户输入目标学员姓名,如果学员存在则删除该学员。
- 步骤
- 用户输入目标学员姓名
- 遍历学员数据列表,如果用户输入的学员姓名存在则删除,否则则提示该学员不存在。
- 代码
1. # 2.3 删除学员:删除指定姓名的学员 2. def del_student(self): 3. # 1. 用户输入目标学员姓名 4. del_name = input('请输入要删除的学员姓名:') 5. 6. # 2. 如果用户输入的目标学员存在则删除,否则提示学员不存在 7. for i in self.student_list: 8. if i.name == del_name: 9. self.student_list.remove(i) 10. break 11. else: 12. print('查无此人!') 13. 14. # 打印学员列表,验证删除功能 15. print(self.student_list)
5.3.3修改学员功能
- 需求:用户输入目标学员姓名,如果学员存在则修改该学员信息。
- 步骤
- 用户输入目标学员姓名;
- 遍历学员数据列表,如果用户输入的学员姓名存在则修改学员的姓名、性别、手机号数据,否则则提示该学员不存在。
- 代码
1. # 2.4 修改学员信息 2. def modify_student(self): 3. # 1. 用户输入目标学员姓名 4. modify_name = input('请输入要修改的学员的姓名:') 5. # 2. 如果用户输入的目标学员存在则修改姓名、性别、手机号等数据,否则提示学员不存在 6. for i in self.student_list: 7. if i.name == modify_name: 8. i.name = input('请输入学员姓名:') 9. i.gender = input('请输入学员性别:') 10. i.tel = input('请输入学员手机号:') 11. print(f'修改该学员信息成功,姓名{i.name},性别{i.gender}, 手机号{i.tel}') 12. break 13. else: 14. print('查无此人!')
5.3.4查询学员功能
- 需求:用户输入目标学员姓名,如果学员存在则打印该学员信息
- 步骤
- 用户输入目标学员姓名
- 遍历学员数据列表,如果用户输入的学员姓名存在则打印学员信息,否则提示该学员不存在。
- 代码
1. # 2.5 查询学员信息 2. def search_student(self): 3. # 1. 用户输入目标学员姓名 4. search_name = input('请输入要查询的学员的姓名:') 5. 6. # 2. 如果用户输入的目标学员存在,则打印学员信息,否则提示学员不存在 7. for i in self.student_list: 8. if i.name == search_name: 9. print(f'姓名{i.name},性别{i.gender}, 手机号{i.tel}') 10. break 11. else: 12. print('查无此人!')
5.3.5显示所有学员信息功能
- 打印所有学员信息
- 步骤
- 遍历学员数据列表,打印所有学员信息
- 代码
1. # 2.6 显示所有学员信息 2. def show_student(self): 3. print('姓名\t性别\t手机号') 4. for i in self.student_list: 5. print(f'{i.name}\t{i.gender}\t{i.tel}')
5.3.6保存学员信息功能
- 需求:将修改后的学员数据保存到存储数据的文件。
- 步骤
- 打开文件
- 文件写入数据
- 关闭文件
- 代码
1. # 2.7 保存学员信息 2. def save_student(self): 3. # 1. 打开文件 4. f = open('student.data', 'w') 5. 6. # 2. 文件写入学员数据 7. # 注意1:文件写入的数据不能是学员对象的内存地址,需要把学员数据转换成列表字典数据再做存储 8. new_list = [i.__dict__ for i in self.student_list] 9. # [{'name': 'aa', 'gender': 'nv', 'tel': '111'}] 10. print(new_list) 11. 12. # 注意2:文件内数据要求为字符串类型,故需要先转换数据类型为字符串才能文件写入数据 13. f.write(str(new_list)) 14. 15. # 3. 关闭文件 16. f.close()
5.3.7 加载学员信息功能
- 需求:每次进入系统后,修改的数据是文件里面的数据
- 步骤
- 尝试以
"r"
模式打开学员数据文件,如果文件不存在则以"w"
模式打开文件 - 如果文件存在则读取数据并存储数据
- 读取数据
- 转换数据类型为列表并转换列表内的字典为对象
- 存储学员数据到学员列表
- 关闭文件
- 代码
1. # 2.8 加载学员信息 2. def load_student(self): 3. # 尝试以"r"模式打开数据文件,文件不存在则提示用户;文件存在(没有异常)则读取数据 4. try: 5. f = open('student.data', 'r') 6. except: 7. f = open('student.data', 'w') 8. else: 9. # 1. 读取数据 10. data = f.read() 11. 12. # 2. 文件中读取的数据都是字符串且字符串内部为字典数据,故需要转换数据类型再转换字典为对象后存储到学员列表 13. new_list = eval(data) 14. self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list] 15. finally: 16. # 3. 关闭文件 17. f.close()
六、程序主函数(main.py)
1. # 1. 导入managerSystem模块 2. from managerSystem import * 3. 4. 5. # 2. 启动学员管理系统 6. if __name__ == '__main__': 7. student_manager = StudentManager() 8. 9. student_manager.run()
七、完整代码
main.py:
1. from managerSystem import * 2. 3. if __name__ == "__main__": 4. student_manager = StudentManager() 5. student_manager.run()
student.py:
1. #!/usr/bin/env python 2. # -*- coding: UTF-8 -*- 3. """ 4. @Project :StudentManagerSystem 5. @File :student.py 6. @IDE :PyCharm 7. @Author :咋 8. @Date :2022/10/22 9:31 9. """ 10. class Student(object): 11. def __init__(self,name,gender,tel): 12. self.name = name 13. self.gender = gender 14. self.tel = tel 15. 16. def __str__(self): 17. return f"{self.name},{self.gender},{self.tel}"
managerSystem.py:
1. #!/usr/bin/env python 2. # -*- coding: UTF-8 -*- 3. """ 4. @Project :StudentManagerSystem 5. @File :managerSystem.py 6. @IDE :PyCharm 7. @Author :咋 8. @Date :2022/10/22 9:32 9. """ 10. from student import * 11. class StudentManager(object): 12. def __init__(self): 13. self.student_list = [] 14. 15. def run(self): 16. self.load_student() 17. while True: 18. self.show_menu() 19. menu_num = int(input("请输入您需要的功能序号:")) 20. if menu_num == 1: 21. self.add_student() 22. elif menu_num == 2: 23. self.del_student() 24. elif menu_num == 3: 25. self.modify_student() 26. elif menu_num == 4: 27. self.search_student() 28. elif menu_num == 5: 29. self.show_student() 30. elif menu_num == 6: 31. self.save_student() 32. elif menu_num == 7: 33. break 34. else: 35. print("您输入的序号有误,请重新输入!") 36. 37. @staticmethod 38. def show_menu(): 39. print("请选择如下功能:") 40. print("1.添加学员") 41. print("2.删除学员") 42. print("3.修改学员信息") 43. print("4.查询学员信息") 44. print("5.显示所有学员信息") 45. print("6.保存学员信息") 46. print("7.退出系统") 47. def add_student(self): 48. name = input("请输入学员的姓名:") 49. gender = input("请输入学员的性别:") 50. tel = input("请输入学员的手机号") 51. student = Student(name, gender, tel) 52. self.student_list.append(student) 53. def del_student(self): 54. del_name = input("请输入要删除的学员姓名:") 55. for i in self.student_list: 56. if i.name == del_name: 57. self.student_list.remove(i) 58. break 59. else: 60. print("查无此人!") 61. print(self.student_list) 62. 63. def modify_student(self): 64. modify_name = input("请输入学员姓名:") 65. for i in self.student_list: 66. if i.name == modify_name: 67. i.name = input("请输入更改之后的学员姓名:") 68. i.gender = input("请输入更改之后的学员性别:") 69. i.tel = input("请输入更改之后的学员手机号:") 70. print(f"修改该学员信息成功,姓名:{i.name},性别:{i.gender},手机号:{i.tel}") 71. break 72. else: 73. print("查无此人!") 74. 75. def search_student(self): 76. search_name = input("请输入您要查找的学员的姓名:") 77. for i in self.student_list: 78. if i.name == search_name: 79. print(f"姓名:{i.name},性别:{i.gender},手机号:{i.tel}") 80. break 81. else: 82. print("查无此人!") 83. 84. def show_student(self): 85. print("姓名\t性别\t手机号") 86. for i in self.student_list: 87. print(f"{i.name}\t{i.gender}\t{i.tel}") 88. 89. def save_student(self): 90. f = open("student.data","w") 91. new_list = [i.__dict__ for i in self.student_list] 92. print(new_list) 93. f.write(str(new_list)) 94. f.close() 95. 96. def load_student(self): 97. try: 98. f = open("student.data","r") 99. except: 100. f = open("student.data","w") 101. else: 102. data = f.read() 103. new_list = eval(data) 104. self.student_list = [Student(i["name"], i["gender"], i["tel"]) for i in new_list] 105. finally: 106. f.close() 107.
八、总结
- 函数
- 定义和调用
- 参数的使用
- 面向对象
- 定义类
- 创建对象
- 定义和调用实例属性
- 定义和调用实例方法
- 数据类型
- 列表
- 增加删除数据
- 列表推导式
- 字典
- 字符串
- 文件操作
- 打开文件
- 读取或写入
- 关闭文件
虽说这样的简单学生管理系统技术含量并不是很高,但自己做出来还是很有成就感的!如果之后在和Mysql数据关联,用GUI可视化,那么效果会更好哦!那都是后话了,现在我们已经能够自己去编写一个简易版本的学生管理系统,学会了底层代码逻辑及一些细节处理,收获还是很多的!
好啦,今天的分享就到这里啦!感兴趣的小伙伴欢迎评论区交流!
最后附上视频教程:python小项目之学生管理系统;
以及一篇优秀markdown笔记:python小项目之学生管理系统笔记