學生信息管理系統


 

  • 文件結構

 

  • 詳細代碼,studentsystem.py
  5 # 文件名稱:studentsystem.py
  6 # 開發工具:PyCharm
  7 import re  # 導入正則表達式模塊
  8 import os  # 導入操作系統模塊
  9 
 10 filename = "students.txt"  # 定義保存學生信息的文件名
 11 
 12 
 13 def menu():
 14     # 輸出菜單
 15     print('''
 16     ╔———————學生信息管理系統————————╗
 17     │                                              │
 18     │   =============== 功能菜單 ===============   │
 19     │                                              │
 20     │   1 錄入學生信息                             │
 21     │   2 查找學生信息                             │
 22     │   3 刪除學生信息                             │
 23     │   4 修改學生信息                             │
 24     │   5 排序                                     │
 25     │   6 統計學生總人數                           │
 26     │   7 顯示所有學生信息                         │
 27     │   0 退出系統                                 │
 28     │  ==========================================  │
 29     │  說明:通過數字或↑↓方向鍵選擇菜單          │
 30     ╚———————————————————————╝
 31     ''')
 32 
 33 
 34 def main():
 35     ctrl = True  # 標記是否退出系統
 36     while (ctrl):
 37         menu()  # 顯示菜單
 38         option = input("請選擇:")  # 選擇菜單項
 39         option_str = re.sub("\D", "", option)  # 提取數字
 40         if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
 41             option_int = int(option_str)
 42             if option_int == 0:  # 退出系統
 43                 print('您已退出學生成績管理系統!')
 44                 ctrl = False
 45             elif option_int == 1:  # 錄入學生成績信息
 46                 insert()
 47             elif option_int == 2:  # 查找學生成績信息
 48                 search()
 49             elif option_int == 3:  # 刪除學生成績信息
 50                 delete()
 51             elif option_int == 4:  # 修改學生成績信息
 52                 modify()
 53             elif option_int == 5:  # 排序
 54                 sort()
 55             elif option_int == 6:  # 統計學生總數
 56                 total()
 57             elif option_int == 7:  # 顯示所有學生信息
 58                 show()
 59 
 60 
 61 '''1 錄入學生信息'''
 62 
 63 
 64 def insert():
 65     stdentList = []        # 保存學生信息的列表
 66     mark = True  # 是否繼續添加
 67     while mark:
 68         id = input("請輸入ID(如 1001):")
 69         if not id:  # ID為空,跳出循環
 70             break
 71         name = input("請輸入名字:")
 72         if not name:  # 名字為空,跳出循環
 73             break
 74         try:
 75             english = int(input("請輸入英語成績:"))
 76             python = int(input("請輸入Python成績:"))
 77             c = int(input("請輸入C語言成績:"))
 78         except:
 79             print("輸入無效,不是整型數值....重新錄入信息")
 80             continue
 81         stdent = {"id": id, "name": name, "english": english, "python": python, "c": c}  # 將輸入的學生信息保存到字典
 82         stdentList.append(stdent)  # 將學生字典添加到列表中
 83         inputMark = input("是否繼續添加?(y/n):")
 84         if inputMark == "y":  # 繼續添加
 85             mark = True
 86         else:  # 不繼續添加
 87             mark = False
 88     save(stdentList)  # 將學生信息保存到文件
 89     print("學生信息錄入完畢!!!")
 90 
 91 
 92 # 將學生信息保存到文件
 93 def save(student):
 94     try:
 95         students_txt = open(filename, "a")  # 以追加模式打開
 96     except Exception as e:
 97         students_txt = open(filename, "w")  # 文件不存在,創建文件並打開
 98     for info in student:
 99         students_txt.write(str(info) + "\n")  # 按行存儲,添加換行符
