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

python實(shí)現(xiàn)簡(jiǎn)易版學(xué)生成績(jī)管理系統(tǒng)

 更新時(shí)間:2020年06月22日 16:06:07   作者:Code進(jìn)階狼人  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)易版學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

300來(lái)行python代碼實(shí)現(xiàn)簡(jiǎn)易版學(xué)生成績(jī)管理系統(tǒng),供大家參考,具體內(nèi)容如下

使用鏈表來(lái)實(shí)現(xiàn)

class Node(object):
 def __init__(self, data, pointer):
 self.data = data
 self.next = pointer


# 創(chuàng)建單鏈表
class SingleLinkedList(object):
 def __init__(self):
 self.head = Node(None, None)
 self.point = self.head

 def append(self, data):
 # 末尾追加節(jié)點(diǎn)
 new_node = Node(data, None)
 self.point.next = new_node
 self.point = new_node

 def insert(self, data, find):
 # 插入數(shù)據(jù)(前向插入數(shù)據(jù))
 if not self.head.next:
  print('鏈表為空')
  return None
 new_node = Node(data, None)
 self.point = self.head
 while self.point.next.data != find:
  self.point = self.point.next
  if self.point.next is None:
  print('沒(méi)有找到該元素')
  return None

 new_node.next = self.point.next
 self.point.next = new_node

 def delete(self, find):
 # 刪除節(jié)點(diǎn)
 # 空鏈表
 if not self.head.next:
  print('鏈表為空')
  return None
 self.point = self.head
 while self.point.next.data != find:
  self.point = self.point.next
 pointer = self.point.next
 self.point.next = self.point.next.next
 del pointer

 def insert_after_head(self, data):

 node = Node(data, None)
 # bug 產(chǎn)生沒(méi)寫(xiě) if 返回
 if not self.head.next:
  self.head.next = node
  return None
 node.next = self.head.next
 self.head.next = node

 def reverse(self):
 local_list = SingleLinkedList()
 self.point = self.head
 count = 0
 while self.point.next:
  count += 1
  self.point = self.point.next
  data = self.point.data
  local_list.insert_after_head(data)
 return local_list

 def get_size(self):
 count = 0
 self.point = self.head
 while self.point.next:
  self.point = self.point.next
  count += 1
 return count

 def delete_by_tail(self, num):
 size = self.get_size()
 assert (num <= size)
 assert (num > 0)
 pos = size - num
 count = 0
 self.point = self.head
 while count < size:
  count += 1
  self.point = self.point.next
  if count == pos:
  pointer = self.point.next
  self.point.next = self.point.next.next
  del pointer

 # 求中間節(jié)點(diǎn) 只允許遍歷一次
 def quick_middle(self):
 slow_point = self.head
 fast_point = self.head
 while fast_point.next.next:
  slow_point = slow_point.next
  fast_point = fast_point.next.next
  if not fast_point.next:
  break
 if fast_point.next:
  slow_point = slow_point.next
 return slow_point.data

 def check_circle(self):
 pass

 def sort(self):
 # get_size()改變了 self.point 的指向
 length = self.get_size()
 i, j = 0, 0
 flag = 1
 while i < length:
  self.point = self.head.next
  while j < length - i - 1:
  if self.point.data > self.point.next.data:
   temp = self.point.data
   self.point.data = self.point.next.data
   self.point.next.data = temp
  self.point = self.point.next
  j += 1
  flag = 0
  if flag:
  break
  i += 1
  j = 0

 def print(self):
 # 打印結(jié)點(diǎn)
 self.point = self.head
 while self.point.next:
  self.point = self.point.next
  print('{} ->'.format(self.point.data), end=' ')
 print('')


