当前位置:   article > 正文

python实现学生成绩管理系统(使用面向对象的方式)_python学生成绩管理,测试各项指令

python学生成绩管理,测试各项指令

 student.py文件,用于学生属性类的定义,包的声明

  1. import time
  2. class Student:
  3. def __init__(self, id, name, gender, english, python):
  4. self.id = id
  5. self.name = name
  6. self.gender = gender
  7. self.english = english
  8. self.python = python
  9. self.total = english + python
  10. def __str__(self):
  11. return f'{self.id},{self.name},{self.gender},{self.english},{self.python},{self.total}'

main.py文件,用于函数的执行

  1. from managerSystem import *
  2. if __name__ == "__main__":
  3. student_manager = StudentManager()
  4. student_manager.run()

managerSystem.py,用于各种函数的实现,有成绩不能大于100以及学号不能相同的限制,对多为学生姓名相同的情况做了处理

  1. from student import *
  2. class StudentManager:
  3. def __init__(self):
  4. self.student_list = []
  5. def run(self):
  6. # 加载学生信息
  7. self.load_student()
  8. while True:
  9. # 打印菜单
  10. self.show_menu()
  11. try:
  12. choice = int(input("请选择:"))
  13. except ValueError:
  14. print("输入无效,请输入整数类型")
  15. else:
  16. if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
  17. if choice == 0:
  18. answer = input("您确定要退出系统吗(输入y结束):")
  19. if answer == "y":
  20. print("谢谢使用!!!")
  21. break
  22. else:
  23. continue
  24. elif choice == 1:
  25. self.add_student()
  26. elif choice == 2:
  27. self.del_student()
  28. elif choice == 3:
  29. self.modify_student()
  30. elif choice == 4:
  31. self.search_student()
  32. elif choice == 5:
  33. self.sort_student()
  34. elif choice == 6:
  35. self.total_student()
  36. time.sleep(0.2)
  37. elif choice == 7:
  38. self.show_student()
  39. input("请输入任意键继续...")
  40. else:
  41. print("输入错误,请重新输入")
  42. def add_student(self):
  43. global id,name,gender,english,python
  44. while True:
  45. # 输入学号
  46. while True:
  47. id = input("请输入ID:")
  48. if not id:
  49. print("输入错误,请重新输入")
  50. continue
  51. # 不能有相同学号的学生
  52. for i in self.student_list:
  53. if i.id == id:
  54. print("学号与其他学生重复,请重新输入")
  55. break
  56. else:
  57. break
  58. # 输入姓名
  59. while True:
  60. name = input("请输入姓名:")
  61. if not name:
  62. print("输入错误,请重新输入")
  63. continue
  64. else:
  65. break
  66. # 输入性别
  67. while True:
  68. gender = input("请输入性别:")
  69. if not gender:
  70. print("输入无效,请重新输入")
  71. continue
  72. else:
  73. break
  74. # 输入英语成绩
  75. while True:
  76. try:
  77. english = int(input("请输入英语成绩:"))
  78. if english > 100:
  79. print("请输入100以下的英语成绩")
  80. continue
  81. else:
  82. break
  83. except ValueError:
  84. print("输入错误,请输入整数类型")
  85. continue
  86. # 输入python成绩
  87. while True:
  88. try:
  89. python = int(input("请输入python成绩:"))
  90. if python > 100:
  91. print("请输入100以下的python成绩")
  92. continue
  93. else:
  94. break
  95. except ValueError:
  96. print("输入错误,请输入整数类型")
  97. continue
  98. # 创建学生对象
  99. student = Student(id, name, gender, english, python)
  100. # 将学生保存到列表中
  101. self.student_list.append(student)
  102. # 保存到文件
  103. self.save_student()
  104. print("保存成功")
  105. answer = input("是否继续输入(输入y继续):")
  106. if answer == 'y':
  107. continue
  108. else:
  109. break
  110. def del_student(self):
  111. # 用于存储多个学生的列表
  112. student_list = []
  113. # 与用户输入的姓名相同的学生个数
  114. count = 0
  115. # 用户选择删除的第choise个学生
  116. choise = 0
  117. # 没有任何学生的处理方法
  118. if len(self.student_list) == 0:
  119. print("无任何学生信息")
  120. else:
  121. # 用户输入需要删除学生的姓名
  122. while True:
  123. del_name = input("请输入要删除的学生姓名:")
  124. if del_name:
  125. # 寻找是否有该学生
  126. for i in self.student_list:
  127. if i.name == del_name:
  128. student_list.append(i)
  129. count += 1
  130. # 找不到该学生
  131. if count == 0:
  132. print("查无此人!")
  133. break
  134. # 与用户输入的姓名相同的学生大于等于一位时
  135. elif count > 1:
  136. print("学号\t\t姓名\t\t性别\t\t英语成绩\t\tpython成绩\t\t总成绩")
  137. for i in student_list:
  138. print(f"{i.id}\t\t{i.name}\t\t{i.gender}\t\t{i.english}\t\t{i.python}\t\t{i.total}")
  139. while True:
  140. try:
  141. choise = int(input("请选择需要删除的学生为第几位学生:"))
  142. except ValueError:
  143. print("输入错误,请输入整数类型")
  144. continue
  145. else:
  146. if count >= choise > 0:
  147. break
  148. else:
  149. print("输入错误,请重新输入")
  150. continue
  151. elif count == 1:
  152. pass
  153. # 删除该学生
  154. self.student_list.remove(student_list[choise - 1])
  155. # 保存到文件
  156. self.save_student()
  157. print("删除成功")
  158. break
  159. else:
  160. print("输入错误,请重新输入")
  161. continue
  162. def modify_student(self):
  163. global name,id,gender,english,python
  164. # 用于存储多个学生的列表
  165. student_list = []
  166. # 与用户输入的姓名相同的学生个数
  167. count = 0
  168. # 用户选择删除的第choise个学生
  169. choise = 0
  170. # 没有任何学生的处理方法
  171. if len(self.student_list) == 0:
  172. print("无任何学生信息")
  173. else:
  174. # 用户输入需要修改学生的姓名
  175. while True:
  176. modify_name = input("请输入要修改的学生的姓名:")
  177. if modify_name:
  178. # 寻找是否有该学生
  179. for i in self.student_list:
  180. if i.name == modify_name:
  181. student_list.append(i)
  182. count += 1
  183. # 找不到该学生
  184. if count == 0:
  185. print("查无此人!")
  186. break
  187. # 与用户输入的姓名相同的学生大于等于一位时
  188. elif count > 1:
  189. print("学号\t\t姓名\t\t性别\t\t英语成绩\t\tpython成绩\t\t总成绩")
  190. for i in student_list:
  191. print(f"{i.id}\t\t{i.name}\t\t{i.gender}\t\t{i.english}\t\t{i.python}\t\t{i.total}")
  192. while True:
  193. try:
  194. choise = int(input("请选择需要修改的学生为第几位学生:"))
  195. except ValueError:
  196. print("输入错误,请输入整数类型")
  197. continue
  198. else:
  199. if count >= choise > 0:
  200. break
  201. else:
  202. print("输入错误,请重新输入")
  203. continue
  204. elif count == 1:
  205. pass
  206. # 删除该学生
  207. self.student_list.remove(student_list[choise - 1])
  208. # 输入学号
  209. while True:
  210. id = input("请输入ID:")
  211. if not id:
  212. print("输入错误,请重新输入")
  213. continue
  214. # 查看是否有其他学生有相同的学号
  215. for item in self.student_list:
  216. if item.id == id:
  217. print("学号与其他学生重复,请重新输入")
  218. break
  219. else:
  220. break
  221. # 输入姓名
  222. while True:
  223. name = input("请输入姓名:")
  224. if not name:
  225. print("输入错误,请重新输入")
  226. continue
  227. else:
  228. break
  229. # 输入性别
  230. while True:
  231. gender = input("请输入性别:")
  232. if not gender:
  233. print("输入错误,请重新输入")
  234. continue
  235. else:
  236. break
  237. # 输入英语成绩
  238. while True:
  239. try:
  240. english = int(input("请输入英语成绩:"))
  241. if english > 100:
  242. print("请输入100以下的英语成绩")
  243. continue
  244. else:
  245. break
  246. except ValueError:
  247. print("输入错误,请输入整数类型")
  248. continue
  249. # 输入python成绩
  250. while True:
  251. try:
  252. python = int(input("请输入python成绩:"))
  253. if python > 100:
  254. print("请输入100以下的python成绩")
  255. continue
  256. else:
  257. break
  258. except ValueError:
  259. print("输入错误,请输入整数类型")
  260. continue
  261. # 创建学生对象
  262. student = Student(id, name, gender, english, python)
  263. # 将学生保存到列表中
  264. self.student_list.append(student)
  265. # 保存到文件
  266. self.save_student()
  267. print("修改成功!")
  268. break
  269. else:
  270. print("输入错误,请重新输入")
  271. continue
  272. def search_student(self):
  273. # 用于存储多个学生的列表
  274. student_list = []
  275. # 与用户输入的姓名相同的学生个数
  276. count = 0
  277. # 没有任何学生的处理方法
  278. if len(self.student_list) == 0:
  279. print("无任何学生信息")
  280. else:
  281. # 用户输入需要查找学生的姓名
  282. while True:
  283. search_name = input("请输入要查询的学生的姓名:")
  284. if search_name:
  285. # 寻找该学生
  286. for i in self.student_list:
  287. if i.name == search_name:
  288. student_list.append(i)
  289. count += 1
  290. # 找不到人
  291. if count == 0:
  292. print("查无此人")
  293. break
  294. # 找到了人
  295. else:
  296. print("学号\t\t姓名\t\t性别\t\t英语成绩\t\tpython成绩\t\t总成绩")
  297. # 输出学生信息
  298. for i in student_list:
  299. print(f"{i.id}\t\t{i.name}\t\t{i.gender}\t\t{i.english}\t\t{i.python}\t\t{i.total}")
  300. input("请输入任意键继续...")
  301. break
  302. else:
  303. print("输入错误,请重新输入")
  304. continue
  305. def sort_student(self):
  306. global sort_choise_bool,cmpfun
  307. # 没有任何学生的处理方法
  308. if len(self.student_list) == 0:
  309. print("无任何学生信息")
  310. else:
  311. # 选择升序或降序
  312. sort_choise = input("请选择(0.升序 1.降序):")
  313. if sort_choise == '1':
  314. sort_choise_bool = True
  315. elif sort_choise == '0':
  316. sort_choise_bool = False
  317. else:
  318. print("输入错误,请重新输入")
  319. self.sort_student()
  320. # 排序!!!!!!!!!!!!!!!!!!!!
  321. while True:
  322. mode = input("请选择排序方式(1.按照学号排序 2.按照姓名排序 3.按照性别排序 4.按照英语成绩排序 5.按照python成绩排序 6.按照总成绩排序):")
  323. try:
  324. import operator
  325. except ImportError:
  326. cmpfun = lambda x: x.count
  327. else:
  328. if mode == '1':
  329. cmpfun = operator.attrgetter("id")
  330. elif mode == '2':
  331. cmpfun = operator.attrgetter("name")
  332. elif mode == '3':
  333. cmpfun = operator.attrgetter("gender")
  334. elif mode == '4':
  335. cmpfun = operator.attrgetter("english")
  336. elif mode == '5':
  337. cmpfun = operator.attrgetter("python")
  338. elif mode == '6':
  339. cmpfun = operator.attrgetter("total")
  340. else:
  341. print("输入错误,请重新输入")
  342. continue
  343. # 列表排序
  344. self.student_list.sort(key=cmpfun, reverse=sort_choise_bool)
  345. # 保存到文件
  346. self.save_student()
  347. # 展示结果
  348. self.show_student()
  349. input("请输入任意键继续...")
  350. break
  351. def total_student(self):
  352. print(len(self.student_list))
  353. def show_student(self):
  354. print('学号\t\t姓名\t\t性别\t\t英语成绩\t\tpython成绩\t\t总成绩')
  355. for i in self.student_list:
  356. print(f"{i.id}\t\t{i.name}\t\t{i.gender}\t\t{i.english}\t\t{i.python}\t\t{i.total}")
  357. @staticmethod
  358. def show_menu():
  359. print("====================学生信息管理系统===================")
  360. print("------------------------功能菜单---------------------")
  361. print(" 1.录入学生信息 ")
  362. print(" 2.删除学生信息 ")
  363. print(" 3.修改学生信息 ")
  364. print(" 4.查询学生信息 ")
  365. print(" 5.排序学生信息 ")
  366. print(" 6.统计学生人数 ")
  367. print(" 7.显示学生信息 ")
  368. print("------------------------0.退出----------------------")
  369. def load_student(self):
  370. global f
  371. #尝试以r打开文件,如果文件不存在则以w创建文件
  372. try:
  373. f = open('student.data', 'r')
  374. except:
  375. f = open('student.data', 'w')
  376. else:
  377. data = f.read()# 类型为str
  378. '''!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  379. 转换数据类型为列表'''
  380. new_list = eval(data)# 类型为list
  381. #存储到学生列表中
  382. self.student_list = [Student(i['id'],
  383. i['name'],
  384. i['gender'],
  385. i['english'],
  386. i['python']) for i in new_list]
  387. finally:
  388. f.close()
  389. def save_student(self):
  390. with open("student.data", "w") as fp:
  391. '''!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  392. 写入数据不能是学生对象的内存地址,需要把学生数据类型转化为列表字典数据再储存'''
  393. new_list = [i.__dict__ for i in self.student_list]
  394. #需要转化为str类型
  395. fp.write(str(new_list))

初学者,见识浅陋,请多指教。

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

闽ICP备14008679号