• 学生信息管理系统(Python)完整版


    目录

    功能模块:

    实现思路:

    运行功能演示:

    具体实现过程:

    定义学生类:

    定义学生管理类

    定义显示学生信息函数

    输入成绩函数:

    添加学生信息:

    删除学生信息

    修改学生信息

    导入学生信息

    导出学生信息

    求课程平均分

    求课程最高分

    求课程最低分

    最后定义菜单函数和主函数:

    完整代码:


    功能模块:

    基本信息管理和学生成绩管理

    基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,、

    学生成绩管理模块的主要功能有统计课程最高分、最低分和平均分。

    实现思路:

    1. 设计一个学生类,包含学号、姓名、语文成绩、数学成绩和英语成绩等数据成员。
    2. 引入OS模块,用于导入导出路径文件信息
    3. 设计一个学生管理类,用于定义各个模块的具体功能函数。
    4. 设计一个主菜单,两个子菜单,分别管理学生基本信息和学生成绩信息

    运行功能演示:

    学生信息管理系统启动后,首先进入系统主界面,等待用户输入命令选择相应的功能。

    如果用户输入“info”命令,则进入学生基本信息管理子功能模块。

    在学生基本信息管理界面,用户通过输入相应的命令进行学生基本信息的增、删、改、显示等操作。

    学生基本信息菜单

    添加学生信息

    删除学生信息

    修改学生信息

    显示学生信息

    如果用户输入“score”命令,则进入学生成绩管理子功能模块。

    在学生成绩管理界面用户可选择相应的功能进行成绩处理。

    平均分:

    最高分

    最低分

    具体实现过程:

    定义学生类:

    1. class Student:
    2. def __init__(self,no,name,chinese,math,english):
    3. self.no = no
    4. self.name = name
    5. self.chinese = int(chinese)
    6. self.math = int(math)
    7. self.english = int(english)

    定义学生管理类

    1. class StudentList:
    2. def __init__(self):
    3. self.stulist = []

    定义显示学生信息函数

    在学生管理类下面定义显示学生信息函数:

    1. def show(self):
    2. #显示学生信息
    3. print('{:8}\t{:8}\t{:8}\t{:8}\t{:8}'
    4. .format('学号','姓名','语文','数学','英语'))
    5. for stu in self.stulist:
    6. print('{:8}\t{:8}\t{:<8}\t{:<8}\t{:<8}'
    7. .format(stu.no,stu.name,stu.chinese,stu.math,stu.english))

    输入成绩函数:

    1. def __enterScore(self,message):
    2. #成绩输入
    3. while True:
    4. try:
    5. score = input(message)
    6. if 0 <= int(score) <= 100:
    7. break
    8. else:
    9. print("输入错误,成绩应在0到100之间")
    10. except:
    11. print("输入错误,成绩应在0到100之间")
    12. return score
    13. def __exists(self,no):
    14. #判断学号是否存在
    15. for stu in self.stulist:
    16. if stu.no == no:
    17. return True
    18. else:
    19. return False

    添加学生信息:

    1. def insert(self):
    2. #添加学生信息
    3. while True:
    4. no = input('学号:')
    5. if self.__exists(no):
    6. print('该学号已存在')
    7. else:
    8. name = input('姓名:')
    9. chinese = self.__enterScore('语文成绩:')
    10. math = self.__enterScore('数学成绩:')
    11. english = self.__enterScore('英语成绩:')
    12. stu = Student(no,name,chinese,math,english)
    13. self.stulist.append(stu)
    14. choice = input('继续添加(y/n)?').lower()
    15. if choice == 'n':
    16. break

    删除学生信息

    1. def delete(self):
    2. #删除学生信息
    3. while True:
    4. no = input('请输入要删除的学生学号:')
    5. for stu in self.stulist[::]:
    6. if stu.no == no:
    7. self.stulist.remove(stu)
    8. print('删除成功')
    9. break
    10. else:
    11. print('该学号不存在')
    12. choice = input('继续删除(y/n)?').lower()
    13. if choice == 'n':
    14. break

    修改学生信息

    1. def update(self):
    2. #修改学生信息
    3. while True:
    4. no = input('请输入要修改的学生学号:')
    5. if self.__exists(no):
    6. for stu in self.stulist:
    7. if stu.no == no:
    8. stu.name = input('姓名:')
    9. stu.chinese = int(self.__enterScore('语文成绩:'))
    10. stu.math = int(self.__enterScore('数学成绩:'))
    11. stu.english = int(self.__enterScore('英语成绩:'))
    12. print('修改成功')
    13. break
    14. else:
    15. print('该学号不存在')
    16. choice = input('继续修改(y/n)?').lower()
    17. if choice == 'n':
    18. break

    导入学生信息

    1. def load(self,fn):
    2. #导入学生信息
    3. if os.path.exists(fn):
    4. try:
    5. with open(fn,'r',encoding = 'utf-8') as fp:
    6. while True:
    7. fs = fp.readline().strip('\n')
    8. if not fs:
    9. break
    10. else:
    11. stu = Student(*fs.split(','))
    12. if self.__exists(stu.no):
    13. print('该学号已存在')
    14. else:
    15. self.stulist.append(stu)
    16. print('导入完毕')
    17. except:
    18. print('error...') #要导入的文件不是utf-8编码,或是字段数不匹配等
    19. else:
    20. print('要导入的文件不存在')

    导出学生信息

    1. def save(self,fn):
    2. #导出学生信息
    3. with open(fn,'w',encoding = 'utf-8') as fp:
    4. for stu in self.stulist:
    5. fp.write(stu.no + ',')
    6. fp.write(stu.name + ',')
    7. fp.write(str(stu.chinese) + ',')
    8. fp.write(str(stu.math) + ',')
    9. fp.write(str(stu.english) + '\n')
    10. print("导出完毕")

    求课程平均分

    1. def scoreavg(self):
    2. #求课程平均分
    3. length = len(self.stulist)
    4. if length > 0:
    5. chinese_avg = sum([stu.chinese for stu in self.stulist])/length
    6. math_avg = sum([stu.math for stu in self.stulist])/length
    7. english_avg = sum([stu.english for stu in self.stulist])/length
    8. print('语文成绩平均分是:%.2f'%chinese_avg)
    9. print('数学成绩平均分是:%.2f'%math_avg)
    10. print('英语成绩平均分是:%.2f'%english_avg)
    11. else:
    12. print('尚没有学生成绩...')

    求课程最高分

    1. def scoremax(self):
    2. #求课程最高分
    3. if len(self.stulist) > 0:
    4. chinese_max = max([stu.chinese for stu in self.stulist])
    5. math_max = max([stu.math for stu in self.stulist])
    6. english_max = max([stu.english for stu in self.stulist])
    7. print('语文成绩最高分是:%d'%chinese_max)
    8. print('数学成绩最高分是:%d'%math_max)
    9. print('英语成绩最高分是:%d'%english_max)
    10. else:
    11. print('尚没有学生成绩...')

    求课程最低分

    1. def scoremin(self):
    2. #求课程最低分
    3. if len(self.stulist) > 0:
    4. chinese_min = min([stu.chinese for stu in self.stulist])
    5. math_min = min([stu.math for stu in self.stulist])
    6. english_min = min([stu.english for stu in self.stulist])
    7. print('语文成绩最低分是:%d'%chinese_min)
    8. print('数学成绩最低分是:%d'%math_min)
    9. print('英语成绩最低分是:%d'%english_min)
    10. else:
    11. print('尚没有学生成绩...')

    最后定义菜单函数和主函数:

    1. def infoprocess(self):
    2. #基本信息管理
    3. print('学生基本信息管理'.center(20,'-'))
    4. print('load----------导入学生信息')
    5. print('insert--------添加学生信息')
    6. print('delete--------删除学生信息')
    7. print('update--------修改学生信息')
    8. print('show----------显示学生信息')
    9. print('save----------导出学生信息')
    10. print('return--------返回')
    11. print('-'*28)
    12. while True:
    13. s = input('info>').strip().lower()
    14. if s == 'load':
    15. fn = input('请输入要导入的文件名:')
    16. self.load(fn)
    17. elif s == 'show':
    18. self.show()
    19. elif s == 'insert':
    20. self.insert()
    21. elif s == 'delete':
    22. self.delete()
    23. elif s == 'update':
    24. self.update()
    25. elif s == 'save':
    26. fn = input('请输入要导出的文件名:')
    27. self.save(fn)
    28. elif s =='return':
    29. break
    30. else:
    31. print('输入错误')
    32. def scoreprocess(self):
    33. #学生成绩统计
    34. print('学生成绩统计'.center(24,'='))
    35. print('avg --------课程平均分')
    36. print('max --------课程最高分')
    37. print('min --------课程最低分')
    38. print('return --------返回')
    39. print(''.center(30,'='))
    40. while True:
    41. s = input('score>').strip().lower()
    42. if s == 'avg':
    43. self.scoreavg()
    44. elif s == 'max':
    45. self.scoremax()
    46. elif s == 'min':
    47. self.scoremin()
    48. elif s == 'return':
    49. break
    50. else:
    51. print('输入错误')
    52. def main(self):
    53. #主控函数
    54. while True:
    55. print('学生信息管理系统V1.0'.center(24,'='))
    56. print('info -------学生基本信息管理')
    57. print('score -------学生成绩统计')
    58. print('exit -------退出系统')
    59. print(''.center(32,'='))
    60. s = input('main>').strip().lower()
    61. if s == 'info':
    62. self.infoprocess()
    63. elif s == 'score':
    64. self.scoreprocess()
    65. elif s == 'exit':
    66. break
    67. else:
    68. print('输入错误')
    69. if __name__ == '__main__':
    70. st = StudentList()
    71. st.main()

    完整代码:

    1. import os
    2. class Student:
    3. def __init__(self,no,name,chinese,math,english):
    4. self.no = no
    5. self.name = name
    6. self.chinese = int(chinese)
    7. self.math = int(math)
    8. self.english = int(english)
    9. class StudentList:
    10. def __init__(self):
    11. self.stulist = []
    12. def show(self):
    13. #显示学生信息
    14. print('{:8}\t{:8}\t{:8}\t{:8}\t{:8}'
    15. .format('学号','姓名','语文','数学','英语'))
    16. for stu in self.stulist:
    17. print('{:8}\t{:8}\t{:<8}\t{:<8}\t{:<8}'
    18. .format(stu.no,stu.name,stu.chinese,stu.math,stu.english))
    19. def __enterScore(self,message):
    20. #成绩输入
    21. while True:
    22. try:
    23. score = input(message)
    24. if 0 <= int(score) <= 100:
    25. break
    26. else:
    27. print("输入错误,成绩应在0到100之间")
    28. except:
    29. print("输入错误,成绩应在0到100之间")
    30. return score
    31. def __exists(self,no):
    32. #判断学号是否存在
    33. for stu in self.stulist:
    34. if stu.no == no:
    35. return True
    36. else:
    37. return False
    38. def insert(self):
    39. #添加学生信息
    40. while True:
    41. no = input('学号:')
    42. if self.__exists(no):
    43. print('该学号已存在')
    44. else:
    45. name = input('姓名:')
    46. chinese = self.__enterScore('语文成绩:')
    47. math = self.__enterScore('数学成绩:')
    48. english = self.__enterScore('英语成绩:')
    49. stu = Student(no,name,chinese,math,english)
    50. self.stulist.append(stu)
    51. choice = input('继续添加(y/n)?').lower()
    52. if choice == 'n':
    53. break
    54. def delete(self):
    55. #删除学生信息
    56. while True:
    57. no = input('请输入要删除的学生学号:')
    58. for stu in self.stulist[::]:
    59. if stu.no == no:
    60. self.stulist.remove(stu)
    61. print('删除成功')
    62. break
    63. else:
    64. print('该学号不存在')
    65. choice = input('继续删除(y/n)?').lower()
    66. if choice == 'n':
    67. break
    68. def update(self):
    69. #修改学生信息
    70. while True:
    71. no = input('请输入要修改的学生学号:')
    72. if self.__exists(no):
    73. for stu in self.stulist:
    74. if stu.no == no:
    75. stu.name = input('姓名:')
    76. stu.chinese = int(self.__enterScore('语文成绩:'))
    77. stu.math = int(self.__enterScore('数学成绩:'))
    78. stu.english = int(self.__enterScore('英语成绩:'))
    79. print('修改成功')
    80. break
    81. else:
    82. print('该学号不存在')
    83. choice = input('继续修改(y/n)?').lower()
    84. if choice == 'n':
    85. break
    86. def load(self,fn):
    87. #导入学生信息
    88. if os.path.exists(fn):
    89. try:
    90. with open(fn,'r',encoding = 'utf-8') as fp:
    91. while True:
    92. fs = fp.readline().strip('\n')
    93. if not fs:
    94. break
    95. else:
    96. stu = Student(*fs.split(','))
    97. if self.__exists(stu.no):
    98. print('该学号已存在')
    99. else:
    100. self.stulist.append(stu)
    101. print('导入完毕')
    102. except:
    103. print('error...') #要导入的文件不是utf-8编码,或是字段数不匹配等
    104. else:
    105. print('要导入的文件不存在')
    106. def save(self,fn):
    107. #导出学生信息
    108. with open(fn,'w',encoding = 'utf-8') as fp:
    109. for stu in self.stulist:
    110. fp.write(stu.no + ',')
    111. fp.write(stu.name + ',')
    112. fp.write(str(stu.chinese) + ',')
    113. fp.write(str(stu.math) + ',')
    114. fp.write(str(stu.english) + '\n')
    115. print("导出完毕")
    116. def scoreavg(self):
    117. #求课程平均分
    118. length = len(self.stulist)
    119. if length > 0:
    120. chinese_avg = sum([stu.chinese for stu in self.stulist])/length
    121. math_avg = sum([stu.math for stu in self.stulist])/length
    122. english_avg = sum([stu.english for stu in self.stulist])/length
    123. print('语文成绩平均分是:%.2f'%chinese_avg)
    124. print('数学成绩平均分是:%.2f'%math_avg)
    125. print('英语成绩平均分是:%.2f'%english_avg)
    126. else:
    127. print('尚没有学生成绩...')
    128. def scoremax(self):
    129. #求课程最高分
    130. if len(self.stulist) > 0:
    131. chinese_max = max([stu.chinese for stu in self.stulist])
    132. math_max = max([stu.math for stu in self.stulist])
    133. english_max = max([stu.english for stu in self.stulist])
    134. print('语文成绩最高分是:%d'%chinese_max)
    135. print('数学成绩最高分是:%d'%math_max)
    136. print('英语成绩最高分是:%d'%english_max)
    137. else:
    138. print('尚没有学生成绩...')
    139. def scoremin(self):
    140. #求课程最低分
    141. if len(self.stulist) > 0:
    142. chinese_min = min([stu.chinese for stu in self.stulist])
    143. math_min = min([stu.math for stu in self.stulist])
    144. english_min = min([stu.english for stu in self.stulist])
    145. print('语文成绩最低分是:%d'%chinese_min)
    146. print('数学成绩最低分是:%d'%math_min)
    147. print('英语成绩最低分是:%d'%english_min)
    148. else:
    149. print('尚没有学生成绩...')
    150. def infoprocess(self):
    151. #基本信息管理
    152. print('学生基本信息管理'.center(20,'-'))
    153. print('load----------导入学生信息')
    154. print('insert--------添加学生信息')
    155. print('delete--------删除学生信息')
    156. print('update--------修改学生信息')
    157. print('show----------显示学生信息')
    158. print('save----------导出学生信息')
    159. print('return--------返回')
    160. print('-'*28)
    161. while True:
    162. s = input('info>').strip().lower()
    163. if s == 'load':
    164. fn = input('请输入要导入的文件名:')
    165. self.load(fn)
    166. elif s == 'show':
    167. self.show()
    168. elif s == 'insert':
    169. self.insert()
    170. elif s == 'delete':
    171. self.delete()
    172. elif s == 'update':
    173. self.update()
    174. elif s == 'save':
    175. fn = input('请输入要导出的文件名:')
    176. self.save(fn)
    177. elif s =='return':
    178. break
    179. else:
    180. print('输入错误')
    181. def scoreprocess(self):
    182. #学生成绩统计
    183. print('学生成绩统计'.center(24,'='))
    184. print('avg --------课程平均分')
    185. print('max --------课程最高分')
    186. print('min --------课程最低分')
    187. print('return --------返回')
    188. print(''.center(30,'='))
    189. while True:
    190. s = input('score>').strip().lower()
    191. if s == 'avg':
    192. self.scoreavg()
    193. elif s == 'max':
    194. self.scoremax()
    195. elif s == 'min':
    196. self.scoremin()
    197. elif s == 'return':
    198. break
    199. else:
    200. print('输入错误')
    201. def main(self):
    202. #主控函数
    203. while True:
    204. print('学生信息管理系统V1.0'.center(24,'='))
    205. print('info -------学生基本信息管理')
    206. print('score -------学生成绩统计')
    207. print('exit -------退出系统')
    208. print(''.center(32,'='))
    209. s = input('main>').strip().lower()
    210. if s == 'info':
    211. self.infoprocess()
    212. elif s == 'score':
    213. self.scoreprocess()
    214. elif s == 'exit':
    215. break
    216. else:
    217. print('输入错误')
    218. if __name__ == '__main__':
    219. st = StudentList()
    220. st.main()

  • 相关阅读:
    使用css 与 js 两种方式实现导航栏吸顶效果
    如何在IDEA 中设置背景图片
    Spring Could 核心组件知识点, 看这篇就够了!
    ZED相机获取图像python
    C#中关于DevExpress的常用操作和帮助类项目工程内容说明
    阴影text-shadow和box-shadow详解
    Avalonia播放视频(mp4)
    SpringMVC实现文件上传和下载功能
    Mysql进阶-视图篇
    nacos配置mysql死活报 Nacos No DataSource set异常解决
  • 原文地址:https://blog.csdn.net/agelee/article/details/126832608