class StudentControlSystem(SingleLinkedList):
 # 打印菜單
 def print_menu(self):
 print('*' * 30)
 print('-' * 13 + '菜單' + '-' * 13)
 print('1.增加學(xué)生信息')
 print('2.刪除學(xué)生信息')
 print('3.修改學(xué)生信息')
 print('4.查找學(xué)生信息')
 print('5.顯示所有信息')
 print('6.排序')
 print('0.退出程序')
 print('*' * 30)

 # 用戶輸入
 def user_input(self, item):
 try:
  item = int(item)
 except:
  pass
 # 增加信息
 if item == 1:
  self.add_info()
 # 刪除信息
 elif item == 2:
  find = input('請(qǐng)輸入刪除的學(xué)號(hào):')
  self.del_info(find=find)
 # 修改信息
 elif item == 3:
  self.modify_info()
 # 查找信息
 elif item == 4:
  self.search_info()
 # 顯示信息
 elif item == 5:
  self.display_info()
 # 信息排序
 elif item == 6:
  self.rank_info()
 # 退出程序 保存數(shù)據(jù)
 elif item == 0:
  with open('database.txt', 'w') as f:
  self.point = self.head
  while self.point.next:
   self.point = self.point.next
   f.writelines('{}\n'.format(self.point.data))
  exit()
 else:
  print('請(qǐng)輸入正確的數(shù)字')

 # id 保證互異性
 def unique_id(self, std_id):
 self.point = self.head
 while self.point.next:
  self.point = self.point.next
  if self.point.data['id'] == std_id:
  return False
 return True

 # 增加信息
 def add_info(self):
 # id 不能重復(fù)
 # 成績(jī)不能超出范圍
 name = input('姓名:')
 std_id = input('學(xué)生id:')
 while not self.unique_id(std_id=std_id):
  print('id重復(fù)')
  std_id = input('學(xué)生id:')
 grade = input('學(xué)生成績(jī):')
 if eval(grade) < 0 or eval(grade) > 100:
  print('超出范圍')
  grade = input('學(xué)生成績(jī):')
 print(name, std_id, grade)
 print('請(qǐng)確認(rèn)無(wú)誤后保存')
 choice = input('y/n')
 items = ['y', 'yes', 'Y', 'Yes']
 if choice in items:
  print(choice)
  data = {'id': std_id, 'name': name, 'grade': grade}
  self.append(data)

 # 刪除信息
 def del_info(self, find):
 print('請(qǐng)確認(rèn)無(wú)誤后保存')
 choice = input('y/n')
 items = ['y', 'yes', 'Y', 'Yes']
 if choice in items:
  if not self.head.next:
  print('鏈表為空')
  return None
  self.point = self.head
  while self.point.next.data['id'] != find:
  self.point = self.point.next
  pointer = self.point.next
  self.point.next = self.point.next.next
  del pointer

 # 序列逆序
 def reverse(self):
 local_list = StudentControlSystem()
 self.point = self.head
 count = 0
 while self.point.next:
  count += 1
  self.point = self.point.next
  data = self.point.data
  local_list.insert_after_head(data)
 return local_list

 # 序列排序
 def sort(self, item):
 length = self.get_size()
 i, j = 0, 0
 flag = 1
 while i < length:
  self.point = self.head.next
  while j < length - i - 1:
  if int(self.point.data[item]) > int(self.point.next.data[item]):
   # self.point.data, self.point.next.data =
   # self.point.next.data, self.point.data
   temp = self.point.data
   self.point.data = self.point.next.data
   self.point.next.data = temp
  self.point = self.point.next
  j += 1
  flag = 0
  if flag:
  break
  i += 1
  j = 0

 # 修改信息
 def modify_info(self):
 find = input('輸入需要修改的學(xué)生的id:')
 if not self.head.next:
  print('鏈表為空')
  return None
 self.point = self.head
 while str(self.point.next.data['id']) != find:
  self.point = self.point.next
  if self.point.next is None:
  print('沒(méi)有找到該元素')
  return None
 name = input('姓名:')
 grade = input('學(xué)生成績(jī):')
 self.point.next.data['name'] = name
 self.point.next.data['grade'] = grade

 # 搜索信息
 def search_info(self):
 find = input('輸入需要查找的學(xué)生的id:')
 if not self.head.next:
  print('鏈表為空')
  return None
 self.point = self.head
 while str(self.point.next.data['id']) != find:
  self.point = self.point.next
  if self.point.next is None:
  print('沒(méi)有找到該元素')
  return None
 data = self.point.next.data
 print('ID 姓名 成績(jī)')
 print('{} {} {}'.format(data['id'], data['name'], data['grade']))

 # 信息排序
 def rank_info(self):
 choice = input('1.成績(jī)排序 2.學(xué)號(hào)排序:')
 order = input('1.升序 2.降序:')
 if choice == '1':
  item = 'grade'
 elif choice == '2':
  item = 'id'
 else:
  return None
 self.sort(item=item)
 if order == '2':
  temp = self.reverse()
  temp.display_info()
  return None
 self.display_info()

 # 顯示信息
 def display_info(self):
 self.point = self.head
 print('ID 姓名 成績(jī)')
 while self.point.next:
  self.point = self.point.next
  data = self.point.data
  print('{} {} {}'.format(data['id'], data['name'], data['grade']))
 print('')


