婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python實現簡單的學生管理系統

python實現簡單的學生管理系統

熱門標簽:正安縣地圖標注app 地圖地圖標注有嘆號 qt百度地圖標注 舉辦過冬奧會的城市地圖標注 阿里電話機器人對話 遼寧智能外呼系統需要多少錢 電銷機器人系統廠家鄭州 螳螂科技外呼系統怎么用 400電話申請資格

本文實例為大家分享了python實現簡單學生管理系統的具體代碼,供大家參考,具體內容如下

學生管理系統

相信大家學各種語言的時候,練習總是會寫各種管理系統吧,管理系統主要有對數據的增刪查改操作,原理不難,適合作為練手的小程序

數據的結構

要保存數據就需要數據結構,比如c里面的結構體啊,python里面的列表,字典,還有類都是常用的數據類型
在這里,我使用了鏈表來作為學生數據的數據結構,
即 Node類 和 Student_LinkList類,來實現鏈表

數據的持久化

我們在程序中產生的數據是保存在內存中的,程序一旦退出,下次就不能恢復此次的數據了,因此需要把內存種的數據,保存到文件或數據庫中,存儲起來,這個過程就叫數據的持久化

本程序使用了python標準庫pickle提供的序列化方法dump()和load()來實現數據的持久化

配置文件

使用配置文件,可以方便程序中使用不同的子類實現,

本程序使用configparser來對配置文件解析
本程序配置文件名為 Student.ini

#Student.ini文件
[Student]
student = Student_LinkList

[Persistence]
persistence = Persistence_Pickle
file = student.pik

類之間的關系

Student #和學生數據有關的抽象類
±- Student_LinkList
Persistence #和持久化有關的抽象類
±- Persistence_Pickle
MyConfigure #和配置文件讀取有關的類
UI #和交互有關的父類
±- Cmd_UI

界面預覽

源碼

'''
使用單鏈表實現的學生管理系統
'''
import pickle
import abc
import configparser

class Student(abc.ABC):
  '''
  抽象學生類
  '''
  @abc.abstractmethod
  def add(self):
    '''
    增加學生結點
    '''
    pass

  @abc.abstractmethod
  def ladd(self):
    '''
    從左側增加學生結點
    '''
    pass

  @abc.abstractmethod
  def delete(self,id_):
    '''
    根據id值來刪除一個結點
    '''
    pass

  @abc.abstractmethod
  def delete_name(self,name):
    '''
    根據姓名來刪除一個結點
    '''
    pass

  @abc.abstractmethod
  def insert(self,idx,val):
    '''
    插入到指定的位置
    '''
    pass

  @abc.abstractmethod
  def show(self):
    '''
    顯示所有的學生結點
    '''
    pass

  @abc.abstractmethod
  def search_id(self):
    '''
    根據id查詢節點
    '''
    pass

  @abc.abstractmethod
  def search_name(self):
    '''
    根據name查詢節點
    '''

  @abc.abstractmethod
  def modity_id(self):
    '''
    根據id找到節點,然后修改
    '''
    pass



class Node(object):
  '''
  學生鏈表結點
  '''
  def __init__(self,id_: int,name: str,sex: str,age: int,score: int):
    self.id = id_
    self.name = name
    self.sex = sex
    self.age = age
    self.score = score

    self.next = None

  def modity(self,id_,name,sex,age,score):
    '''
    修改
    '''
    self.id = id_
    self.name = name
    self.sex = sex
    self.age = age
    self.score = score


  def __str__(self):
    '''
    用于顯示輸出
    '''
    return f"[學生:{self.id:^2}]-->name:{self.name:^10}sex:{self.sex:^10}age:{self.age:^10}score:{self.score:^10}"

