1. 程式人生 > 其它 >案例:pychon學生資訊管理系統

案例:pychon學生資訊管理系統

import json
"""
學生資訊管理系統
功能:檢視學生資料列表,能修改學生資料,能刪除資料,能新增資料,能退出管理系
"""

# 學生資訊的儲存列表
student_list = []

"""先到檔案中讀取資料儲存變數student_list中"""
import os
if os.path.isfile("student.txt"):
    # 注意:第一次使用,手動建立這個檔案,以後可以通過 os模組提供的操作,就可以判斷該檔案是否存在
    with open("student.txt", "r") as f:
        content = f.read()
        if content:
            student_list = json.loads(content)
else:
    # 如果檔案不存在,則使用w模式建立檔案
    with open("student.txt", "w") as f:
        pass

while True:
    """1. 顯示選單"""
    print("* " * 15)
    print("*  歡迎來到XX學生資訊管理系統。")
    print("*")
    print("*  1. 新增學生資訊")
    print("*  2. 檢視學生資訊")
    print("*  3. 修改學生資訊")
    print("*  4. 刪除學生資訊")
    print("*  5. 退出資訊系統")
    print("* " * 15)
    print()
    action = int(input("請輸入要進行的操作序號(1·5):"))
    if action == 1:
        """新增"""
        print("請輸入要錄入系統的學生資訊...")
        name   = input("姓名:")
        age    = input("年齡:")
        sex    = input("性別:")
        mobile = input("聯絡電話:")
        # 把學生資訊往student_list進行追加
        student_list.append({
            "name": name,
            "age": age,
            "sex": sex,
            "mobile": mobile,
        })
        print(f"student_list={student_list}")
        # 新增學生資料以後,自動儲存一份到檔案中
        if len(student_list) > 0:
            content = json.dumps(student_list) # 把列表轉換成字串
            with open("student.txt", "w") as file:
                file.write(content)

    elif action == 2:
        """檢視"""
        for index, item in enumerate(student_list):
            print(f"序號: {index+1}\t\t姓名: {item['name']}\t\t年齡: {item['age']}\t\t性別: {item['sex']}\t\t聯絡電話: {item['mobile']}")
            print("- " * 15)

    elif action == 3:
        """修改"""
        for index, item in enumerate(student_list):
            print(f"序號: {index+1}\t\t姓名: {item['name']}\t\t年齡: {item['age']}\t\t性別: {item['sex']}\t\t聯絡電話: {item['mobile']}")
            print("- " * 15)
        num = int(input("請輸入要更新的學生資訊序號(如果部分資訊不修改,可以不填寫留空):"))
        name   = input(f"姓名({student_list[num-1]['name']}):")
        age    = input(f"年齡({student_list[num-1]['age']}):")
        sex    = input(f"性別({student_list[num-1]['sex']}):")
        mobile = input(f"聯絡電話({student_list[num-1]['mobile']}):")
        # 更新資料
        data = student_list[num-1] # data與student_list[num-1]是引用關係,所以data被改動,就表示student_list[num-1]被改動了
        if name:
            data["name"] = name
        if age:
            data["age"] = age
        if sex:
            data["sex"] = sex
        if mobile:
            data["mobile"] = mobile

        if len(student_list) > 0:
            content = json.dumps(student_list) # 把列表轉換成字串
            with open("student.txt", "w") as file:
                file.write(content)

    elif action == 4:
        for index, item in enumerate(student_list):
            print(f"序號: {index+1}\t\t姓名: {item['name']}\t\t年齡: {item['age']}\t\t性別: {item['sex']}\t\t聯絡電話: {item['mobile']}")
            print("- " * 15)
        text = input("請輸入要刪除的學生資訊序號(如果要一次性刪除多個,序號之間使用空格隔開):")
        if text:
            num_list = text.split(" ")

            # 刪除成員
            num_list.sort(reverse=True)
            for num in num_list:
                num = int(num)
                student_list.pop(num - 1)

            # 刪除操作會導致資料減少,最少的情況是沒有資料,所以這裡不能判斷student_list
            content = json.dumps(student_list) # 把列表轉換成字串
            with open("student.txt", "w") as file:
                file.write(content)

    else:
        print("成功退出系統中....")
        break
    print()
    print()