最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python3.6實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

 更新時(shí)間:2019年02月21日 10:07:54   作者:WilliamCode  
這篇文章主要為大家詳細(xì)介紹了python3.6實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

簡單版本學(xué)生信息管理系統(tǒng),用python基礎(chǔ)語法實(shí)現(xiàn),基于python 3.6

容錯(cuò)率很高的代碼,做了很多異常處理功能,出錯(cuò)也不會丟失信息

啟動時(shí)自動從文件中讀取已有學(xué)生信息,退出時(shí)自動保存

程序分3個(gè)模塊:

Menu:進(jìn)行菜單管理

Student_managemant:進(jìn)行學(xué)生信息管理

main:主函數(shù)

直接上代碼,有注釋 

Menu.py

# -*- coding: UTF-8 -*-
import sys
import os
 
class Menu():
 """
 菜單管理類
 作用:向控制臺打印學(xué)生信息,從控制臺獲取輸入信息,并進(jìn)行錯(cuò)誤處理
 """
 
 
 def welcome(self):
 """
  歡迎語句
 """
 print("\n歡迎來到 WilliamCode 學(xué)生信息管理系統(tǒng)")
 
 def top_menu(self):
 """
  一級菜單,提示使用者輸入命令
 """
 print("""
請選擇要進(jìn)行的操作:
 1、添加學(xué)生信息
 2、刪除學(xué)生信息
 3、查詢單個(gè)學(xué)生信息
 4、輸出所有學(xué)生信息
 5、輸出所有學(xué)生信息,按照成績由高到低排名
 6、保存并退出
 #、操作中輸入錯(cuò)誤時(shí),按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作用是刪除或者查詢單個(gè)學(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']中的三個(gè)屬性,如需修改,請改變該列表內(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)試時(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é)生信息管理類
 用于存儲多個(gè)學(xué)生信息
 包含屬性:
 列表L:元素為Student類的實(shí)例
 """
 
 def __enter__(self):
 """
  錯(cuò)誤處理機(jī)制的初始化函數(shù)
  調(diào)用with語句時(shí)首先調(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):
 """
  錯(cuò)誤處理機(jī)制的資源回收函數(shù)
  跳出with語句時(shí)調(diào)用此函數(shù)
  功能:
  發(fā)生錯(cuò)誤的情況下存儲學(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ù),按照分?jǐn)?shù)排名,所以返回score
 """
 return s1.score

main.py

# -*- coding: UTF-8 -*-
import sys
import os
import student_management as sm
import menu
 
#用with語句塊進(jìn)行操作,即使發(fā)生錯(cuò)誤,也能進(jìn)行資源釋放與數(shù)據(jù)保存工作
#減小程序bug帶來的損失
with sm.Student_Info() as si:
 
 #初始化菜單類實(shí)例,打印歡迎信息
 m = menu.Menu()
 m.welcome()
 while True:
 
 #打印1級菜單
 m.top_menu()
 
 #獲取用戶輸入的信息,如果發(fā)生錯(cuò)誤,則重新打印一級菜單
 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é)生不存在,打印錯(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)
 
 #用戶選擇按照成績排序打印學(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í)有所幫助,也希望大家多多支持腳本之家。

  • Python實(shí)現(xiàn)嵌套列表的7中方法總結(jié)

    Python實(shí)現(xiàn)嵌套列表的7中方法總結(jié)

    這篇文章主要來給大家講解一個(gè)Python的進(jìn)階知識點(diǎn):如何將一個(gè)嵌套的大列表展開形成一個(gè)列表。小編提供了7種方法供大家學(xué)習(xí)參考,希望大家能喜歡
    2023-03-03
  • Python中的super用法詳解

    Python中的super用法詳解

    這篇文章主要介紹了Python中的super用法詳解,本文講解了關(guān)于super問題的發(fā)現(xiàn)與提出、走進(jìn)Python的源碼世界分析super的實(shí)現(xiàn)、延續(xù)的討論super等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • python制作填詞游戲步驟詳解

    python制作填詞游戲步驟詳解

    在本文里我們給大家整理了關(guān)于python制作填詞游戲的具體步驟以及實(shí)例代碼,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • Python SELENIUM上傳文件或圖片實(shí)現(xiàn)過程

    Python SELENIUM上傳文件或圖片實(shí)現(xiàn)過程

    這篇文章主要介紹了Python SELENIUM上傳文件或圖片實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 基于Python+Turtle實(shí)現(xiàn)繪制簡易的大風(fēng)車

    基于Python+Turtle實(shí)現(xiàn)繪制簡易的大風(fēng)車

    大風(fēng)車,吱呀吱呦呦地轉(zhuǎn),這里的風(fēng)景呀真好看!天好看,地好看……一首熟悉的歌曲,是否已經(jīng)把你拉回了童年?本文將用Turtle庫繪制簡易的大風(fēng)車,需要的可以參考一下
    2022-06-06
  • Python3 hashlib密碼散列算法原理詳解

    Python3 hashlib密碼散列算法原理詳解

    這篇文章主要介紹了Python3 hashlib密碼散列算法原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python基于turtle繪制幾何圖形

    python基于turtle繪制幾何圖形

    turtle又稱為海龜繪圖,是Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所創(chuàng)造的 Logo 編程語言的python實(shí)現(xiàn)。turtle是基于tkinter圖形界面設(shè)計(jì)的。
    2021-06-06
  • pytorch 更改預(yù)訓(xùn)練模型網(wǎng)絡(luò)結(jié)構(gòu)的方法

    pytorch 更改預(yù)訓(xùn)練模型網(wǎng)絡(luò)結(jié)構(gòu)的方法

    今天小編就為大家分享一篇pytorch 更改預(yù)訓(xùn)練模型網(wǎng)絡(luò)結(jié)構(gòu)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python ADF 單位根檢驗(yàn) 如何查看結(jié)果的實(shí)現(xiàn)

    Python ADF 單位根檢驗(yàn) 如何查看結(jié)果的實(shí)現(xiàn)

    這篇文章主要介紹了Python ADF 單位根檢驗(yàn) 如何查看結(jié)果的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 最新評論

    乌拉特后旗| 青神县| 沛县| 玉树县| 崇州市| 忻州市| 西青区| 永济市| 巴林右旗| 南江县| 上高县| 淮阳县| 临桂县| 淮阳县| 合山市| 江阴市| 襄汾县| 廊坊市| 荔波县| 黑河市| 内丘县| 虞城县| 横山县| 通河县| 和硕县| 吉林市| 津市市| 麦盖提县| 会东县| 垦利县| 尼玛县| 望奎县| 永宁县| 高尔夫| 正蓝旗| 佳木斯市| 司法| 靖远县| 板桥市| 新化县| 嵊泗县|