在学习完Python的基本语法和文件的基本操作之后,用一个学生信息管理系统来练练手。这个系统可以对学生信息进行增删改查。学生信息就是姓名、QQ号、微信号,用面向对象的思想来编程。
编程思路及编码
数据的存取
使用文本文件来存储学生信息。将每个学生的信息用一个字典来包装,所有学生的数据字典放到一个list中,最后用json将数据存到文件中,实现系统数据的持久化。json的知识我在另一篇中做了入门讲解:Python中的json入门。
面向对象
创建一个student类,将增删查改四个函数封装起来。还有显示主界面的函数、显示所有学生信息的函数、重写文件的函数等。
增加一个学生
将文件以追加的形式打开,然后从控制台接收输入的学生信息,通过json的loads和write函数将数据追加进文件中。函数如下:
def add(self):
name=input("姓名:")
qq=input("QQ号:")
weixin=input("微信号:")
data={"name":name,"qq":qq,"微信":weixin}
with open(self.filename, "a+") as file:
d = json.dumps(data)
file.write(d + '\n')
print("添加成功!")
删除一个学生
将文件中的数据先全部读取出来并解析,放到一个列表中。接收输入的要删除的学生姓名,在列表中找到对应的一项,通过下标和del将这项删掉,最后将列表重写进文件中。函数如下:
def drop(self):
list=self.load()
name=input("请输入要删除的学生姓名:")
i=-1
for temp in list:
i+=1
if name==temp["name"]:
del list[i]
self.save(list)
print("删除成功!")
break
查询所有学生
将文件中的所有数据读出来并解析,放到一个列表中输出。
def load(self):
risk_date=[]
with open("tt.json", "r") as file:
risk_temp = file.read().split('\n')[:-1]
for x in risk_temp:
json_x = json.loads(x)
risk_date.append(json_x)
file.close()
return risk_date
修改某个学生的信息
将文件中的数据先全部读取出来并解析,放到一个列表中。接收输入的要修改的学生姓名和信息,在列表中找到对应姓名的一项,通过下标将列表中的这一项改掉,最后将列表重写进文件中。
def modify(self):
list=self.load()
name=input("请输入要修改的学生姓名:")
qq=input("请输入QQ号:")
weixin=input("请输入微信号:")
i=-1
for temp in list:
i+=1
if name==temp["name"]:
break
list[i] = {"name": name, "qq": qq, "微信": weixin}
self.save(list)
print("修改成功!")
源代码
import json
import os
class student:
filename = "tt.json"
def add(self):
name=input("姓名:")
qq=input("QQ号:")
weixin=input("微信号:")
data={"name":name,"qq":qq,"微信":weixin}
with open(self.filename, "a+") as file:
d = json.dumps(data)
file.write(d + '\n')
print("添加成功!")
def save(self,list):
with open(self.filename, "w+") as file:
for dic in list:
d = json.dumps(dic)
file.write(d + '\n')
file.close()
def load(self):
risk_date=[]
with open("tt.json", "r") as file:
risk_temp = file.read().split('\n')[:-1]
for x in risk_temp:
json_x = json.loads(x)
risk_date.append(json_x)
file.close()
return risk_date
def allStu(self):
list=self.load()
mat = "{:20}\t{:28}\t{:32}"
for i in list:
print("姓名:",i["name"],"\t\tQQ号:",i["qq"],"\t\t微信:",i["微信"])
def drop(self):
list=self.load()
name=input("请输入要删除的学生姓名:")
i=-1
for temp in list:
i+=1
if name==temp["name"]:
del list[i]
self.save(list)
print("删除成功!")
break
def modify(self):
list=self.load()
name=input("请输入要修改的学生姓名:")
qq=input("请输入QQ号:")
weixin=input("请输入微信号:")
i=-1
for temp in list:
i+=1
if name==temp["name"]:
break
list[i] = {"name": name, "qq": qq, "微信": weixin}
self.save(list)
print("修改成功!")
def start_up(self):
while True:
list=self.load()
print("==========================学生管理系统===========================")
print()
print(f" 共有{list.__len__()}个学生 ")
print()
print("==============================操作==============================")
print("1、添加学生 2、删除学生 3、修改学生信息 4、查看所有学生 5、退出")
op=input("请输入操作对应的号码:")
if(op=="1"):
self.add()
elif op=="2":
self.drop()
elif op=="3":
self.modify()
elif op=="4":
print()
print("所有学生信息:")
self.allStu()
print()
print()
elif op=="5":
os._exit(0)
s=student()
s.start_up()