class Student_LinkList(Student):
  '''
  學生鏈表
  '''
  def __init__(self):
    self.head = Node(-1,'head','-1',-1,-1)
    self.length = 0
    self.tail = self.head #尾部結點用于尾插

  def add(self,id_,name,sex,age,score):
    '''
    添加一個學生結點,尾插
    '''
    #print('當前tail的值',self.tail)
    temp = Node(id_,name,sex,age,score)
    self.tail.next = temp 
    self.tail = self.tail.next

    self.length += 1
    print('[info]:添加成功')

  def ladd(self,id_,name,sex,age,score):
    '''
    添加一個學生,頭插
    '''
    temp = Node(id_,name,sex,age,score)
    temp.next = self.head.next
    self.head.next = temp

    if self.tail == self.head:
      self.tail = temp

    self.length += 1
    print('[info]:添加成功')

  def delete(self,id_):
    '''
    根據id值來刪除一個結點,用迭代實現
    '''
    p = self.head
    while p.next != None and p.next.id != id_:
      p = p.next

    if p.next == None:
      print('[error]:找不到id')
      return -1
    else:
      temp = p.next
      p.next = temp.next
      #如果刪除的是尾結點,還要移動tail
      if temp.next == None:
        self.tail = p
      del temp
    print('[info]:刪除成功')

  def delete_name(self,name):
    '''
    根據姓名來刪除一個結點,用遞歸實現
    '''
    def _func(node: Node,name: str):
      '''
      遞歸函數
      '''
      #到了尾巴節點了,還沒有找到
      if node.next == None:
        print('[info]:找不到name')
        return False
      elif node.next.name == name:
        temp = node.next
        node.next = temp.next
        #如果刪除的是尾結點,還要移動tail
        if temp.next == None:
          self.tail = node
        del temp
        print('[info]:刪除成功')
        return True
      else:
        return _func(node.next,name)

    t = self.head
    return _func(t,name)

  def insert(self,idx,id_,name,sex,age,score):
    '''
    在指定位置插入數據
    '''
    if idx > self.length or idx == 0:
      print(f'[error]:你輸入的索引非法(1-{self.length})')
      return 0
    p,cur = self.head,0
    while p != None and cur  idx-1:
      p = p.next

    if cur  idx-1:
      return -1
    else:
      temp = Node(id_,name,sex,age,score)
      temp.next = p.next
      p.next = temp
      return True
    print('[info]:插入成功')

  def search_id(self,id_):
    '''
    根據id查詢節點
    '''
    p = self.head
    while p != None and p.id != id_:
      p = p.next
    if p == None:
      return -1
    else:
      return p

  def search_name(self,name):
    '''
    根據name查詢節點
    '''
    p = self.head
    
    def _func(node: Node,name: str):
      '''
      遞歸函數
      '''
      if node == None:
        return -1
      elif node.name == name:
        return node
      return _func(node.next,name)

    return _func(p,name)

  def modity_id(self,id0,id_,name,sex,age,score):
    '''
    根據id找到節點,然后修改
    '''
    node = self.search_id(id0)
    if node == -1:
      print('[error]:找不到該id')
      return -1
    else:
      node.modity(id_,name,sex,age,score)


  def show(self):
    '''
    顯示所有的學生結點,迭代
    '''
    print(f'\n{"-"*25}以下是系統內數據{"-"*25}')
    temp = []
    p = self.head
    while p != None:
      temp.append(p)
      p = p.next
    return temp

class Student_Array():
  '''
  用數組實現學生數據存儲
  '''
  pass

class Student_Queue():
  '''
  用隊列實現
  '''
  pass

class Student_Dict():
  '''
  用隊列實現
  '''
  pass

class Persistence(abc.ABC):
  '''
  鏈表數據的持久化
  '''
  @abc.abstractmethod
  def save(self):
    '''
    把對象保存
    '''
    pass

  @abc.abstractmethod
  def load(self):
    '''
    加載對象
    '''
    pass

class Persistence_Pickle(Persistence):
  '''
  使用pickle來序列化
  '''
  def __init__(self,cls: Student,file_):
    self.filename = file_
    self.obj = None
    self.cls = cls

  def save(self):
    with open(self.filename,'wb') as f:
      pickle.dump(self.obj,f)

  def load(self):
    try:
      with open(self.filename,'rb') as f:
        temp = pickle.load(f)
    except:
      temp = globals()[self.cls]()
    print('返回temp:',type(temp))
    self.obj = temp
    return temp

class Persistence_File(Persistence):
  '''
  使用文件來持久化
  '''
  pass

class Persistence_Mysql(Persistence):
  '''
  使用Mysql數據庫來持久化
  '''
  pass

class Persistence_Socket(Persistence):
  '''
  使用遠程套接字持久化
  '''
  pass