100     students_txt.close()  # 關閉文件
101 
102 
103 '''2 查找學生成績信息'''
104 
105 
106 def search():
107     mark = True
108     student_query = []  # 保存查詢結果的學生列表
109     while mark:
110         id = ""
111         name = ""
112         if os.path.exists(filename):  # 判斷文件是否存在
113             mode = input("按ID查輸入1;按姓名查輸入2:")
114             if mode == "1":
115                 id = input("請輸入學生ID:")
116             elif mode == "2":
117                 name = input("請輸入學生姓名:")
118             else:
119                 print("您的輸入有誤,請重新輸入!")
120                 search()  # 重新查詢
121             with open(filename, 'r') as file:  # 打開文件
122                 student = file.readlines()  # 讀取全部內容
123                 for list in student:
124                     d = dict(eval(list))  # 字符串轉字典
125                     if id is not "":  # 判斷是否按ID查
126                         if d['id'] == id:
127                             student_query.append(d)  # 將找到的學生信息保存到列表中
128                     elif name is not "":  # 判斷是否按姓名查
129                         if d['name'] == name:
130                             student_query.append(d)  # 將找到的學生信息保存到列表中
131                 show_student(student_query)  # 顯示查詢結果
132                 student_query.clear()  # 清空列表
133                 inputMark = input("是否繼續查詢?(y/n):")
134                 if inputMark == "y":
135                     mark = True
136                 else:
137                     mark = False
138         else:
139             print("暫未保存數據信息...")
140             return
141 
142 
143 '''3 刪除學生成績信息'''
144 
145 
146 def delete():
147     mark = True  # 標記是否循環
148     while mark:
149         studentId = input("請輸入要刪除的學生ID:")
150         if studentId is not "":  # 判斷要刪除的學生是否存在
151             if os.path.exists(filename):  # 判斷文件是否存在
152                 with open(filename, 'r') as rfile:  # 打開文件
153                     student_old = rfile.readlines()  # 讀取全部內容
154             else:
155                 student_old = []
156             ifdel = False  # 標記是否刪除
157             if student_old:  # 如果存在學生信息
158                 with open(filename, 'w') as wfile:  # 以寫方式打開文件
159                     d = {}  # 定義空字典
160                     for list in student_old:
161                         d = dict(eval(list))  # 字符串轉字典
162                         if d['id'] != studentId:
163                             wfile.write(str(d) + "\n")  # 將一條學生信息寫入文件
164                         else:
165                             ifdel = True  # 標記已經刪除
166                     if ifdel:
167                         print("ID為 %s 的學生信息已經被刪除..." % studentId)
168                     else:
169                         print("沒有找到ID為 %s 的學生信息..." % studentId)
170             else:  # 不存在學生信息
171                 print("無學生信息...")
172                 break  # 退出循環
173             show()  # 顯示全部學生信息
174             inputMark = input("是否繼續刪除?(y/n):")
175             if inputMark == "y":
176                 mark = True  # 繼續刪除
177             else:
178                 mark = False  # 退出刪除學生信息功能
179 
180 
181 '''4 修改學生成績信息'''
182 
183 
184 def modify():
185     show()  # 顯示全部學生信息
186     if os.path.exists(filename):  # 判斷文件是否存在
187         with open(filename, 'r') as rfile:  # 打開文件
188             student_old = rfile.readlines()  # 讀取全部內容
189     else:
190         return
191     studentid = input("請輸入要修改的學生ID:")
192     with open(filename, "w") as wfile:  # 以寫模式打開文件
193         for student in student_old:
194             d = dict(eval(student))  # 字符串轉字典
195             if d["id"] == studentid:  # 是否為要修改的學生
196                 print("找到了這名學生,可以修改他的信息!")
197                 while True:  # 輸入要修改的信息
198                     try:
199                         d["name"] = input("請輸入姓名:")
200                         d["english"] = int(input("請輸入英語成績:"))
201                         d["python"] = int(input("請輸入Python成績:"))
202                         d["c"] = int(input("請輸入C語言成績:"))
203                     except:
204                         print("您的輸入有誤,請重新輸入。")
205                     else:
206                         break  # 跳出循環
207                 student = str(d)  # 將字典轉換為字符串
208                 wfile.write(student + "\n")   # 將修改的信息寫入到文件
209                 print("修改成功!")
210             else:
211                 wfile.write(student)  # 將未修改的信息寫入到文件
212     mark = input("是否繼續修改其他學生信息?(y/n):")
213     if mark == "y":
214         modify()  # 重新執行修改操作
215 
216 
217 '''5 排序'''
218 
219 
220 def sort():
221     show()  # 顯示全部學生信息
222     if os.path.exists(filename):  # 判斷文件是否存在
223         with open(filename, 'r') as file:  # 打開文件
224             student_old = file.readlines()  # 讀取全部內容
225             student_new = []
226         for list in student_old:
227             d = dict(eval(list))  # 字符串轉字典
228             student_new.append(d)  # 將轉換后的字典添加到列表中
229     else:
230         return
231     ascORdesc = input("請選擇(0升序;1降序):")
232     if ascORdesc == "0":  # 按升序排序
233         ascORdescBool = False           # 標記變量,為False表示升序排序
234     elif ascORdesc == "1":  # 按降序排序
235         ascORdescBool = True          # 標記變量,為True表示降序排序
236     else:
237         print("您的輸入有誤,請重新輸入!")
238         sort()  
239     mode = input("請選擇排序方式(1按英語成績排序;2按Python成績排序;3按C語言成績排序;0按總成績排序):")
240     if mode == "1":  # 按英語成績排序
241         student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
242     elif mode == "2":  # 按Python成績排序
243         student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
244     elif mode == "3":  # 按C語言成績排序
245         student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
246     elif mode == "0":  # 按總成績排序
247         student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
248     else:
249         print("您的輸入有誤,請重新輸入!")
250         sort()
251     show_student(student_new)  # 顯示排序結果
252 
253 
254 ''' 6 統計學生總數'''
255 
256 
257 def total():
258     if os.path.exists(filename):  # 判斷文件是否存在
259         with open(filename, 'r') as rfile:  # 打開文件
260             student_old = rfile.readlines()  # 讀取全部內容
261             if student_old:
262                 print("一共有 %d 名學生!" % len(student_old))
263             else:
264                 print("還沒有錄入學生信息!")
265     else:
266         print("暫未保存數據信息...")
267 
268 
269 ''' 7 顯示所有學生信息 '''
270 
271 
272 def show():
273     student_new = []
274     if os.path.exists(filename):  # 判斷文件是否存在
275         with open(filename, 'r') as rfile:  # 打開文件
276             student_old = rfile.readlines()  # 讀取全部內容
277         for list in student_old:
278             student_new.append(eval(list))  # 將找到的學生信息保存到列表中
279         if student_new:
280             show_student(student_new)
281     else:
282         print("暫未保存數據信息...")
283 
284 
285 # 將保存在列表中的學生信息顯示出來
286 def show_student(studentList):
287     if not studentList:
288         print("(o@.@o) 無數據信息 (o@.@o) \n")
289         return
290     format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}"
291     print(format_title.format("ID", "名字", "英語成績", "Python成績", "C語言成績", "總成績"))
292     format_data = "{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}"
293     for info in studentList:
294         print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),
295                                  str(info.get("c")),
296                                  str(info.get("english") + info.get("python") + info.get("c")).center(12)))
297 
298 
299 if __name__ == "__main__":
300     main()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM