学生信息管理系统
废话不多说,直接上代码
import os
# 定义学生类,其中包含一个学生信息的属性,将学生信息封装成一个字典,方便信息的查找和修改
class Student:
# 将学生信息打包成一个字典
manager = dict()
# 由于字典是可变数据类型,所以学生信息很容易进行封装。
def __init__ (self, number, name, sex, tell):
self.manager['number'] = number
self.manager['name'] = name
self.manager['sex'] = sex
self.manager['tell'] = tell
# 返回一个学生信息的字典类型
def getManager(self):
return self.manager
# 学生信息的存储类,这个我们采用最方便的方法,将学生信息打包,一股脑存入文件中,这个只是练习之用,如果是数据量大的信息,一般采用数据库,这样方便信息的增删改查。
class Io:
# data属性是定义操作的文件,你可以自己的存储路径进行修改
data = "/home/liuyuhong/myProgram/python/python/test/student.data"
# 定义一个列表来存储封装的学生信息的字典,由于列表是可以数据类型,所以操作方便。
content = []
# 初始化文件
def __init__ (self):
if not os.path.exists(self.data):
# 一般情况下使用程序本身创建文件的方法,这里为了图方面,如果这样使用,将会造成windows系统无法使用的情况。
os.system("touch "+self.data)
# 信息的输入
def inputManager(self, content):
self.content = content
i_file = open(self.data, 'w')
i_file.write(str(self.content))
i_file.flush()
i_file.close()
# 信息的输出
def outputManger(self):
if os.path.getsize(self.data) <= 5:
self.content = []
return self.content
else:
o_file = open(self.data, 'r')
self.content = eval(o_file.read())
o_file.close()
return self.content
# 信息操作类,对学生信息进行增删改查
class Print:
content = []
manager = dict()
def __init__ (self):
pass
# 负责操作提醒
def p(self):
print("=====================")
print("# a 添加学生信息 #")
print("# r 删除学生信息 #")
print("# c 修改学生信息 #")
print("# s 查找学生信息 #")
print("# e 退出程序 #")
print("=====================")
# 信息增加
def add(self, content, manager):
self.content = content
self.manager = manager
self.content.append(self.manager)
return self.content
# 信息删除
def rm(self, content):
self.content = content
number = input("请输入你要修改的学生编号:")
# 这里使用的信息匹配的方法是最不可取的方法,因为时间复杂度是O(n^2),这里只探究实现,不探究算法优化的问题。
for stu in self.content:
for st in stu:
if st == number:
del self.content[self.content.index(stu)]
print("删除成功")
return self.content
# 信息修改
def change(self, content):
self.content = content
number = input("请输入你要修改的学生编号:")
for stu in self.content:
for st in stu:
if st == number:
index = self.content.index(stu)
n_name = input("请输入学生姓名:")
n_number = input("输入学生编号:")
n_sex = input("请输入学生性别:")
n_tell = input("请输入学生电话:")
self.content[index]["name"] = n_name
self.content[index]["number"] = n_number
self.content[index]["sex"] = n_sex
self.content[index]["tell"] = n_tell
print("修改成功!")
return self.content
# 信息显示
def show(self, content):
self.content = content
print("编号 -- 姓名 -- 性别 -- 电话号码 -------")
for stu in self.content:
print("%s %s %s %s"%(stu["number"], stu['name'], stu['sex'], stu['tell']))
# 主程序由此开始执行
while True:
# 初始化文件存储
io = Io()
content = io.outputManger()
# 初始化信息操作
printf = Print()
printf.p()
# 定义操作的形式,由于python没有case之类的开关语句,而官方推荐使用if、elif语法,所以这里采用官方的做法。
operation = input("请输入你的操作:")
if operation == 'e':
break
elif operation == 'a':
number = input("输入学生编号:")
name = input("请输入学生姓名:")
sex = input("请输入学生性别:")
tell = input("请输入学生电话:")
# 初始化学生信息
student = Student(number, name, sex, tell)
content = printf.add(content, student.getManager())
io.inputManager(content)
# 为保证数据的及时性,每一次操作都会将数据保存到文件中,然后又会重新读取数据,但是这种做法不可取,一般是将数据一次性输入或者修补完成后再进行数据的保存。
elif operation == 'r':
content = io.outputManger()
content = printf.rm(content)
io.inputManager(content)
elif operation == 'c':
content = io.outputManger()
content = printf.change(content)
io.inputManager(content)
elif operation == 's':
content = io.outputManger()
printf.show(content)
io.inputManager(content)
具体的代码执行效果如图