学生信息管理-python

学生信息管理系统

废话不多说,直接上代码
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)

具体的代码执行效果如图
学生信息管理-python