当前位置:   article > 正文

Python学生管理系统(将新增学生信息保存到文件中的版本)_python用字符串保存至少5位学生信息,用分号分隔每个学生

python用字符串保存至少5位学生信息,用分号分隔每个学生

今日主题:入门必写系统程序 "学生管理系统" 。

主要实现的功能:1、新增学生信息 2、删除学生信息  3、修改学生信息  4、查找学生信息  5、查看所有学生信息  6、排序学生成绩 7、统计学生总人数 10、退出系统。通过数字选择菜单功能。

保存到文件中的需要导入一个库。然后程序编写好之后需要跑起来,怎样完成库的导入和主函数调用呢?需要import和主函数main()

os库是Python的标准库之一,它里面包含几百个处理函数,能够处理与操作系统相关的功能,包括路径操作、进程管理、环境参数设置等几类功能。

  1. import os.path
  2. # 只有语句运行main的时候 这个输出语句才会运、不加的则其他中调用此模块函数 也会输出
  3. if __name__ == '__main__':
  4. main()

 1、新增学生信息代码模块

  1. # 新增学生信息
  2. def increase():
  3. print("你好,先输入学号查看是否已存在学生信息...")
  4. id = input("请输入学生学号:")
  5. while True:
  6. if os.path.exists(filename):
  7. with open(filename, 'r', encoding='utf-8') as file:
  8. student_old = file.readlines()
  9. with open(filename, 'r', encoding='utf-8') as file:
  10. students = file.readlines()
  11. students_new = []
  12. for item in students:
  13. d = dict(eval(item))
  14. students_new.append(d)
  15. # show_query(students_new)
  16. for item in student_old:
  17. d = {}
  18. d = dict(eval(item))
  19. if d['学号'] == id:
  20. print("当前学号已存在,请重新申请学号...")
  21. continue
  22. else:
  23. break
  24. print("现在为你录入学生基本信息...")
  25. id = input("请输入学生id:")
  26. name = input("请输入学生姓名:")
  27. age = input("请输入学生年龄:")
  28. gender = input("请输入学生性别:")
  29. print("OK...现在开始录入成绩...")
  30. sub1 = int(input("请输入Python成绩:"))
  31. sub2 = int(input("请输入Java成绩:"))
  32. sub3 = int(input("请输入MySQL成绩:"))
  33. stockpile_list.append(
  34. {"姓名": name, "学号": id, "Python成绩": sub1, "年龄": age, "性别": gender, "Java成绩": sub2, "MySQL成绩": sub3})
  35. # 调用save函数保存信息
  36. save(stockpile_list)
  37. print("添加成功!")
  38. break

2、删除学生信息代码模块

  1. # 删除学生信息
  2. def delete():
  3. print("请问你想通过姓名删除还是学号删除?")
  4. answer = input("按ID查询请按1,按姓名查询请按2")
  5. if answer == "2":
  6. while True:
  7. # 通过姓名删除学生信息
  8. name = input("请输入学生姓名:")
  9. if name != ' ':
  10. if os.path.exists(filename):
  11. with open(filename, 'r', encoding='utf-8') as file:
  12. student_old = file.readlines()
  13. else:
  14. student_old = []
  15. flag = False
  16. if student_old: # 空列表等于 False,非空列表等于True
  17. with open(filename, 'r', encoding='utf-8') as wfile:
  18. # 只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除
  19. d = {}
  20. for item in student_old:
  21. d = dict(eval(item)) # 将字符串转换为字典
  22. if d['姓名'] != name:
  23. wfile.write(str(d)+'\n')
  24. else:
  25. flag = True
  26. if flag:
  27. print("学生{}的信息已被删除!".format(name))
  28. else:
  29. print("查无此人!")
  30. break
  31. findAll()
  32. answer = input("是否继续删除?y/n")
  33. if answer == 'y':
  34. continue
  35. else:
  36. break
  37. elif answer == "1":
  38. while True:
  39. # 通过id删除学生信息
  40. id = input("请输入学生id:")
  41. if id != ' ':
  42. if os.path.exists(filename):
  43. with open(filename, 'r', encoding='utf-8') as file:
  44. student_old = file.readlines()
  45. else:
  46. student_old = []
  47. flag = False
  48. if student_old: # 空列表等于 False,非空列表等于True
  49. with open(filename, 'w', encoding='utf-8') as wfile:
  50. # 只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除
  51. d = {}
  52. for item in student_old:
  53. d = dict(eval(item)) # 将字符串转换为字典
  54. if d['学号'] != id:
  55. wfile.write(str(d)+'\n')
  56. else:
  57. flag = True
  58. if flag:
  59. print("学号为{}的学生的信息已被删除!".format(id))
  60. else:
  61. print("查无此人!")
  62. break
  63. findAll()
  64. answer = input("是否继续删除?y/n")
  65. if answer == 'y':
  66. continue
  67. else:
  68. break

