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中类型关系和继承关系实例详解
May 25 Python
python中的格式化输出用法总结
Jul 28 Python
python selenium UI自动化解决验证码的4种方法
Jan 05 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
详解django中Template语言
Feb 22 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
python如何将图片转换素描画
Sep 08 Python
让文件路径提取变得更简单的Python Path库
May 27 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统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
PHP URL路由类实例
2013/11/12 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python处理文本文件并生成指定格式的文件
2014/07/31 Python
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
普通PHP程序员笔试题
2016/01/01 面试题
三年级学生评语大全
2014/12/26 职场文书
安全保证书
2015/01/16 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL