python实现简易版学生成绩管理系统


Posted in Python onJune 22, 2020

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, 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 < 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', '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('输入需要修改的学生的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['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('请输入你的选择:')
 SCS.user_input(item)


if __name__ == "__main__":
 main()

运行后

python实现简易版学生成绩管理系统

然后就可以插入与查询啦

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中sets模块的用法实例
Sep 30 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
django启动uwsgi报错的解决方法
Apr 08 Python
python实现逆序输出一个数字的示例讲解
Jun 25 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
python多任务及返回值的处理方法
Jan 22 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
pd.DataFrame统计各列数值多少的实例
Dec 05 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
pandas apply多线程实现代码
Aug 17 Python
python能否java成为主流语言吗
Jun 22 #Python
python让函数不返回结果的方法
Jun 22 #Python
python实现学生成绩测评系统
Jun 22 #Python
python算的上脚本语言吗
Jun 22 #Python
Python读取二进制文件代码方法解析
Jun 22 #Python
怎么快速自学python
Jun 22 #Python
关于python的缩进规则的知识点详解
Jun 22 #Python
You might like
php生成WAP页面
2006/10/09 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
Ruffy javascript 学习笔记
2009/11/30 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
wxPython中文教程入门实例
2014/06/09 Python
python time模块用法实例详解
2014/09/11 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
Python中格式化字符串的四种实现
2020/05/26 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
护理专业大学生自我推荐信
2014/01/25 职场文书
触摸春天教学反思
2014/02/03 职场文书
初中高效课堂实施方案
2014/02/26 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
《检阅》教学反思
2016/02/22 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle
Python3的进程和线程你了解吗
2022/03/16 Python