-
Python学习——实现文件交互的学生管理系统
第一次用写博客,从前一直在博客园上学习,现在也来这里分享一下我的学习成果。
就开门见山的说吧。首先做了一个流程图,可能也不符合啥规范,就当草稿用,将就着看,明白个设计思路就行。
1.首先系统初始化,定义时间戳A,定义一些变量。再设置一个默认账户,这里账户用字典的形式表示。
1 import time 2 #设置起始时间戳 3 start = time.perf_counter() 4 #学生信息总类"次数":listtime = lt 5 lt = 3 6 #学生人数为:sum 7 sum = 0 8 #循环介质置零:i 9 i = 0 10 #默认账户 11 defaultuser = {'name':'admin', 'passwd':'passwd'}
2.然后读入默认学生信息default文件,定义一众函数。
1 #检索现有的学生内容: 2 try: 3 file=open('default.txt',"r", encoding = 'utf-8') 4 except FileNotFoundError: 5 print("The Student Managerment Is Empty Now") 6 else: 7 contents=file.readlines() 8 #将默认学生信息导入至学生列表: 9 student = [] 10 for content in contents: 11 student.append(content[3:-1]) 12 tempsum = int(len(student)/lt) 13 #用户登录代码 14 def login(shutdown): 15 with open("users.txt", 'r+', encoding='utf-8') as f: 16 getinformation = f.readlines() 17 tempuserslist = [] 18 for count in range(3): 19 name = input('请输入用户名: ') 20 password = input('请输入密码: ') 21 for getit in getinformation: 22 tempuserslist.append(getit) 23 for gettemplistline in tempuserslist: 24 users = eval(gettemplistline) 25 if (name == users['name'] and password == users['passwd']) or (name == defaultuser['name'] and password == defaultuser['passwd']): 26 print( '登录成功!') 27 shutdown = 1 28 return shutdown 29 if (not(name == users['name'] and password == users['passwd']) or (name == defaultuser['name'] and password == defaultuser['passwd'])): 30 lost = 2 - count 31 if count < 2: 32 print('用户名或密码错误,还有{:}次机会'.format(lost)) 33 else: 34 alertexit = '输入错误次数过多,程序终止' 35 print(alertexit) 36 shutdown = 0 37 return shutdown 38 f.close() 39 #选择输出文本代码 40 def chooseoutput (name, tempcondition): 41 for i in range(lt * sum): 42 if tempcondition in student[i]: 43 with open (name, "a+", encoding = 'utf-8') as f: 44 p = ('姓名:' + student[i - 1] + "\n" + '性别:' + student[i] + "\n" + '学号:' + student[i + 1]) 45 f.writelines(p + "\n") 46 pass 47 f.close() 48 #全输出文本代码 49 def alloutput(name): 50 with open (name, "a+", encoding = 'utf-8') as f: 51 for i in range(len(student)): 52 if i % lt == 0: 53 p = ('姓名:' + student[i] + "\n" + '性别:' + student[i + 1] + "\n" + '学号:' + student[i + 2]) 54 f.writelines(p + "\n") 55 pass 56 else: 57 continue 58 f.close() 59 #清空文本代码 60 def coveroutput(): 61 with open ('default.txt', "a+", encoding = 'utf-8') as f: 62 f.seek(0) 63 f.truncate() 64 pass 65 f.close()
3.在进度条代码中设置时间戳B
1 #进度条代码: 2 scale = 50 3 print('加载中'.center(scale//2, '-')) 4 for i in range(scale+1): 5 a = '*' * i 6 b = '.' * (scale - i) 7 c = (i/scale)*100 8 dur = time.perf_counter() - start 9 print('\r{:^3.0f}%[{}->{}]{:.2f}s'.format(c,a,b,dur),end='') 10 time.sleep(0.1) 11 print('\n'+'加载完成'.center(scale//2,'-'))
4.由用户选择注册或登录。注册后强制登录,由于用户登录要用两遍起,所以登录代码放在了上面函数里了。而且因为登录代码的for循环嵌套的多,所以登陆失败过多无法单纯地用break退出系统,所以在登录函数中设置了一个shutdown参数,用来退出系统。
1 #首页: 2 print('1.注册', '2.登录') 3 choosefirst = input('请选择:') 4 #用户注册 5 if choosefirst == '1': 6 with open("users.txt", 'r+', encoding='utf-8') as f: 7 information = f.readlines() 8 for it in information: 9 it = it.strip() 10 users = eval(it) 11 for i in range(4): 12 name = input('请输入用户名:') 13 passwd = input('请输入密码:') 14 again_passwd = input('请再次输入密码:') 15 if len(name.strip()) != 0 and name != users['name'] and len(passwd.strip()) != 0 and passwd == again_passwd: 16 users = {'name': name, 'passwd': passwd} 17 f.writelines(str(users) + '\n') 18 print('恭喜,注册成功') 19 f.close() 20 break 21 elif len(name.strip()) == 0: 22 print('用户名不能为空,请重新输入。还可输入%d次' %(3-i)) 23 elif name == users['name']: 24 print('用户名重复,请重新输入。还可输入%d次' %(3-i)) 25 elif len(passwd.strip()) == 0: 26 print('密码不能为空,请重新输入。还可输入%d次' %(3-i)) 27 elif again_passwd != passwd: 28 print('两次输入的密码不一致,请重新输入。还可输入%d次' %(3-i)) 29 shutdown = login(1) #注册之后强制登录 30 #用户登录 31 elif choosefirst == '2': 32 shutdown = login(1)
5.下面就是主菜单用户可以选择地各种功能了:初始录入、增添学生、删除学生、更改信息、筛选学生、输出所有学生信息、退出系统、查询版本。
1 #菜单页: 2 while(1): 3 if shutdown == 0: 4 break 5 line1 = ['学生管理系统'] 6 print(line1) 7 line2 = ['0.初始录入' , '1.增添学生' , '2.删除学生 ', '3.更改信息 ', '4.筛选学生 ', '5.输出所有学生信息', '6.退出系统', '7.查询版本'] 8 print(line2) 9 #用户选择代码 10 choose = input( '请选择你需要的功能:') 11 #0.初始学生录入代码 12 if choose == '0': 13 alert0 = input( '选择初始录入会清空现有学生数据,你是否要继续:') 14 if alert0 == '是': 15 tempsum = 0 16 student = [] 17 sum = int( input( '请输入学生人数:')) 18 for i in range(sum): 19 name=input('请输入姓名:') 20 student.append(name) 21 sex=input('请输入性别:') 22 student.append(sex) 23 stuid=input('请输入学号:') 24 student.append(stuid) 25 if len(student) == lt * sum: 26 print('初始录入学生信息成功') 27 m =input( '是否显示当前学生信息:') 28 if m == '是': 29 print(student) 30 else: 31 print('信息录入失败') 32 #1.增添学生代码 33 elif choose == '1': 34 newsum = int( input( '请输入新增的学生人数:')) 35 for i in range(newsum): 36 name=input('请输入姓名:') 37 student.append(name) 38 sex=input('请输入性别:') 39 student.append(sex) 40 stuid=input('请输入学号:') 41 student.append(stuid) 42 #此时学生数为初始录入学生数+新增学生数+留存学生数 43 sum = sum + newsum + tempsum 44 if len(student) == lt * sum: 45 print('增添学生信息成功') 46 m =input( '是否显示当前学生信息:') 47 if m == '是': 48 print(student) 49 else: 50 print('信息录入失败') 51 #2.删除学生代码 52 elif choose == '2': 53 condition = input('请输入要删除学生的姓名:') 54 for i in range(lt * sum): 55 if condition == student[i]: 56 del student[i:i + lt] 57 sum = sum - 1 58 break 59 if len(student) == lt * sum: 60 print('删除学生信息成功') 61 m =input( '是否显示当前学生信息:') 62 if m == '是': 63 print(student) 64 else: 65 print('信息删除失败') 66 #3.更改学生信息代码 67 elif choose == '3': 68 if sum == 0: 69 sum = tempsum 70 condition = input('请输入要修改的学生姓名:') 71 choosechange = input('请输入要修改的内容:【1.性别 2.学号】:') 72 if choosechange == '1': 73 tempsex = input('请输入修改后的性别:') 74 for i in range(lt * sum): 75 if student[i] == condition: 76 student[i + 1] = tempsex 77 elif choosechange == '2': 78 tempstuid = input('请输入修改后的学号:') 79 for i in range(lt * sum): 80 if student[i] == condition: 81 student[i + 2] = tempstuid 82 if condition in student: 83 print('更改学生信息成功') 84 else: 85 print('更改学生信息失败') 86 m = input( '是否显示当前学生信息:') 87 if m == '是': 88 print(student) 89 #4.筛选学生信息代码 90 elif choose == '4': 91 if sum == 0: 92 sum = tempsum 93 choosename = input('请输入文件名:') 94 choosesex = input( '请输入筛选性别:') 95 chooseoutput(choosename,choosesex) 96 print('已输出筛选的学生信息') 97 #5.全输出 98 elif choose == '5': 99 choosename = input('请输入文件名:') 100 alloutput(choosename) 101 print('已全部输出') 102 #6.系统退出 103 elif choose == '6': 104 alert = input('是否保存修改:') 105 if alert == '是': 106 coveroutput() 107 alloutput('default.txt') 108 print('系统退出') 109 break 110 #7.查询版本 111 elif choose == '7': 112 print('version-5.3')
最后列举几点说明:
1.此学生管理系统内置一个账户在程序内,可以直接使用:
用户名:admin 密码:passwd
2.除了上面的程序内置账户,在账户保存文档“users”中也预先存放了一个账户:
用户名:guest 密码:passwd
3.在学生信息保存文档 “default”中预存了默认信息
4.此学生管理系统有防误操作机制,在正常退出系统前无论做了什么操作,即便是“初始化学生信息(清空了现有学生信息)”,只要退出系统时不保存,文件信息就不会被篡改。相反地,一旦在正常退出系统时保存了文件,下次进入系统后,系统信息就会更改为上次保存的内容。
5.系统运行时所需保存的文件名都需要手动添加“.txt”后缀。
6.文本进度条的进度在一个基础时间上还与学生信息大小有关,即“default”文件越大,初始化时所耗时间越长。
附几张文件中的图: