python基礎(16):學生資訊管理系統——Python編寫(附全部程式碼)

專注的阿熊發表於2022-12-02

import os.path  #匯入os.path模組

def menm():    #選單

    print('==========================學生資訊管理系統==========================')

    print('------------------------------功能選單-----------------------------')

    print('\t\t\t   1.錄入學生資訊')

    print('\t\t\t   2.查詢學生資訊')

    print('\t\t\t   3.刪除學生資訊')

    print('\t\t\t   4.修改學生資訊')

    print('\t\t\t   5.排序')

    print('\t\t\t   6.統計學生總人數')

    print('\t\t\t   7.顯示所有學生資訊')

    print('\t\t\t   0.退出系統')

    print('-------------------------------------------------------------------')

filename = 'student.txt'# 檔名

def main(): #主程式

    while True:

        menm()  #呼叫選單函式

        choice = int(input('請選擇'))

        if choice in [0,1,2,3,4,5,6,7]:

            if choice == 0:

                answer = input('您確定要退出系統嗎?y/n')

                if answer == 'y' or answer == 'Y':

                    print('謝謝您的使用!!!')

                    break  #退出系統

                else:

                    continue

            elif choice == 1:

                insert() #錄入學生資訊

            elif choice == 2:

                search() #查詢學生資訊

            elif choice == 3:

                delete() #刪除學生資訊

            elif choice == 4:

                modify() #修改學生資訊

            elif choice == 5:

                sort() #排序

            elif choice == 6:

                total() #統計學生總人數

            elif choice == 7:

                show() #顯示所有學生資訊

 

def insert():# 插入資訊

    student_list = []

    while True: # 迴圈輸入

        id = input('請輸入ID(如1001):')

        if not id:# 防止手滑

            break

        name = input('請輸入姓名:')

        if not name:

            break

        try:

            english = int(input('請輸入英語成績:'))

            python = int(input('請輸入python成績:'))

            java = int(input('請輸入Java成績:'))

        except:

            print('輸入無效,不是整數型別,請重新輸入')

            continue

        #將錄入的學生資訊儲存到字典當中

        student ={'id':id,'name':name,'english':english,'python':python,'java':java}

        #將學生資訊新增到列表中

        student_list.append(student)

        answer = input('是否繼續新增?y/n\n')

        if answer == 'y':

            continue

        else:

            break

    #呼叫save()函式

    save(student_list)

    print('學生資訊錄入完畢!!!')

def save(lst):# 儲存

    try:

        stu_txt = open(filename,'a',encoding='utf-8')

    except:

        stu_txt = open(filename,'w',encoding='utf-8')

    for item in lst:

        stu_txt.write(str(item)+'\n')# 將內容寫入檔案中

def search(): # 搜尋

    student_query = []

    while True:

        id = ''

        name = ''

        if os.path.exists(filename): # 如果可以開啟檔案

            mode = input('按ID查詢請輸入1,按姓名查詢請輸入2:')

            if mode =='1':

                id = input('請輸入要查詢的學生ID:')

            elif mode =='2':

                name = input('請輸入學生姓名:')

            else:

                print('您的輸入有誤,請重新輸入')

                search()

            with open(filename,'r',encoding='utf-8')as rfile:

                student = rfile.readlines()

                for item in student:

                    d = dict(eval(item))

                    if id != '':

                        if d['id'] == id:

                            student_query.append(d)

                    elif name != '':

                        if d['name'] == name:

                            student_query.append(d)

            #顯示查詢結果

            show_student(student_query)

            #清空列表

            student_query.clear()

            answer = input('是否要繼續查詢?y/n\n')

            if answer =='y':

                continue

            else:

                break

        else:

            print('暫未儲存學生資訊')

            return

def show_student(lst):

    if len(lst)==0:

        print('沒有查詢到學生資訊,無資料顯示!!!')

        return

    #定義標題顯示格式

    format_title=跟單網gendan5.com'{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'

    print(format_title.format('ID','姓名','英語成績','python成績','java成績','總成績'))

    #定義內容的顯示格式

    format_data ='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'

    for item in lst:

        print(format_data.format(item.get('id'),

                                 item.get('name'),

                                 item.get('english'),

                                 item.get('python'),

                                 item.get('java'),

int(item.get('english'))+int(item.get('python'))+int(item.get('java'))

                                 ))

def delete():

    while True:

        student_id = input('請輸入要刪除的學生的ID:')

        if student_id != '':

            if os.path.exists(filename):

                with open(filename,'r',encoding='utf-8')as file:

                    student_old = file.readlines()

            else:

                student_old = []

            flag = False #標記是否刪除

            if student_old:

                with open(filename,'w',encoding='utf-8')as wfile:

                    d = {}

                    for item in student_old:

                        d = dict(eval(item)) #將字串轉成字典

                        if d['id'] != student_id:

                            wfile.write(str(d)+'\n')

                        else:

                            flag = True

                    if flag:

                        print(f'id為{student_id}的學生資訊已被刪除')

                    else:

                        print(f'沒有找到ID為{student_id}的學生資訊')

            else:

                print('無學生資訊')

                break

            show() #刪除之後要重新顯示所有學生資訊

            answer = input('是否繼續刪除?y/n\n')

            if answer == 'y':

                continue

            else:

                break

def modify():

    show()

    if os.path.exists(filename):

        with open(filename,'r',encoding='utf-8')as rfile:

            student_old = rfile.readlines()

    else:

        return

    student_id = input('請輸入要修改的學員的ID:')

    with open(filename,'w',encoding='utf-8')as wfile:

        for item in student_old:

            d = dict(eval(item))

            if d['id'] == student_id:

                print('找到學生資訊,可以修改他的相關資訊了!')

                while True:

                    try:

                        d['name'] = input('請輸入姓名:')

                        d['english'] = input('請輸入英語成績:')

                        d['python'] = input('請輸入Python成績:')

                        d['java'] = input('請輸入java成績:')

                    except:

                        print('您的輸入有誤,請重新輸入!!!')

                    else:

                        break

                wfile.write(str(d)+'\n')

                print('修改成功!!!')

            else:

                wfile.write(str(d)+'\n')

        answer = input('是否繼續修改其他學生資訊呢?y/n\n')

        if answer == 'y':

            modify()

def sort():

    show()

    if os.path.exists(filename):

        with open(filename,'r',encoding='utf-8')as rfile:

            student_list = rfile.readlines()

        student_new = []

        for item in student_list:

            d = dict(eval(item))

            student_new.append(d)

    else:

        return

    asc_or_desc = input('請選擇(0.升序 1.降序:)')

    if asc_or_desc =='0':

        asc_or_desc_bool =False

    elif asc_or_desc =='1':

        asc_or_desc_bool =True

    else:

        print('您的輸入有誤,請重新輸入')

        sort()

    mode = input('請選擇排序方式(1.按英語成績排序 2.按python成績排序 3.按java成績排序 0.按總成績排序):')

    if mode == '1':

        student_new.sort(key=lambda x:int(x['english']),reverse=asc_or_desc_bool)

    elif mode == '2':

        student_new.sort(key=lambda x:int(x['python']),reverse=asc_or_desc_bool)

    elif mode == '3':

        student_new.sort(key=lambda x:int(x['java']),reverse=asc_or_desc_bool)

    elif mode == '0':

        student_new.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool)

    else:

        print('您的輸入有誤,請重新輸入!!!')

        sort()

    show_student(student_new)

def total():

    if os.path.exists(filename):

        with open(filename,'r',encoding='utf-8')as rfile:

            students = rfile.readlines()

            if students:

                print(f'一共有{len(students)}名學生')

            else:

                print('還未錄入學生資訊')

    else:

        print('暫未儲存資料資訊......')

def show():

    student_lst = []

    if os.path.exists(filename):

        with open(filename,'r',encoding='utf-8')as rfile:

            students=rfile.readlines()

            for item in students:

                student_lst.append(eval(item))

            if student_lst:

                show_student(student_lst)

    else:

        print('暫未儲存過資料!!!')

if __name__ == '__main__':

    main()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2926540/,如需轉載,請註明出處,否則將追究法律責任。

相關文章