python实现学生管理系统

# -*-coding:utf8-*-
# 学生管理系统完整版
# 学生信息管理项目,要求带操作界面,并完成每项操作:
# +----------------------+
# | 1)添加学生信息             |
# | 2)显示所有学生的信息          |
# | 3)删除学生信息             |
# | 4)修改学生信息             |
# | 5)按学生成绩高-低显示学生信息     |
# | 6)按学生成绩低-高显示学生信息     |
# | 7)按学生年龄高-低显示学生信息     |
# | 8)按学生年龄低-高显示学生信息     |
# | 9)保存学生信息到文件(students.txt)      |
# | 10)从文件中读取数据(students.txt)      |
# | 退出:其他任意按键<回车>                 |
# +----------------------+
def menu():
    menu_info = '''+----------------------+
| 1)添加学生信息                           |
| 2)显示所有学生的信息                     |
| 3)删除学生信息                           |
| 4)修改学生信息                           |
| 5)按学生成绩高-低显示学生信息           |
| 6)按学生成绩低-高显示学生信息           |
| 7)按学生年龄高-低显示学生信息           |
| 8)按学生年龄低-高显示学生信息           |
| 9)保存学生信息到文件(students.txt)      |
| 10)从文件中读取数据(students.txt)      |
| 退出:其他任意按键<回车>                 |
+----------------------+
'''
    print(menu_info)


# 以下两个函数用于sorted排序,key的表达式函数。
def get_age(*l):
    for x in l:
        return x.get('age')  # get() 函数返回指定键的值,如果值不在字典中返回默认值。


def get_score(*l):
    for x in l:
        return x.get('score')


# 1)添加学生信息
def addstudentinfo():
    l = []
    while True:
        n = input('请输入名字:')
        if not n:  # 名字为空,跳出循环
            break
        try:
            a = int(input('请输入年龄:'))
            s = int(input('请输入成绩:'))
        except:
            print('输入无效,不是整型数值,重新输入信息')
            continue
        info = {'name': n, 'age': a, 'score': s}
        l.append(info)
    print('学生信息录入完毕')
    print(l)
    return l


# 2)显示所有学生信息
def showstudentinfo(studentinfo):
    if not studentinfo:
        print('无数据信息')
        return
    print('名字'.center(8),'年龄'.center(4),'成绩'.center(4))
    for info in studentinfo:
        print(info.get('name').center(10), str(info.get('age')).center(4), str(info.get('score')).center(4))

#3)删除学生信息
def delstudentinfo(studentinfo):
    delname=input('请输入删除的学生姓名:')
    for info in studentinfo:
        if delname==info.get('name'):#get() 函数返回指定键的值
            return info
    raise IndexError('学生信息不匹配没有找到%s'%delname)
#4)修改学生信息
def modifystudentinfo(studentinfo):
    modifyname=input('请输入要修改的姓名:')
    for info in studentinfo:
        if modifyname==info.get('name'):
            print(info)
            studentinfo.remove(info)
            name = input('请输入要修改后姓名:')
            a=int(input('请输入年龄:'))
            s=int(input('请输入成绩:'))
            info={'name':name,'age':a,'score':s}
            studentinfo.append(info)
            return info
        raise IndexError('学生信息不匹配没有找到%s' % modifyname)

#5)按学生成绩高-低显示学生信息
def scorereduce(studentinfo):
    print('按学生成绩高-低显示:')
    mit=sorted(studentinfo,key=lambda x:x['score'],reverse=True)
    showstudentinfo(mit)

#6)按学生成绩低-高显示学生信息
def scorerise(studentinfo):
    print('按学生成绩低-高显示:')
    mit=sorted(studentinfo,key=lambda x:x['score'])
    showstudentinfo(mit)

#7)按学生年龄高-低显示学生信息
def agereduce(studentinfo):
    print('按学生年龄高-低显示学生信息')
    mit=sorted(studentinfo,key=lambda x:x['age'],reverse=True)
    showstudentinfo(mit)

#8)按学生年龄低-高显示学生信息
def agerise(studentinfo):
    print('按学生年龄低-高显示学生信息')
    mit=sorted(studentinfo,lambda x:x['age'])
    showstudentinfo(mit)

#9)保存学生信息到文件(student.txt)
def saveinfo(studentinfo):
    try:
        studenttxt=open('student.txt','w')#以写模式打开,并清空文件内容
    except Exception as e:
        studenttxt=open('student.txt','x')#文件不存在,创建文件并打开
    for info in studentinfo:
        studenttxt.write(str(info)+'\n')
        print('保存成功')
    studenttxt.close()

#10)从文件中读取数据(student.txt)
def readinfo():
    oldinfo=[]
    try:
        studenttxt=open('student.txt')
    except:
        print('暂未保存数据信息')
        return
    while True:
        info=studenttxt.readline()
        if not info:
            break
        print('读取的数据信息',info)
        info=info.rstrip()#掉换行符
        print('rstrip', info)
        info=info[1:-1]#去掉{}
        print('info[1:-1]',info)
        studentdict={}#单个学生字典信息
        for x in info.split(','):#以,为间隔分拆分
            print('x',x)
            keyvalue=[]#开辟空间,key_value[0]存key,key_value[0]存value
            for k in x.split(':'):#以:为间隔拆分
                k=k.strip()#去掉首尾空字符
                print('key',k)
                if k[0]==k[-1] and len(k)>2:#判断是字符串还是整数
                    keyvalue.append(k[1:-1])#去掉首尾'
                    print('str',keyvalue)
                else:
                    keyvalue.append(int(k))
                    print('keyvalue',keyvalue)
                    print('keyvalue[0]',keyvalue[0])
                    print('keyvalue[1]',keyvalue[1])
            studentdict[keyvalue[0]]=keyvalue[1]#学生信息添加
            print('studentdict',studentdict)
        oldinfo.append(studentdict)#所有学生信息汇总
        print('读取成功')
        studenttxt.close()
        return oldinfo

def main():
    studentinf=[]
    while True:
        menu()
        number=input('请输入选项:')
        if number=='1':
            studentinfo=addstudentinfo()
        elif number=='2':
            showstudentinfo(studentinfo)
        elif number=='3':
            try:
                studentinfo.remove(delstudentinfo(studentinfo))
            except Exception as e:
                #学生姓名不匹配
                print('学生姓名不匹配')
                #print(e)
        elif number=='4':
            try:
                student=modifystudentinfo(studentinfo)
            except Exception as e:
                print('学生姓名不匹配')
                #print(e)
        elif number=='5':
            scorereduce(studentinfo)
        elif number=='6':
            scorerise(studentinfo)
        elif number=='7':
            agereduce(studentinfo)
        elif number=='8':
            agerise(studentinfo)
        elif number=='9':
            saveinfo(studentinfo)
        elif number=='10':
            studentinfo=readinfo()
        else:
            break
        input('回主菜单')

main()

猜你喜欢

转载自blog.csdn.net/yashijiayou/article/details/92401046