class MyConfigure(object):
  '''
  用來讀取配置文件的類
  '''
  def __init__(self):
    self.config = configparser.ConfigParser()

  def save(self):
    '''
    保存配置文件
    '''
    with open('Student.ini','w') as f:
      self.config.write(f)

  def load(self):
    '''
    加載配置文件
    '''
    self.config.read('Student.ini')

  def get_student_class(self):
    '''
    獲得Student該使用哪個子類
    '''
    return self.config['Student']['student']

  def get_persistence_class(self):
    '''
    獲得持久化,該使用那個類,
    如果是Pickle或文件,還有file作為保存的文件名
    '''
    temp = {}
    temp['persistence'] = self.config['Persistence']['persistence']
    if 'Persistence_Pickle' in temp['persistence']:
      temp['file'] = self.config['Persistence']['file']
    return temp

class UI(object):
  '''
  界面交互
  '''
  def __init__(self):
    self.config = MyConfigure()
    self.config.load()
    s_class = self.config.get_student_class()
    p_class = self.config.get_persistence_class()

    self.persistence = globals()[p_class['persistence']](s_class,p_class['file'])
    self.student = self.persistence.load()
    print('實例化成功:',self.student,self.persistence)

  def save(self):
    '''
    把數據保存
    '''
    self.persistence.save()

  def quit(self):
    '''
    退出:先保存配置,然后退出
    '''
    self.config.save()
    self.save()

  def _show(self):
    '''
    顯示所有學生節點
    '''
    return self.student.show()


  def _add(self,direction,*temp):
    '''
    增加學生結點,
    direction 1左添加,2右添加
    '''
    if direction == 1:
      self.student.ladd(*temp)
    elif direction == 2:
      self.student.add(*temp)

  def _delete(self,attribute: int,val: str):
    '''
    刪除學生節點
    attribute: 需要根據哪個屬性刪除,1.id 或 2.name
    '''
    if attribute == 1:
      self.student.delete(val)
    elif attribute == 2:
      self.student.delete_name(val)

  def _insert(self,idx,*temp):
    '''
    把學生節點插入到指定的位置
    '''
    self.student.insert(idx,*temp)

  def _search(self,attribute,val):
    '''
    查詢
    '''
    if attribute == 1:
      return self.student.search_id(val)
    elif attribute == 2:
      return self.student.search_name(val)

  def _modity(self,attribute,id_,*temp):
    '''
    修改
    '''
    if attribute == 1:
      self.student.modity_id(id_,*temp)
    elif attribute == 2:
      print('[info]:因為沒實現,所以什么也不做')
      pass #根據name修改沒有寫




class Cmd_UI(UI):
  '''
  命令行的交互界面
  '''
  def __init__(self):
    super(Cmd_UI,self).__init__()

  def get_input_1_2(self,info: str):
    '''
    獲得輸入,返回1或者2
    info: 描述輸入的信息
    '''
    x = None
    while x == None:
      temp = input(info)
      if temp == '1':
        x = 1
      elif temp == '2':
        x = 2
      else:
        print('你只能輸入1或者2')
    return x

  def get_input_arg(self):
    '''
    獲得用戶的輸入構造學生節點
    '''
    id_ = input('請輸入id')
    name = input('請輸入姓名')
    sex = input('請輸入性別')
    age = input('請輸入年齡')
    score = input('請輸入成績')
    return (id_,name,sex,age,score)

  def delete(self):
    '''
    刪除節點
    '''
    info = '你想要根據哪個屬性刪除節點:1.id 2.name'
    attribute = self.get_input_1_2(info)
    val = input('輸入你想要刪除的值:')
    self._delete(attribute,val)

  def show(self):
    '''
    顯示
    '''
    rel = self._show()
    for i in rel:
      print(i)

  def add(self):
    '''
    增加學生結點
    '''
    info = '你想要插入的位置:1.左邊 2.右邊'
    direction = self.get_input_1_2(info)
    arg = self.get_input_arg()
    self._add(direction,*arg)

  def insert(self):
    '''
    新學生,插入到指定的位置
    '''
    idx = int(input('輸入要插入的位置'))
    temp = self.get_input_arg()
    self._insert(idx,*temp)

  def search(self):
    '''
    查詢學生
    '''
    info = '你想要根據哪個屬性搜索節點:1.id 2.name'
    attribute = self.get_input_1_2(info)
    val = input('輸入你想要查詢的值:')

    print(self._search(attribute,val))

  def modity(self):
    '''
    修改學生信息
    '''
    info = '你想要根據哪個屬性搜索節點:1.id 2.name'
    attribute = self.get_input_1_2(info)
    val_ = input('輸入要查詢的值:')
    temp = self.get_input_arg()
    self._modity(attribute,val_,*temp)

  def main(self):
    '''
    主流程
    '''
    info = '''
    *******************
    *kalpa學生管理系統*
    *  0.顯示數據  *
    *  1.增加數據  *
    *  2.刪除數據  *
    *  3.查詢數據  *
    *  4.修改數據  *
    *  5.保存并退出 *
    *******************
    '''
    print(info)
    a = '0'
    while a in ['0','1','2','3','4','5']:
      if a == '0':
        self.show()
      elif a == '1':
        self.add()
      elif a == '2':
        self.delete()
      elif a == '3':
        self.search()
      elif a == '4':
        self.modity()
      elif a == '5':
        self.quit()
        return
      a = input('>>')