3、修改学生信息代码模块

  1. # 修改学生信息
  2. def revise():
  3. print("请问你想通过姓名修改还是学号修改学生已录入信息?")
  4. answer = input("按ID修改请按1,按0取消修改")
  5. if answer == "1":
  6. if os.path.exists(filename):
  7. with open(filename, 'r', encoding='utf-8') as file:
  8. student_old = file.readlines()
  9. else:
  10. return
  11. # 通过学号修改学生信息
  12. id = input("请输入学生ID:")
  13. with open(filename, 'r', encoding='utf-8') as file:
  14. students = file.readlines()
  15. students_new = []
  16. for item in students:
  17. d = dict(eval(item))
  18. students_new.append(d)
  19. show_query(students_new)
  20. for item in student_old:
  21. d = {}
  22. d = dict(eval(item))
  23. if d['学号'] == id:
  24. print("已经找到学生信息,请修改相关信息")
  25. while True:
  26. try:
  27. d['姓名'] = input("请输入姓名")
  28. d['学号'] = input("请输入学号")
  29. d['年龄'] = input("请输入年龄")
  30. d['性别'] = input("请输入性别")
  31. d['Python成绩'] = input("请输入Python成绩")
  32. d['Java成绩'] = input("请输入Java成绩")
  33. d['MySQL成绩'] = input("请输入MySQL成绩")
  34. except:
  35. print("输入有误,请重新输入")
  36. else:
  37. print("Sorry,查无此人!")
  38. break
  39. file.write(str(d) + '\n')
  40. print("修改成功")
  41. else:
  42. file.write(str(d)+'\n')
  43. answer = input("是否继续修改其他学生信息?y/n")
  44. if answer == 'y':
  45. revise()
  46. else:
  47. return
  48. elif answer == "0":
  49. return

4、查找学生信息代码模块 

  1. # 查找学生信息
  2. def find():
  3. while True:
  4. id = ''
  5. name = ''
  6. if os.path.exists(filename):
  7. mode = input("按ID查找请按1,按姓名查找请按2:")
  8. if mode == '1':
  9. id = input("请输入学生ID:")
  10. elif mode == '2':
  11. name = input("请输入学生姓名:")
  12. else:
  13. print("输入有误,请重新输入")
  14. find()
  15. with open(filename, 'r', encoding='utf-8') as file:
  16. student = file.readlines()
  17. for item in student:
  18. d = dict(eval(item))
  19. if id != '':
  20. if d['学号'] == id:
  21. student_query.append(d)
  22. elif name != '':
  23. if d['姓名'] == name:
  24. student_query.append(d)
  25. show_query(student_query)
  26. # 清空列表
  27. student_query.clear()
  28. answer = input("是否继续查询?y/n")
  29. if answer == 'y':
  30. continue
  31. else:
  32. break
  33. else:
  34. print("无学生信息")
  35. return

5、查看所有学生信息代码模块 

  1. # 查看所有学生信息
  2. def findAll():
  3. print("所有学生信息如下:")
  4. if os.path.exists(filename):
  5. with open(filename, 'r', encoding='utf-8') as file:
  6. student = file.readlines()
  7. for item in student:
  8. d = dict(eval(item))
  9. stockpile_list.append(d)
  10. show_query(stockpile_list)