def main():
 SCS = StudentControlSystem()
 try:
 with open('database.txt', 'r') as f:
  for data in f.readlines():
  SCS.append(eval(data))
 except:
 with open('database.txt', 'w') as f:
  pass

 while True:
 SCS.print_menu()
 item = input('請(qǐng)輸入你的選擇:')
 SCS.user_input(item)


if __name__ == "__main__":
 main()

運(yùn)行后

然后就可以插入與查詢啦

更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開(kāi)發(fā)》。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • django views重定向到帶參數(shù)的url

    django views重定向到帶參數(shù)的url

    這篇文章主要介紹了django views重定向到帶參數(shù)的url,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • python中正則的使用指南

    python中正則的使用指南

    正則表達(dá)式(RE)是一種小型的、高度專業(yè)化的編程語(yǔ)言,它內(nèi)嵌在Python中,并通過(guò)re模塊實(shí)現(xiàn)。下面我們就來(lái)詳細(xì)探討下Python中正則表達(dá)式的使用
    2016-12-12
  • Python基礎(chǔ)教程之if判斷,while循環(huán),循環(huán)嵌套

    Python基礎(chǔ)教程之if判斷,while循環(huán),循環(huán)嵌套

    這篇文章主要介紹了Python基礎(chǔ)教程之if判斷,while循環(huán),循環(huán)嵌套 的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • 怎樣在Pandas DataFrame列中搜索值

    怎樣在Pandas DataFrame列中搜索值

    這篇文章主要介紹了怎樣在Pandas DataFrame列中搜索值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實(shí)現(xiàn)為pdf添加水印功能

    Python實(shí)現(xiàn)為pdf添加水印功能

    這篇文章主要介紹了Python實(shí)現(xiàn)給普通PDF添加水印的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • python正則表達(dá)式判斷字符串是否是全部小寫(xiě)示例

    python正則表達(dá)式判斷字符串是否是全部小寫(xiě)示例

    python正則表達(dá)式判斷字符串是否是全部小寫(xiě),大腕參考使用吧
    2013-12-12
  • Python中網(wǎng)絡(luò)請(qǐng)求的12種方式

    Python中網(wǎng)絡(luò)請(qǐng)求的12種方式

    今天,我們要用一行簡(jiǎn)潔的Python代碼來(lái)揭開(kāi)網(wǎng)絡(luò)請(qǐng)求的神秘面紗,別看這行代碼短小,它背后的魔法可強(qiáng)大了,能幫你輕松獲取網(wǎng)頁(yè)數(shù)據(jù)、實(shí)現(xiàn)API調(diào)用,甚至更多,無(wú)論你是想做數(shù)據(jù)分析、網(wǎng)站爬蟲(chóng)還是簡(jiǎn)單的信息查詢,這12種方式都是你的得力助手,需要的朋友可以參考下
    2024-07-07
  • Python詳細(xì)介紹模型封裝部署流程

    Python詳細(xì)介紹模型封裝部署流程

    本文實(shí)例講述了Python模型封裝部署的原理與實(shí)現(xiàn)方法。封裝即是隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python實(shí)現(xiàn)AI自動(dòng)摳圖實(shí)例解析

    Python實(shí)現(xiàn)AI自動(dòng)摳圖實(shí)例解析

    這篇文章主要介紹了Python實(shí)現(xiàn)AI自動(dòng)摳圖實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 基于PyQt5實(shí)現(xiàn)一個(gè)串口接數(shù)據(jù)波形顯示工具

    基于PyQt5實(shí)現(xiàn)一個(gè)串口接數(shù)據(jù)波形顯示工具

    這篇文章主要為大家詳細(xì)介紹了如何利用PyQt5實(shí)現(xiàn)一個(gè)串口接數(shù)據(jù)波形顯示工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01

最新評(píng)論

五指山市| 长汀县| 苍南县| 西畴县| 石楼县| 抚松县| 鄂尔多斯市| 合阳县| 孙吴县| 绥宁县| 郴州市| 隆回县| 土默特左旗| 岳阳县| 肃南| 沿河| 丹寨县| 福安市| 蒙城县| 山阴县| 通渭县| 中方县| 辽宁省| 太保市| 万载县| 正镶白旗| 广灵县| 德安县| 阳曲县| 大安市| 老河口市| 江源县| 盘山县| 长岛县| 肇源县| 温泉县| 伊宁市| 雷山县| 辰溪县| 合川市| 万全县|