if __name__ == "__main__":
  ui = Cmd_UI()
  ui.main()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python實現學生管理系統源碼
  • 基于python制作簡易版學生信息管理系統
  • Python實現學生管理系統的完整代碼(面向對象)
  • 使用python實現學生信息管理系統
  • python實現學生信息管理系統源碼
  • 利用Python實現學生信息管理系統的完整實例
  • 基于Python實現簡單學生管理系統
  • 用python實現學生管理系統
  • python實現學生管理系統開發
  • python實現簡單學生信息管理系統
  • python學生管理系統的實現
  • Python實戰之實現簡易的學生選課系統

標簽:興安盟 合肥 隨州 阜新 信陽 濟源 淘寶好評回訪 昭通

巨人網絡通訊聲明:本文標題《python實現簡單的學生管理系統》,本文關鍵詞  python,實現,簡單,的,學生,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python實現簡單的學生管理系統》相關的同類信息!
  • 本頁收集關于python實現簡單的學生管理系統的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    蜜桃av一区二区| 91在线视频播放| 丰满少妇久久久久久久| 欧美日本在线播放| 亚洲女同ⅹxx女同tv| 九九热在线视频观看这里只有精品| www.性欧美| 久久品道一品道久久精品| 午夜精品久久久| 一本到不卡免费一区二区| 中文一区一区三区高中清不卡| 美女网站一区二区| 在线播放91灌醉迷j高跟美女| 亚洲人成网站影音先锋播放| 成人黄色电影在线| 久久九九全国免费| 国精品**一区二区三区在线蜜桃| 日韩精品一区二区在线| 日韩av在线播放中文字幕| 欧美午夜片在线看| 亚洲免费观看在线观看| 99久久99久久精品国产片果冻| 久久在线观看免费| 国产一区三区三区| 国产日韩综合av| 懂色av噜噜一区二区三区av | 免费一级片91| 在线成人高清不卡| 日本成人在线电影网| 欧美一区二区视频免费观看| 日韩av一级电影| 久久一夜天堂av一区二区三区| 久久99久久99| 2022国产精品视频| 成人免费av网站| 亚洲另类中文字| 欧美精品久久久久久久久老牛影院 | 久久久久久久综合| 国产成人精品亚洲日本在线桃色 | 免费观看久久久4p| 精品一区二区免费看| 图片区小说区区亚洲影院| 国产高清视频一区| 亚洲欧美偷拍卡通变态| 欧美日韩性生活| 奇米777欧美一区二区| 欧美精品一区二区三区久久久| 国产.欧美.日韩| 一区二区三区国产精华| 91精品在线观看入口| 国产白丝网站精品污在线入口| 《视频一区视频二区| 欧美日本在线看| 国产大片一区二区| 亚洲午夜私人影院| 久久老女人爱爱| 欧美影院精品一区| 国产一区二区不卡在线| 亚洲一区二区三区四区的| 精品国产麻豆免费人成网站| 91美女蜜桃在线| 精品伊人久久久久7777人| 中文字幕一区二区三区在线播放| 欧美精品色综合| 丰满放荡岳乱妇91ww| 热久久免费视频| 亚洲天天做日日做天天谢日日欢| 欧美一区二区三区免费视频| 不卡在线观看av| 日韩和的一区二区| |精品福利一区二区三区| 精品久久久久一区| 欧美三级日韩在线| 99久久婷婷国产综合精品| 美女任你摸久久| 中文字幕在线一区免费| 久久久久久日产精品| 91精品在线麻豆| 在线观看欧美精品| 9l国产精品久久久久麻豆| 久久疯狂做爰流白浆xx| 亚洲va韩国va欧美va| 中文字幕久久午夜不卡| 91国产免费看| 99久久伊人久久99| 国产成人免费视频网站 | 久久久久久久精| 欧美夫妻性生活| 欧美亚洲动漫另类| 成人动漫精品一区二区| 国产精品自在在线| 蜜臀av性久久久久蜜臀av麻豆| 亚洲一二三四在线| 亚洲日韩欧美一区二区在线| 欧美国产丝袜视频| 欧美精品一区二区高清在线观看 | 欧美疯狂做受xxxx富婆| 91免费看片在线观看| 成人h版在线观看| 国产99久久久国产精品免费看| 国产一区 二区| 国产激情一区二区三区四区| 极品尤物av久久免费看| 国产在线精品视频| 国产综合成人久久大片91| 久久国产精品无码网站| 美女一区二区三区在线观看| 日韩电影在线看| 日本一不卡视频| 日本在线不卡视频一二三区| 国产日韩精品久久久| 精品免费日韩av| 欧美成人video| 欧美日韩一区成人| 亚洲一二三四在线观看| 国产日韩欧美在线一区| 91九色02白丝porn| 国产精品小仙女| 亚洲成人激情综合网| 欧美日韩亚洲综合| 色综合久久久久综合| 91最新地址在线播放| 久久99久久精品| 国产精品网曝门| 久久人人爽爽爽人久久久| 久久久精品黄色| 国产嫩草影院久久久久| 中文字幕精品三区| 亚洲精品第一国产综合野| 亚洲成人综合视频| 国模套图日韩精品一区二区| 国产成人a级片| 成人激情av网| 欧美性猛交xxxx乱大交退制版| 欧美精品在线观看一区二区| 日韩精品一区二区三区视频在线观看 | 男女男精品网站| 国产91在线观看丝袜| 欧美三区免费完整视频在线观看| 精品国产乱码久久久久久久久| 国产精品嫩草久久久久| 午夜一区二区三区视频| 国产福利精品导航| 欧美写真视频网站| 国产欧美一区二区精品性| 亚洲一区二区三区四区五区中文| 韩日欧美一区二区三区| 在线观看日产精品| 国产日产欧美精品一区二区三区| 亚洲网友自拍偷拍| 国产ts人妖一区二区| 这里只有精品免费| 亚洲日本一区二区| 国产九九视频一区二区三区| 在线观看国产一区二区| 欧美高清在线精品一区| 人人超碰91尤物精品国产| 99精品视频中文字幕| 久久青草国产手机看片福利盒子| 婷婷国产在线综合| 97久久超碰精品国产| 国产日韩av一区| 美脚の诱脚舐め脚责91 | 亚洲免费视频成人| 精品一区二区三区影院在线午夜| 久久国产剧场电影| 激情综合一区二区三区| 成人午夜在线免费| 日韩美女在线视频| 亚洲自拍偷拍综合| 99久久er热在这里只有精品15| 日韩一级黄色片| 亚洲激情图片小说视频| 国产黄色精品视频| 日韩午夜精品视频| 亚洲欧美另类久久久精品2019| 国产又粗又猛又爽又黄91精品| 欧美性大战久久久久久久蜜臀| 97久久久精品综合88久久| 久久久久久麻豆| 久久电影国产免费久久电影 | 日韩午夜精品视频| 亚洲欧洲精品天堂一级 | 成人白浆超碰人人人人| 精品99一区二区| 精品一区二区三区久久久| 一区二区三区波多野结衣在线观看| 蜜臂av日日欢夜夜爽一区| 制服视频三区第一页精品| 国产精品二三区| 99免费精品视频| 久久久久久久久岛国免费| 国产麻豆成人精品| 久久精品一二三| 免费日本视频一区| 精品国产一区二区三区av性色| 亚洲综合在线电影| 欧美亚洲图片小说| 亚洲第一久久影院| 色狠狠综合天天综合综合|