热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用python如何实现学生成绩管理系统?

不懂用python如何实现学生成绩管理系统??其实想解决这个问题也不难,下面让小编带着大家一起学习怎么去解决,希望大家阅读完这篇文章后大所收获

不懂用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, data, 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  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(&#39;{} ->&#39;.format(self.point.data), end=&#39; &#39;)
 print(&#39;&#39;)


class StudentControlSystem(SingleLinkedList):
 # 打印菜单
 def print_menu(self):
 print(&#39;*&#39; * 30)
 print(&#39;-&#39; * 13 + &#39;菜单&#39; + &#39;-&#39; * 13)
 print(&#39;1.增加学生信息&#39;)
 print(&#39;2.删除学生信息&#39;)
 print(&#39;3.修改学生信息&#39;)
 print(&#39;4.查找学生信息&#39;)
 print(&#39;5.显示所有信息&#39;)
 print(&#39;6.排序&#39;)
 print(&#39;0.退出程序&#39;)
 print(&#39;*&#39; * 30)

 # 用户输入
 def user_input(self, item):
 try:
  item = int(item)
 except:
  pass
 # 增加信息
 if item == 1:
  self.add_info()
 # 删除信息
 elif item == 2:
  find = input(&#39;请输入删除的学号:&#39;)
  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(&#39;database.txt&#39;, &#39;w&#39;) as f:
  self.point = self.head
  while self.point.next:
   self.point = self.point.next
   f.writelines(&#39;{}\n&#39;.format(self.point.data))
  exit()
 else:
  print(&#39;请输入正确的数字&#39;)

 # id 保证互异性
 def unique_id(self, std_id):
 self.point = self.head
 while self.point.next:
  self.point = self.point.next
  if self.point.data[&#39;id&#39;] == std_id:
  return False
 return True

 # 增加信息
 def add_info(self):
 # id 不能重复
 # 成绩不能超出范围
 name = input(&#39;姓名:&#39;)
 std_id = input(&#39;学生id:&#39;)
 while not self.unique_id(std_id=std_id):
  print(&#39;id重复&#39;)
  std_id = input(&#39;学生id:&#39;)
 grade = input(&#39;学生成绩:&#39;)
 if eval(grade) <0 or eval(grade) > 100:
  print(&#39;超出范围&#39;)
  grade = input(&#39;学生成绩:&#39;)
 print(name, std_id, grade)
 print(&#39;请确认无误后保存&#39;)
 choice = input(&#39;y/n&#39;)
 items = [&#39;y&#39;, &#39;yes&#39;, &#39;Y&#39;, &#39;Yes&#39;]
 if choice in items:
  print(choice)
  data = {&#39;id&#39;: std_id, &#39;name&#39;: name, &#39;grade&#39;: grade}
  self.append(data)

 # 删除信息
 def del_info(self, find):
 print(&#39;请确认无误后保存&#39;)
 choice = input(&#39;y/n&#39;)
 items = [&#39;y&#39;, &#39;yes&#39;, &#39;Y&#39;, &#39;Yes&#39;]
 if choice in items:
  if not self.head.next:
  print(&#39;链表为空&#39;)
  return None
  self.point = self.head
  while self.point.next.data[&#39;id&#39;] != 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  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(&#39;输入需要修改的学生的id:&#39;)
 if not self.head.next:
  print(&#39;链表为空&#39;)
  return None
 self.point = self.head
 while str(self.point.next.data[&#39;id&#39;]) != find:
  self.point = self.point.next
  if self.point.next is None:
  print(&#39;没有找到该元素&#39;)
  return None
 name = input(&#39;姓名:&#39;)
 grade = input(&#39;学生成绩:&#39;)
 self.point.next.data[&#39;name&#39;] = name
 self.point.next.data[&#39;grade&#39;] = grade

 # 搜索信息
 def search_info(self):
 find = input(&#39;输入需要查找的学生的id:&#39;)
 if not self.head.next:
  print(&#39;链表为空&#39;)
  return None
 self.point = self.head
 while str(self.point.next.data[&#39;id&#39;]) != find:
  self.point = self.point.next
  if self.point.next is None:
  print(&#39;没有找到该元素&#39;)
  return None
 data = self.point.next.data
 print(&#39;ID 姓名 成绩&#39;)
 print(&#39;{} {} {}&#39;.format(data[&#39;id&#39;], data[&#39;name&#39;], data[&#39;grade&#39;]))

 # 信息排序
 def rank_info(self):
 choice = input(&#39;1.成绩排序 2.学号排序:&#39;)
 order = input(&#39;1.升序 2.降序:&#39;)
 if choice == &#39;1&#39;:
  item = &#39;grade&#39;
 elif choice == &#39;2&#39;:
  item = &#39;id&#39;
 else:
  return None
 self.sort(item=item)
 if order == &#39;2&#39;:
  temp = self.reverse()
  temp.display_info()
  return None
 self.display_info()

 # 显示信息
 def display_info(self):
 self.point = self.head
 print(&#39;ID 姓名 成绩&#39;)
 while self.point.next:
  self.point = self.point.next
  data = self.point.data
  print(&#39;{} {} {}&#39;.format(data[&#39;id&#39;], data[&#39;name&#39;], data[&#39;grade&#39;]))
 print(&#39;&#39;)


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

 while True:
 SCS.print_menu()
 item = input(&#39;请输入你的选择:&#39;)
 SCS.user_input(item)


if __name__ == "__main__":
 main()

运行后

用python如何实现学生成绩管理系统?

然后就可以插入与查询啦

感谢你能够认真阅读完这篇文章,希望小编分享用python如何实现学生成绩管理系统?内容对大家有帮助,同时也希望大家多多支持编程笔记,关注编程笔记行业资讯频道,遇到问题就找编程笔记,详细的解决方法等着你来学习!


推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
author-avatar
wy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有