1. 程式人生 > 程式設計 >python實現簡易版學生成績管理系統

python實現簡易版學生成績管理系統

300來行python程式碼實現簡易版學生成績管理系統,供大家參考,具體內容如下

使用連結串列來實現

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


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

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

 def insert(self,find):
 # 插入資料(前向插入資料)
 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('沒有找到該元素')
  return None

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

 def delete(self,find):
 # 刪除節點
 # 空連結串列
 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 產生沒寫 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

 # 求中間節點 只允許遍歷一次
 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):
 # 列印結點
 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.增加學生資訊')
 print('2.刪除學生資訊')
 print('3.修改學生資訊')
 print('4.查詢學生資訊')
 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('請輸入刪除的學號:')
  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()
 # 退出程式 儲存資料
 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('請輸入正確的數字')

 # 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 不能重複
 # 成績不能超出範圍
 name = input('姓名:')
 std_id = input('學生id:')
 while not self.unique_id(std_id=std_id):
  print('id重複')
  std_id = input('學生id:')
 grade = input('學生成績:')
 if eval(grade) < 0 or eval(grade) > 100:
  print('超出範圍')
  grade = input('學生成績:')
 print(name,std_id,grade)
 print('請確認無誤後儲存')
 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('請確認無誤後儲存')
 choice = input('y/n')
 items = ['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,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('輸入需要修改的學生的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('沒有找到該元素')
  return None
 name = input('姓名:')
 grade = input('學生成績:')
 self.point.next.data['name'] = name
 self.point.next.data['grade'] = grade

 # 搜尋資訊
 def search_info(self):
 find = input('輸入需要查詢的學生的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('沒有找到該元素')
  return None
 data = self.point.next.data
 print('ID 姓名 成績')
 print('{} {} {}'.format(data['id'],data['name'],data['grade']))

 # 資訊排序
 def rank_info(self):
 choice = input('1.成績排序 2.學號排序:')
 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 姓名 成績')
 while self.point.next:
  self.point = self.point.next
  data = self.point.data
  print('{} {} {}'.format(data['id'],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('請輸入你的選擇:')
 SCS.user_input(item)


if __name__ == "__main__":
 main()

執行後

python實現簡易版學生成績管理系統

然後就可以插入與查詢啦

更多學習資料請關注專題《管理系統開發》。

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