6、排序学生成绩代码模块

  1. # 排列学生三科总分成绩
  2. def sort():
  3. global asc_or_desc_bool
  4. addAList()
  5. asc_or_desc = input("请选择升序 0 还是降序 1?")
  6. if asc_or_desc == '0':
  7. asc_or_desc_bool = False
  8. elif asc_or_desc == '1':
  9. asc_or_desc_bool = True
  10. else:
  11. print("输入有误,请重新输入")
  12. sort()
  13. while True:
  14. mode = input("请选择排序方式(1.Python成绩 2.Java成绩 3.MySQL成绩 4.总成绩):")
  15. if mode == '1':
  16. student_query.sort(key=lambda x : int(x['Python成绩']), reverse=asc_or_desc_bool)
  17. # x 代表列表students_new中的项
  18. elif mode == '2':
  19. student_query.sort(key=lambda x: int(x['Java成绩']), reverse=asc_or_desc_bool)
  20. elif mode == '3':
  21. student_query.sort(key=lambda x: int(x['MySQL成绩']), reverse=asc_or_desc_bool)
  22. elif mode == '4':
  23. student_query.sort(key=lambda x: int(x['Python成绩']) + int(x['Java成绩']) + int(x['MySQL成绩']), reverse=asc_or_desc_bool)
  24. else:
  25. print("输入有误,请重新输入")
  26. show_query(student_query)
  27. modeIn = input("是否选择其他排序方式(是的话请按1,否的话请按0)")
  28. if modeIn == '1':
  29. continue
  30. elif modeIn == '0':
  31. break
  32. else:
  33. print("输入有误,请重新输入")

7、统计学生总人数代码模块

  1. # 统计学生总人数
  2. def count():
  3. if os.path.exists(filename):
  4. with open(filename, 'r', encoding='utf-8') as file:
  5. student = file.readlines()
  6. for item in student:
  7. d = dict(eval(item))
  8. student_query.append(d)
  9. count = 0
  10. for i in student_query:
  11. count += 1
  12. print("该校收录了{}名学生!".format(count))
  13. countBoy = 0
  14. countGril = 0
  15. for j in student_query:
  16. if j['性别'] == "男":
  17. countBoy += 1
  18. else:
  19. countGril += 1
  20. print("该校收录了{}名男学生和{}名女学生!".format(countBoy, countGril))
  21. # 清空列表
  22. student_query.clear()
  23. else:
  24. print("无学生信息")
  25. return

该程序整体分为以上7大模块,最终代码呈现如下:可以收藏使用!

