经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python3 » 查看文章
详解用python实现基本的学生管理系统(文件存储版)(python3)
来源:jb51  时间:2019/4/25 10:21:40  对本文有异议

这个是升级的版本,比较进阶一点的,相对与之前的文件管理系统,数据只是存储到了内存中,而不是存储到硬盘上,我们想让文件存储到硬盘上的话,一个是存储到文件里,一个是存储到数据库中,存储到数据库中的版本会后续发布,先来看一下文件存储版,是把学生信息存储到了txt文件中,我这里是默认存储到了students.txt文件中,想更改文件名字根据代码修改即可,代码中注释很详细,我也是python初学者,欢迎大家和我交流! 

  1. """
  2. 学生管理系统(文件存储版)
  3. 再原有功能的基础上添加了如下功能:
  4. 1.保存学生数据,保存到与python文件同目录下 保存的时候设置编码UTF-8 防止乱码
  5. 2.删除所有学生信息
  6. 3.添加了函数recover_data运行程序先获取数据 文件不存在的话会自行创建并存储一个空列表
  7. """
  8. import os
  9. name_list = [] # 存储学生信息字典,学生信息用字典存,再用列表存储字典
  10. # 菜单
  11. def display_menu():
  12. print("-" * 30)
  13. print(" 学生管理系统 v8.8 ")
  14. print("1.添加学生信息")
  15. print("2.删除学生信息")
  16. print("3.修改学生信息")
  17. print("4.查询单个学生信息")
  18. print("5.查询所有学生信息")
  19. print("6.保存学生信息")
  20. print("7.删除所有学生")
  21. print("0.退出系统")
  22. print("-" * 30)
  23. # 选择序号的获得
  24. def get_choice():
  25. selected_key = input("请输入选择的序号:")
  26. return selected_key
  27. # 检查性别是否合法
  28. def check_sex(new_sex):
  29. flag = True
  30. while flag:
  31. if new_sex == '男' or new_sex == '女':
  32. flag = False
  33. else:
  34. new_sex = input("输入性别有误,请重新输入(男/女):")
  35. return new_sex
  36. # 检查电话号码是否合法
  37. def check_phone(new_phone):
  38. flag = True
  39. while flag:
  40. if new_phone.isdigit():
  41. flag = False
  42. else:
  43. new_phone = input("您输入的电话号码有误,请重新输入:")
  44. return new_phone
  45. # 检查学号是否重复或者有误
  46. def check_id(new_id):
  47. flag = True
  48. while flag:
  49. # 先检查是不是纯数字再去考虑是否重复的事情,如果不是纯数字直接pass
  50. if new_id.isdigit():
  51. for i in range(len(name_list)):
  52. if name_list[i]['id'] == new_id:
  53. new_id = check_id(input("您输入的学号重复,请重新输入:"))
  54. flag = False
  55. else:
  56. new_id = input("您输入的学号有误,请重新输入:")
  57. return new_id
  58. # 添加学生信息
  59. def add_name():
  60. new_info = {}
  61. new_id = check_id(input("请输入学号:"))
  62. new_info['id'] = new_id
  63. new_name = input("请输入姓名:")
  64. new_info['name'] = new_name
  65. new_sex = check_sex(input("请输入性别(男/女):"))
  66. new_info['sex'] = new_sex
  67. new_phone = check_phone(input("请输入电话号码:"))
  68. new_info['phone'] = new_phone
  69. name_list.append(new_info)
  70. print("添加成功!")
  71. # 查询所有学生信息
  72. def find_all():
  73. print("=" * 30)
  74. for name in name_list:
  75. print(name['id'], name['name'], name['sex'], name['phone'])
  76. print("=" * 30)
  77. # 删除学生信息
  78. def del_name():
  79. del_id_is = input("请输入要删除的学生学号:")
  80. flag = False
  81. index = 0
  82. for i in range(len(name_list)):
  83. if name_list[i]['id'] == del_id_is:
  84. flag = True
  85. index = i
  86. break
  87. if flag:
  88. name_list.pop(index)
  89. print("删除成功!")
  90. else:
  91. print("学生未找到!请检查学号输入是否有误!")
  92. # 删除所有学生
  93. def del_all():
  94. global name_list
  95. flag = input("确定要删除吗?(Y删除/输入其他字符返回菜单):")
  96. if flag == 'Y' or flag == 'y':
  97. name_list = []
  98. print("删除成功!")
  99. else:
  100. return
  101. # 名字修改细节函数
  102. def choice_of_name(index):
  103. while True:
  104. choice = input("请输入要修改学生的(1.id 2.姓名 3.性别 4.电话号码,5.全部修改):")
  105. if choice == '5':
  106. new_id = input("请输入新的学号:")
  107. name_list[index]['id'] = new_id
  108. new_name = input("请输入新的姓名:")
  109. name_list[index]['name'] = new_name
  110. new_sex = check_sex(input("请输入性别(男/女):"))
  111. name_list[index]['sex'] = new_sex
  112. new_phone = check_phone(input("请输入电话号码:"))
  113. name_list[index]['phone'] = new_phone
  114. break
  115. elif choice == '1':
  116. new_id = input("请输入新的学号:")
  117. name_list[index]['id'] = new_id
  118. break
  119. elif choice == '2':
  120. new_name = input("请输入新的姓名:")
  121. name_list[index]['name'] = new_name
  122. break
  123. elif choice == '3':
  124. new_sex = check_sex(input("请输入性别(男/女):"))
  125. name_list[index]['sex'] = new_sex
  126. break
  127. elif choice == '4':
  128. new_phone = check_phone(input("请输入电话号码:"))
  129. name_list[index]['phone'] = new_phone
  130. break
  131. else:
  132. print("输入有误,请重新输入!")
  133. # 修改学生信息
  134. def re_name():
  135. id_is = input("请输入要修改的学生学号:")
  136. flag = False
  137. index = 0
  138. # 先找到要修改的学生的下标
  139. for i in range(len(name_list)):
  140. if name_list[i]['id'] == id_is:
  141. flag = True
  142. index = i
  143. break
  144. if flag:
  145. choice_of_name(index)
  146. print("修改成功!")
  147. else:
  148. print("修改失败,学生信息未找到!")
  149. # 查询单个学生信息
  150. def find_name():
  151. find_id_is = input("请输入要查询的学生学号:")
  152. flag = False
  153. index = 0
  154. for i in range(len(name_list)):
  155. if name_list[i]['id'] == find_id_is:
  156. flag = True
  157. index = i
  158. break
  159. if flag:
  160. print("学生查询到,学生信息为:")
  161. print(name_list[index]['id'], name_list[index]['name'], name_list[index]['sex'], name_list[index]['phone'])
  162. else:
  163. print("学生未找到!")
  164. # 保存学生信息
  165. def save_stu():
  166. students = str(name_list)
  167. with open("students.txt", "w", encoding="utf-8") as f:
  168. f.write(students)
  169. print("保存成功!文件位置在"+os.getcwd())
  170. # 恢复数据
  171. def recover_data():
  172. global name_list
  173. try:
  174. with open("students.txt", "r", encoding="utf-8") as f:
  175. content = f.read()
  176. if content != '':
  177. name_list = eval(content)
  178. except:
  179. f = open("students.txt", "w")
  180. f.write("[]")
  181. def main():
  182. recover_data()
  183. exit_name = True
  184. while exit_name:
  185. display_menu()
  186. key = get_choice()
  187. if key == '1':
  188. add_name()
  189. elif key == '2':
  190. del_name()
  191. elif key == '3':
  192. re_name()
  193. elif key == '4':
  194. find_name()
  195. elif key == '5':
  196. find_all()
  197. elif key == '6':
  198. save_stu()
  199. elif key == '7':
  200. del_all()
  201. elif key == '0':
  202. exit_name = False
  203. else:
  204. print("请输入正确的数值!")
  205. main()

以上所述是小编给大家介绍的python实现基本的学生管理系统详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号