这篇文章主要为大家详细介绍了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
界面预览
源码
''' 使用单链表实现的学生管理系统 ''' import pickle import abc import configparser class Student(abc.ABC): ''' 抽象学生类 ''' @abc.abstractmethod def add(self): ''' 增加学生结点 ''' pass @abc.abstractmethod def ladd(self): ''' 从左侧增加学生结点 ''' pass @abc.abstractmethod def delete(self,id_): ''' 根据id值来删除一个结点 ''' pass @abc.abstractmethod def delete_name(self,name): ''' 根据姓名来删除一个结点 ''' pass @abc.abstractmethod def insert(self,idx,val): ''' 插入到指定的位置 ''' pass @abc.abstractmethod def show(self): ''' 显示所有的学生结点 ''' pass @abc.abstractmethod def search_id(self): ''' 根据id查询节点 ''' pass @abc.abstractmethod def search_name(self): ''' 根据name查询节点 ''' @abc.abstractmethod def modity_id(self): ''' 根据id找到节点,然后修改 ''' pass class Node(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 def modity(self,id_,name,sex,age,score): ''' 修改 ''' self.id = id_ self.name = name self.sex = sex self.age = age self.score = score def __str__(self): ''' 用于显示输出 ''' return f"[学生:{self.id:^2}]-->name:{self.name:^10}sex:{self.sex:^10}age:{self.age:^10}score:{self.score:^10}" class Student_LinkList(Student): ''' 学生链表 ''' def __init__(self): self.head = Node(-1,'head','-1',-1,-1) self.length = 0 self.tail = self.head #尾部结点用于尾插 def add(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]:添加成功') def ladd(self,id_,name,sex,age,score): ''' 添加一个学生,头插 ''' temp = Node(id_,name,sex,age,score) temp.next = self.head.next self.head.next = temp if self.tail == self.head: self.tail = temp self.length += 1 print('[info]:添加成功') def delete(self,id_): ''' 根据id值来删除一个结点,用迭代实现 ''' p = self.head while p.<mark style="color:transparent">来源gaodaimacom搞#^代%!码&网</mark>next != None and p.next.id != id_: p = p.next if p.next == None: print('[error]:找不到id') return -1 else: temp = p.next p.next = temp.next #如果删除的是尾结点,还要移动tail if temp.next == None: self.tail = p del temp print('[info]:删除成功') def delete_name(self,name): ''' 根据姓名来删除一个结点,用递归实现 ''' def _func(node: Node,name: str): ''' 递归函数 ''' #到了尾巴节点了,还没有找到 if node.next == None: print('[info]:找不到name') return False elif node.next.name == name: temp = node.next node.next = temp.next #如果删除的是尾结点,还要移动tail if temp.next == None: self.tail = node del temp print('[info]:删除成功') return True else: return _func(node.next,name) t = self.head return _func(t,name) def insert(self,idx,id_,name,sex,age,score): ''' 在指定位置插入数据 ''' if idx > self.length or idx == 0: print(f'[error]:你输入的索引非法(1-{self.length})') return 0 p,cur = self.head,0 while p != None and cur <idx-1: p if cur >') if __name__ == "__main__": ui = Cmd_UI() ui.main()
以上就是python实现简单的学生管理系统的详细内容,更多请关注gaodaima搞代码网其它相关文章!