本文是关于学生信息管理系统的简易版以及具体内容具体思路的详细讲解。(完整代码文末附上)
(该系统V1.0版本只有简易功能的实现,在V2.0以后的版本对各种逻辑有更为精确的完善,请大家有更高要求的朋友移步V2.0以后的文章噢)
代码实现过程以自定义方法为主线,各种功能独立成方法,降低代码耦合度,方便修改。
一、首先介绍“学生信息管理系统”最重要的部分:主菜单
主菜单一共显示五个功能:添加、删除、修改、显示学生信息和退出系统。其中前四个功能均独立为方法(如下所示)
1. # 主菜单 2. def mainMenu(): 3. LIST1 = [] 4. while True: 5. print("=" * 30) 6. print("学生信息管理系统V1.0\n1、添加学生信息\n2、删除学生信息\n" 7. "3、修改学生信息\n4、显示所有学生信息\n5、退出系统\n") 8. date = input("请输入功能对应的数字:") 9. print("=" * 30) 10. if date == "1": 11. # 1、添加学生信息(调用自定义函数) 12. LIST = addStudentsMessage() # 由于返回的是列表,所以这里用一个新的列表接收 13. if LIST is None: 14. continue 15. for i in range(0, len(LIST)): 16. LIST1.append(LIST[i]) 17. if date == "2": 18. # 2、删除学生信息(调用自定义函数) 19. deleteMessage(LIST1) 20. if date == "3": 21. # 3、修改学生信息(调用自定义函数) 22. change(LIST1) 23. if date == "4": 24. # 4、显示所有学生信息(调用自定义函数) 25. show(LIST1) 26. if date == "5": 27. # 退出系统 28. ask = input("真的要退出吗?(yes or no):") 29. if ask == "yes" or ask == "Yes" or ask == "YES": 30. print("已退出") 31. break 32. if ask == "no" or ask == "No" or ask == "NO": 33. continue 34. print("输入有误")
二、第一个功能:添加学生信息
如下所示,依次校验用户输入的学生信息:姓名、性别和电话号码是否有误
1. # 1、添加学生信息 2. def addStudentsMessage(): 3. List = [] 4. date = 0 5. while True: 6. infer = input("你是否想输入学生信息:y/n:") 7. 8. if infer == "y" or infer == "Y": 9. 10. name = input("请输入学生的姓名:") 11. if not name: 12. print("学生姓名不能为空") 13. return 14. 15. # 调用方法去除字符串的空格再进行比较,如果去除空格之后为空,则说明键入的字符串只有空格 16. if trim(name) == "": 17. print("学生姓名不能为空") 18. return 19. 20. # 判断性别输入是否正确 21. while True: 22. sex = input("请输入学生的性别(F/M):") 23. if sex == "F" or sex == "M": 24. break 25. else: 26. continue 27. 28. # 判断电话输入是否正确 29. while True: 30. try: 31. phone = int(input("请输入学生的电话号码:")) 32. if phone <= 0: 33. print("a" + 1) # 此处抛出异常 34. break 35. except: 36. print("输入无效,重新录入信息") 37. continue 38. 39. Dict = {"name": name, "sex": sex, "phone": phone} 40. 41. List.append(Dict) 42. print("学生已添加") 43. date += 1 44. elif infer == "n" or infer == "N": 45. break 46. else: 47. print("输入格式有误") 48. 49. if date == 0: 50. print("未存入数据") 51. else: 52. return List
三、第二个功能:删除学生信息
实现过程如下所示,V1.0版本不考虑同名情况
1. # 2、删除学生信息 2. def deleteMessage(studentMessageList): 3. enterName = str(input("请输入要删除的姓名:")) 4. # 开始遍历查找 5. for i in range(0, len(studentMessageList)): 6. # 找到了直接删除 7. if studentMessageList[i]["name"] == enterName: 8. del studentMessageList[i] 9. print("删除成功") 10. # 删除成功直接返回,结束该方法 11. return 12. 13. # 如果上面遍历完依然没有结束方法,说明不存在 14. print("学生不存在")
四、第三个功能:修改学生信息
该功能的逻辑与第一个功能类似,同样需要校验输入信息是否符合规范
修改完成的学生信息,会通过赋值的操作,覆盖原来的信息
1. # 3、修改学生信息 2. def change(List): 3. if List is None: 4. print("没有信息,无法修改") 5. return None 6. if len(List) == 0: 7. print("没有信息,无法修改") 8. return None 9. if len(List) != 0: 10. inputName = str(input("请输入要修改的学生姓名:")) 11. for i in range(0, len(List)): 12. if List[i]["name"] == inputName: 13. 14. # 进入这个if,说明找到了该学生 15. # 1、修改性别 16. while True: 17. sexMessage = input("输入修改后的学生性别(F/M):") 18. if sexMessage == "F" or sexMessage == "M": 19. List[i]["sex"] = sexMessage 20. break 21. else: 22. continue 23. 24. # 2、修改电话 25. while True: 26. 27. # 判断电话是否有误 28. try: 29. phone = int(input("请输入修改后的学生电话号码:")) 30. if phone <= 0: 31. print("a" + 1) # 此处抛出异常 32. List[i]["phone"] = phone 33. break 34. except: 35. print("输入无效,重新录入信息") 36. continue 37. print("修改成功") 38. 39. # 上面全部修改完成且没有错误,则结束方法 40. return 41. # 循环走完没有结束方法,说明不存在 42. print("学生不存在")
五、第四个功能:显示学生信息
显示学生信息即格式化遍历输出存储学生信息的列表,此处采用format格式化操作。
末行添加了“chr(12288)”是解决中文格式化无法对齐的情况
1. # 4、显示所有学生信息 2. def show(List): 3. print("学生信息如下:") 4. print("=" * 30) 5. 6. # 打印头部标题 并进行格式化 7. print("{0:^10}\t{1:^12}\t{2:^10}\t{3:^15}".format("学生序号", "学生姓名", "学生性别", "电话号码")) 8. 9. if List is None: 10. return None 11. if len(List) == 0: 12. return None 13. if len(List) != 0: 14. for i in range(0, len(List)): 15. # 格式化字符串 16. print("{0:^13}\t{1:^13}\t{2:^13}\t{3:>15}". 17. format(i + 1, List[i].get("name"), List[i].get("sex"), List[i].get("phone")), chr(12288))
六、第五个功能:退出系统
该处在V1.0版本较为简单,没有独立成方法的必要
1. # 退出系统 2. ask = input("真的要退出吗?(yes or no):") 3. if ask == "yes" or ask == "Yes" or ask == "YES": 4. print("已退出") 5. break 6. if ask == "no" or ask == "No" or ask == "NO": 7. continue 8. print("输入有误")
下面附上“学生信息管理系统V1.0”的完整代码:
1. # -*- coding: utf-8 -*- 2. # @Author:︶ㄣ释然 3. # @Time: 2022/7/6 22:08 4. 5. # 定义一个方法,去除字符串左右两端的空格,并返回处理之后的字符串 6. def trim(strings): 7. # 获取从偏移为0的字符一直到偏移为1的字符串,不包括偏移为1的字符串 8. # (该功能用于去除字符串左边的空格) 9. while strings[:1] == ' ': 10. strings = strings[1:] 11. # 获取从偏移为-1的字符一直到偏移为最后一位的字符串,不包括偏移为最后一位的字符串 12. # (该功能用于去除字符串右边的空格) 13. while strings[-1:] == ' ': 14. strings = strings[:-1] 15. # 左右两端空格去除完成,返回strings 16. return strings 17. 18. 19. # 1、添加学生信息 20. def addStudentsMessage(): 21. List = [] 22. date = 0 23. while True: 24. infer = input("你是否想输入学生信息:y/n:") 25. 26. if infer == "y" or infer == "Y": 27. 28. name = input("请输入学生的姓名:") 29. if not name: 30. print("学生姓名不能为空") 31. return 32. 33. # 调用方法去除字符串的空格再进行比较,如果去除空格之后为空,则说明键入的字符串只有空格 34. if trim(name) == "": 35. print("学生姓名不能为空") 36. return 37. 38. # 判断性别输入是否正确 39. while True: 40. sex = input("请输入学生的性别(F/M):") 41. if sex == "F" or sex == "M": 42. break 43. else: 44. continue 45. 46. # 判断电话输入是否正确 47. while True: 48. try: 49. phone = int(input("请输入学生的电话号码:")) 50. if phone <= 0: 51. print("a" + 1) # 此处抛出异常 52. break 53. except: 54. print("输入无效,重新录入信息") 55. continue 56. 57. Dict = {"name": name, "sex": sex, "phone": phone} 58. 59. List.append(Dict) 60. print("学生已添加") 61. date += 1 62. elif infer == "n" or infer == "N": 63. break 64. else: 65. print("输入格式有误") 66. 67. if date == 0: 68. print("未存入数据") 69. else: 70. return List 71. 72. 73. # 2、删除学生信息 74. def deleteMessage(studentMessageList): 75. enterName = str(input("请输入要删除的姓名:")) 76. # 开始遍历查找 77. for i in range(0, len(studentMessageList)): 78. # 找到了直接删除 79. if studentMessageList[i]["name"] == enterName: 80. del studentMessageList[i] 81. print("删除成功") 82. # 删除成功直接返回,结束该方法 83. return 84. 85. # 如果上面遍历完依然没有结束方法,说明不存在 86. print("学生不存在") 87. 88. 89. # 3、修改学生信息 90. def change(List): 91. if List is None: 92. print("没有信息,无法修改") 93. return None 94. if len(List) == 0: 95. print("没有信息,无法修改") 96. return None 97. if len(List) != 0: 98. inputName = str(input("请输入要修改的学生姓名:")) 99. for i in range(0, len(List)): 100. if List[i]["name"] == inputName: 101. 102. # 进入这个if,说明找到了该学生 103. # 1、修改性别 104. while True: 105. sexMessage = input("输入修改后的学生性别(F/M):") 106. if sexMessage == "F" or sexMessage == "M": 107. List[i]["sex"] = sexMessage 108. break 109. else: 110. continue 111. 112. # 2、修改电话 113. while True: 114. 115. # 判断电话是否有误 116. try: 117. phone = int(input("请输入修改后的学生电话号码:")) 118. if phone <= 0: 119. print("a" + 1) # 此处抛出异常 120. List[i]["phone"] = phone 121. break 122. except: 123. print("输入无效,重新录入信息") 124. continue 125. print("修改成功") 126. 127. # 上面全部修改完成且没有错误,则结束方法 128. return 129. # 循环走完没有结束方法,说明不存在 130. print("学生不存在") 131. 132. 133. # 4、显示所有学生信息 134. def show(List): 135. print("学生信息如下:") 136. print("=" * 30) 137. 138. # 打印头部标题 并进行格式化 139. print("{0:^10}\t{1:^12}\t{2:^10}\t{3:^15}".format("学生序号", "学生姓名", "学生性别", "电话号码")) 140. 141. if List is None: 142. return None 143. if len(List) == 0: 144. return None 145. if len(List) != 0: 146. for i in range(0, len(List)): 147. # 格式化字符串 148. print("{0:^13}\t{1:^13}\t{2:^13}\t{3:>15}". 149. format(i + 1, List[i].get("name"), List[i].get("sex"), List[i].get("phone")), chr(12288)) 150. 151. 152. # 主菜单 153. def mainMenu(): 154. LIST1 = [] 155. while True: 156. print("=" * 30) 157. print("学生信息管理系统V1.0\n1、添加学生信息\n2、删除学生信息\n" 158. "3、修改学生信息\n4、显示所有学生信息\n5、退出系统\n") 159. date = input("请输入功能对应的数字:") 160. print("=" * 30) 161. if date == "1": 162. # 1、添加学生信息(调用自定义函数) 163. LIST = addStudentsMessage() # 由于返回的是列表,所以这里用一个新的列表接收 164. if LIST is None: 165. continue 166. for i in range(0, len(LIST)): 167. LIST1.append(LIST[i]) 168. if date == "2": 169. # 2、删除学生信息(调用自定义函数) 170. deleteMessage(LIST1) 171. if date == "3": 172. # 3、修改学生信息(调用自定义函数) 173. change(LIST1) 174. if date == "4": 175. # 4、显示所有学生信息(调用自定义函数) 176. show(LIST1) 177. if date == "5": 178. # 退出系统 179. ask = input("真的要退出吗?(yes or no):") 180. if ask == "yes" or ask == "Yes" or ask == "YES": 181. print("已退出") 182. break 183. if ask == "no" or ask == "No" or ask == "NO": 184. continue 185. print("输入有误") 186. 187. 188. # 调用主菜单函数 189. if __name__ == '__main__': 190. mainMenu()