• 学生信息系统(python实现)


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

  • 相关阅读:
    Ubuntu18.04 redis 哨兵模式搭建的步骤
    【附源码】Python计算机毕业设计三亚技师学院远程作业提交系统
    import cv2 No module named ‘cv2‘
    IO模型个人理解
    QList<QVariant> list
    Java 面试问题总结(详细) —— MySql 模块(MySQL高级)(建议收藏)
    Flask基础:模板渲染+模板过滤使用+控制语句
    不同应用选择荧光染料 -CY7 ALK脂溶性Sulfo-Cyanine7 alkyne 结构式应用
    网络工程师的背包(EDC总结推荐)
    ubuntu 18.04 搭建isaacgym学习环境,并运行legged_gym
  • 原文地址:https://blog.csdn.net/qq_74156152/article/details/132794016