当前位置:   article > 正文

Python入门——学生成绩管理系统(录入、查找、删除、修改、排序、统计、显示)_python成绩管理系统

python成绩管理系统

学生成绩管理系统主要包括录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序、统计学生总人数、显示学生信息和退出系统。

系统界面编写(菜单显示函数):

  1. def menu():
  2. print('============学生信息管理系统============')
  3. print('---------------功能菜单---------------')
  4. print('\t\t\t1.录入学生信息')
  5. print('\t\t\t2.查找学生信息')
  6. print('\t\t\t3.删除学生信息')
  7. print('\t\t\t4.修改学生信息')
  8. print('\t\t\t5.排序')
  9. print('\t\t\t6.统计学生总人数')
  10. print('\t\t\t7.显示所有学生信息')
  11. print('\t\t\t0.退出系统')
  12. print('-------------------------------------')

main函数: 

  1. def main():
  2. while(True):
  3. menu()
  4. choice = int(input('请选择功能序号:'))
  5. if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
  6. if choice == 0:
  7. answer = input('您确定要退出系统吗?(Y/N)')
  8. if answer == 'y' or answer == 'Y':
  9. print('退出系统,谢谢使用!')
  10. break
  11. else:
  12. continue
  13. elif choice == 1:
  14. insert() #录入学生信息
  15. elif choice == 2:
  16. search()
  17. elif choice == 3:
  18. delete()
  19. elif choice == 4:
  20. modify()
  21. elif choice == 5:
  22. sort()
  23. elif choice == 6:
  24. total()
  25. elif choice == 7:
  26. show()

录入学生信息函数:

  1. def insert():
  2. stu_list=[]
  3. while True:
  4. id=input('请输入学生ID(如1001):')
  5. if not id:
  6. break
  7. name=input('请输入学生姓名:')
  8. if not name:
  9. break
  10. try:
  11. english=int(input('请输入英语成绩:'))
  12. java=int(input('请输入java成绩:'))
  13. python=int(input('请输入python成绩:'))
  14. except:
  15. print('输入无效,不是整数,请重新输入:')
  16. continue
  17. #将录入的学生成绩保存到字典中
  18. student={'id':id,'name':name,'English':english,'Java':java,'Python':python}
  19. #将学生信息添加到列表中
  20. stu_list.append(student)
  21. answer=input('是否继续添加(Y/N):')
  22. if answer == 'y' or answer == 'Y':
  23. continue
  24. else:
  25. break
  26. #调用save()函数保存在文件中
  27. save(stu_list)
  28. print('学生信息录入完毕')
  29. def save(lst):
  30. try:
  31. stu_txt=open(filename,'a',encoding='utf-8')
  32. except:
  33. stu_txt=open(filename,'w',encoding='utf-8')
  34. for item in lst:
  35. stu_txt.write(str(item)+'\n')
  36. stu_txt.close()

查找学生信息函数:

  1. def search():
  2. student_query=[]
  3. while True:
  4. id=''
  5. name=''
  6. if os.path.exists(filename):
  7. mod=input('若根据ID查找学生信息,请输入1;若根据姓名查找学生信息,请输入2:')
  8. if mod=='1':
  9. id=input('请输入学生ID:')
  10. elif mod=='2':
  11. name=input('请输入学生姓名:')
  12. else:
  13. print('输入有误。请重新输入!')
  14. search()
  15. with open(filename,'r',encoding='utf-8')as rfile:
  16. student=rfile.readlines()
  17. for item in student:
  18. d=dict(eval(item))
  19. if id!='':
  20. if d['id']==id:
  21. student_query.append(d)
  22. elif name!='':
  23. if d['name']==name:
  24. student_query.append(d)
  25. #显示查询结果
  26. show_student(student_query)
  27. #清空列表
  28. student_query.clear()
  29. answer=input('是否继续查询?(Y/N):\n')
  30. if answer=='y' or answer=='Y':
  31. continue
  32. else:
  33. break
  34. else:
  35. print('未保存学员信息!')
  36. return
  37. def show_student(lst):
  38. if len(lst)==0:
  39. print('未查询到该学生信息!!!')
  40. return
  41. # 定义标题的显示格式
  42. format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}'
  43. print(format_title.format('ID','Name','English','Java','Python','Grade'))
  44. # 定义内容的显示格式
  45. format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}'
  46. for item in lst:
  47. print(format_data.format(item.get('id'),
  48. item.get('name'),
  49. item.get('English'),
  50. item.get('Java'),
  51. item.get('Python'),
  52. int(item.get('English'))+int(item.get('Java'))+int(item.get('Python'))
  53. ))

