Python:學生資訊管理系統
阿新 • • 發佈:2019-01-02
簡單版本學生資訊管理系統,用python基礎語法實現,基於python 3.6
容錯率很高的程式碼,做了很多異常處理功能,出錯也不會丟失資訊
啟動時自動從檔案中讀取已有學生資訊,退出時自動儲存
程式分3個模組:
Menu:進行選單管理
Student_managemant:進行學生資訊管理
main:主函式
直接上程式碼,有註釋
Menu.py
# -*- coding: UTF-8 -*- import sys import os class Menu(): """ 選單管理類 作用:向控制檯列印學生資訊,從控制檯獲取輸入資訊,並進行錯誤處理 """ def welcome(self): """ 歡迎語句 """ print("\n歡迎來到 WilliamCode 學生資訊管理系統") def top_menu(self): """ 一級選單,提示使用者輸入命令 """ print(""" 請選擇要進行的操作: 1、新增學生資訊 2、刪除學生資訊 3、查詢單個學生資訊 4、輸出所有學生資訊 5、輸出所有學生資訊,按照成績由高到低排名 6、儲存並退出 #、操作中輸入錯誤時,按Ctrl+C跳轉到主選單 """) def top_menu_get_data(self): """ 獲取一級選單使用者輸入的命令 """ self.data = int(input()) return [self.data] def sub_menu1(self): """ 列印子選單1並收集資訊 子選單1用於新增學生資訊 """ print(""" 正在新增學生資訊: 請輸入學生姓名:""") self.name = input().strip() print(""" 請輸入學生年齡:""") self.age = int(input()) print(""" 請輸入學生成績""") self.score = int(input()) return [self.name, self.age, self.score] def sub_menu23_get_name(self): """ 收集子選單2、3的輸入資訊 子選單2、3作用是刪除或者查詢單個學生資訊 """ print(""" 請輸入學生姓名:""") self.name = input().strip() return [self.name] if __name__ == '__main__': print("Testing Menu Module") menu = Menu() print(menu.top_menu()) print(menu.top_menu_get_data()) print(menu.sub_menu1()) print(menu.sub_menu23_get_name())
student_managemeng.py
# -*- coding: UTF-8 -*- import sys import os class Student(): """ 學生類,用於儲存學生資訊 只能新增__slots__ = ['name', 'age', 'score']中的三個屬性,如需修改,請改變該列表內容 name: 學生姓名 age : 學生年齡 score:學生成績 """ __slots__ = ['name', 'age', 'score'] def __init__(self, name_str, age_int, score_int): """ 學生類的初始化函式 name_str :學生姓名 age_int :學生年齡 score_int:學生成績 """ self.name = name_str self.age = age_int self.score = score_int def __str__(self): """ Student類轉為字串資訊的函式 除錯時使用 """ return "%s : %s\n%s : %d\n %s: %d\n" % ("name".center(10),self.name, "age".center(10),self.age, "score".center(10),self.score) class Student_Info(): """ 學生資訊管理類 用於儲存多個學生資訊 包含屬性: 列表L:元素為Student類的例項 """ def __enter__(self): """ 錯誤處理機制的初始化函式 呼叫with語句時首先呼叫此函式,然後將返回值返回給as後的變數 功能: 開啟儲存學生資訊的檔案,將其資訊讀入記憶體中 """ try: file = open("student_info.txt",'rt') except: print("檔案未找到,請聯絡管理員...") exit(-1) self.L = list() for i in file: if i == '\n': break l = i.split() s = Student(l[0], int(l[1]), int(l[2])) self.L.append(s) print("學生資訊讀取成功...") file.close() return self def __exit__(self, exc_type, exc_value, exc_tb): """ 錯誤處理機制的資源回收函式 跳出with語句時呼叫此函式 功能: 發生錯誤的情況下儲存學生資訊到檔案中,防止資訊丟失 關閉檔案流檔案 """ file = open("student_info.txt",'wt') for i in self.L: s = "%s %d %d\n" % (i.name, i.age, i.score) file.write(s) file.close() def add_student(self, S): """ 新增學生資訊到列表L中 """ if isinstance(S, Student): self.L.append(S) return True return False @staticmethod def print_all(L): """ 類的靜態方法 引數為:元素為Student類的列表 功能:按照表格格式列印列表中所有學生資訊 """ if len(L) == 0: print("資料庫中沒有學生資訊,請先新增學生資訊") return print("\n|%s|" % ("name".center(15)), end='') print("%s|" % ("age".center(15)), end = '') print("%s|" % ("score".center(15))) for i in L: print("|%s|" % (i.name.center(15)), end='') print("%s|" % (str(i.age).center(15)), end = '') print("%s|" % (str(i.score).center(15))) def print_sorted(self): """ 將學生資訊按成績排序,並呼叫靜態方法print_all()按照格式列印 """ sorted_list = sorted(self.L, key = key_fun, reverse = True) self.print_all(sorted_list) def key_fun(s1): """ Student_Info類中規定排序規則的函式,按照分數排名,所以返回score """ return s1.score
main.py
# -*- coding: UTF-8 -*- import sys import os import student_management as sm import menu #用with語句塊進行操作,即使發生錯誤,也能進行資源釋放與資料儲存工作 #減小程式bug帶來的損失 with sm.Student_Info() as si: #初始化選單類例項,列印歡迎資訊 m = menu.Menu() m.welcome() while True: #列印1級選單 m.top_menu() #獲取使用者輸入的資訊,如果發生錯誤,則重新列印一級選單 try: op_data = m.top_menu_get_data() except: print("輸入不合法,請重新選擇") continue #使用者選擇新增學生資訊 if op_data[0] == 1: #獲取並新增學生資訊 try: l = m.sub_menu1() s = sm.Student(l[0], l[1], l[2]) if not si.add_student(s): print("\n新增失敗") print("\n資訊新增成功") except: print("輸入資料不合法,請重新選擇") #使用者選擇刪除學生資訊 elif op_data[0] == 2: #獲取學生姓名並刪除學生資訊,flag用於判斷學生資訊是否被刪除 #如果沒有被刪除,說明學生不存在,列印錯誤資訊 name = m.sub_menu23_get_name()[0] flag = False for i in range(len(si.L)): if si.L[i].name == name: del si.L[i] flag = True break if flag == False: print("學生不存在,刪除失敗") else: print("學生資訊刪除成功") #使用者選擇查詢單個學生資訊 elif op_data[0] == 3: #獲取學生姓名並查詢學生資訊,flag用於判斷學生資訊是否被列印 #如果沒有被列印,說明學生不存在,列印錯誤資訊 name = m.sub_menu23_get_name()[0] flag = False for i in range(len(si.L)): if si.L[i].name == name: print(si.L[i]) flag = True if flag == False: print("學生不存在,查詢失敗") #使用者選擇列印學生資訊,直接呼叫靜態函式列印 elif op_data[0] == 4: si.print_all(si.L) #使用者選擇按照成績排序列印學生資訊,直接呼叫函式 elif op_data[0] == 5: si.print_sorted() #使用者選擇退出,直接退出迴圈,程式下一步將退出with語句塊 #退出with語句塊後,程式自動呼叫Student_Info.__exit__()方法,儲存學生資訊,關閉檔案,退出 elif op_data[0] == 6: break
程式碼已上傳至百度網盤,地址為:
連結:https://pan.baidu.com/s/1VYvI24tHC0tst6tjt3wP4w
提取碼:evb2