下一个为Java版本的星空城市管理系统。

  1. #!/usr/bin/env python
  2. # -*- coding: UTF-8 -*-
  3. """
  4. @Project :YIC_IDEA_Python
  5. @File :学生信息管理系统.py
  6. @IDE :IntelliJ IDEA
  7. @Author :一冲子
  8. @Date :2022/11/23 15:20
  9. """
  10. import os.path
  11. def menu():
  12. # 输出菜单
  13. print('''
  14. 学生信息管理系统
  15. =============== 功能菜单 ===============
  16. 1 新增学生信息
  17. 2 删除学生信息
  18. 3 修改学生信息
  19. 4 查找学生信息
  20. 5 查看所有学生信息
  21. 6 排序学生成绩
  22. 7 统计学生总人数
  23. 0 退出系统
  24. =========================================
  25. 说明:通过数字选择菜单
  26. ''')
  27. def main(): # 一直调用主菜单 让用户选择
  28. while True:
  29. menu()
  30. choice = int(input('请选择:'))
  31. if choice in [0, 1, 2, 3, 4, 5, 6, 7, 8]:
  32. if choice == 0: # 退出系统
  33. answer = input('您确定要退出系统吗y/n:')
  34. if answer == 'y' or answer == 'Y':
  35. print('感谢您的使用!!!')
  36. break
  37. elif answer !='y' or answer !='Y':
  38. print("不要随便按呀")
  39. continue
  40. if choice == 1: # 新增学生信息
  41. increase()
  42. if choice == 2: # 删除学生信息
  43. delete()
  44. if choice == 3: # 修改学生信息
  45. revise()
  46. if choice == 4: # 查找学生信息
  47. find()
  48. if choice == 5: # 查看所有学生信息
  49. findAll()
  50. if choice == 6: # 排列学生信息
  51. sort()
  52. if choice == 7: # 统计学生总人数
  53. count()
  54. stockpile_list = [] # 储存所有学生的数据
  55. student_query = []
  56. filename = 'students.txt'
  57. # 新增学生信息
  58. def increase():
  59. print("你好,先输入学号查看是否已存在学生信息...")
  60. id = input("请输入学生学号:")
  61. while True:
  62. if os.path.exists(filename):
  63. with open(filename, 'r', encoding='utf-8') as file:
  64. student_old = file.readlines()
  65. with open(filename, 'r', encoding='utf-8') as file:
  66. students = file.readlines()
  67. students_new = []
  68. for item in students:
  69. d = dict(eval(item))
  70. students_new.append(d)
  71. # show_query(students_new)
  72. for item in student_old:
  73. d = {}
  74. d = dict(eval(item))
  75. if d['学号'] == id:
  76. print("当前学号已存在,请重新申请学号...")
  77. continue
  78. else:
  79. break
  80. print("现在为你录入学生基本信息...")
  81. id = input("请输入学生id:")
  82. name = input("请输入学生姓名:")
  83. age = input("请输入学生年龄:")
  84. gender = input("请输入学生性别:")
  85. print("OK...现在开始录入成绩...")
  86. sub1 = int(input("请输入Python成绩:"))
  87. sub2 = int(input("请输入Java成绩:"))
  88. sub3 = int(input("请输入MySQL成绩:"))
  89. stockpile_list.append(
  90. {"姓名": name, "学号": id, "Python成绩": sub1, "年龄": age, "性别": gender, "Java成绩": sub2, "MySQL成绩": sub3})
  91. # 调用save函数保存信息
  92. save(stockpile_list)
  93. print("添加成功!")
  94. break
  95. # save函数保存学生信息
  96. def save(lst):
  97. try:
  98. stu_txt = open(filename, 'a', encoding='utf-8')
  99. except:
  100. stu_txt = open(filename, 'w', encoding='utf-8')
  101. for item in lst:
  102. stu_txt.write(str(item) + '\n')
  103. stu_txt.close()
  104. # 删除学生信息
  105. def delete():
  106. print("请问你想通过姓名删除还是学号删除?")
  107. answer = input("按ID查询请按1,按姓名查询请按2")
  108. if answer == "2":
  109. while True:
  110. # 通过姓名删除学生信息
  111. name = input("请输入学生姓名:")
  112. if name != ' ':
  113. if os.path.exists(filename):
  114. with open(filename, 'r', encoding='utf-8') as file:
  115. student_old = file.readlines()
  116. else:
  117. student_old = []
  118. flag = False
  119. if student_old: # 空列表等于 False,非空列表等于True
  120. with open(filename, 'r', encoding='utf-8') as wfile:
  121. # 只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除
  122. d = {}
  123. for item in student_old:
  124. d = dict(eval(item)) # 将字符串转换为字典
  125. if d['姓名'] != name:
  126. wfile.write(str(d)+'\n')
  127. else:
  128. flag = True
  129. if flag:
  130. print("学生{}的信息已被删除!".format(name))
  131. else:
  132. print("查无此人!")
  133. break
  134. findAll()
  135. answer = input("是否继续删除?y/n")
  136. if answer == 'y':
  137. continue
  138. else:
  139. break
  140. elif answer == "1":
  141. while True:
  142. # 通过id删除学生信息
  143. id = input("请输入学生id:")
  144. if id != ' ':
  145. if os.path.exists(filename):
  146. with open(filename, 'r', encoding='utf-8') as file:
  147. student_old = file.readlines()
  148. else:
  149. student_old = []
  150. flag = False
  151. if student_old: # 空列表等于 False,非空列表等于True
  152. with open(filename, 'w', encoding='utf-8') as wfile:
  153. # 只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除
  154. d = {}
  155. for item in student_old:
  156. d = dict(eval(item)) # 将字符串转换为字典
  157. if d['学号'] != id:
  158. wfile.write(str(d)+'\n')
  159. else:
  160. flag = True
  161. if flag:
  162. print("学号为{}的学生的信息已被删除!".format(id))
  163. else:
  164. print("查无此人!")
  165. break
  166. findAll()
  167. answer = input("是否继续删除?y/n")
  168. if answer == 'y':
  169. continue
  170. else:
  171. break
  172. # 修改学生信息
  173. def revise():
  174. print("请问你想通过姓名修改还是学号修改学生已录入信息?")
  175. answer = input("按ID修改请按1,按0取消修改")
  176. if answer == "1":
  177. if os.path.exists(filename):
  178. with open(filename, 'r', encoding='utf-8') as file:
  179. student_old = file.readlines()
  180. else:
  181. return
  182. # 通过学号修改学生信息
  183. id = input("请输入学生ID:")
  184. with open(filename, 'r', encoding='utf-8') as file:
  185. students = file.readlines()
  186. students_new = []
  187. for item in students:
  188. d = dict(eval(item))
  189. students_new.append(d)
  190. show_query(students_new)
  191. for item in student_old:
  192. d = {}
  193. d = dict(eval(item))
  194. if d['学号'] == id:
  195. print("已经找到学生信息,请修改相关信息")
  196. while True:
  197. try:
  198. d['姓名'] = input("请输入姓名")
  199. d['学号'] = input("请输入学号")
  200. d['年龄'] = input("请输入年龄")
  201. d['性别'] = input("请输入性别")
  202. d['Python成绩'] = input("请输入Python成绩")
  203. d['Java成绩'] = input("请输入Java成绩")
  204. d['MySQL成绩'] = input("请输入MySQL成绩")
  205. except:
  206. print("输入有误,请重新输入")
  207. else:
  208. print("Sorry,查无此人!")
  209. break
  210. file.write(str(d) + '\n')
  211. print("修改成功")
  212. else:
  213. file.write(str(d)+'\n')
  214. answer = input("是否继续修改其他学生信息?y/n")
  215. if answer == 'y':
  216. revise()
  217. else:
  218. return
  219. elif answer == "0":
  220. return
  221. # 查找学生信息
  222. def find():
  223. while True:
  224. id = ''
  225. name = ''
  226. if os.path.exists(filename):
  227. mode = input("按ID查找请按1,按姓名查找请按2:")
  228. if mode == '1':
  229. id = input("请输入学生ID:")
  230. elif mode == '2':
  231. name = input("请输入学生姓名:")
  232. else:
  233. print("输入有误,请重新输入")
  234. find()
  235. with open(filename, 'r', encoding='utf-8') as file:
  236. student = file.readlines()
  237. for item in student:
  238. d = dict(eval(item))
  239. if id != '':
  240. if d['学号'] == id:
  241. student_query.append(d)
  242. elif name != '':
  243. if d['姓名'] == name:
  244. student_query.append(d)
  245. show_query(student_query)
  246. # 清空列表
  247. student_query.clear()
  248. answer = input("是否继续查询?y/n")
  249. if answer == 'y':
  250. continue
  251. else:
  252. break
  253. else:
  254. print("无学生信息")
  255. return
  256. # 内容呈现
  257. def show_query(lst):
  258. if len(lst) == 0:
  259. print("无相关信息")
  260. return
  261. # 定义标题显示格式
  262. format_title = '{:^7}\t{:^7}\t{:^7}\t{:^7}\t{:^7}\t{:^7}\t{:^7}\t{:^7}'
  263. print(format_title.format('学号', '姓名', '年龄', '性别', 'Python成绩', 'Java成绩', 'MySQL成绩', '总成绩'))
  264. # 定义内容显示格式
  265. format_data = '{:^9}\t{:^7}\t{:^8}\t{:^8}\t{:^7}\t{:^12}\t{:^9}\t{:^12}'
  266. for item in lst:
  267. print(format_data.format(item.get('学号'),
  268. item.get('姓名'),
  269. item.get('年龄'),
  270. item.get('性别'),
  271. item.get('Python成绩'),
  272. item.get('Java成绩'),
  273. item.get('MySQL成绩'),
  274. int( item.get('Python成绩')) + int( item.get('Java成绩')) + int( item.get('MySQL成绩'))
  275. ))
  276. # 查看所有学生信息
  277. def findAll():
  278. print("所有学生信息如下:")
  279. if os.path.exists(filename):
  280. with open(filename, 'r', encoding='utf-8') as file:
  281. student = file.readlines()
  282. for item in student:
  283. d = dict(eval(item))
  284. stockpile_list.append(d)
  285. show_query(stockpile_list)
  286. # for i in stockpile_list:
  287. # print("{}同学,学号:{},性别:{},今年{}岁,三科成绩如下:Python:{}分、Java:{}分、MySQL:{}分"\
  288. # .format(i['姓名'], i['学号'], i['性别'], i['年龄'], i['Python成绩'], i['Java成绩'], i['MySQL成绩']))
  289. # 排列学生三科总分成绩
  290. def sort():
  291. global asc_or_desc_bool
  292. addAList()
  293. asc_or_desc = input("请选择升序 0 还是降序 1?")
  294. if asc_or_desc == '0':
  295. asc_or_desc_bool = False
  296. elif asc_or_desc == '1':
  297. asc_or_desc_bool = True
  298. else:
  299. print("输入有误,请重新输入")
  300. sort()
  301. while True:
  302. mode = input("请选择排序方式(1.Python成绩 2.Java成绩 3.MySQL成绩 4.总成绩):")
  303. if mode == '1':
  304. student_query.sort(key=lambda x : int(x['Python成绩']), reverse=asc_or_desc_bool)
  305. # x 代表列表students_new中的项
  306. elif mode == '2':
  307. student_query.sort(key=lambda x: int(x['Java成绩']), reverse=asc_or_desc_bool)
  308. elif mode == '3':
  309. student_query.sort(key=lambda x: int(x['MySQL成绩']), reverse=asc_or_desc_bool)
  310. elif mode == '4':
  311. student_query.sort(key=lambda x: int(x['Python成绩']) + int(x['Java成绩']) + int(x['MySQL成绩']), reverse=asc_or_desc_bool)
  312. else:
  313. print("输入有误,请重新输入")
  314. show_query(student_query)
  315. modeIn = input("是否选择其他排序方式(是的话请按1,否的话请按0)")
  316. if modeIn == '1':
  317. continue
  318. elif modeIn == '0':
  319. break
  320. else:
  321. print("输入有误,请重新输入")
  322. # 统计学生总人数
  323. def count():
  324. if os.path.exists(filename):
  325. with open(filename, 'r', encoding='utf-8') as file:
  326. student = file.readlines()
  327. for item in student:
  328. d = dict(eval(item))
  329. student_query.append(d)
  330. count = 0
  331. for i in student_query:
  332. count += 1
  333. print("该校收录了{}名学生!".format(count))
  334. countBoy = 0
  335. countGril = 0
  336. for j in student_query:
  337. if j['性别'] == "男":
  338. countBoy += 1
  339. else:
  340. countGril += 1
  341. print("该校收录了{}名男学生和{}名女学生!".format(countBoy, countGril))
  342. # 清空列表
  343. student_query.clear()
  344. else:
  345. print("无学生信息")
  346. return
  347. # 将学生信息添加到列表
  348. def addAList():
  349. if os.path.exists(filename):
  350. with open(filename, 'r', encoding='utf-8') as file:
  351. student = file.readlines()
  352. for item in student:
  353. d = dict(eval(item))
  354. student_query.append(d)
  355. # 只有语句运行main的时候 这个输出语句才会运、不加的则其他中调用此模块函数 也会输出
  356. if __name__ == '__main__':
  357. main()

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

闽ICP备14008679号