控制台学生信息管理系统 (Python经典编程案例)

喜欢ヅ旅行 2024-04-18 18:09 187阅读 0赞

控制台学生信息管理系统,项目结构如下图:
控制台学生信息管理系统
数据存在students.txt中:
在这里插入图片描述

代码如下:

  1. # 开发工具:PyCharm
  2. import re # 导入正则表达式模块
  3. import os # 导入操作系统模块
  4. filename = "students.txt" # 定义保存学生信息的文件名
  5. def menu():
  6. # 输出菜单
  7. print(''' ╔———————学生信息管理系统————————╗ │ │ │ =============== 功能菜单 =============== │ │ │ │ 1 录入学生信息 │ │ 2 查找学生信息 │ │ 3 删除学生信息 │ │ 4 修改学生信息 │ │ 5 排序 │ │ 6 统计学生总人数 │ │ 7 显示所有学生信息 │ │ 0 退出系统 │ │ ========================================== │ │ 说明:通过数字或↑↓方向键选择菜单 │ ╚———————————————————————╝ ''')
  8. def main():
  9. ctrl = True # 标记是否退出系统
  10. while (ctrl):
  11. menu() # 显示菜单
  12. option = input("请选择:") # 选择菜单项
  13. option_str = re.sub("\D", "", option) # 提取数字
  14. if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
  15. option_int = int(option_str)
  16. if option_int == 0: # 退出系统
  17. print('您已退出学生成绩管理系统!')
  18. ctrl = False
  19. elif option_int == 1: # 录入学生成绩信息
  20. insert()
  21. elif option_int == 2: # 查找学生成绩信息
  22. search()
  23. elif option_int == 3: # 删除学生成绩信息
  24. delete()
  25. elif option_int == 4: # 修改学生成绩信息
  26. modify()
  27. elif option_int == 5: # 排序
  28. sort()
  29. elif option_int == 6: # 统计学生总数
  30. total()
  31. elif option_int == 7: # 显示所有学生信息
  32. show()
  33. def insert():
  34. """1 录入学生信息"""
  35. stdentList = [] # 保存学生信息的列表
  36. mark = True # 是否继续添加
  37. while mark:
  38. id = input("请输入ID(如 1001):")
  39. if not id: # ID为空,跳出循环
  40. break
  41. name = input("请输入名字:")
  42. if not name: # 名字为空,跳出循环
  43. break
  44. try:
  45. english = int(input("请输入英语成绩:"))
  46. python = int(input("请输入Python成绩:"))
  47. c = int(input("请输入C语言成绩:"))
  48. except:
  49. print("输入无效,不是整型数值....重新录入信息")
  50. continue
  51. stdent = { "id": id, "name": name, "english": english, "python": python, "c": c} # 将输入的学生信息保存到字典
  52. stdentList.append(stdent) # 将学生字典添加到列表中
  53. inputMark = input("是否继续添加?(y/n):")
  54. if inputMark == "y": # 继续添加
  55. mark = True
  56. else: # 不继续添加
  57. mark = False
  58. save(stdentList) # 将学生信息保存到文件
  59. print("学生信息录入完毕!!!")
  60. # 将学生信息保存到文件
  61. def save(student):
  62. try:
  63. students_txt = open(filename, "a") # 以追加模式打开
  64. except Exception as e:
  65. students_txt = open(filename, "w") # 文件不存在,创建文件并打开
  66. for info in student:
  67. students_txt.write(str(info) + "\n") # 按行存储,添加换行符
  68. students_txt.close() # 关闭文件
  69. def search():
  70. """2 查找学生成绩信息"""
  71. mark = True
  72. student_query = [] # 保存查询结果的学生列表
  73. while mark:
  74. id = ""
  75. name = ""
  76. if os.path.exists(filename): # 判断文件是否存在
  77. mode = input("按ID查输入1;按姓名查输入2:")
  78. if mode == "1":
  79. id = input("请输入学生ID:")
  80. elif mode == "2":
  81. name = input("请输入学生姓名:")
  82. else:
  83. print("您的输入有误,请重新输入!")
  84. search() # 重新查询
  85. with open(filename, 'r') as file: # 打开文件
  86. student = file.readlines() # 读取全部内容
  87. for list in student:
  88. d = dict(eval(list)) # 字符串转字典
  89. if id is not "": # 判断是否按ID查
  90. if d['id'] == id:
  91. student_query.append(d) # 将找到的学生信息保存到列表中
  92. elif name is not "": # 判断是否按姓名查
  93. if d['name'] == name:
  94. student_query.append(d) # 将找到的学生信息保存到列表中
  95. show_student(student_query) # 显示查询结果
  96. student_query.clear() # 清空列表
  97. inputMark = input("是否继续查询?(y/n):")
  98. if inputMark == "y":
  99. mark = True
  100. else:
  101. mark = False
  102. else:
  103. print("暂未保存数据信息...")
  104. return
  105. def delete():
  106. """3 删除学生成绩信息"""
  107. mark = True # 标记是否循环
  108. while mark:
  109. studentId = input("请输入要删除的学生ID:")
  110. if studentId is not "": # 判断要删除的学生是否存在
  111. if os.path.exists(filename): # 判断文件是否存在
  112. with open(filename, 'r') as rfile: # 打开文件
  113. student_old = rfile.readlines() # 读取全部内容
  114. else:
  115. student_old = []
  116. ifdel = False # 标记是否删除
  117. if student_old: # 如果存在学生信息
  118. with open(filename, 'w') as wfile: # 以写方式打开文件
  119. d = { } # 定义空字典
  120. for list in student_old:
  121. d = dict(eval(list)) # 字符串转字典
  122. if d['id'] != studentId:
  123. wfile.write(str(d) + "\n") # 将一条学生信息写入文件
  124. else:
  125. ifdel = True # 标记已经删除
  126. if ifdel:
  127. print("ID为 %s 的学生信息已经被删除..." % studentId)
  128. else:
  129. print("没有找到ID为 %s 的学生信息..." % studentId)
  130. else: # 不存在学生信息
  131. print("无学生信息...")
  132. break # 退出循环
  133. show() # 显示全部学生信息
  134. inputMark = input("是否继续删除?(y/n):")
  135. if inputMark == "y":
  136. mark = True # 继续删除
  137. else:
  138. mark = False # 退出删除学生信息功能
  139. def modify():
  140. """4 修改学生成绩信息"""
  141. show() # 显示全部学生信息
  142. if os.path.exists(filename): # 判断文件是否存在
  143. with open(filename, 'r') as rfile: # 打开文件
  144. student_old = rfile.readlines() # 读取全部内容
  145. else:
  146. return
  147. studentid = input("请输入要修改的学生ID:")
  148. with open(filename, "w") as wfile: # 以写模式打开文件
  149. for student in student_old:
  150. d = dict(eval(student)) # 字符串转字典
  151. if d["id"] == studentid: # 是否为要修改的学生
  152. print("找到了这名学生,可以修改他的信息!")
  153. while True: # 输入要修改的信息
  154. try:
  155. d["name"] = input("请输入姓名:")
  156. d["english"] = int(input("请输入英语成绩:"))
  157. d["python"] = int(input("请输入Python成绩:"))
  158. d["c"] = int(input("请输入C语言成绩:"))
  159. except:
  160. print("您的输入有误,请重新输入。")
  161. else:
  162. break # 跳出循环
  163. student = str(d) # 将字典转换为字符串
  164. wfile.write(student + "\n") # 将修改的信息写入到文件
  165. print("修改成功!")
  166. else:
  167. wfile.write(student) # 将未修改的信息写入到文件
  168. mark = input("是否继续修改其他学生信息?(y/n):")
  169. if mark == "y":
  170. modify() # 重新执行修改操作
  171. def sort():
  172. """5 排序"""
  173. show() # 显示全部学生信息
  174. if os.path.exists(filename): # 判断文件是否存在
  175. with open(filename, 'r') as file: # 打开文件
  176. student_old = file.readlines() # 读取全部内容
  177. student_new = []
  178. for list in student_old:
  179. d = dict(eval(list)) # 字符串转字典
  180. student_new.append(d) # 将转换后的字典添加到列表中
  181. else:
  182. return
  183. ascORdesc = input("请选择(0升序;1降序):")
  184. if ascORdesc == "0": # 按升序排序
  185. ascORdescBool = False # 标记变量,为False表示升序排序
  186. elif ascORdesc == "1": # 按降序排序
  187. ascORdescBool = True # 标记变量,为True表示降序排序
  188. else:
  189. print("您的输入有误,请重新输入!")
  190. sort()
  191. mode = input("请选择排序方式(1按英语成绩排序;2按Python成绩排序;3按C语言成绩排序;0按总成绩排序):")
  192. if mode == "1": # 按英语成绩排序
  193. student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
  194. elif mode == "2": # 按Python成绩排序
  195. student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
  196. elif mode == "3": # 按C语言成绩排序
  197. student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
  198. elif mode == "0": # 按总成绩排序
  199. student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
  200. else:
  201. print("您的输入有误,请重新输入!")
  202. sort()
  203. show_student(student_new) # 显示排序结果
  204. def total():
  205. """6 统计学生总数"""
  206. if os.path.exists(filename): # 判断文件是否存在
  207. with open(filename, 'r') as rfile: # 打开文件
  208. student_old = rfile.readlines() # 读取全部内容
  209. if student_old:
  210. print("一共有 %d 名学生!" % len(student_old))
  211. else:
  212. print("还没有录入学生信息!")
  213. else:
  214. print("暂未保存数据信息...")
  215. def show():
  216. """7 显示所有学生信息"""
  217. student_new = []
  218. if os.path.exists(filename): # 判断文件是否存在
  219. with open(filename, 'r') as rfile: # 打开文件
  220. student_old = rfile.readlines() # 读取全部内容
  221. for list in student_old:
  222. student_new.append(eval(list)) # 将找到的学生信息保存到列表中
  223. if student_new:
  224. show_student(student_new)
  225. else:
  226. print("暂未保存数据信息...")
  227. def show_student(studentList):
  228. """将保存在列表中的学生信息显示出来"""
  229. if not studentList:
  230. print("(o@.@o) 无数据信息 (o@.@o) \n")
  231. return
  232. format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}"
  233. print(format_title.format("ID", "名字", "英语成绩", "Python成绩", "C语言成绩", "总成绩"))
  234. format_data = "{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}"
  235. for info in studentList:
  236. print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),
  237. str(info.get("c")),
  238. str(info.get("english") + info.get("python") + info.get("c")).center(12)))
  239. if __name__ == "__main__":
  240. main()

执行结果如下:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,187人围观)

还没有评论,来说两句吧...

相关阅读

    相关 学生信息管理系统

      最近在做学生信息管理系统,做之前大脑一片空白,觉得做系统真的好复杂!但真正入手了也没那么复杂了。   学生信息管理系统条理性很强大概可以分为三大块:添加信息、修改信息和查