iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python怎么实现简单的学生管理系统
  • 822
分享到

python怎么实现简单的学生管理系统

2023-06-06 12:06:30 822人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要为大家展示了python怎么实现简单的学生管理系统,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Python怎么实现简单的学生管理系统”这篇文章吧。python是什么意思Python是

这篇文章主要为大家展示了python怎么实现简单的学生管理系统,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“Python怎么实现简单的学生管理系统”这篇文章吧。

python是什么意思

Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。

学生管理系统

相信大家学各种语言的时候,练习总是会写各种管理系统吧,管理系统主要有对数据的增删查改操作,原理不难,适合作为练手的小程序

数据的结构

要保存数据就需要数据结构,比如c里面的结构体啊,python里面的列表,字典,还有类都是常用的数据类型
在这里,我使用了链表来作为学生数据的数据结构,
node类 和 Student_LinkList类,来实现链表

数据的持久化

我们在程序中产生的数据是保存在内存中的,程序一旦退出,下次就不能恢复此次的数据了,因此需要把内存种的数据,保存到文件或数据库中,存储起来,这个过程就叫数据的持久化

本程序使用了python标准库pickle提供的序列化方法dump()和load()来实现数据的持久化

配置文件

使用配置文件,可以方便程序中使用不同的子类实现,

本程序使用configparser来对配置文件解析
本程序配置文件名为 Student.ini

#Student.ini文件[Student]student = Student_LinkList[Persistence]persistence = Persistence_Picklefile = student.pik

类之间的关系

Student #和学生数据有关的抽象类
±- Student_LinkList
Persistence #和持久化有关的抽象类
±- Persistence_Pickle
MyConfigure #和配置文件读取有关的类
UI #和交互有关的父类
±- Cmd_UI

界面预览

python怎么实现简单的学生管理系统

源码

