1. 程式人生 > 其它 >學生資訊管理系統--無互動介面(二)

學生資訊管理系統--無互動介面(二)

  1 #-*- coding:utf-8 -*-
  2 
  3 filename = "students.txt"
  4 import os
  5 
  6 def save(student):
  7     try:
  8         students_txt = open(filename,"a")
  9     except Exception as e:
 10         students_txt = open(filename,"w")
 11     
 12     for info in student:
 13         students_txt.write(str(info)+"
\n") 14 students_txt.close() 15 16 def insert(): 17 studentList = [] 18 mark = True 19 while mark: 20 id = input("請輸入id(如1001):") 21 if not id: 22 break 23 #查詢該學號是否存在 24 with open(filename,"r") as rfile: 25 student_old = rfile.readlines()
26 27 for student in student_old: 28 item = dict(eval(student)) 29 if item["id"] == id: 30 print("該學生已存在,請使用其他學號!!") 31 insert() 32 name = input("請輸入名字:") 33 if not name: 34 break 35 try
: 36 english = int(input("請輸入英語成績:")) 37 python = int(input("請輸入Python成績:")) 38 c = int(input("請輸入C語言成績")) 39 except: 40 print("輸入無效,不是整形資料............重新錄入資訊") 41 continue 42 student = {"id":id,"name":name,"english":english,"python":python,"c":c} 43 studentList.append(student) 44 inputMark = input("是否繼續新增?(Y/N):") 45 if inputMark == "y": 46 mark = True 47 else: 48 mark = False 49 save(studentList) 50 print("學生資訊錄入完畢!!") 51 52 def delete(): 53 mark = True 54 while mark: 55 studentId = input("請輸入想要刪除的學生ID:") 56 if studentId is not "": 57 if os.path.exists(filename): 58 with open(filename,"r") as rfile: 59 student_old = rfile.readlines() 60 else: 61 student_old = [] 62 ifdel = False 63 if student_old: 64 with open(filename,"w") as wfile: 65 d = {} 66 for list in student_old: 67 d = dict(eval(list)) 68 if d["id"] != studentId: 69 wfile.write(str(d)+"\n") 70 else: 71 ifdel = True 72 if ifdel: 73 print("ID為 %s 的學生資訊已經被刪除..........."%studentId) 74 else: 75 print("沒有找到ID為 %s 的學生資訊..."%studentId) 76 else: 77 print("無此學生資訊") 78 break 79 show() 80 inputMark = input("是否繼續刪除?(y/n):") 81 if inputMark == "y": 82 mark = True 83 else: 84 mark = False 85 86 def modify(): 87 show() 88 if os.path.exists(filename): 89 with open(filename,"r") as rfile: 90 student_old = rfile.readline() 91 else: 92 return 93 94 studentId = input("請輸出要修改的學生ID:") 95 with open(filename,"w") as wfile: 96 for student in student_old: 97 d = dict(eval(student)) 98 if d["id"] == studentId: 99 print("找到了這名學生,可以修改他的資訊!") 100 while True: 101 try: 102 d["name"] = input("請輸入姓名:") 103 d["english"] = int(input("請輸入英語成績: ")) 104 d["python"] = int(input("請輸入Python成績:")) 105 d["c"] = int(input("請輸入C語言成績: ")) 106 except: 107 print("您輸入有誤,請重新輸入。") 108 else: 109 break 110 student = str(d) 111 wfile.write(student+"\n") #將修改後的學生資訊寫入檔案 112 print("修改成功!") 113 else: 114 wfile.write(student) #將未修改的學生資訊寫入檔案 115 116 mark = input("是否繼續修改其他學生資訊?(y/n)") 117 if mark == True: 118 modify() #使用回撥函式 119 120 def search(): 121 mark = True 122 student_query = [] 123 while mark: 124 id = "" 125 name = "" 126 if os.path.exists(filename): 127 mode = input("按ID查詢輸入1;按學生姓名查詢輸入2: ") 128 if mode == "1": 129 id = input("請輸入學生ID:") 130 elif mode == "2": 131 name = input("請輸入學生名字: ") 132 else: 133 print("您輸入的查詢資訊有誤,請重新輸入!!") 134 search() 135 with open(filename,"r") as rflie: 136 student = rflie.readlines() 137 for list in student: 138 d = dict(eval(list)) 139 if id is not "": 140 if d["id"] == id: 141 student_query.append(d) 142 elif name is not "": 143 if d["name"] == name: 144 student_query.append(d) 145 show_student(student_query) 146 student_query.clear() 147 inputMark = input("是否繼續查詢? (y/n):") 148 if inputMark == "y": 149 mark = True 150 else: 151 mark = False 152 else: 153 print("暫未儲存資料資訊。。。") 154 return 155 156 def show_student(student): 157 if not student: 158 print("無資料資訊。。。。。。。。") 159 return 160 format_title = "{:^6}{:^12}\t{:^8}\t{:^26}\t{:^10}\t{:^20}" 161 print(format_title.format("ID","名字","英語成績","Python成績","C語言成績","總成績")) 162 format_data = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}" 163 for info in student: 164 print(format_data.format(info.get("id"),info.get("name"),str(info.get("english")),\ 165 str(info.get("python")),str(info.get("c")),\ 166 str(info.get("english")+info.get("python")+info.get("c")).center(12))) 167 168 def total(): 169 if os.path.exists(filename): 170 with open(filename,"r") as rfile: 171 student_old = rfile.readlines() 172 if student_old: 173 print("一共有 %s 名學生"%len(student_old)) 174 else: 175 print("還沒有錄入學生資訊") 176 else: 177 print("暫未儲存資料資訊。。") 178 179 def show(): 180 student_new = [] 181 if os.path.exists(filename): 182 with open(filename,"r") as rfile: 183 student_old = rfile.readlines() 184 185 for list in student_old: 186 student_new.append(eval(list)) 187 if student_new: 188 show_student(student_new) 189 else: 190 print("暫未儲存資料資訊......") 191 192 def sort(): 193 show() 194 if os.path.exists(filename): 195 with open(filename,"r") as rfile: 196 student_old = rfile.readlines() 197 student_new = [] 198 for list in student_old: 199 d = dict(eval(list)) 200 student_new.append(d) 201 else: 202 return 203 204 ascORdesc = input("請選擇(0升序;1降序): ") 205 if ascORdesc == "0": 206 ascORdescBool = False 207 elif ascORdesc == "1": 208 ascORdescBool = True 209 else: 210 print("您輸入有誤請重新輸入!") 211 sort() 212 213 mode = input("請選擇排列方式(1按英語成績排序;2按Python成績排序;3按C語言成績排序;0按總成績排序): ") 214 if mode == "1": 215 student_new.sort(key=lambda x:x["english"],reverse=ascORdescBool) 216 217 elif mode == "2": 218 student_new.sort(key=lambda x:x["python"],reverse=ascORdescBool) 219 elif mode == "3": 220 student_new.sort(key=lambda x:x["c"],reverse=ascORdescBool) 221 elif mode == "0": 222 student_new.sort(key=lambda x:x["english"]+x["python"]+x["c"],reverse=ascORdescBool) 223 else: 224 print("您輸入有誤請重新輸入!") 225 sort() 226 show_student(student_new) 227 228 229 230 231 232 233 234 235 236 237 238 239