网上课程管理系统---大致框架(伪代码)

本文介绍了一个网上课程管理系统的架构设计,包括系统需求分析、模块划分、核心类定义及功能实现思路。系统涵盖讲师、学生、管理员三种角色,支持课程创建、班级管理、用户信息维护等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 网上课程管理系统---大致框架(伪代码)

 

一、复习继承

继承:什么是什么的关系

单继承:

  先抽象再继承,几个代码之间相同的代码抽象出来,成为父类

  子类自己没有的名字,就可以使用父类的方法和属性

  如果子类自己有,一定先用自己的

  在类中使用self的时候,一定要看清楚self指向谁

多继承:

  新式类和经典类:

   多继承寻找名字的顺序:新式类广度优先,经典类深度优先

   新式类中有一个类名.mro方法,查看广度优先的继承顺序

      python3中有一个super方法,根据广度优先的继承顺序查找上一个类

 

二、网上课程管理系统

系统需求文字类描述:

1、开始登入,判断身份

2、身份确定后,每个身份对应的需求:

(1)讲师:查看课程信息;查看讲的班级信息;查看带的学生信息

(2)学生:选择班级;查看自己的信息

(3)管理员:创建讲师账号;创建学生账号;创建课程;创建班级;给讲师分配课程;给讲师分配班级

3、退出,结束

 

注意:应当使用软件规范去写(在前面的‘包的进阶’里面有提到一些大概)

根据软件规范的几个文件包,先大概了解一下整个系统大致流程,先用伪代码来阐述

 

(1)bin文件里面存有start.py文件,主要是大目录路径的导入,方便后续模块的导入

#  修改sys.path,把学校课程管理系统这个路径写到sys.path列表中
#  之后所有的模块导入,都是基于学校课程管理系统
#  比如调用core里面的main方法
from core import main
if __name__ == '__main__':
    main.main  # 调用main模块里面的main方法

 

(2)core文件,主函数,程序的入口,里面应当有登入函数以及main函数

#  主函数 程序入口
def login():
    '''
    登入函数,应该先到conf.config文件中读取userinfo文件中的路径,读取userinfo文件中的信息,
    对用户名和密码进行检验,登入成功后,查看这个人的身份,来确定进入哪一个试图
    :return:
    '''

def main():
    '''
    打印欢迎信息
    login:什么三次登入之类的  得到返回值:用户的姓名和身份
    打印用户身份对应的功能菜单(功能菜单写在管理员里面)
     如果用户想要调用任何方法应该通过角色对象调用,跳转到对应的对象的方法里面,core比如管理员里面的方法都是通过管理员进行调用,
    :return:
    '''

除了main函数外,还有有关的几个身份类也放在core文件中

 

首先以管理员的身份登入,登入之后,就应该实例化一个对应身份的对象 manage_obj = Manager(name) 管理员对象可以调用所有方法

 

管理员类:根据前面的系统大概要求可以知道管理员类大致拥有的一些属性

class Manager:
    menu = {'创建讲师账号':'','学生账号':'','创建课程':'','创建班级':'','分配班级和课程':''}
    def __init__(self,name,):
        self.name = name

    def createrTeacher(self):
        pass

    def createrStudent(self):
        pass

 具体的管理员类实现的调用方法,用中文先理解,如下:

class Manager:
    menu = {'创建讲师账号':'','学生账号':'','创建课程':'','创建班级':'','分配班级和课程':''}
    def __init__(self,name,):
        self.name = name

    def createrTeacher(self):
        # 输入讲师的姓名
        # 输入讲师的密码
        # 将讲师的信息写入userinfo文件
        # 输入:
            # 讲师所在的学校  到这里讲师的信息有三个: 用户名,身份,学校
        # 实例化一个讲师对象,存储在讲师对应的文件中

        pass

    def createrCourse(self):
        # 输入学科名称
        # 价格
        # 周期
        # 创建一个课程对象,dump进course文件
        pass

    def createrClasses(self):  # 创建班级
        # 输入班级名称,学校 ---属性
        # 绑定一个学科对象,要先调用查看学科方法获取学科对象,用户选择学科,再将对象绑定到班级
        # 创建一个属于这个班级的文件用于存储学生信息,将文件的路径存储到班级对象中
        # 创建一个班级对象(名称 学校 学科对象 讲师空列表 学生信息所在文件的路径)
        pass

    def showCourse(self):
        # 打开文件
        # 将文件中的学科对象读出来,展示
        pass

    def createrStudent(self):
        # 输入学生的姓名
        # 输入学生的密码
        # 将学生的信息写入user info文件中
        # 创建一个学生对象(姓名 讲师空列表)
        pass
    def boundClass(self):
        # 管理员选择为老师还是学生指定班级

        # 如果是为老师绑定班级:
            # 找到指定老师和对应的班级(都是通过show的方法查看后选择)
            # 给讲师对象的班级属性的列表中加入一个新项,值为班级的对象
            # 给班级对象中的讲师属性列表中加入一个新的项,值为讲师的对象

        # 如果为学生绑定:
            # 找到指定学生对应的班级 (都是通过show的方法查看后选择)
            # 给学生创建新的班级属性,将属性的值设置为班级对象
            # 将学生对象的信息 根据班级对象中存储的学生信息存储路径 dump入对应文件
        pass

 