删除学生信息函数:

  1. def delete():
  2. while(True):
  3. student_id=input("请输入要删除学生的ID:")
  4. if student_id!='':
  5. if os.path.exists(filename): #判断文件是否存在
  6. with open(filename,'r',encoding='utf-8') as file: #存在的话打开
  7. student_old=file.readlines()
  8. else:
  9. student_old=[] #不存在
  10. flag=False #标记是否删除
  11. if student_old:
  12. with open(filename,'w',encoding='utf-8') as wfile:
  13. d={}
  14. for item in student_old:
  15. d=dict(eval(item)) #将字符串转成字典
  16. if d['id']!=student_id:
  17. wfile.write(str(d)+'\n')
  18. else:
  19. flag=True
  20. if flag:
  21. print(f'id为{student_id}的学生信息已被删除!')
  22. else:
  23. print(f'未查询到id为{student_id}的学生信息。')
  24. else:
  25. print('无学生信息')
  26. break
  27. show()
  28. answer=input('是否继续删除?(Y/N):')
  29. if answer=='Y'or answer=='y':
  30. continue
  31. else:
  32. break

 修改学生信息函数:

  1. def modify():
  2. show()
  3. if os.path.exists(filename):
  4. with open(filename, 'r', encoding='utf-8') as rfile:
  5. student_old = rfile.readlines()
  6. else:
  7. return
  8. student_id=input('请输入要修改学生id:')
  9. with open(filename,'w',encoding='utf-8') as wfile:
  10. for item in student_old:
  11. d=dict(eval(item))
  12. if d['id']==student_id:
  13. print('找到该学生,可以修改相关信息!')
  14. while True:
  15. try:
  16. d['name']=input('请输入学生姓名:')
  17. d['English']=input('请输入英语成绩:')
  18. d['Java']=input('请输入java成绩:')
  19. d['Python']=input('请输入python成绩:')
  20. except:
  21. print('输入有误,请重新输入')
  22. else:
  23. break
  24. wfile.write(str(d)+'\n')
  25. print('修改成功!')
  26. else:
  27. wfile.write(str(d) + '\n')
  28. answer=input('是否继续修改?(Y/N):')
  29. if answer=='y' or answer =='Y':
  30. modify()

 排序函数

  1. def sort():
  2. show()
  3. student_list=[]
  4. asc_or_desc=input('请选择排序方式(0为升序,1为降序):')
  5. mode=input('请选择排序依据(1为按英语成绩排序,2为按Java成绩排序,3为按Python成绩排序,0为按总成绩排序):')
  6. if os.path.exists(filename):
  7. with open(filename,'r',encoding='utf-8')as rfile:
  8. students=rfile.readlines()
  9. for item in students:
  10. d=dict(eval(item))
  11. student_list.append(d)
  12. else:
  13. print('暂未保存学生信息!')
  14. return
  15. if asc_or_desc=='0':
  16. asc_or_desc_bool=False
  17. elif asc_or_desc=='1':
  18. asc_or_desc_bool=True
  19. else:
  20. print('输入有误,请重新输入:')
  21. sort()
  22. if mode=='1':
  23. student_list.sort(key=lambda x:int(x['English']),reverse=asc_or_desc_bool) #使用匿名函数lambda
  24. elif mode=='2':
  25. student_list.sort(key=lambda x:int(x['Java']), reverse=asc_or_desc_bool)
  26. elif mode=='3':
  27. student_list.sort(key=lambda x:int(x['Python']), reverse=asc_or_desc_bool)
  28. elif mode=='0':
  29. student_list.sort(key=lambda x:int(x['English'])+int(x['Java'])+int(x['Python']), reverse=asc_or_desc_bool)
  30. else:
  31. print('输入有误,请重新输入!')
  32. sort()
  33. show_student(student_list)

统计学生总人数函数:

  1. def total():
  2. if os.path.exists(filename):
  3. with open(filename,'r',encoding='utf-8')as rfile:
  4. students=rfile.readlines()
  5. if students==[]:
  6. print('暂未录入学生信息,请先录入!')
  7. return
  8. else:
  9. print(f'共有{len(students)}名学生!')
  10. else:
  11. print('暂未保存学生信息!!!')
  12. return

显示学生信息函数:

  1. def show():
  2. student_list=[]
  3. if os.path.exists(filename):
  4. with open(filename,'r',encoding='utf-8')as rfile:
  5. student_l=rfile.readlines()
  6. for item in student_l:
  7. student_list.append(eval(item)) #eval还原为字典类型
  8. if student_list:
  9. show_student(student_list)
  10. else:
  11. print('暂未保存学生信息!')
  12. return

