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使用新浪微博api上传图片到微博示例
Jan 10 Python
python实现的重启关机程序实例
Aug 21 Python
深入理解python中的atexit模块
Mar 07 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
Python TestCase中的断言方法介绍
May 02 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
浅谈python之自动化运维(Paramiko)
Jan 31 Python
python 插入日期数据到Oracle实例
Mar 02 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
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
新手入门js闭包学习过程解析
2019/10/08 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
django 多数据库配置教程
2018/05/30 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
商务日语毕业生自荐信范文
2013/11/14 职场文书
自我鉴定怎么写
2014/01/12 职场文书
运动会跳远广播稿
2014/02/04 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
五星级酒店宣传口号
2015/12/25 职场文书
你需要掌握的20个Python常用技巧
2022/02/28 Python