python3.6實現(xiàn)學(xué)生信息管理系統(tǒng)
簡單版本學(xué)生信息管理系統(tǒng),用python基礎(chǔ)語法實現(xiàn),基于python 3.6
容錯率很高的代碼,做了很多異常處理功能,出錯也不會丟失信息
啟動時自動從文件中讀取已有學(xué)生信息,退出時自動保存
程序分3個模塊:
Menu:進行菜單管理
Student_managemant:進行學(xué)生信息管理
main:主函數(shù)
直接上代碼,有注釋
Menu.py
# -*- coding: UTF-8 -*- import sys import os class Menu(): """ 菜單管理類 作用:向控制臺打印學(xué)生信息,從控制臺獲取輸入信息,并進行錯誤處理 """ def welcome(self): """ 歡迎語句 """ print("\n歡迎來到 WilliamCode 學(xué)生信息管理系統(tǒng)") def top_menu(self): """ 一級菜單,提示使用者輸入命令 """ print(""" 請選擇要進行的操作: 1、添加學(xué)生信息 2、刪除學(xué)生信息 3、查詢單個學(xué)生信息 4、輸出所有學(xué)生信息 5、輸出所有學(xué)生信息,按照成績由高到低排名 6、保存并退出 #、操作中輸入錯誤時,按Ctrl+C跳轉(zhuǎn)到主菜單 """) def top_menu_get_data(self): """ 獲取一級菜單使用者輸入的命令 """ self.data = int(input()) return [self.data] def sub_menu1(self): """ 打印子菜單1并收集信息 子菜單1用于添加學(xué)生信息 """ print(""" 正在添加學(xué)生信息: 請輸入學(xué)生姓名:""") self.name = input().strip() print(""" 請輸入學(xué)生年齡:""") self.age = int(input()) print(""" 請輸入學(xué)生成績""") self.score = int(input()) return [self.name, self.age, self.score] def sub_menu23_get_name(self): """ 收集子菜單2、3的輸入信息 子菜單2、3作用是刪除或者查詢單個學(xué)生信息 """ print(""" 請輸入學(xué)生姓名:""") 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(): """ 學(xué)生類,用于保存學(xué)生信息 只能添加__slots__ = ['name', 'age', 'score']中的三個屬性,如需修改,請改變該列表內(nèi)容 name: 學(xué)生姓名 age : 學(xué)生年齡 score:學(xué)生成績 """ __slots__ = ['name', 'age', 'score'] def __init__(self, name_str, age_int, score_int): """ 學(xué)生類的初始化函數(shù) name_str :學(xué)生姓名 age_int :學(xué)生年齡 score_int:學(xué)生成績 """ self.name = name_str self.age = age_int self.score = score_int def __str__(self): """ Student類轉(zhuǎn)為字符串信息的函數(shù) 調(diào)試時使用 """ 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(): """ 學(xué)生信息管理類 用于存儲多個學(xué)生信息 包含屬性: 列表L:元素為Student類的實例 """ def __enter__(self): """ 錯誤處理機制的初始化函數(shù) 調(diào)用with語句時首先調(diào)用此函數(shù),然后將返回值返回給as后的變量 功能: 打開存儲學(xué)生信息的文件,將其信息讀入內(nèi)存中 """ try: file = open("student_info.txt",'rt') except: print("文件未找到,請聯(lián)系管理員...") 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("學(xué)生信息讀取成功...") file.close() return self def __exit__(self, exc_type, exc_value, exc_tb): """ 錯誤處理機制的資源回收函數(shù) 跳出with語句時調(diào)用此函數(shù) 功能: 發(fā)生錯誤的情況下存儲學(xué)生信息到文件中,防止信息丟失 關(guān)閉文件流文件 """ 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): """ 添加學(xué)生信息到列表L中 """ if isinstance(S, Student): self.L.append(S) return True return False @staticmethod def print_all(L): """ 類的靜態(tài)方法 參數(shù)為:元素為Student類的列表 功能:按照表格格式打印列表中所有學(xué)生信息 """ if len(L) == 0: print("數(shù)據(jù)庫中沒有學(xué)生信息,請先添加學(xué)生信息") 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): """ 將學(xué)生信息按成績排序,并調(diào)用靜態(tài)方法print_all()按照格式打印 """ sorted_list = sorted(self.L, key = key_fun, reverse = True) self.print_all(sorted_list) def key_fun(s1): """ Student_Info類中規(guī)定排序規(guī)則的函數(shù),按照分數(shù)排名,所以返回score """ return s1.score
main.py
# -*- coding: UTF-8 -*- import sys import os import student_management as sm import menu #用with語句塊進行操作,即使發(fā)生錯誤,也能進行資源釋放與數(shù)據(jù)保存工作 #減小程序bug帶來的損失 with sm.Student_Info() as si: #初始化菜單類實例,打印歡迎信息 m = menu.Menu() m.welcome() while True: #打印1級菜單 m.top_menu() #獲取用戶輸入的信息,如果發(fā)生錯誤,則重新打印一級菜單 try: op_data = m.top_menu_get_data() except: print("輸入不合法,請重新選擇") continue #用戶選擇添加學(xué)生信息 if op_data[0] == 1: #獲取并添加學(xué)生信息 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("輸入數(shù)據(jù)不合法,請重新選擇") #用戶選擇刪除學(xué)生信息 elif op_data[0] == 2: #獲取學(xué)生姓名并刪除學(xué)生信息,flag用于判斷學(xué)生信息是否被刪除 #如果沒有被刪除,說明學(xué)生不存在,打印錯誤信息 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("學(xué)生不存在,刪除失敗") else: print("學(xué)生信息刪除成功") #用戶選擇查詢單個學(xué)生信息 elif op_data[0] == 3: #獲取學(xué)生姓名并查詢學(xué)生信息,flag用于判斷學(xué)生信息是否被打印 #如果沒有被打印,說明學(xué)生不存在,打印錯誤信息 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("學(xué)生不存在,查詢失敗") #用戶選擇打印學(xué)生信息,直接調(diào)用靜態(tài)函數(shù)打印 elif op_data[0] == 4: si.print_all(si.L) #用戶選擇按照成績排序打印學(xué)生信息,直接調(diào)用函數(shù) elif op_data[0] == 5: si.print_sorted() #用戶選擇退出,直接退出循環(huán),程序下一步將退出with語句塊 #退出with語句塊后,程序自動調(diào)用Student_Info.__exit__()方法,保存學(xué)生信息,關(guān)閉文件,退出 elif op_data[0] == 6: break
代碼地址為:python學(xué)生信息管理系統(tǒng)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Django 忘記管理員或忘記管理員密碼 重設(shè)登錄密碼的方法
今天小編就為大家分享一篇Django 忘記管理員或忘記管理員密碼 重設(shè)登錄密碼的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05python3 cvs將數(shù)據(jù)讀取為字典的方法
今天小編就為大家分享一篇python3 cvs將數(shù)據(jù)讀取為字典的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python數(shù)據(jù)分析模塊pandas用法詳解
這篇文章主要介紹了Python數(shù)據(jù)分析模塊pandas用法,結(jié)合實例形式詳細分析了Python數(shù)據(jù)分析模塊pandas的功能、常見用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-09-09Python?sklearn預(yù)測評估指標(biāo)混淆矩陣計算示例詳解
這篇文章主要為大家介紹了Python?sklearn預(yù)測評估指標(biāo)混淆矩陣計算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02Python confluent kafka客戶端配置kerberos認證流程詳解
這篇文章主要介紹了Python confluent kafka客戶端配置kerberos認證流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10