python項目案例1:----此學習案例用python3編寫,摘自明日科技,感謝!
學生管理系統:
功能描述:具有增刪改查,排序,保存並顯示學生的全部信息。
1、主界面---函數menu(),顯示功能界面,方便用戶選擇功能;
2、主函數,程序入口----main() ;
3、錄入學生信息------insert();
4、查找學生信息------search();
5、刪除學生信息----delete();
6、修改學生信息-----modify();
7、排序-----sort();
8、統計學生數量---total();
9、顯示所有學生信息--show();
10、退出系統-------跳出while循環;
程序邏輯梳理:
1、首先通過main函數進入啟動程序,展示主界面顯示功能菜單,通過print 打印出來,供用戶選擇,用戶通過輸入選項選取自己需要的操作;
2、inster()函數,輸入學生信息保存到文本中【知識點:open(),write(),input()、dict 和 list的append函數】;
3、search()函數,輸入ID或姓名,查找保存文件里面的信息,並展示【知識點:。。。。】
。。。待續
# _*_ coding:utf-8 _*_ import re # 導入正則表達式模塊 import os # 導入操作系統模塊 filename = "students.txt" # 定義保存學生信息的文件名 def menu(): # 輸出菜單 print(''' ╔———————學生信息管理系統————————╗ │ │ │ =============== 功能菜單 =============== │ │ │ │ 1 錄入學生信息 │ │ 2 查找學生信息 │ │ 3 刪除學生信息 │ │ 4 修改學生信息 │ │ 5 排序 │ │ 6 統計學生總人數 │ │ 7 顯示所有學生信息 │ │ 0 退出系統 │ │ ========================================== │ │ 說明:通過數字或↑↓方向鍵選擇菜單 │ ╚———————————————————————╝ ''') def main(): ctrl = True # 標記是否退出系統 while (ctrl): menu() # 顯示菜單 option = input("請選擇:") # 選擇菜單項 option_str = re.sub("\D", "", option) # 提取數字,去除字符串空格 if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']: option_int = int(option_str) if option_int == 0: # 退出系統 print('您已退出學生成績管理系統!') ctrl = False elif option_int == 1: # 錄入學生成績信息 insert() elif option_int == 2: # 查找學生成績信息 search() elif option_int == 3: # 刪除學生成績信息 delete() elif option_int == 4: # 修改學生成績信息 modify() elif option_int == 5: # 排序 sort() elif option_int == 6: # 統計學生總數 total() elif option_int == 7: # 顯示所有學生信息 show() '''1 錄入學生信息''' def insert(): stdentList = [] # 保存學生信息的列表 mark = True # 是否繼續添加 while mark: id = input("請輸入ID(如 1001):") if not id: # ID為空,跳出循環 break name = input("請輸入名字:") if not name: # 名字為空,跳出循環 break try: english = int(input("請輸入英語成績:")) python = int(input("請輸入Python成績:")) c = int(input("請輸入C語言成績:")) except: print("輸入無效,不是整型數值....重新錄入信息") continue stdent = {"id": id, "name": name, "english": english, "python": python, "c": c} # 將輸入的學生信息保存到字典 stdentList.append(stdent) # 將學生字典添加到列表中 inputMark = input("是否繼續添加?(y/n):") if inputMark == "y": # 繼續添加 mark = True else: # 不繼續添加 mark = False save(stdentList) # 將學生信息保存到文件 print("學生信息錄入完畢!!!") # 將學生信息保存到文件 def save(student): try: students_txt = open(filename, "a") # 以追加模式打開 except Exception as e: students_txt = open(filename, "w") # 文件不存在,創建文件並打開 for info in student: students_txt.write(str(info) + "\n") # 按行存儲,添加換行符 students_txt.close() # 關閉文件 '''2 查找學生成績信息''' def search(): mark = True student_query = [] # 保存查詢結果的學生列表 while mark: 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') as file: # 打開文件 student = file.readlines() # 讀取全部內容 for list in student: d = dict(eval(list)) # 字符串轉字典 if id is not "": # 判斷是否按ID查 if d['id'] == id: student_query.append(d) # 將找到的學生信息保存到列表中 elif name is not "": # 判斷是否按姓名查 if d['name'] == name: student_query.append(d) # 將找到的學生信息保存到列表中 show_student(student_query) # 顯示查詢結果 student_query.clear() # 清空列表 inputMark = input("是否繼續查詢?(y/n):") if inputMark == "y": mark = True else: mark = False else: print("暫未保存數據信息...") return '''3 刪除學生成績信息''' def delete(): mark = True # 標記是否循環 while mark: studentId = input("請輸入要刪除的學生ID:") if studentId is not "": # 判斷要刪除的學生是否存在 if os.path.exists(filename): # 判斷文件是否存在 with open(filename, 'r') as rfile: # 打開文件 student_old = rfile.readlines() # 讀取全部內容 else: student_old = [] ifdel = False # 標記是否刪除 if student_old: # 如果存在學生信息 with open(filename, 'w') as wfile: # 以寫方式打開文件 d = {} # 定義空字典 for list in student_old: d = dict(eval(list)) # 字符串轉字典 if d['id'] != studentId: wfile.write(str(d) + "\n") # 將一條學生信息寫入文件 else: ifdel = True # 標記已經刪除 if ifdel: print("ID為 %s 的學生信息已經被刪除..." % studentId) else: print("沒有找到ID為 %s 的學生信息..." % studentId) else: # 不存在學生信息 print("無學生信息...") break # 退出循環 show() # 顯示全部學生信息 inputMark = input("是否繼續刪除?(y/n):") if inputMark == "y": mark = True # 繼續刪除 else: mark = False # 退出刪除學生信息功能 '''4 修改學生成績信息''' def modify(): show() # 顯示全部學生信息 if os.path.exists(filename): # 判斷文件是否存在 with open(filename, 'r') as rfile: # 打開文件 student_old = rfile.readlines() # 讀取全部內容 else: return studentid = input("請輸入要修改的學生ID:") with open(filename, "w") as wfile: # 以寫模式打開文件 for student in student_old: d = dict(eval(student)) # 字符串轉字典 if d["id"] == studentid: # 是否為要修改的學生 print("找到了這名學生,可以修改他的信息!") while True: # 輸入要修改的信息 try: d["name"] = input("請輸入姓名:") d["english"] = int(input("請輸入英語成績:")) d["python"] = int(input("請輸入Python成績:")) d["c"] = int(input("請輸入C語言成績:")) except: print("您的輸入有誤,請重新輸入。") else: break # 跳出循環 student = str(d) # 將字典轉換為字符串 wfile.write(student + "\n") # 將修改的信息寫入到文件 print("修改成功!") else: wfile.write(student) # 將未修改的信息寫入到文件 mark = input("是否繼續修改其他學生信息?(y/n):") if mark == "y": modify() # 重新執行修改操作 '''5 排序''' def sort(): show() # 顯示全部學生信息 if os.path.exists(filename): # 判斷文件是否存在 with open(filename, 'r') as file: # 打開文件 student_old = file.readlines() # 讀取全部內容 student_new = [] for list in student_old: d = dict(eval(list)) # 字符串轉字典 student_new.append(d) # 將轉換后的字典添加到列表中 else: return ascORdesc = input("請選擇(0升序;1降序):") if ascORdesc == "0": # 按升序排序 ascORdescBool = False # 標記變量,為False表示升序排序 elif ascORdesc == "1": # 按降序排序 ascORdescBool = True # 標記變量,為True表示降序排序 else: print("您的輸入有誤,請重新輸入!") sort() mode = input("請選擇排序方式(1按英語成績排序;2按Python成績排序;3按C語言成績排序;0按總成績排序):") if mode == "1": # 按英語成績排序 student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool) elif mode == "2": # 按Python成績排序 student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool) elif mode == "3": # 按C語言成績排序 student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool) elif mode == "0": # 按總成績排序 student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool) else: print("您的輸入有誤,請重新輸入!") sort() show_student(student_new) # 顯示排序結果 ''' 6 統計學生總數''' def total(): if os.path.exists(filename): # 判斷文件是否存在 with open(filename, 'r') as rfile: # 打開文件 student_old = rfile.readlines() # 讀取全部內容 if student_old: print("一共有 %d 名學生!" % len(student_old)) else: print("還沒有錄入學生信息!") else: print("暫未保存數據信息...") ''' 7 顯示所有學生信息 ''' def show(): student_new = [] if os.path.exists(filename): # 判斷文件是否存在 with open(filename, 'r') as rfile: # 打開文件 student_old = rfile.readlines() # 讀取全部內容 for list in student_old: student_new.append(eval(list)) # 將找到的學生信息保存到列表中 if student_new: show_student(student_new) else: print("暫未保存數據信息...") # 將保存在列表中的學生信息顯示出來 def show_student(studentList): if not studentList: print("(o@.@o) 無數據信息 (o@.@o) \n") return format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}" print(format_title.format("ID", "名字", "英語成績", "Python成績", "C語言成績", "總成績")) format_data = "{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}" for info in studentList: print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")), str(info.get("c")), str(info.get("english") + info.get("python") + info.get("c")).center(12))) if __name__ == "__main__": main()