Python实践项目(二)学生信息管理系统

实训内容
1、学生信息管理系统
2、具有添加,删除,查询,统计,显示,排序功能
//导入主函数
from index import main main()
主程序:
1 # 导入模块 2 import os 3 import re 4 5 # 建立一个名为student.text的文本用于保存文件 6 7 fileName = 'student.txt' 8 9 10 # 定义函数main() 11 def main(): 12 while True: 13 menu() 14 choice = int(input('请输入您的程序指令:')) 15 if choice in [0, 1, 2, 3, 4, 5, 6]: 16 if choice == 0: 17 print("您确定要退出吗?yes/no") 18 answer = input() 19 if answer == 'yes': 20 print('感谢您的使用!!!') 21 break # 终止 22 else: 23 continue # 中止 24 elif choice == 1: 25 insert() 26 elif choice == 2: 27 delete() 28 elif choice == 3: 29 search() 30 elif choice == 4: 31 total() 32 elif choice == 5: 33 show() 34 elif choice == 6: 35 sort() 36 else: 37 print('输入的指令不在范围内,请重新输入!!!') 38 39 40 def menu(): 41 print('==============================学生信息管理系统==============================') 42 print('︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽功能菜单︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽') 43 print("*" * 74) 44 print("******", " " * 60, "******") 45 print("******\t 1.添加学生信息", " " * 18, "4.统计学生总人数\t ******") 46 print("******\t 2.删除学生信息", " " * 18, "5.显示所有学生信息 ******") 47 print("******\t 3.查询学生信息", " " * 18, "6.排序(以总成绩分数) ******") 48 print("******\t 0.退出学生信息管理系统", " " * 32, "******") 49 print("******", " " * 60, "******") 50 print("*" * 74) 51 print('︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾') 52 53 54 def save(lst): 55 stu_txt = open(fileName, 'a', encoding='utf-8') 56 for item in lst: 57 stu_txt.write(str(item) + '\n') 58 stu_txt.close() 59 60 61 # 录入学生信息 62 def insert(): 63 global phone 64 student_list = [] 65 while True: 66 id = input('请输入学号: ') 67 if not id: 68 break 69 name = input('请输入姓名: ') 70 if not name: 71 break 72 sex = input('请输入性别: ') 73 if not sex: 74 break 75 # phone = input('请输入手机号: ') 76 # if not phone: 77 count = 0 78 for i in range(1, 4): 79 phone = input("请输入你的手机号: ") 80 # 利用正则表达式进行限定 81 tel = re.match(r"^1[3456789]\d{9}$", phone) 82 if tel: 83 print("输入成功!") 84 break 85 if tel != phone: 86 count += 1 87 if (count == 3): 88 print("录入失败,请30秒后重试!") 89 if (count != 3): 90 print("录入错误,请核对你的手机号!") 91 try: 92 # 智育分满分70分,德育分满分20分,体育分满分10分 93 zyf = int(input('请输入你的智育分:')) 94 dyf = int(input('请输入你的德育分:')) 95 tyf = int(input('请输入你的体育分:')) 96 except: 97 print('请您输入数字成绩!') 98 continue 99 # 将录入的学生信息保存到字典中 100 student = {'id': id, 'name': name, 'sex': sex, 'phone': phone, 'zyf': zyf, 'dyf': dyf, 'tyf': tyf} 101 # 将学生信息添加到列表中 102 # 可删!!!!! 103 student_list.append(student) 104 answer = input('是否继续添加?yes/no\n') 105 if answer == 'yes': 106 continue 107 else: 108 break 109 # 保存学生信息 110 save(student_list) # 封装 111 print('学生信息录入完毕!!!') 112 113 114 def show_student(lst): 115 # 传过来空列表 116 if len(lst) == 0: 117 print('没有查找到该生信息!') 118 return 119 # 定义标题显示格式 120 format_title = '{:^5}\t{:^23}{:^5}\t{:^11}\t{:^12}\t{:^10}\t{:^10}\t{:^6}\t{:^6}\t' 121 print(format_title.format('学号', '姓名', '性别', '手机号', '智育分', '德育分', '体育分', '总成绩', '分数等级')) 122 # 定义内容的显示格式 123 format_data = '{:^6}\t{:^6}\t{:^6}\t{:^31}{:^3}\t{:^10}\t{:^9}\t{:^12}\t{:^12}\t' 124 for item in lst: 125 sum = int(item['zyf']) + int(item['dyf']) + int(item['tyf']) 126 # grade等级的使用 127 grade = '' 128 if sum >= 85: 129 grade = 'A' 130 if 75 <= sum < 85: 131 grade = 'B' 132 if 65 <= sum < 75: 133 grade = 'C' 134 if 60 <= sum < 65: 135 grade = 'D' 136 if sum < 60: 137 grade = 'error' 138 # sum,grade的输出格式不同 139 # format_data.format(sum,grade)) 140 print(format_data.format(item['id'], item['name'], item['sex'], item['phone'], 141 item['zyf'], item['dyf'], item['tyf'], 142 sum, grade)) 143 print('全部学生信息显示完毕!!!') 144 145 146 # 查询学生信息 147 def search(): 148 while True: 149 stu_query = [] 150 id = '' 151 # 判断文件是否存在 152 if os.path.exists(fileName): 153 # if的使用 154 if id == '': 155 id = input('请输入要查找的学生学号:') 156 else: 157 print('您的输入有误,请重新输入!') 158 continue 159 # 如果文件存在,并且用户输入了正确的查询标号,则打开文件 160 with open(fileName, 'r', encoding='utf-8') as rfile: 161 students = rfile.readlines() 162 # 转换为字典类型 163 for item in students: 164 d = dict(eval(item)) 165 if id != '': 166 if id == d['id']: 167 stu_query.append(d) # 追加 168 # 显示查询结果 169 show_student(stu_query) 170 # 是否继续查询其他学生信息 171 answer = input('还要查询其他学生吗?yes/no\n') 172 if answer == 'yes': 173 continue 174 else: 175 break 176 else: 177 print('学生信息不存在!') 178 return 179 print('学生信息查询结束,请进行下一步操作!!!') 180 181 182 # 删除学生信息 183 def delete(): 184 while True: 185 student_id = input('请输入要删除学生的学号:') 186 if student_id != '': 187 if os.path.exists(fileName): 188 with open(fileName, 'r', encoding='utf-8') as file: 189 student_old = file.readlines() 190 else: 191 student_old = [] 192 flag = False # 标记是否删除 193 if student_old: 194 with open(fileName, 'w', encoding='utf-8') as wfile: 195 d = {} 196 for item in student_old: 197 d = dict(eval(item)) # 将字符串转换为字典 198 if d['id'] != student_id: 199 wfile.write(str(d) + '\n') 200 else: 201 flag = True 202 if flag: 203 print(f'学号为{student_id}的学生信息已经删除') 204 else: 205 print(f'学生表中没有找到学号为{student_id}的学生') 206 else: 207 print('学生表已中无任何学生个人信息') 208 break 209 show() # 重新显示所有学生信息 210 answer = input('是否继续删除?yes/no\n') 211 if answer == 'yes': 212 continue 213 else: 214 break 215 print('删除学生信息已结束,请你进行下一步操作!!!') 216 217 218 # 统计学生总人数 219 def total(): 220 # 判断文件是否存在,如果存在则打开文件,读取信息 221 if os.path.exists(fileName): 222 with open(fileName, 'r', encoding='utf-8') as rfile: 223 students = rfile.readlines() 224 # 判断读取到的学生信息是否为空 225 if students: 226 print('一共有{}名学生'.format(len(students))) 227 else: 228 print('学生系统中还没有录入学生信息!') 229 else: 230 print('学生信息不存在!') 231 return 232 print('学生总人数统计完毕,请进行下一步操作!!!') 233 234 235 # 显示所有学生信息 236 def show(): 237 student_list = [] 238 # 判断文件是否存在,如果存在则打开文件,读取信息 239 if os.path.exists(fileName): 240 with open(fileName, 'r', encoding='utf-8') as rfile: 241 students = rfile.readlines() 242 # 判断读取到的学生信息是否为空 243 if students: 244 for item in students: 245 student_list.append(eval(item)) 246 # 展示学生信息 247 show_student(student_list) 248 else: 249 print('学生文件中还没有录入学生信息!') 250 else: 251 print('学生文件不存在!') 252 return 253 print('学生信息已成功显示,请你进行下一步操作!!!') 254 255 256 # 对总学生成绩进行排序 257 def sort(): 258 # 判断文件是否存在,如果存在则打开文件,读取信息 259 if os.path.exists(fileName): 260 with open(fileName, 'r', encoding='utf-8') as rfile: 261 students_list = rfile.readlines() 262 students_new = [] 263 # 判断读取到的学生信息是否为空 264 if students_list: 265 # 将所有的item加入到students_new中 266 for item in students_list: 267 d = dict(eval(item)) 268 students_new.append(d) 269 # 利用匿名函数与sort方法进行排序 270 # True为降序,False升序 271 students_new.sort(key=lambda x: int(x['zyf']) + int(x['dyf']) + int(x['tyf']), 272 reverse=True) 273 # 将排序后的成绩进行输出 274 show_student(students_new) 275 print('学生信息排序完成并成功显示,请你进行下一步操作!!!') 276 277 278 if __name__ == '__main__': 279 main()
总结:
1.read () 一次性将文件所有内容读取出来 2.与readlines 按行读取 3.float类型函数与int类型函数 4.分数名称大小写(Zyf and zyf) 5.sum相加问题 6.save保存分数等级的问题 7.(Python)解决lameError:name'XXX'is not defined的问题 8.python遇到NameError:name'_name_'is not defined这样的错误 name两端的双下划线 9.python学习-while True的用法 采用该语句的核心思想是如果出现错误的话,可以继续下一个循环。使用b reak终止整个循环 对于学生管理系统有很大作用,不影响使用 10.python中使用fromat的时候报错IndexError: tuple index out of range 错误的原因是元组索引越界,因为后面format中的内容出现了赋值操作
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)