Python练习【4】【学生管理系统】

Python练习【4】【学生管理系统】


代码:

## 定义界面列表
stu_interface=['学生管理系统','1.管理员登录','2.学生登录']
admin_login=['管理员操作界面','1.管理员密码修改','2.添加学生的信息','3.删除学生的信息','4.修改学生的信息','5.查询学生的信息','6.列出学生的信息','7.退出系统']
stu_login=['学生操作界面','1.查询个人信息','2.修改信息']
stu_chInfo=['修改个人信息','1.修改年龄','2.修改密码'] 
flag=0  ## 标志位,用于确定当前界面位置 
info_admin={'admin':'admin'}  ## 管理员信息
## 示例学生信息
info_st_ex={
    '000000':
        {
            'name':'tom',
            'sex':'man',
            'age':18,
            'class':'Class1 Grade2',
            'birthday':'2000-1-1',
            'num':'000000',
            'password':'tom'
        }
}
info={}  ##定义空列表用于存放信息
info.update(info_st_ex)  ##将示例信息加入存放数据中方便测试

## 函数:根据数组信息转化为界面
def make_interface(li):
    for i in range(len(li)):
        if i == 0:
            print(li[i].center(44,'*'))
            print((' '*48).center(50,'*'))
        else:
            p=len([j for j in li[i].replace('.','0')if not j.isnumeric()])
            print(li[i].center(48-p,' ').center(50-p,'*'))
    if flag!=0:
        print('输入q返回上一层'.center(41,' ').center(43,'*'))
    print((' '*48).center(50,'*')+'\n'+'*'*50)

## 函数:限制输入指令在正确范围内,不在则返回True
def outofrange(li,cmd):
    if cmd!='q':
        if cmd not in [str(i) for i in range(1,len(li))]:
            input('请输入正确的指令,按下Enter键返回')
            return True

## 函数:利用flag标识返回对应的界面列表
def flag_turn():
    if flag==0:
        return stu_interface
    elif flag==1:
        return admin_login
    elif flag==2:
        return stu_login
    elif flag==3:
        return stu_chInfo

## 函数:用户登入函数
def login(cmd):
    global flag
    name_in=input('管理员账户:'if cmd=='1' else '学生账户:')
    passwd_in=input('密码:')
    if cmd=='1' and name_in=='admin'and passwd_in==info_admin['admin']:
        flag=1
    elif cmd=='2' and name_in in info and passwd_in==info[name_in]['password']:
        flag=2
        global stu_in
        stu_in=name_in
    else:
        print('登入失败,请检查您的用户名和密码是否正确')
        flag=0

## 管理员界面操作函数
def admin(cmd):
    global flag
    if cmd== '1':
        passwd_in=input('请输入当前管理员密码:')
        if passwd_in==info_admin['admin']:
            info_admin['admin']=input('请输入新密码:')
            print('修改成功')
        else:
            print('与当前密码不符,请确认后重试')
    elif cmd== '2':
        print('添加学生信息:'.center(50,'*'))
        info['buf']=copy.copy(info_st_ex['000000'])
        for i in info['buf']:
            if i=='class':
                li=input(i+'(例:2,1表示 Class1 Grade2):').split(',')
                info['buf'][i]='Class'+li[0]+' Grade'+li[1]
            else:
                info['buf'][i]=input(i+':')
        else:
            info[info['buf']['num']]=info['buf']
            info.pop('buf')
            print('添加成功')
    elif cmd== '3':
        print('删除学生信息:'.center(50,'*')+'\n已存在的学生信息:')
        for i in info:
            print('学号:'+i+'\t姓名:'+info[i]['name'])
        pop_in=input('输入学号删除指定信息:')
        if pop_in in info:
            info.pop(pop_in)
            print('删除成功')
        else:
            print('请输入已存在的学生信息(学号):')
    elif cmd== '4':
        print('删除学生信息:'.center(50,'*')+'\n已存在的学生信息:')
        for i in info:
            print('学号:'+i+'\t姓名:'+info[i]['name'])
        mod_in=input('输入学号确定修改对象:')
        if mod_in in info:
            for i,v in info[mod_in].items():
                print(i+':'+v)
            while True:
                mod_info=input('输入要修改的信息选项:输入q退出')
                if mod_info in info[mod_in]:
                    info[mod_in][mod_info]=input('原始信息:'+info[mod_in][mod_info]+'\n输入新信息:')
                    print('修改成功')
                elif mod_info=='q':
                    break
                else:
                    print('信息选项不存在')
        else:
            print('不存在该学生信息')
    elif cmd== '5':
        print('查看学生信息:'.center(50,'*')+'\n已存在的学生信息:')
        for i in info:
            print('学号:'+i+'\t姓名:'+info[i]['name'])
        while True:
            find_in=input('输入学号查看完整信息:输入q退出')
            if find_in in info:
                for i,v in info[find_in].items():
                    print(i+':'+str(v))
            elif find_in=='q':
                break
            else:
                print('该学号不存在')
    elif cmd== '6':
        print('所有学生信息:'.center(50,'*'))
        for i in info:
            for j,k in info[i].items():
                print(j+':'+str(k))
            print('*'*50)
    elif cmd== '7':
        print('欢迎下次登入管理员系统'.center(50,'~'))
        exit()
    if cmd=='q':
        flag=0

## 学生界面操作函数
def stu(cmd):
    global flag
    if cmd!='q':
        cmd=int(cmd)
    else:
        flag=0
    if cmd==1:
        print('查询个人信息'.center(50,'*'))
        for i,v in info[stu_in].items():
            print(i+':'+str(v))
    if cmd==2:
        flag=3

## 学生修改信息函数
def modify_stu(cmd):
   if cmd=='1':
       input('当前年龄:'+str(info[stu_in]['age'])+'\n新年龄:')
   elif cmd=='2':
       if input('请输入当前密码:')==info[stu_in]['password']:
           info[stu_in]['password']=input('请输入新密码:')
           print('修改成功')
       else:
           print('密码错误,请核对后重试')
   elif cmd=='q':
       global flag
       flag=0
   else:
       print('请输入正确的指令')

## 指令输入函数
def cmd_input():
    cmd=input()
    if outofrange(flag_turn(),cmd):
        return 
    if flag==0:
        login(cmd)
    elif flag==1:
        admin(cmd)
    elif flag==2:
        stu(cmd)
    elif flag==3:
        modify_stu(cmd)

## 主函数
while True:
    try:
        make_interface(flag_turn())
        cmd_input()
    except Exception as error:
        print('程序异常')
    finally:
        if input('Enter键继续 输入q退出程序')=='q':
            print('欢迎下次使用'.center(50,'~'))
            exit()

部分测试结果:

Python练习【4】【学生管理系统】
![](http://i2.51cto.com/images/blog/201812/04/0f4f5924f4b33eaaebd18fad38b2dc92.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk
Python练习【4】【学生管理系统】
Python练习【4】【学生管理系统】
Python练习【4】【学生管理系统】
Python练习【4】【学生管理系统】

猜你喜欢

转载自blog.51cto.com/13992211/2326200