Python学生成绩管理系统

1 2#import matplotlib.pyplot as plt 3import time 4import os # 导入文件 包 5import re # 正则表达式 6 7filename = 's.txt' 8filenamedl = 'sdl.txt' 9 10 11def main(): 12 while True: # 让菜单反复显示,相当于一个死循环 13 menu() 14 option = input("请选择:") 15 if option == '1': 16 insert() 17 elif option == '2': 18 search() 19 elif option == '3': 20 delete() 21 elif option == '4': 22 # modify_info() 23 modify() 24 elif option == '5': 25 sort() 26 elif option == '6': 27 total() 28 elif option == '7': 29 show() 30 31 else: 32 print('你已经退出') 33 exit(0) 34 35 36def menu(): 37 print(''' 38 **********学生信息管理系统********** 39 功能菜单 40 1.录入学生信息 41 2.查找学生信息 42 3.删除学生信息 43 4.修改学生信息 44 5.学生成绩排序 45 6.统计学生人数 46 7.显示学生信息 47 48 0.退出系统 49 ********************************* 50 ''') 51 52 53def insert(): # 录入 54 studentlist = [] # 用于保存多个学生信息 55 flag = 1 # 定义一个标志性变量用来控制循环 56 while flag: # 相当于while flag!=0 57 id = input("id:") 58 if len(id) != 11: 59 print("id格式错误,请重新输入") 60 break 61 name = input("名字:") 62 if id.lstrip() == '' or name.lstrip() == '': # 判断输入是否为空 用lstrip函数 63 print("姓名不能为空,输入错误") 64 break 65 name_string = re.sub("\D", "", name) # D:切割字符串,只保留数字 d相反 66 if name_string in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']: 67 print("姓名输入出错,请重新输入") 68 continue 69 else: 70 try: # try里面如果有异常,则执行except里面的 71 yuwen = float(input("语文:")) 72 if yuwen > 100 or yuwen < 0: 73 print("成绩输入不合法,请重新输入") 74 return 75 shuxue = float(input("数学:")) 76 if shuxue > 100 or shuxue < 0: 77 print("成绩输入不合法,请重新输入") 78 return 79 yingyu = float(input("英语:")) 80 if yingyu > 100 or yingyu < 0: 81 print("成绩输入不合法,请重新输入") 82 return 83 except: 84 print("输入无效,请重新输入") 85 continue # 若程序执行到此处,下面的内容不继续执行,程序会自动结束本次循环,然后继续输入 86 student = {'id': id, 'name': name, 'yuwen': yuwen, 'shuxue': shuxue, 'yingyu': yingyu} # 准备一个学生的格式 87 studentlist.append(student) # 录入一个学生信息就将该学生信息(字典)添加到列表中 将多个学生成绩放入列表 88 flag = int(input("是否继续输入(1:是/0;否):\n")) 89 # 保存文件 90 student_txt = open(filename, 'a') # "a"追加 91 # 将本次添加的学生信息全部放入到文件中 92 for s in studentlist: # 遍历列表 93 student_txt.write(str(s) + '\n') # 写入一行数据 #str表示将列表转成字符串 94 student_txt.close() # 关闭文件对象 95 96 97def search(): 98 student_new = [] 99 flag = 1 100 while flag: 101 id = '' 102 name = '' 103 # d = {} 104 mode = input("按照id查询输入1/按照姓名查询输入2\n") 105 if mode == "1": 106 id = input("请输入学生id:") 107 elif mode == "2": 108 name = input("请输入姓名:") 109 else: 110 print("输入出错,请重新输入") 111 continue # 结束本次循环,继续输入 112 # 读取文件 113 if os.path.exists(filename): # 判断文件是否存在 114 with open(filename, 'r') as file: # r表示读取文件filename将其放入file中,文件指针放在文件的开头 115 studentlist = file.readlines() # 将file中的数据一行一行地读到studentlist中 116 for list in studentlist: # 遍历列表:将studentlist中的数据添加到list中 117 d = dict(eval(list)) # eval:转成字符串,dict:转字典 118 if id != '': 119 if d['id'] == id: 120 student_new.append(d) # 如果d里面有信息,将信息放入stdent_new中 121 if name != '': 122 if d['name'] == name: 123 student_new.append(d) 124 # 打印搜索结果 125 printData(student_new) # 调用函数 126 student_new.clear() # 清除上一次的搜索记录 127 flag = int(input("是否继续查询(1:是/0;否):\n")) 128 else: 129 print("无数据") 130 131 132def delete(): 133 show() 134 flag = 1 135 while flag: 136 id1 = input("请输入需要删除的学生的id:") 137 if id1 != '': 138 # 读取所有学生信息 139 if os.path.exists(filename): # 判断 140 with open(filename, 'r') as file1: # 以读的方式打开filename将其放入file1中 141 student2 = file1.readlines() # 将file1中的数据一行一行地读到student2中 142 else: 143 student2 = [] # 定义一个空列表 144 flag1 = False 145 if student2: 146 with open(filename, 'w') as file2: # 147 d = {} # 定义一个空字典 148 for s in student2: # 遍历列表:将student2中的数据添加到s中 149 d = dict(eval(s)) # eval:转字符串 dict:转字典. 得到一个学生字典 150 if d['id'] != id1: # id不相等的将其写入实现删除 151 file2.write(str(d) + '\n') 152 else: 153 flag1 = True 154 if flag1: 155 print("id为" + id1 + "的学生已经被删除") 156 else: 157 print("没有找到id为" + id1 + "的同学") 158 else: 159 print("无该学生信息") 160 # continue 161 flag = int(input("是否继续删除(1:是/0;否):")) 162 163 164def modify(): 165 show() 166 flag = 1 167 while flag: 168 id1 = input("请输入要修改学生的id") 169 if os.path.exists(filename): 170 with open(filename, 'r') as file1: 171 student2 = file1.readlines() 172 else: 173 return 174 with open(filename, 'w') as file2: 175 d = {} 176 for s in student2: 177 d = dict(eval(s)) # 得到一个学生字典 178 if d["id"] == id1: # 符合条件 179 while 1: 180 try: # 若输入为空 181 d["name"] = input("请输入修改后的姓名") 182 d["yuwen"] = float(input("请输入修改后的语文成绩")) 183 d["shuxue"] = float(input("请输入修改后数学成绩")) 184 d["yingyu"] = float(input("请输入修改后的英语成绩")) 185 except: 186 print("输入无效,请重新输入") 187 else: 188 break 189 file2.write(str(d) + "\n") 190 print("修改成功") 191 else: 192 file2.write(str(d) + "\n") 193 flag = int(input("是否继续修改(1:是/0;否):")) 194 195def sort(): 196 student_new = [] 197 if os.path.exists(filename): 198 # 打开文件,读取数据 199 with open(filename, 'r') as file: 200 studentlist = file.readlines() # 字符串 201 # 将字符串转成dict存到列表中 202 for list in studentlist: 203 student_new.append(eval(list)) 204 # 排序 205 a = input("1:升序,2:降序") 206 if a == '1': 207 a = False 208 else: 209 a = True 210 b = input("请选择排列方式(1语文,2数学,3英语,4总成绩)") 211 if b == "1": 212 student_new.sort(key=lambda x: float(x['yuwen']), reverse=a) 213 elif b == "2": 214 student_new.sort(key=lambda x: float(x['shuxue']), reverse=a) 215 elif b == "3": 216 student_new.sort(key=lambda x: float(x['yingyu']), reverse=a) 217 else: 218 student_new.sort(key=lambda x: float(x['yuwen']) + float(x['shuxue']) + float(x['yingyu']), reverse=a) 219 if student_new: 220 printData(student_new) 221 222 223def total(): 224 student_new = [] 225 if os.path.exists(filename): 226 # 打开文件,读取数据 227 with open(filename, 'r') as file: 228 studentlist = file.readlines() # 字符串 229 if studentlist: 230 print("一共有%d名学生" % len(studentlist)) 231 else: 232 print("没有录入学生") 233 else: 234 print("未找到文件") 235 236 237def show(): # 打开文件读取数据 238 student_new = [] 239 if os.path.exists(filename): # 判断出文件是否存在 240 # 打开文件,读取数据 241 with open(filename, 'r') as file: # 将filename中的东西读到file中 242 studentlist = file.readlines() # 将file中的数据一行一行地读到sdentlist中字符串 243 # 将字符串转成dict存到列表中 244 for list in studentlist: 245 student_new.append(eval(list)) # 246 if student_new: # 247 printData(student_new) 248 249 250# 注意这个函数可以用来计算语数外的总分,还可绘图,绘图我已经注释掉了 251def tongji(): 252 sum_chinese = 0 253 sum_math = 0 254 sum_english = 0 255 if os.path.exists(filename): # 判断出文件是否存在 256 # 打开文件,读取数据 257 with open(filename, 'r') as file: # 将filename中的东西读到file中 258 studentlist = file.readlines() # 将file中的数据一行一行地读到sdentlist中字符串 259 # 将字符串转成dict存到列表中 260 for list in studentlist: 261 d = {} 262 d = dict(eval(list)) 263 sum_chinese += d['yuwen'] 264 sum_math += d['shuxue'] 265 sum_english += d['yingyu'] 266 print("语文总分为:", sum_chinese, "数学总分为:", sum_math, "英语总分为:", sum_english) 267 sum = sum_chinese + sum_math + sum_english 268 269 labels = 'Chinese', 'math', 'English' # 自定义标签 270 sizes = [sum_chinese / sum, sum_math / sum, sum_english / sum] # 每个标签占多大 271 explode = (0.05, 0.05, 0.05) # 将某部分爆炸出来 272 #plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=90) 273 # autopct,圆里面的文本格式,%1.1f%%表示小数有1位,整数有一位的浮点数 274 # shadow,饼是否有阴影 275 # startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看 276 #plt.axis('equal') # 设置x,y轴刻度一致,这样饼图才能是圆的 277 #plt.show() 278 279 280def printData(student_new): # 281 s = "{:^12}{:^13}\t{:^7}{:^7}\t{:^7}\t{:^7}" 282 print(s.format("ID", "名字", "语文", "数学", "英语", "总成绩")) 283 for info in student_new: 284 y = "{:^6}{:^13}\t{:^8}{:^8}\t{:^8}\t{:^10}" 285 print(y.format(info.get('id'), 286 str(info.get('name')), 287 str(info.get('yuwen')), 288 str(info.get('shuxue')), 289 str(info.get('yingyu')), 290 str(float(info.get('yuwen')) + float(info.get('shuxue')) + float(info.get('yingyu'))))) 291 292 293if __name__ == '__main__': # 程序入口 294 295 def showMessage(): 296 print(" ********************************") 297 print("* 欢迎使用学生成绩管理系统 *") 298 print('* ---新建用户请按1--- *') 299 print('* ---登录帐号请按2--- *') 300 print('* ---退出程序请按0--- *') 301 print("********************************") 302 303 304 def newuser(): 305 studentlist = [] 306 while True: 307 myname = input("请输入新建用户名:") 308 user[myname] = input('请输入新建密码:') 309 student = {'myname': myname, 'user[myname]': user[myname]} # 准备账户密码的格式 310 studentlist.append(student) # 录入一个账户密码信息(字典)添加到列表中 311 312 # 保存文件 313 student_txt = open(filenamedl, 'a', encoding='utf-8') # "a"追加 314 # 将本次添加的账户信息全部放入到文件中 315 for s in studentlist: # 遍历列表 316 student_txt.write(str(s) + "\n") # 写入一行数据 #str表示将列表转成字符串 317 student_txt.close() # 关闭文件对象 318 print("注册成功,赶紧登录试试吧") 319 break 320 321 322 def olderuser(): 323 studentlist = [] 324 list = [] 325 while True: 326 inname = input('请输入登录用户名:') 327 inpassword = input('请输入登录密码:') 328 if os.path.exists(filenamedl): # 判断文件是否存在 329 with open(filenamedl, 'r', encoding='utf-8') as file3: 330 studentlist = file3.readlines() 331 for i in studentlist: 332 d = dict(eval(i)) 333 list.append(d) 334 for j in list: 335 if j['myname'] == inname and j['user[myname]'] == inpassword: 336 print("登陆中......") 337 time.sleep(2) 338 main() 339 print("账户或密码错误") 340 else: 341 print("未创建账户") 342 break 343 344 345 user = {} 346 studentlist = [] 347 while True: 348 showMessage() 349 myIn = input('---请输入指令代码:') 350 if myIn in '1': 351 newuser() 352 353 elif myIn in '2': 354 olderuser() 355 356 elif myIn in '0': 357 print('程序已退出') 358 break 359 else: 360 print('你输入的指令有误,重新输入。') 361 continue 362 363# 364# # 1.拥有"安保系统":密码登录 365# # 2:一·id限制输入11位(id重复?) 二·姓名不能为空且里面没有数字 三·语文数学英语成绩不能小于0,不能大于100 366# # 3.提高代码利用率:因为这段代码需要反复出现,所以如果我们要提高代码利用率,我们将提取相同代码,放入新方法,因为printData随着student_new改变而改变,故而把student_new当作参数 367# # 4:统计图:利用Anaconda绘制统计图使数据更直观 368# 369# # id重复 370# from tkinter import * 371# import random 372# #定义函数,功能为生成有大写字母、小写字母、数字组成的6位随机验证码 373
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

Python3正则表达式

在Python中使用正则表达式Python语言通过标准库中的re模块(importre)支持正则表达式。使用match方法匹配字符串匹配字符串也就是设定一个文本模式,然后判断另外一个字符串是否符合这个文本模式。importre

Python 学生管理

原文链接: Python学生管理(https://my.oschina.net/ahaoboy/blog/1526102)python3练手 codingutf8学生类classStu:三个字段id字符串,name字符串,score小数def__init__(sel

4cast

4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页: