您现在的位置是:首页 > 游戏技术

Python 实现简易版成绩管理系统!

星际游娱坊 2025-04-06【游戏技术】45人已围观

简介上一次,公众号介绍了如何使用Python实现单链表,下面让我们一探单链表的简单应用:在命令行,实现简易版成绩管理系统。这次的简易版成绩管理系统,主要有六大功能:增加学生信息、删除学生信息、修改学生信息、查找学生信息、显示学生信息、按ID排序。实现效果如下:实现效果.JPG保存与读取信息首先判断当前路...

上一次,公众号介绍了如何使用Python实现单链表,下面让我们一探单链表的简单应用:在命令行,实现简易版成绩管理系统。

这次的简易版成绩管理系统,主要有六大功能:增加学生信息、删除学生信息、修改学生信息、查找学生信息、显示学生信息、按ID排序。

实现效果如下:

实现效果.JPG

保存与读取信息

首先判断当前路径下,是否存在这个文件。如果不存在的话,就新建一个。如果存在的话,就按行读取数据。其中,eval函数将读取的字符床解析为字典。然后,将学生信息存储在单链表中。

try:withopen('','r')asf:():(eval(data))except:withopen('','w')asf:pass

接着,如果用户选择退出程序的话,就遍历学生信息,并且以字符串的形式按行存储学生信息。

elifitem==0:withopen('','w')asf:=:=('{}\n'.format())exit()

增加学生信息

由于本次实现的成绩管理系统比较简易,我们只对学生id和成绩进行限制。

其一,我们要确保学生id不能重复。当我们希望向链表中添加数据时,首先要迭代整个链表,判断要添加元素的id是否已经在链表中存在。

defunique_id(self,std_id):=:=['id']==std_id:returnFalsereturnTrue

其二,我们要确保学生成绩在0~100分之间。当用户完成输入时,需要判断是否要保存数据,如果否,那么就不进行插入数据操作。为了降低用户误输入造成的影响,我们设定四种用户可能输入的字符:[‘y’,‘yes’,‘Y’,‘Yes’]。

最后,我们以字典的形式插入学生信息。

id不能重复显示信息defdisplay_info(self):=('ID姓名成绩'):==('{}{}{}'.format(data['id'],data['name'],data['grade']))print('')

排序

最后,我们要实现排序操作。

首先,要实现链表版的冒泡排序。冒泡排序(顺序形式),从左向右,两两比较,如果左边元素大于右边,就交换两个元素的位置。其中,每一轮排序,序列中最大的元素浮动到最右面。也就是说,每一轮排序,至少确保有一个元素在正确的位置。这样接下来的循环,就不需要考虑已经排好序的元素了,每次内层循环次数都会减一。其中,如果有一轮循环之后,次序并没有交换,这时我们就可以停止循环,得到我们想要的有序链表了。

defsort(self,item):length=_size()i,j=0,0flag=1whileilength:=:ifint([item])int([item]):,====+=1flag=0ifflag:breaki+=1j=0

对于学生信息,我们可以通过成绩与学号这两个关键字进行排序。用户除了可以选择按成绩还是按学号排序,还可以选择顺序还是逆序排序。如果用户选择逆序的话,只要通过reverse方法,我们就可以创建一个新的SCS对象,其中新对象的数据顺序与原对象的数据顺序完全相反。该方法,也是基于单链表reverse操作的改进。最后排好序,我们只需完整显示数据即可。

defrank_info(self):choice=input('1.成绩排序2.学号排序:')order=input('1.升序2.降序:')ifchoice=='1':item='grade'elifchoice=='2':item='id'else:(item=item)iforder=='2':temp=()_info()_info()defreverse(self):local_list=StudentControlSystem()==0:count+=1==__after_head(data)returnlocal_list

以上,我们已经介绍了学生成绩管理系统的主要操作。

很赞哦!(77)