python实现简单的学生管理系统
本文实例为大家分享了python实现简单学生管理系统的具体代码,供大家参考,具体内容如下
学生管理系统
相信大家学各种语言的时候,练习总是会写各种管理系统吧,管理系统主要有对数据的增删查改操作,原理不难,适合作为练手的小程序
数据的结构
要保存数据就需要数据结构,比如c里面的结构体啊,python里面的列表,字典,还有类都是常用的数据类型
在这里,我使用了链表来作为学生数据的数据结构,
即Node类和Student_LinkList类,来实现链表
数据的持久化
我们在程序中产生的数据是保存在内存中的,程序一旦退出,下次就不能恢复此次的数据了,因此需要把内存种的数据,保存到文件或数据库中,存储起来,这个过程就叫数据的持久化
本程序使用了python标准库pickle提供的序列化方法dump()和load()来实现数据的持久化
配置文件
使用配置文件,可以方便程序中使用不同的子类实现,
本程序使用configparser来对配置文件解析
本程序配置文件名为Student.ini
#Student.ini文件 [Student] student=Student_LinkList [Persistence] persistence=Persistence_Pickle file=student.pik
类之间的关系
Student#和学生数据有关的抽象类
±-Student_LinkList
Persistence#和持久化有关的抽象类
±-Persistence_Pickle
MyConfigure#和配置文件读取有关的类
UI#和交互有关的父类
±-Cmd_UI
界面预览
源码
'''
使用单链表实现的学生管理系统
'''
importpickle
importabc
importconfigparser
classStudent(abc.ABC):
'''
抽象学生类
'''
@abc.abstractmethod
defadd(self):
'''
增加学生结点
'''
pass
@abc.abstractmethod
defladd(self):
'''
从左侧增加学生结点
'''
pass
@abc.abstractmethod
defdelete(self,id_):
'''
根据id值来删除一个结点
'''
pass
@abc.abstractmethod
defdelete_name(self,name):
'''
根据姓名来删除一个结点
'''
pass
@abc.abstractmethod
definsert(self,idx,val):
'''
插入到指定的位置
'''
pass
@abc.abstractmethod
defshow(self):
'''
显示所有的学生结点
'''
pass
@abc.abstractmethod
defsearch_id(self):
'''
根据id查询节点
'''
pass
@abc.abstractmethod
defsearch_name(self):
'''
根据name查询节点
'''
@abc.abstractmethod
defmodity_id(self):
'''
根据id找到节点,然后修改
'''
pass
classNode(object):
'''
学生链表结点
'''
def__init__(self,id_:int,name:str,sex:str,age:int,score:int):
self.id=id_
self.name=name
self.sex=sex
self.age=age
self.score=score
self.next=None
defmodity(self,id_,name,sex,age,score):
'''
修改
'''
self.id=id_
self.name=name
self.sex=sex
self.age=age
self.score=score
def__str__(self):
'''
用于显示输出
'''
returnf"[学生:{self.id:^2}]-->name:{self.name:^10}sex:{self.sex:^10}age:{self.age:^10}score:{self.score:^10}"
classStudent_LinkList(Student):
'''
学生链表
'''
def__init__(self):
self.head=Node(-1,'head','-1',-1,-1)
self.length=0
self.tail=self.head#尾部结点用于尾插
defadd(self,id_,name,sex,age,score):
'''
添加一个学生结点,尾插
'''
#print('当前tail的值',self.tail)
temp=Node(id_,name,sex,age,score)
self.tail.next=temp
self.tail=self.tail.next
self.length+=1
print('[info]:添加成功')
defladd(self,id_,name,sex,age,score):
'''
添加一个学生,头插
'''
temp=Node(id_,name,sex,age,score)
temp.next=self.head.next
self.head.next=temp
ifself.tail==self.head:
self.tail=temp
self.length+=1
print('[info]:添加成功')
defdelete(self,id_):
'''
根据id值来删除一个结点,用迭代实现
'''
p=self.head
whilep.next!=Noneandp.next.id!=id_:
p=p.next
ifp.next==None:
print('[error]:找不到id')
return-1
else:
temp=p.next
p.next=temp.next
#如果删除的是尾结点,还要移动tail
iftemp.next==None:
self.tail=p
deltemp
print('[info]:删除成功')
defdelete_name(self,name):
'''
根据姓名来删除一个结点,用递归实现
'''
def_func(node:Node,name:str):
'''
递归函数
'''
#到了尾巴节点了,还没有找到
ifnode.next==None:
print('[info]:找不到name')
returnFalse
elifnode.next.name==name:
temp=node.next
node.next=temp.next
#如果删除的是尾结点,还要移动tail
iftemp.next==None:
self.tail=node
deltemp
print('[info]:删除成功')
returnTrue
else:
return_func(node.next,name)
t=self.head
return_func(t,name)
definsert(self,idx,id_,name,sex,age,score):
'''
在指定位置插入数据
'''
ifidx>self.lengthoridx==0:
print(f'[error]:你输入的索引非法(1-{self.length})')
return0
p,cur=self.head,0
whilep!=Noneandcur>')
if__name__=="__main__":
ui=Cmd_UI()
ui.main() 
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。