学生信息管理系统2.0

# 学生管理系统
import os
#同一个类可以生成无数个对象,这些对象来源于同一个类的属性和方法,当一个对象的方法进行调用的时候,
#对象会将自身作为第一个参数传递到self,接收到这个参数,python就知道是那一个对象调用方法了
#定义学生类
#类写完之后就变成了对象
class Student:
    #__init__(self) 构造方法:只要实例化一个对象的时候,就会在对象被创建中调用,这些参数会自动的传递到init方法中。

    def __init__(self,id,name,age,score):
        self.id = id
        self.name = name
        self.age = age  
        self.score = score
    def __str__(self):  #如果要把一个类的实例变成 str,就需要实现特殊方法__str__()
        #msg = "{'id':" + "'"+self.id +"'"+ ",'name':" + "'" +self.name + "'" + ",'age':" + "'" + self.age+"'}"
        msg = "学生信息:id=" + self.id + ",name=" + self.name + ",age=" + self.age + ",score=" + self.score
        return msg
    # array 是数组,可以存放一组相同类型的数字。这里都存放对应的字符串类型。
    #Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式
    #获取id
    def getId(self):
        return self.id
    #获取name
    def getName(self):
        return self.name
    #获取age
    def getAge(self):
        return self.age
    #获取Score
    def getScore(self):
        return self.score
    #设置name
    def setName(self,name):
        self.name = name#因为python的变量不需要定义,在方法里面不加self会当成普通变量
    #设置age
    def setAge(self,age):
        self.age = age
    #设置分数
    def setScore(self,score):
        self.score = score


# 添加学生信息
def addStu(array):
    "添加学生信息"
    print("无输入可按回车结束录入!")
    while True:
        id = input("请输入学生学号:")
        if not id:
            break

        try:
            for i in range(len(array)):# 生成[array[0],array[1]......array[len(array)-1]]
                stu2 = array[i]
                if id == stu2.getId():
                    print("该学号已存在,不能重复添加")
                    return
            name = input("请输入学生姓名:")
            age = input("请输入学生年龄:")
            score = input("请输入学生成绩:")
            stu = Student(id,name,age,score) # 把单个学生添加到总列表中
            array.append(stu)
            print("添加成功:",stu)
        except:
            print("输入无效,不是整形数值....重新录入信息")
            continue
    print("学生信息录入完毕!!!")   


# 删除学生信息
def delStu(array):
    "删除学生信息"
    id = input("请输入要删除的学生学号:")
    for i in range(len(array)):
        stu2 = array[i]
        if id == stu2.getId():
           del array[i]
           return 0
    return 1

# 修改学生信息
def updateStu(array):
    "修改学生信息"
    id = input("请输入要修改的学生学号:")
    for i in range(len(array)):
        stu2 = array[i]
        if id == stu2.getId():
            name = input("请输入要修改的学生姓名:")
            age = input("请输入要修改的学生年龄:")
            score = input("请输入要修改的学生分数:")
            stu2.setName(name)
            stu2.setAge(age)
            stu2.setScore(score)
            print("修改成功")
            return
    print("找不到该学号,没法修改")


# 查询学生信息
def selectStu(array):
    "查询学生信息"
    id = input("请输入要查询的学生学号:")
    try:
        for i in range(len(array)):
            stu2 =array[i]
            if id == stu2.getId():
                print("查询到的学生信息:",stu2)
                return
    except:
        print("查询失败,查不到该学生信息")
        return

#打印学生信息
def printStuInfo(array):
    for i in range(len(array)):
        stu = array[i]
        print(stu)

def meun():
    menu_info = '''+----------------------+
| 1 )添加学生信息(输入名字时为空时结束添加)  
| 2 )删除学生信息                    
| 3 )修改学生信息                                                     
| 4 )查询学生信息                          
| 5 )按学生成绩高-低显示学生信息           
| 6 )按学生成绩低-高显示学生信息                     
| 7 )保存学生信息到文件(students.txt)      
| 8 )从文件中读取数据(students.txt)      
| 9 ) 退出系统                
 ---------------------
'''
    print(menu_info)



def save_info(array):
    try:
        filename = 'write_data.txt' #文件名
        with open(filename, 'w') as f:
            for i in range(len(array)):
                if i == len(array)-1 :
                    stu =array[i]
                    f.write(stu.getId() + ","+stu.getName()+","+stu.getAge()+","+stu.getScore())
                else:
                    stu = array[i]
                    f.write(stu.getId() + ","+stu.getName()+","+stu.getAge() +","+stu.getScore() +"\n")
            f.close()   
    except Exception as e:
        file = open(filename, "x")    # 文件不存在,创建文件并打开

def read_info(array):
    try:
        filename = 'write_data.txt' #文件名
        f=open(filename,"r")
        content = f.readlines()# 整行读取
        print("文件内容:",content)
        array.extend(content) #用新列表拓展原来的列表
        array_temp = [] # 临时变量
        for i in range(len(array)): # 遍历转成学生对象
            print("第"+str(i)+"行:", array[i])
            if isinstance(array[i], str):  # 判断是否为字符串
            #str.split(str1,num):以str1为界限分裂num次,若无参数则为空格
                strArray = str(array[i]).split(",")#将一个字符串分割为子字符串,然后将结果作为字符串数组返回
                id = strArray[0]
                name = strArray[1]
                age = strArray[2]
                score = strArray[3].replace("\n","") #去掉换行符
                student = Student(id,name,age,score)#创建学生对象
                array_temp.append(student)
        del array #马上删除array
        array = array_temp #将新的赋值给原来的
    except:
        print("文件不存在")
        return

def main():
    flag = 0
    array = [] #定义list用于保存学生信息
    while flag != 1:
        meun()
        step = input("请输入你的操作:")
        step = int(step)
        if step == 1:
            addStu(array)
        #print("学生信息打印:", array)
        elif step == 2:
            num = delStu(array)
            if num == 0:
                print("删除成功")
            elif num == 1 or num == 2:
                print("删除失败")
            printStuInfo(array)
        elif step == 3:
            updateStu(array)
            printStuInfo(array)
        elif step == 4:
            selectStu(array)
        elif step == 5:
            printStuInfo(array)
        elif step == 6:
            printStuInfo(array)
        elif step == 7:
            save_info(array)
        elif step == 8:
            read_info(array)
        elif step == 9:
            break
        else:
            print("输入指令错误,请重新输入!!")
    print("退出系统成功")
main()

转载于:https://www.cnblogs.com/klstime/p/11571749.html

你可能感兴趣的:(学生信息管理系统2.0)