'''使用单链表实现的学生管理系统'''import pickleimport abcimport configparserclass 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找到节点,然后修改    '''    passclass 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.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 = p.next    if cur < idx-1:      return -1    else:      temp = Node(id_,name,sex,age,score)      temp.next = p.next      p.next = temp      return True    print('[info]:插入成功')  def search_id(self,id_):    '''    根据id查询节点    '''    p = self.head    while p != None and p.id != id_:      p = p.next    if p == None:      return -1    else:      return p  def search_name(self,name):    '''    根据name查询节点    '''    p = self.head        def _func(node: Node,name: str):      '''      递归函数      '''      if node == None:        return -1      elif node.name == name:        return node      return _func(node.next,name)    return _func(p,name)  def modity_id(self,id0,id_,name,sex,age,score):    '''    根据id找到节点,然后修改    '''    node = self.search_id(id0)    if node == -1:      print('[error]:找不到该id')      return -1    else:      node.modity(id_,name,sex,age,score)  def show(self):    '''    显示所有的学生结点,迭代    '''    print(f'\n{"-"*25}以下是系统内数据{"-"*25}')    temp = []    p = self.head    while p != None:      temp.append(p)      p = p.next    return tempclass Student_Array():  '''  用数组实现学生数据存储  '''  passclass Student_Queue():  '''  用队列实现  '''  passclass Student_Dict():  '''  用队列实现  '''  passclass Persistence(abc.ABC):  '''  链表数据的持久化  '''  @abc.abstractmethod  def save(self):    '''    把对象保存    '''    pass  @abc.abstractmethod  def load(self):    '''    加载对象    '''    passclass Persistence_Pickle(Persistence):  '''  使用pickle来序列化  '''  def __init__(self,cls: Student,file_):    self.filename = file_    self.obj = None    self.cls = cls  def save(self):    with open(self.filename,'wb') as f:      pickle.dump(self.obj,f)  def load(self):    try:      with open(self.filename,'rb') as f:        temp = pickle.load(f)    except:      temp = globals()[self.cls]()    print('返回temp:',type(temp))    self.obj = temp    return tempclass Persistence_File(Persistence):  '''  使用文件来持久化  '''  passclass Persistence_Mysql(Persistence):  '''  使用Mysql数据库来持久化  '''  passclass Persistence_Socket(Persistence):  '''  使用远程套接字持久化  '''  passclass MyConfigure(object):  '''  用来读取配置文件的类  '''  def __init__(self):    self.config = configparser.ConfigParser()  def save(self):    '''    保存配置文件    '''    with open('Student.ini','w') as f:      self.config.write(f)  def load(self):    '''    加载配置文件    '''    self.config.read('Student.ini')  def get_student_class(self):    '''    获得Student该使用哪个子类    '''    return self.config['Student']['student']  def get_persistence_class(self):    '''    获得持久化,该使用那个类,    如果是Pickle或文件,还有file作为保存的文件名    '''    temp = {}    temp['persistence'] = self.config['Persistence']['persistence']    if 'Persistence_Pickle' in temp['persistence']:      temp['file'] = self.config['Persistence']['file']    return tempclass UI(object):  '''  界面交互  '''  def __init__(self):    self.config = MyConfigure()    self.config.load()    s_class = self.config.get_student_class()    p_class = self.config.get_persistence_class()    self.persistence = globals()[p_class['persistence']](s_class,p_class['file'])    self.student = self.persistence.load()    print('实例化成功:',self.student,self.persistence)  def save(self):    '''    把数据保存    '''    self.persistence.save()  def quit(self):    '''    退出:先保存配置,然后退出    '''    self.config.save()    self.save()  def _show(self):    '''    显示所有学生节点    '''    return self.student.show()  def _add(self,direction,*temp):    '''    增加学生结点,    direction 1左添加,2右添加    '''    if direction == 1:      self.student.ladd(*temp)    elif direction == 2:      self.student.add(*temp)  def _delete(self,attribute: int,val: str):    '''    删除学生节点    attribute: 需要根据哪个属性删除,1.id 或 2.name    '''    if attribute == 1:      self.student.delete(val)    elif attribute == 2:      self.student.delete_name(val)  def _insert(self,idx,*temp):    '''    把学生节点插入到指定的位置    '''    self.student.insert(idx,*temp)  def _search(self,attribute,val):    '''    查询    '''    if attribute == 1:      return self.student.search_id(val)    elif attribute == 2:      return self.student.search_name(val)  def _modity(self,attribute,id_,*temp):    '''    修改    '''    if attribute == 1:      self.student.modity_id(id_,*temp)    elif attribute == 2:      print('[info]:因为没实现,所以什么也不做')      pass #根据name修改没有写class Cmd_UI(UI):  '''  命令行的交互界面  '''  def __init__(self):    super(Cmd_UI,self).__init__()  def get_input_1_2(self,info: str):    '''    获得输入,返回1或者2    info: 描述输入的信息    '''    x = None    while x == None:      temp = input(info)      if temp == '1':        x = 1      elif temp == '2':        x = 2      else:        print('你只能输入1或者2')    return x  def get_input_arg(self):    '''    获得用户的输入构造学生节点    '''    id_ = input('请输入id')    name = input('请输入姓名')    sex = input('请输入性别')    age = input('请输入年龄')    score = input('请输入成绩')    return (id_,name,sex,age,score)  def delete(self):    '''    删除节点    '''    info = '你想要根据哪个属性删除节点:1.id 2.name'    attribute = self.get_input_1_2(info)    val = input('输入你想要删除的值:')    self._delete(attribute,val)  def show(self):    '''    显示    '''    rel = self._show()    for i in rel:      print(i)  def add(self):    '''    增加学生结点    '''    info = '你想要插入的位置:1.左边 2.右边'    direction = self.get_input_1_2(info)    arg = self.get_input_arg()    self._add(direction,*arg)  def insert(self):    '''    新学生,插入到指定的位置    '''    idx = int(input('输入要插入的位置'))    temp = self.get_input_arg()    self._insert(idx,*temp)  def search(self):    '''    查询学生    '''    info = '你想要根据哪个属性搜索节点:1.id 2.name'    attribute = self.get_input_1_2(info)    val = input('输入你想要查询的值:')    print(self._search(attribute,val))  def modity(self):    '''    修改学生信息    '''    info = '你想要根据哪个属性搜索节点:1.id 2.name'    attribute = self.get_input_1_2(info)    val_ = input('输入要查询的值:')    temp = self.get_input_arg()    self._modity(attribute,val_,*temp)  def main(self):    '''    主流程    '''    info = '''    *******************    *kalpa学生管理系统*    *  0.显示数据  *    *  1.增加数据  *    *  2.删除数据  *    *  3.查询数据  *    *  4.修改数据  *    *  5.保存并退出 *    *******************    '''    print(info)    a = '0'    while a in ['0','1','2','3','4','5']:      if a == '0':        self.show()      elif a == '1':        self.add()      elif a == '2':        self.delete()      elif a == '3':        self.search()      elif a == '4':        self.modity()      elif a == '5':        self.quit()        return      a = input('>>')if __name__ == "__main__":  ui = Cmd_UI()  ui.main()

以上就是关于“python怎么实现简单的学生管理系统”的内容,如果改文章对你有所帮助并觉得写得不错,劳请分享给你的好友一起学习新知识,若想了解更多相关知识内容,请多多关注编程网Python频道。

--结束END--

本文标题: python怎么实现简单的学生管理系统

本文链接: https://www.lsjlt.com/news/246843.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python怎么实现简单的学生管理系统
    这篇文章主要为大家展示了python怎么实现简单的学生管理系统,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“python怎么实现简单的学生管理系统”这篇文章吧。python是什么意思Python是...
    99+
    2023-06-06
  • python实现简单的学生成绩管理系统
    本文实例为大家分享了python实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 需求: 代码: import os filename = 'student.txt' d...
    99+
    2024-04-02
  • Python实现简单的学生信息管理系统
    本文实例为大家分享了Python实现学生信息管理系统的具体代码,供大家参考,具体内容如下 要求描述: 学生的信息包括:学号,姓名,年龄,性别,出生日期,地址,电话,E-mail等等。...
    99+
    2024-04-02
  • Java实现简单学生管理系统
    本文实例为大家分享了Java实现简单学生管理系统的具体代码,供大家参考,具体内容如下 名为StudentManageTest的Java测试类 import java.util.Sca...
    99+
    2024-04-02
  • C++实现简单学生管理系统
    本文实例为大家分享了C++实现简单学生管理系统的具体代码,供大家参考,具体内容如下 实现学生管理,其中关键字可以自行替换。经过Visual C++6.0验证可执行成功。 #inclu...
    99+
    2024-04-02
  • java实现简单的学生管理系统
    用Java如何实现一个用数组作为存储结构的简易的学生管理系统? 首先,我们定义一个student类,在其中添加私有化的成员变量,通过getter和setter方法进行调用 publi...
    99+
    2024-04-02
  • 使用Python实现简单的学生成绩管理系统
    目录基本功能:实现效果:制作技巧  1.定义变量2.读取学生成绩信息3.循环等待操作指令并执行4.编写操作指令执行函数(1)显示学生成绩信息函数(2)新建学生成绩...
    99+
    2024-04-02
  • 基于Python实现一个简单的学生管理系统
    目录序言代码实战效果展示序言 小学妹说要毕业了,学了一学期Python等于没学,现在要做毕设做不出来,让我帮帮她,晚上去她家吃夜宵。 当时我心想,这不是分分钟的事情,还要去她家,男孩...
    99+
    2022-12-31
    Python实现学生管理系统 Python学生管理系统 Python管理系统
  • C++实现简单的学生成绩管理系统
    本文实例为大家分享了C++实现简单学生成绩管理系统的具体代码,供大家参考,具体内容如下 manage.h #include <iostream> #include <...
    99+
    2024-04-02
  • Java实现简单学生信息管理系统
    最近在学习Java,所以写了个学生信息管理系统,话不多说,上代码。 Student.java: package com.mumu; public class Student {...
    99+
    2024-04-02
  • C#实现简单学生成绩管理系统
    本文实例为大家分享了C#实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C#作业 用循环结构/数组实现 进入启动页面 管理员身份登入 用户名:师晓峰密码:88481234...
    99+
    2022-11-13
    C#学生成绩管理系统 C#学生管理系统 C#成绩管理系统
  • C++实现简单学生成绩管理系统
    本文实例为大家分享了C++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 一、问题描述 设计一个学生成绩管理程序,实现按班级完成对学生成绩信息的录入和修改,并用文件保存。实...
    99+
    2024-04-02
  • java实现简单学生成绩管理系统
    本文实例为大家分享了java实现学生成绩管理系统的具体代码,供大家参考,具体内容如下   import java.util.Scanner; import java.lang.*;...
    99+
    2024-04-02
  • C++实现简单学生信息管理系统
    本文实例为大家分享了C++实现学生信息管理系统的具体代码,供大家参考,具体内容如下 编译环境: Microsoft Visual Studio 2019 3个头文件: Fileope...
    99+
    2024-04-02
  • Java实现简单的学生教师管理系统
    本文实例为大家分享了Java实现学生教师管理系统的具体代码,供大家参考,具体内容如下 需求: 我们可以通过管理系统对学生和教师进行管理对象学生和教师进行增删改查等的功能 1、Stud...
    99+
    2024-04-02
  • 如何用python实现简单的学生成绩管理系统
    这篇文章主要介绍了如何用python实现简单的学生成绩管理系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用python实现简单的学生成绩管理系统文章都会有所收获,下面我们一起来看看吧。需求:代码:imp...
    99+
    2023-06-29
  • C语言实现简单的学生学籍管理系统
    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 一 .课题设计内容与主要功能 1.1问题描述: 通过该系统实现对学生学籍信息进行录入、显示、修改、...
    99+
    2024-04-02
  • python怎么实现简易的学生信息管理系统
    一、系统功能1.录入学生信息2.查找学生信息3.修改学生信息4.删除学生信息5.成绩排序6.统计学生总人数7.显示所有学生信息0.退出系统二、系统开发环境1.操作系统:win72.开发工具:PyCharm3.Python内置模块:os,re...
    99+
    2023-05-14
    Python
  • java基于jdbc实现简单学生管理系统
    目录工具类工程目录:运行截图:这个是java连接mysql数据库的一个简单学生系统,通过jdbc连接数据库。 工具类 JDBCuntils. package Student; ...
    99+
    2024-04-02
  • java怎么实现简单学生成绩档案管理系统
    今天小编给大家分享一下java怎么实现简单学生成绩档案管理系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。学生成绩档案管理...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作