当前位置:   article > 正文

python--学生管理系统--统计学生总人数_python统计学生人数

python统计学生人数
  1. # cyy python study
  2. #开发时间:2022/6/10 14:18
  3. import os
  4. filename='student.txt'
  5. def main():#一直调用主菜单 让用户选择
  6. while True:
  7. menu()
  8. choice=int(input('请选择:'))
  9. if choice in [0,1,2,3,4,5,6,7]:
  10. if choice==0:#退出系统
  11. answer=input('您确定要退出系统吗y/n:')
  12. if answer == 'y' or answer== 'Y':
  13. print('感谢您的使用!!!')
  14. break
  15. if choice==1: #录入学生信息
  16. insert()
  17. if choice==2:#查找
  18. search()
  19. if choice==3:#删除
  20. delete()
  21. if choice==4:#修改
  22. modify()
  23. if choice==5:#排序
  24. sort()
  25. if choice==6:#统计
  26. total()
  27. if choice==7:#显示所有信息
  28. show()
  29. def menu():
  30. print('============================学生信息管理系统=================================')
  31. print('--------------------------------功能菜单------------------------------------')
  32. print('\t\t\t\t\t\t1.录入学生信息')
  33. print('\t\t\t\t\t\t2.查找学生信息')
  34. print('\t\t\t\t\t\t3.删除学生信息')
  35. print('\t\t\t\t\t\t4.修改学生信息')
  36. print('\t\t\t\t\t\t5.排序')
  37. print('\t\t\t\t\t\t6.统计学生总人数')
  38. print('\t\t\t\t\t\t7.显示所有学生信息')
  39. print('\t\t\t\t\t\t0.退出系统')
  40. print('--------------------------------------------------------------------------')
  41. def insert():#录入学生信息
  42. student_list=[] #用于添加学生信息
  43. #循环录入学生信息
  44. while True:
  45. id = input('请输入ID(如1001):')
  46. if not id: #每个对象都有id ,空的为false
  47. break
  48. name = input('请输入姓名:')
  49. if not name:
  50. break
  51. #不是空的继续录入学生信息--成绩有可能录错---执行try
  52. try:
  53. english=int(input('请输入英语成绩:'))
  54. math=int(input('请输入数学成绩:'))
  55. chinese=int(input('请输入语文成绩:'))
  56. # 异常处理机制
  57. except:
  58. print('输入无效,不是整数类型请重新输入')
  59. continue #结束本次循环 进入下一次循环
  60. #录入没问题 将录入的学生信息保存到字典中---键值对
  61. student={'id':id,'name':name,'english':english,'math':math,'chinese':chinese}
  62. #将录入的学生信息添加到列表中
  63. student_list.append(student)
  64. answer=input('是否继续添加 y/n:')
  65. if answer == 'y' or answer == 'Y':
  66. continue
  67. else:
  68. break
  69. #创建之后还要保存在文件中
  70. #调用save函数 存储学生信息(跳出循环中)
  71. save(student_list)
  72. print('学生信息录入完毕!!!')
  73. def save(lst):
  74. # 将列表中的内容添加到文件中,如果有追加,如果没有创建
  75. #可能出错 需要异常处理
  76. try:
  77. stu_txt=open(filename,'a',encoding='utf-8')#追加模式打开
  78. except:
  79. print('chu')
  80. stu_txt=open(filename,'w',encoding='utf-8') #写入的模
  81. for item in lst:#遍历列表
  82. stu_txt.write(str(item)+'\n')
  83. stu_txt.close()
  84. def search():#查找学生信息
  85. student_query=[] #定义列表
  86. while True:
  87. id =''
  88. name=''
  89. if os.path.exists(filename):#文件是否存在
  90. mode=input('按照ID查找请输入1,按照姓名查找请输入2:')
  91. if mode =='1':
  92. id=input('请输入学生的ID:')
  93. elif mode=='2':
  94. name=input('请输入学生姓名:')
  95. else:
  96. print('您的输入有误,请重新输入!!!')
  97. search()
  98. with open(filename,'r',encoding='utf-8') as rfile:
  99. student=rfile.readlines()
  100. for item in student:
  101. d=dict(eval(item))#列表转字典
  102. if id !='':#按照ID查找
  103. if d['id']==id:
  104. student_query.append(d)#将字典添加到列表中
  105. elif name!='':#按照姓名查找
  106. if d['name']==name:
  107. student_query.append(d)
  108. #显示查询结果
  109. show_student(student_query)
  110. #清空列表
  111. student_query.clear()
  112. #是否继续
  113. answer=input('是否继续查询 ? y/n :')
  114. if answer == 'y' or answer == 'Y':
  115. continue
  116. else:
  117. break
  118. else:
  119. print('暂未保存学生信息')
  120. return #跳出函数
  121. def show_student(lst):#显示查询结果
  122. if len(lst)==0:#列表数据为0
  123. print('没有查询到学生信息,无数据显示!!!')
  124. return #直接退出函数
  125. #定义标题显示格式 --格式化字符串
  126. format_title=' {:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8} '
  127. print(format_title.format('ID','姓名','英语成绩','数学成绩','语文成绩','总成绩'))
  128. #定义内容的显示格式
  129. format_data=' {:^6}\t{:^12}\t{:^12}\t{:^6}\t\t{:^12}\t{:^8} '
  130. for item in lst:
  131. print(format_data.format(item.get('id'),#字典
  132. item.get('name'),
  133. item['english'],
  134. item['math'],
  135. item['chinese'],
  136. int(item['english'])+int(item['math'])+int( item['chinese'])
  137. ))
  138. def delete():#删除学生信息
  139. while True:
  140. student_id=input('请输入要删除的学生的ID:')
  141. if student_id != '': #如果学生id不为空需要导入磁盘数据判断
  142. if os.path.exists(filename):#判断记录学生信息的文件是否存在
  143. with open(filename,'r',encoding='utf-8') as file:#上下文管理 不需要关闭
  144. student_old=file.readlines()#读取所有数据放入列表中
  145. else:
  146. student_old =[]#文件不存在是空列表
  147. flag=False #标记是否删除
  148. if student_old:#判断列表 不是空列表 学生信息数据
  149. with open(filename,'w',encoding='utf-8') as wfile:#只写模式 将删除内容将原有内容覆盖
  150. d ={}#空字典
  151. #删除之后的加入写入文件中
  152. for item in student_old:#遍历列表
  153. d=dict(eval(item)) #列表中读出的字符串转成字典类
  154. #判断删除的学生在字典中存在不存在
  155. #遍历第一个键值对 如果字典中要删除id键值对的存在->flag->之后键值对不存在->由于跳过了一个转换 所以相当于删除
  156. if d['id']!=student_id:#要删除的内容字典中不存在的话 #使用键获取数据
  157. wfile.write(str(d)+'\n')#将字典数据转化成字符串写入
  158. else:
  159. flag=True
  160. if flag:
  161. print(f'ID为{student_id}的学生信息已被删除')
  162. else:
  163. print(f'没有找到ID为{student_id}的学生信息')
  164. else:
  165. print('无学生信息')#列表中没有找到
  166. break
  167. show()#删除之后要重新显示所有学生信息
  168. answer=input('是否继续删除?y/n:')
  169. if answer =='y' or answer=='Y':
  170. continue
  171. else:
  172. break
  173. def modify():#修改学生信息
  174. show()#显示所有学生信息
  175. if os.path.exists(filename):#判读文件是否存在
  176. with open(filename,'r',encoding='utf-8') as rfile: #上下文管理 不需要关闭
  177. student_old=rfile.readlines()#将学生信息放入列表中
  178. else:
  179. return #跳出此函数
  180. student_id=input('请输入要修改的学生的ID:')
  181. with open(filename,'w',encoding='utf-8') as wfile:
  182. for item in student_old:#遍历学生信息的列表
  183. #文件读取的内容为空时,eval()会报错处理,所以应当在使用该函数之前增加一个非空判断
  184. d = dict(eval(item)) #转换成字典
  185. if d['id'] == student_id:
  186. print('找到学生信息,可以修改他的相关信息!!!')
  187. while True:
  188. try:
  189. d['name']=input('请输入姓名:')
  190. d['english'] = int(input('请输入英语成绩:'))
  191. d['math'] = int(input('请输入数学成绩:'))
  192. d['chinese'] = int(input('请输入语文成绩:'))
  193. except:
  194. print('您的输入有错误,请重新输入')
  195. else:
  196. break #该机制 没有异常执行else 有异常 执行except
  197. wfile.write(str(d)+'\n')
  198. print('修改成功!!!')
  199. else:
  200. wfile.write(str(d)+'\n')
  201. answer=input('是否继续修改其他学生信息?y/n: ')
  202. if answer == 'y' or answer == 'Y':
  203. modify() #自己写自己 实现了重复的功能
  204. def sort():#排序
  205. pass
  206. def total():#统计学生总人数
  207. if os.path.exists(filename):#判断文件是否存在
  208. with open(filename,'r',encoding='utf-8') as rfile:
  209. students=rfile.readlines()
  210. if students: #不是空列表
  211. print(f'一共有{len(students)}名学生') #实际上是判断列表的长度
  212. else:#文件存在 但是没数据
  213. print('还没有录入学生信息')
  214. else:
  215. print('暂未保存数据!!!')
  216. def show():#显示所有学生信息
  217. pass
  218. #只有语句运行main的时候 这个输出语句才会运、不加的则其他中调用此模块函数 也会输出
  219. if __name__ =='__main__':
  220. main()

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

闽ICP备14008679号