老师类:大致拥有的属性如下,这里就涉及到了前面学过的组合的知识:一个对象的属性=另一个对象

class Classes:
    def __init__(self,school,name,kind):
        self.school = school # 学校
        self.name = name #  班级名称
        self.kind = kind #  班级科目
        self.student = ['student_obj'] #  应该有学生的所有信息

class Course:
    def __init__(self,name,period,price):
        self.name = name
        self.period = period
        self.price = price
c = Course('python','6 month',19800)
class Teacher:
    def __init__(self,name):
        self.name = name
        self.classes = ['classes_obj']
        # self.course = c  # 组合 self.course相当于复制了course里面的所有属性,
        # 这里也可以先不要加course,可以放在后面先将老师实例化 再添加课程
t = Teacher('blue')
t.course = c  # 组合:对象的属性=对象 先给老师实例化后,再给老师创建一个属性

 

(3)db文件,只要一些重要的数据文件都可以放在db文件里面,比如用户名,用户密码,身份判断等

#  和文件相关的都放入db里面
用户名
用户密码
身份判断

 

(4)conf文件,conf里面存放了用户相关信息的路径,这样可以方便后续登入的时候直接调用路径就可以查看用户的相关信息,不用每次都导入一个信息表

#  在这里放入userinfo的文件路径
userinfo =r'C:\Users\sku1-1\PycharmProjects\untitled\学校课程管理系统\db\userinfo'

 

转载于:https://www.cnblogs.com/wxm422562/p/10986513.html

