学生成绩管理系统设计报告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, 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实现简易版学生成绩管理系统相关推荐
- c语言程序结果好多0,C语言程序成绩管理系统设计报告.docx
C语言程序成绩管理系统设计报告 郑州轻工业学院实 训 报 告实训名称: 成 绩 管 理 系 统姓 名: 鲁雪颖 院 (系): 软 件 学 院 专业班级: 软件卓越12-01 学 号: 54121344 ...
- c语言宿舍管理设计报告,C语言课程设计—学生宿舍管理系统设计报告.doc
word格式精心整理版 范文范例 学习指导 课 程 设 计 报 告 课程名称 C语言程序设计 课题名称 学生宿舍管理系统 专 业 班 级 学 号 姓 名 指导教师 2012年6月19日 湖南工程学院 ...
- 班级成绩管理系统设计c语言,C语言程序设计-班级成绩管理系统.doc
PAGE 课 程 设 计 报 告 课程名称 C语言程序设计 课题名称 班级成绩管理系统 专 业 机械设计 班 级 1083班 学 号 201013090303 姓 名 陈 玲 珑 指导教师 王 颖 2 ...
- java学生成绩管理系统设计报告
前言 ⽂章有点⻓,请耐⼼看完,绝对有收获!不想听我BB直接进⼊⾯试分享: 准备过程 蚂蚁⾦服⾯试分享 拼多多⾯试分享 字节跳动⾯试分享 最后总结个人所得(供大家参考学习) 当时我⾃⼰也准备出去看看机会 ...
- python经济与管理学院学生社团管理系统设计与实现_实验10-大学生社团管理系统的设计和实现...
系别 专业 班级 姓 名 课程 名称 课程 类型 学时数 实验 名称 大学生社团管理系统的设计与实现 实验目的: 1. 进一步熟悉和掌握前面九个实验当中的各种操作. 2. 能够在实际的事例中灵活应用学 ...
- Java毕业设计_高校学生考勤管理系统设计与实现
高校学生考勤管理系统设计和实现 高校学生考勤管理系统设计和实现mysql数据库创建语句 高校学生考勤管理系统设计和实现oracle数据库创建语句 高校学生考勤管理系统设计和实现sqlserver数据库 ...
- JSP学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)
cc学院 毕业设计(论文)开题报告 题 目: 基于JSP的学生学籍管理系统 学 科 部: 信工学科部 专 业: 计算机科学与技术 班 级: 学 号: 姓 名: 指导教师: 填表日期: 20 年 月 日 ...
- php简单学生管理系统设计与实现,基于PHP的学生成绩管理系统的设计与实现.doc...
基于PHP的学生成绩管理系统的设计与实现.doc 基于PHP的学生成绩管理系统的设计与实现 摘 要: 我国高等职业教育迎来了蓬勃发展的新局面,各院校招生规模不断扩大,学校的教学管理负担越来越重.为了提 ...
- c语言学生成绩设计思路,C语言学生成绩管理系统设计.docx
沈阳航空航天大学 课程设计报 大作业名称:C语言课程设计 大作业题目:学生成绩管理系统设计 院(系):计算机学院 专业:计算机科学与技术 班 级: 学 号: 姓 名: 指导教师: 完成日期:2016年 ...
最新文章
- OpenCV读写YAML/XML文件
- “_snprintf”: 不是“std”的成员
- Java反斜线(\)路径与转义字符的小坑
- Lesson 16.2 图像的基本操作
- 走进数据中心,揭秘你所不知道的能耗节省大法
- BZOJ 1101: [POI2007]Zap( 莫比乌斯反演 )
- 对于以太坊的Solidity语言介绍
- 27、简述redis的有哪几种持久化策略及比较?
- 终于记住回车和换行cr lf的来由和含义了 -参考: http://www.cnblogs.com/me115/archive/2011/04/27/2030762.html...
- HashMap + 软引用进行缓存
- SQL SERCER 控制 SERVERICE BROKER 服务
- ContentPresenter元素
- uCore lab1 操作系统实验
- Stata-交乘项专题: 主效应项可以忽略吗?
- c语言宏定义在预处理阶段,预处理和宏定义
- 千牛卖家工作平台使用教程
- pytest和allure生成测试报告
- postgresql:字符串累加拼接(聚合分组拼接)
- 好友联盟DOS杀毒盘
- css3 实现 太极图
热门文章
- python为什么没有点击就触发_Ai中没有触发的触发器
- json可视化编辑器_推荐一个基于 Vue 的前端界面可视化设计器项目
- 有线同步--ASP007
- 平板电脑有必要买吗_华为平板M6值得买吗
- [codevs 1514] 书架
- html实现全选 反选,jquery实现全选、不选、反选的两种方法
- 网盘php资料,怎么搜索百度网盘里的资料(php版)
- java swing总结,Java 实用经验总结 Swing 篇
- 华为如何拍火烧云_华为手机拍照功能介绍-设置通用功能
- oracle创建表空间及用户,Oracle创建表空间和用户