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”文件越大,初始化时所耗时间越长。
附几张文件中的图:
Python学习——实现文件交互的学生管理系统的更多相关文章
- python学习9—文件基本操作与高级操作
python学习9—文件基本操作与高级操作 1. 文件基本操作 打开文件,获得文件句柄:f = open('filename',encoding='utf-8'),open会查询操作系统的编码方式,并 ...
- python学习总结---文件操作
# 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...
- python学习二(文件与异常)
Python中使用open BIF与文件交互,与for语句结合使用,一次读取一行 读取文件sketch.txt,文件内容如下: Man: Ah! (taking out his wallet and ...
- [Python学习笔记]文件的读取写入
文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...
- Python学习--13 文件I/O
Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系 ...
- Python学习_06_文件、IO
文件对象 python中的文件操作和c语言比较类似,包括一些缓冲.偏移量的方式. 文件对象可以通过open().file()两个内建方法创建,两个方法并没有什么不同,使用方法和c语言中的fopen() ...
- python学习笔记:文件操作和集合(转)
转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...
- python学习——大文件分割与合并
在平常的生活中,我们会遇到下面这样的情况: 你下载了一个比较大型的游戏(假设有10G),现在想跟你的同学一起玩,你需要把这个游戏拷贝给他. 然后现在有一个问题是文件太大(我们不考虑你有移动硬盘什么的情 ...
- 03 python学习笔记-文件操作(三)
本文内容主要包括以下方面: 1. 文件操作基本认识2. 只读(r, rb)3. 只写(w, wb)4. 追加(a, ab)5. r+读写6. w+写读7. a+写读(追加写读)8. 文件的修改 一.文 ...
随机推荐
- CTO 说了,如果发现谁用 kill -9 关闭程序就开除
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 来源:blog.csdn.net/qq_33220089 正文 kil ...
- Docker的三种网络代理配置
开源Linux 长按二维码加关注~ 上一篇:IPv6技术白皮书(附PDF下载) 有时因为网络原因,比如公司NAT,或其它啥的,需要使用代理.Docker的代理配置,略显复杂,因为有三种场景.但基本原理 ...
- SSH 证书登录教程
开源Linux 专注分享开源技术知识 SSH 是服务器登录工具,提供密码登录和密钥登录. 但是,SSH 还有第三种登录方法,那就是证书登录.很多情况下,它是更合理.更安全的登录方法,本文就介绍这种登录 ...
- .Net Core 依赖注入(IOC) 一些简单的使用技巧
原文链接:https://www.cnblogs.com/ysmc/p/16240534.html .Net Core 在使用IOC后,我们不必再浪费精力在管理实例的生命周期上,交给IOC代替我们管理 ...
- 超全面!1.5w字总结50个Java经典基础面试题(已根据知识点分类)
大家好,我是fancy. 在面试中将基础问题回答好就是成功的一半. 我总结了50道经典的Java基础面试题,里面包含面试要回答的知识重点,并且我根据知识类型进行了分类,可以说非常全面了. 小伙伴们点赞 ...
- 那些年你啃过的ConcurrentHashMap
前言 我是fancy,一个年纪轻轻bug量就累计到3200个的程序员,同事们都夸我一个人养活了整个测试组. 最近迷上了并发编程.并发这玩意怎么说呢,就是你平时工作用不到,一用就用在面试上.这不,又卷起 ...
- mysql5.7介绍和安装
环境准备: 1.关闭防火墙和selinux systemctl stop firewalldsystemctl stop SElinux 2. 如果安装过mariadb需要停止且卸载服务 system ...
- SylixOS——虚拟机网络配置
网络配置 点击设置按钮 新建虚拟网络适配器 输入IP地址(注意:IP地址必须和SylixOS在同一个子网内) 点击确定等待,虚拟网络适配器建立完成后效果如下(多了一个名为"以太网2" ...
- Flink整合面向用户的数据流SDKs/API(Flink关于弃用Dataset API的论述)
动机 Flink提供了三种主要的sdk/API来编写程序:Table API/SQL.DataStream API和DataSet API.我们认为这个API太多了,建议弃用DataSet API,而 ...
- net core天马行空系列-可用于依赖注入的,数据库表和c#实体类互相转换的接口实现
1.前言 hi,大家好,我是三合.作为一名程序猿,日常开发中,我们在接到需求以后,一般都会先构思一个模型,然后根据模型写实体类,写完实体类后在数据库里建表,接着进行增删改查, 也有第二种情况,就是有些 ...