您现在的位置是:首页 > 游戏技术
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)