作者:wy | 来源:互联网 | 2023-10-10 19:31
不懂用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如何实现学生成绩管理系统?内容对大家有帮助,同时也希望大家多多支持编程笔记,关注编程笔记行业资讯频道,遇到问题就找编程笔记,详细的解决方法等着你来学习!