VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 数据分析 >
  • 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”文件越大,初始化时所耗时间越长。

附几张文件中的图:

 

 

 

 

 


相关教程