1 import os 2 3 # 學生系統基本功能 4 # 增刪查改 5 6 # 如何實現該系統 7 # 1.顯示系統功能界面 8 # 2.讓用戶選擇功能 9 # 3.判斷用戶選擇的指定功能,然後完成相應的操作(增刪查改) 10 11 # 面向對象分析 12 # 1.抽象類 13 # 學生系統管理 ...
1 import os 2 3 # 學生系統基本功能 4 # 增刪查改 5 6 # 如何實現該系統 7 # 1.顯示系統功能界面 8 # 2.讓用戶選擇功能 9 # 3.判斷用戶選擇的指定功能,然後完成相應的操作(增刪查改) 10 11 # 面向對象分析 12 # 1.抽象類 13 # 學生系統管理類 學生類 14 # 2.分析類的成員 15 16 # 學生系統管理類 17 # 屬性:學生列表屬性 保存學生信息 18 # 方法:添加學生 刪除學生 顯示學生信息等這些方法 19 20 # 學生類 21 # 屬性:姓名 年齡 性別 22 # 方法:無 23 class Student(object): 24 def __init__(self,name,age,sex): 25 # 添加相關的屬性信息 26 self.name=name 27 self.age=age 28 self.sex=sex 29 30 31 32 class StudentManageSystem(object): 33 def __init__(self): 34 # 定義一個列表用於保存學生對象 35 self.student_list = list() 36 37 38 # 將功能代碼放到指定函數裡面 39 def show_menu(self): 40 '''該函數是為了展示功能界面''' 41 # 1. 顯示系統的功能菜單 42 print("------學生管理系統1.0------") 43 print("1.添加學生信息") 44 print("2.修改學生信息") 45 print("3.刪除學生信息") 46 print("4.顯示所有學生") 47 print("5.查詢學生信息") 48 print("6.退出管理系統") 49 50 51 # 添加學生函數 52 # 分析: 53 # 1. 學生的信息如何表示? 54 # 2. 管理系統裡面的學生信息如何表示? 55 def add_student(self): 56 name = input("請輸入學生的姓名:") 57 age = input("請輸入學生的年齡:") 58 sex = input("請輸入學生的性別:") 59 # 添加一個學生,需要自己創建一個學生對象 60 stu=Student(name,age,sex) 61 # 把對象添加到列表裡面 62 self.student_list.append(stu) 63 # 顯示學生信息 64 # print(self.student_list) 65 print("添加成功") 66 67 # 顯示所有學生函數 68 def show_all_student(self): 69 '''該函數用於顯示所有的學生信息''' 70 # 註意列表裡面儲存的是字典 71 # 遍歷的時候使用enumerate函數可以返回下標 72 for index, student in enumerate(self.student_list): 73 # 計算學號=下標+1 74 student_no = index + 1 75 print("學號:", student_no, 76 "姓名:", student.name, 77 "年齡:", student.age, 78 "性別:", student.sex) 79 80 81 # 修改學生信息函數 82 def modify_student(self): 83 ''''該函數用來修改學生信息''' 84 # 1. 接收用戶要修改學生的學號 85 student_no = int(input("請輸入要修改學生的學號:")) 86 87 # 2. 把學號轉成下標, 下標 = 學號 - 1 88 index = student_no - 1 89 # 判斷下標是否合法 90 if 0 <= index < len(self.student_list): 91 # 3. 根據下標獲取要修改的學生字典 92 student = self.student_list[index] 93 94 # 4. 對學生字典的數據進行修改(名字, 年齡, 性別) 95 new_name = input("請輸入修改後的姓名:") 96 new_age = input("請輸入修改後的年齡:") 97 new_sex = input("請輸入修改後的性別:") 98 # 對字典裡面的數據進行修改 99 student.name = new_name 100 student.age = new_age 101 student.sex = new_sex 102 103 print("修改成功") 104 else: 105 print("請輸入正確的學號:") 106 107 108 # 刪除學生信息 109 def delete_student(self): 110 """該函數用來刪除學生信息""" 111 # 1.接收用戶輸入的學號 112 student_no = int(input("請輸入要刪除學生的學號:")) 113 # 2.將學號轉換為下標 114 index = student_no - 1 115 # 判斷下表是否合法 116 if 0 <= index <= len(self.student_list): 117 # 需求刪除後把這個人的姓名顯示出來,使用pop會把刪除的內容返回 118 student = self.student_list.pop(index) 119 print("%s,刪除成功!" % student.name) 120 else: 121 print("請輸入有效學號!") 122 123 124 # 查詢某個學生信息 125 def query_student(self): 126 """該函數用來查詢學生信息""" 127 name = input("請輸入要查詢學生的姓名:") 128 for index, student in enumerate(self.student_list): 129 student_no = index + 1 130 if student.name == name: 131 print("學號:", student_no, 132 "姓名:", student.name, 133 "年齡:", student.age, 134 "性別:", student.sex) 135 break 136 # 當迴圈語句沒有執行break,表示沒有該學生信息執行else裡面的語句 137 # 當迴圈執行break語句的時候,說明該學生信息存在,不會執行else裡面的語句 138 # 註意:當for迴圈與else一起使用的時候,如果沒有執行for迴圈裡面的break則會執行else語句!!! 139 else: 140 print("對不起,沒有該學生") 141 142 # 講列表裡面的數據保存到文件裡面 143 def save_file(self): 144 # 1.打開文件 要以w方式打開 145 file=open("student_list.data","w",encoding="utf-8") 146 #2.把數據寫入文件(把列表轉換為字元串類型) 147 # 把列表裡面的每一個對象轉換成學生列表裡面的字典,把對象的屬性信息保存到字典裡面 148 # stu.__dict__ 獲取學生的字典信息把對象的屬性信息以字典的形式返回 149 new_list=[stu.__dict__ for stu in self.student_list] 150 student_list_str=str(new_list) 151 print(student_list_str,type(student_list_str)) 152 file.write(student_list_str) 153 file.close() 154 155 # 載入文件裡面的內容,將文件裡面的內容載入到列表裡面**** 156 157 def load_file(self): 158 # 1.判斷文件是否存在 返回值類型是布爾類型 159 if os.path.exists("student_list.data"): 160 # 1.打開文件 r模式 161 file=open("student_list.data","r",encoding="utf-8") 162 # 2.讀取文件裡面的數據 163 value=file.read() 164 # 因為從文件裡面讀取的是字元串類型,所以需要先轉換為列表類型 165 # 註意這裡將字元串轉換為列表需要使用eval()函數,獲取字元串包裹的內容 166 new_list=eval(value) 167 print("從文件裡面獲取的內容為:",new_list,type(new_list)) 168 # 把列表裡面每一個學生字典信息轉換為對象 169 # **stu_dict:把字典裡面的每一項數據按照關鍵字傳參 170 # Student(**stu_dict)表示創建一個學生對象 171 new_list=[Student(**stu_dict) for stu_dict in new_list] 172 print(new_list) 173 # 3.將文件裡面的內容添加到列表裡面 174 # 方法一:使用global 175 # global student_list 176 # student_list=new_list 177 # 方法2:方式,把文件中的列表數據擴展到全局變數裡面, 這裡不需要加上global,因為列表是可變類型 178 self.student_list.extend(new_list) 179 file.close() 180 181 182 # 程式入口函數,程式開始時第一個執行的函數 183 def start(self): 184 # 當程式運行的時候載入一次文件 185 self.load_file() 186 187 while True: 188 # 1.顯示系統功能菜單 189 self.show_menu() 190 191 # 2.接收用戶輸入的功能選項 192 menu_option = input("請輸入你要操作的功能選項:") 193 194 # 3. 判斷用戶選擇的指定功能,然後完成對應的操作(增刪改查的功能) 195 if menu_option == "1": 196 print("添加學生信息") 197 self.add_student() 198 elif menu_option == "2": 199 print("修改學生信息") 200 self.modify_student() 201 elif menu_option == "3": 202 print("刪除學生信息") 203 self.delete_student() 204 elif menu_option == "4": 205 print("顯示學生信息") 206 self.show_all_student() 207 elif menu_option == "5": 208 print("查詢學生信息") 209 self.query_student() 210 elif menu_option == "6": 211 print("程式退出") 212 self.save_file() 213 break 214 215 system=StudentManageSystem() 216 217 system.start()