执行:

  1. if __name__ == '__main__': # 只有执行该程序时,才会执行 import 是不可以执行的
  2. main()

完整源代码:

  1. filename='student.txt'
  2. import os
  3. def main():
  4. while(True):
  5. menu()
  6. choice = int(input('请选择功能序号:'))
  7. if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
  8. if choice == 0:
  9. answer = input('您确定要退出系统吗?(Y/N)')
  10. if answer == 'y' or answer == 'Y':
  11. print('退出系统,谢谢使用!')
  12. break
  13. else:
  14. continue
  15. elif choice == 1:
  16. insert() #录入学生信息
  17. elif choice == 2:
  18. search()
  19. elif choice == 3:
  20. delete()
  21. elif choice == 4:
  22. modify()
  23. elif choice == 5:
  24. sort()
  25. elif choice == 6:
  26. total()
  27. elif choice == 7:
  28. show()
  29. def menu():
  30. print('============学生信息管理系统============')
  31. print('---------------功能菜单---------------')
  32. print('\t\t\t1.录入学生信息')
  33. print('\t\t\t2.查找学生信息')
  34. print('\t\t\t3.删除学生信息')
  35. print('\t\t\t4.修改学生信息')
  36. print('\t\t\t5.排序')
  37. print('\t\t\t6.统计学生总人数')
  38. print('\t\t\t7.显示所有学生信息')
  39. print('\t\t\t0.退出系统')
  40. print('-------------------------------------')
  41. def insert():
  42. stu_list=[]
  43. while True:
  44. id=input('请输入学生ID(如1001):')
  45. if not id:
  46. break
  47. name=input('请输入学生姓名:')
  48. if not name:
  49. break
  50. try:
  51. english=int(input('请输入英语成绩:'))
  52. java=int(input('请输入java成绩:'))
  53. python=int(input('请输入python成绩:'))
  54. except:
  55. print('输入无效,不是整数,请重新输入:')
  56. continue
  57. #将录入的学生成绩保存到字典中
  58. student={'id':id,'name':name,'English':english,'Java':java,'Python':python}
  59. #将学生信息添加到列表中
  60. stu_list.append(student)
  61. answer=input('是否继续添加(Y/N):')
  62. if answer == 'y' or answer == 'Y':
  63. continue
  64. else:
  65. break
  66. #调用save()函数保存在文件中
  67. save(stu_list)
  68. print('学生信息录入完毕')
  69. def save(lst):
  70. try:
  71. stu_txt=open(filename,'a',encoding='utf-8')
  72. except:
  73. stu_txt=open(filename,'w',encoding='utf-8')
  74. for item in lst:
  75. stu_txt.write(str(item)+'\n')
  76. stu_txt.close()
  77. def search():
  78. student_query=[]
  79. while True:
  80. id=''
  81. name=''
  82. if os.path.exists(filename):
  83. mod=input('若根据ID查找学生信息,请输入1;若根据姓名查找学生信息,请输入2:')
  84. if mod=='1':
  85. id=input('请输入学生ID:')
  86. elif mod=='2':
  87. name=input('请输入学生姓名:')
  88. else:
  89. print('输入有误。请重新输入!')
  90. search()
  91. with open(filename,'r',encoding='utf-8')as rfile:
  92. student=rfile.readlines()
  93. for item in student:
  94. d=dict(eval(item))
  95. if id!='':
  96. if d['id']==id:
  97. student_query.append(d)
  98. elif name!='':
  99. if d['name']==name:
  100. student_query.append(d)
  101. #显示查询结果
  102. show_student(student_query)
  103. #清空列表
  104. student_query.clear()
  105. answer=input('是否继续查询?(Y/N):\n')
  106. if answer=='y' or answer=='Y':
  107. continue
  108. else:
  109. break
  110. else:
  111. print('未保存学员信息!')
  112. return
  113. def show_student(lst):
  114. if len(lst)==0:
  115. print('未查询到该学生信息!!!')
  116. return
  117. # 定义标题的显示格式
  118. format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}'
  119. print(format_title.format('ID','Name','English','Java','Python','Grade'))
  120. # 定义内容的显示格式
  121. format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}'
  122. for item in lst:
  123. print(format_data.format(item.get('id'),
  124. item.get('name'),
  125. item.get('English'),
  126. item.get('Java'),
  127. item.get('Python'),
  128. int(item.get('English'))+int(item.get('Java'))+int(item.get('Python'))
  129. ))
  130. def delete():
  131. while(True):
  132. student_id=input("请输入要删除学生的ID:")
  133. if student_id!='':
  134. if os.path.exists(filename): #判断文件是否存在
  135. with open(filename,'r',encoding='utf-8') as file: #存在的话打开
  136. student_old=file.readlines()
  137. else:
  138. student_old=[] #不存在
  139. flag=False #标记是否删除
  140. if student_old:
  141. with open(filename,'w',encoding='utf-8') as wfile:
  142. d={}
  143. for item in student_old:
  144. d=dict(eval(item)) #将字符串转成字典
  145. if d['id']!=student_id:
  146. wfile.write(str(d)+'\n')
  147. else:
  148. flag=True
  149. if flag:
  150. print(f'id为{student_id}的学生信息已被删除!')
  151. else:
  152. print(f'未查询到id为{student_id}的学生信息。')
  153. else:
  154. print('无学生信息')
  155. break
  156. show()
  157. answer=input('是否继续删除?(Y/N):')
  158. if answer=='Y'or answer=='y':
  159. continue
  160. else:
  161. break
  162. def modify():
  163. show()
  164. if os.path.exists(filename):
  165. with open(filename, 'r', encoding='utf-8') as rfile:
  166. student_old = rfile.readlines()
  167. else:
  168. return
  169. student_id=input('请输入要修改学生id:')
  170. with open(filename,'w',encoding='utf-8') as wfile:
  171. for item in student_old:
  172. d=dict(eval(item))
  173. if d['id']==student_id:
  174. print('找到该学生,可以修改相关信息!')
  175. while True:
  176. try:
  177. d['name']=input('请输入学生姓名:')
  178. d['English']=input('请输入英语成绩:')
  179. d['Java']=input('请输入java成绩:')
  180. d['Python']=input('请输入python成绩:')
  181. except:
  182. print('输入有误,请重新输入')
  183. else:
  184. break
  185. wfile.write(str(d)+'\n')
  186. print('修改成功!')
  187. else:
  188. wfile.write(str(d) + '\n')
  189. answer=input('是否继续修改?(Y/N):')
  190. if answer=='y' or answer =='Y':
  191. modify()
  192. def sort():
  193. show()
  194. student_list=[]
  195. asc_or_desc=input('请选择排序方式(0为升序,1为降序):')
  196. mode=input('请选择排序依据(1为按英语成绩排序,2为按Java成绩排序,3为按Python成绩排序,0为按总成绩排序):')
  197. if os.path.exists(filename):
  198. with open(filename,'r',encoding='utf-8')as rfile:
  199. students=rfile.readlines()
  200. for item in students:
  201. d=dict(eval(item))
  202. student_list.append(d)
  203. else:
  204. print('暂未保存学生信息!')
  205. return
  206. if asc_or_desc=='0':
  207. asc_or_desc_bool=False
  208. elif asc_or_desc=='1':
  209. asc_or_desc_bool=True
  210. else:
  211. print('输入有误,请重新输入:')
  212. sort()
  213. if mode=='1':
  214. student_list.sort(key=lambda x:int(x['English']),reverse=asc_or_desc_bool) #使用匿名函数lambda
  215. elif mode=='2':
  216. student_list.sort(key=lambda x:int(x['Java']), reverse=asc_or_desc_bool)
  217. elif mode=='3':
  218. student_list.sort(key=lambda x:int(x['Python']), reverse=asc_or_desc_bool)
  219. elif mode=='0':
  220. student_list.sort(key=lambda x:int(x['English'])+int(x['Java'])+int(x['Python']), reverse=asc_or_desc_bool)
  221. else:
  222. print('输入有误,请重新输入!')
  223. sort()
  224. show_student(student_list)
  225. def total():
  226. if os.path.exists(filename):
  227. with open(filename,'r',encoding='utf-8')as rfile:
  228. students=rfile.readlines()
  229. if students==[]:
  230. print('暂未录入学生信息,请先录入!')
  231. return
  232. else:
  233. print(f'共有{len(students)}名学生!')
  234. else:
  235. print('暂未保存学生信息!!!')
  236. return
  237. def show():
  238. student_list=[]
  239. if os.path.exists(filename):
  240. with open(filename,'r',encoding='utf-8')as rfile:
  241. student_l=rfile.readlines()
  242. for item in student_l:
  243. student_list.append(eval(item)) #eval还原为字典类型
  244. if student_list:
  245. show_student(student_list)
  246. else:
  247. print('暂未保存学生信息!')
  248. return
  249. if __name__ == '__main__': # 只有执行该程序时,才会执行 import 是不可以执行的
  250. main()

运行结果:

录入信息截图:

 

查询信息截图:

统计学生总人数截图:

 

 

 排序截图:

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号