1. 程式人生 > >Python練習【4】【學生管理系統】

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】【學生管理系統】