1.伪静态 系统支持每个文章和每个栏目单独指定网址和网址格式。支持动态网址和静态网址格式的自定义设置。比如可以将文章页 article.php?url=test 更改显示为 read.asp?a=test ,blog/test ,book/test.html 三种样式。其中的文件后缀,文件名,都是可以自定义,从而实现了完全隐藏网站程序或伪造其它的网站程序,方便多个站点间拥有不同的个性。 2.多站点 使用一个网站系统可以建很多站,每个站都有自己的特定的设置,不同的模板,不同的网址设置.比如说我们购买了一个香港主机,它是根目录可以绑定15个域名,如果我们使用它可以建15个网站:只要哪个域名访问它,它就可以根据不同的域名显示对应网站的内容.从访客的角度来看,他看到的只是不同的网站.但对网站管理员来说,只需要管理一个cms后台。建这些站可以工节省不少人力,成本. 3.高速度 系统对数据库,对各个代码进行了优化,运行速度快.加上程序本身更注重文章系统的功能,所以使用资源非常少,百万数据也不成问题。 5.易扩展 对于更多的功能,我们可以通过扩展来实现.系统提示多个锚点,用户可以在前台,后台,随时添加自己的扩展.对于每一个网站,都可以单独设置插件.让每个站点都充满特色. 6.服务端 本地提供数据转换工具,发布工具,管理工具.数据转换工具提供各种cms,blog的转换工具;发布工具可以将一些数据抓取工具或是其它方式获取的数据发布到网站上;管理工具可以提供简单的远程数据管理功能. 7.自动缓存 程序为部分页面提供了自动缓存功能,在页面内容没有改变的情况下,实现了和静态页304一样的效果。 8.学习教村 程序结构简单清晰,代码注释详细,是PHP初学者学习入门的良好教材。
### MySQL Connector 和 MySQL Connector/Python 的区别使用场景 #### 1. **定义开发背景** MySQL Connector 是一组由 MySQL 官方提供的数据库驱动程序集合,旨在帮助开发者轻松实现应用程序 MySQL 数据库之间的交互。其中,`mysql-connector-python` 是专门为 Python 编程语言设计的一个子集[^1]。而更广义的 `mysql-connector` 则可能指代其他编程语言(如 Java、C++ 等)中的对应实现。 对于 Python 开发者而言,`mysql-connector-python` 提供了一种无需额外依赖即可快速集成 MySQL 功能的方式[^2]。 --- #### 2. **技术特性对比** | 特性 | `mysql-connector` (通用概念) | `mysql-connector-python` | |--------------------------|-------------------------------------|--------------------------------------| | **适用的语言** | 多种语言 | 专为 Python 设计 | | **官方支持程度** | 高 | 高 | | **是否纯 Python 实现** | 不一定 | 是 | | **安装复杂度** | 可能需要编译或其他本地库的支持 | 单一命令即可完成安装 | | **连接池支持** | 支持 | 支持 | | **跨平台兼容性** | 较高 | 极高 | --- #### 3. **具体差异分析** ##### (1)**实现方式** - `mysql-connector-python` 是完全基于 Python 的实现,这意味着它不需要任何外部 C 扩展或二进制文件来运行。这种特性使其非常适合在虚拟环境中部署,尤其是在隔离性强的应用场景下。 - 而传统的 `mysql-connector`(例如针对 C/C++ 或 Java 的版本),通常依赖于底层系统的动态链接库或者 JVM 运行时环境。这使得它们更适合那些对性能要求极高且允许绑定低级资源的操作场合。 ##### (2)**安装过程** - 对于 `mysql-connector-python` 来说,其安装极为简便,仅需一条 pip 命令即可完成全部设置[^2]: ```bash pip install mysql-connector-python ``` - 相较之下,某些非 Python 版本的 `mysql-connector` 可能涉及到复杂的构建步骤,甚至还需要手动配置系统级别的共享库路径等操作。 ##### (3)**API 接口风格** 尽管两者都提供了类似的 API 形式以便简化 SQL 查询处理逻辑,但由于目标受众不同,各自的设计哲学也有所侧重: -Python 社区内广泛接受的习惯做法被融入到了 `mysql-connector-python` 中,比如上下文管理器模式(`with`)以及迭代游标的运用等等; - 其他语言版本可能会更加贴近该语言自身的惯用法,则未必能够直接移植过来。 --- #### 4. **典型应用场景划分** ##### (1)适合选用 `mysql-connector-python` 的情形 当项目主要围绕 Python 展开,并希望减少对外部工具链的依赖时,可以选择此选项。特别是以下几种情况尤为推荐: - Web 后端服务框架搭建阶段,例如 Flask/Django 结合 RESTful API 输出数据流; - ETL(Extract Transform Load)作业自动化过程中频繁读写关系型存储单元; - 敏捷团队内部快速原型验证环节,追求最小化初始投入成本的同时保持灵活性。 ##### (2)倾向于传统 `mysql-connector` 的领域 如果业务需求超出了单纯依靠解释型脚本来解决问题的能力范畴,则应考虑转向更为强大的解决方案——即采用适配相应宿主语言特性的专用客户端库形式呈现出来的经典形态下的 `mysql-connectors` 。这类应用包括但不限于: - 需要极致优化 I/O 性能的大规模并发事务管理系统; - 深入嵌入硬件层面控制循环的数据采集装置固件编写活动; - 跨异构计算节点同步状态信息传递机制建设任务。 --- ### 示例代码片段展示两种调用方法 以下是分别利用这两种方式进行基本查询演示的例子: #### 使用 `mysql-connector-python` ```python import mysql.connector conn = mysql.connector.connect( host='localhost', database='test_db', user='root', password='password' ) cursor = conn.cursor() cursor.execute("SELECT * FROM users LIMIT 5;") for row in cursor.fetchall(): print(row) cursor.close() conn.close() ``` #### 类似伪代码表示其他语言版 `mysql-connector` 假定这里讨论的是某种虚构但具有代表意义的高级静态类型语言 XLang ,那么大致结构如下所示: ```xlang // 导入库声明部分省略... Database db := NewMysqlConnection("tcp", "localhost:3306", "test_db", "root", "password") defer db.Close() // 自动释放资源句柄 rows, err := db.Query("SELECT * FROM users LIMIT ?", []interface{}{5}) if err != nil { panic(err.Error()) } columns := rows.Columns() values := make([]sql.RawBytes, len(columns)) scanslice := make([]interface{}, len(values)) for i := range values { scanslice[i] = &values[i] } for rows.Next() { if err := rows.Scan(scanslice...); err != nil { log.Fatal(err) } var value string for _, colData := range values { if colData == nil { value = "NULL" } else { value = string(colData[:]) } fmt.Println(value) } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值