python3.6實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
簡(jiǎn)單版本學(xué)生信息管理系統(tǒng),用python基礎(chǔ)語(yǔ)法實(shí)現(xiàn),基于python 3.6
容錯(cuò)率很高的代碼,做了很多異常處理功能,出錯(cuò)也不會(huì)丟失信息
啟動(dòng)時(shí)自動(dòng)從文件中讀取已有學(xué)生信息,退出時(shí)自動(dòng)保存
程序分3個(gè)模塊:
Menu:進(jìn)行菜單管理
Student_managemant:進(jìn)行學(xué)生信息管理
main:主函數(shù)
直接上代碼,有注釋
Menu.py
# -*- coding: UTF-8 -*-
import sys
import os
class Menu():
"""
菜單管理類
作用:向控制臺(tái)打印學(xué)生信息,從控制臺(tái)獲取輸入信息,并進(jìn)行錯(cuò)誤處理
"""
def welcome(self):
"""
歡迎語(yǔ)句
"""
print("\n歡迎來到 WilliamCode 學(xué)生信息管理系統(tǒng)")
def top_menu(self):
"""
一級(jí)菜單,提示使用者輸入命令
"""
print("""
請(qǐng)選擇要進(jìn)行的操作:
1、添加學(xué)生信息
2、刪除學(xué)生信息
3、查詢單個(gè)學(xué)生信息
4、輸出所有學(xué)生信息
5、輸出所有學(xué)生信息,按照成績(jī)由高到低排名
6、保存并退出
#、操作中輸入錯(cuò)誤時(shí),按Ctrl+C跳轉(zhuǎn)到主菜單
""")
def top_menu_get_data(self):
"""
獲取一級(jí)菜單使用者輸入的命令
"""
self.data = int(input())
return [self.data]
def sub_menu1(self):
"""
打印子菜單1并收集信息
子菜單1用于添加學(xué)生信息
"""
print("""
正在添加學(xué)生信息:
請(qǐng)輸入學(xué)生姓名:""")
self.name = input().strip()
print("""
請(qǐng)輸入學(xué)生年齡:""")
self.age = int(input())
print("""
請(qǐng)輸入學(xué)生成績(jī)""")
self.score = int(input())
return [self.name, self.age, self.score]
def sub_menu23_get_name(self):
"""
收集子菜單2、3的輸入信息
子菜單2、3作用是刪除或者查詢單個(gè)學(xué)生信息
"""
print("""
請(qǐng)輸入學(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']中的三個(gè)屬性,如需修改,請(qǐng)改變?cè)摿斜韮?nèi)容
name: 學(xué)生姓名
age : 學(xué)生年齡
score:學(xué)生成績(jī)
"""
__slots__ = ['name', 'age', 'score']
def __init__(self, name_str, age_int, score_int):
"""
學(xué)生類的初始化函數(shù)
name_str :學(xué)生姓名
age_int :學(xué)生年齡
score_int:學(xué)生成績(jī)
"""
self.name = name_str
self.age = age_int
self.score = score_int
def __str__(self):
"""
Student類轉(zhuǎn)為字符串信息的函數(shù)
調(diào)試時(shí)使用
"""
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é)生信息管理類
用于存儲(chǔ)多個(gè)學(xué)生信息
包含屬性:
列表L:元素為Student類的實(shí)例
"""
def __enter__(self):
"""
錯(cuò)誤處理機(jī)制的初始化函數(shù)
調(diào)用with語(yǔ)句時(shí)首先調(diào)用此函數(shù),然后將返回值返回給as后的變量
功能:
打開存儲(chǔ)學(xué)生信息的文件,將其信息讀入內(nèi)存中
"""
try:
file = open("student_info.txt",'rt')
except:
print("文件未找到,請(qǐng)聯(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):
"""
錯(cuò)誤處理機(jī)制的資源回收函數(shù)
跳出with語(yǔ)句時(shí)調(diào)用此函數(shù)
功能:
發(fā)生錯(cuò)誤的情況下存儲(chǔ)學(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ù)庫(kù)中沒有學(xué)生信息,請(qǐng)先添加學(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é)生信息按成績(jī)排序,并調(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ù),按照分?jǐn)?shù)排名,所以返回score
"""
return s1.score
main.py
# -*- coding: UTF-8 -*-
import sys
import os
import student_management as sm
import menu
#用with語(yǔ)句塊進(jìn)行操作,即使發(fā)生錯(cuò)誤,也能進(jìn)行資源釋放與數(shù)據(jù)保存工作
#減小程序bug帶來的損失
with sm.Student_Info() as si:
#初始化菜單類實(shí)例,打印歡迎信息
m = menu.Menu()
m.welcome()
while True:
#打印1級(jí)菜單
m.top_menu()
#獲取用戶輸入的信息,如果發(fā)生錯(cuò)誤,則重新打印一級(jí)菜單
try:
op_data = m.top_menu_get_data()
except:
print("輸入不合法,請(qǐng)重新選擇")
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ù)不合法,請(qǐng)重新選擇")
#用戶選擇刪除學(xué)生信息
elif op_data[0] == 2:
#獲取學(xué)生姓名并刪除學(xué)生信息,flag用于判斷學(xué)生信息是否被刪除
#如果沒有被刪除,說明學(xué)生不存在,打印錯(cuò)誤信息
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é)生信息刪除成功")
#用戶選擇查詢單個(gè)學(xué)生信息
elif op_data[0] == 3:
#獲取學(xué)生姓名并查詢學(xué)生信息,flag用于判斷學(xué)生信息是否被打印
#如果沒有被打印,說明學(xué)生不存在,打印錯(cuò)誤信息
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)
#用戶選擇按照成績(jī)排序打印學(xué)生信息,直接調(diào)用函數(shù)
elif op_data[0] == 5:
si.print_sorted()
#用戶選擇退出,直接退出循環(huán),程序下一步將退出with語(yǔ)句塊
#退出with語(yǔ)句塊后,程序自動(dòng)調(diào)用Student_Info.__exit__()方法,保存學(xué)生信息,關(guān)閉文件,退出
elif op_data[0] == 6:
break
代碼地址為:python學(xué)生信息管理系統(tǒng)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python3.6+django2.0開發(fā)一套學(xué)員管理系統(tǒng)
- python3實(shí)現(xiàn)名片管理系統(tǒng)
- python實(shí)現(xiàn)學(xué)員管理系統(tǒng)
- python Tkinter版學(xué)生管理系統(tǒng)
- python實(shí)現(xiàn)停車管理系統(tǒng)
- python實(shí)現(xiàn)汽車管理系統(tǒng)
- python實(shí)現(xiàn)名片管理系統(tǒng)
- python實(shí)現(xiàn)自動(dòng)登錄后臺(tái)管理系統(tǒng)
- Python3實(shí)現(xiàn)的簡(jiǎn)單工資管理系統(tǒng)示例
相關(guān)文章
Python實(shí)現(xiàn)嵌套列表的7中方法總結(jié)
Python SELENIUM上傳文件或圖片實(shí)現(xiàn)過程
基于Python+Turtle實(shí)現(xiàn)繪制簡(jiǎn)易的大風(fēng)車
pytorch 更改預(yù)訓(xùn)練模型網(wǎng)絡(luò)結(jié)構(gòu)的方法
Python ADF 單位根檢驗(yàn) 如何查看結(jié)果的實(shí)現(xiàn)

