#渗透测试#SRC漏洞挖掘#Python自动化脚本的编写04之通过面向对象编程学生管理信息系统01

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。                                                              #陇羽sec#

目录

系统概述

主要功能模块

类设计

数据库设计

系统实现

系统测试

系统部署

 系统设计

主函数的业务流程

 代码实现

源码如下

 主函数

 主函数调用

 菜单打印:

录入学生信息

 附源码:


系统概述

面向对象编程(OOP)学生管理信息系统是一个用于管理学生信息的软件系统。该系统通过面向对象的方法,将学生、课程、成绩等实体抽象为对象,并通过类和对象的关系来管理这些信息。

主要功能模块
  1. 学生信息管理

    • 添加学生信息

    • 修改学生信息

    • 删除学生信息

    • 查询学生信息

  2. 课程信息管理

    • 添加课程信息

    • 修改课程信息

    • 删除课程信息

    • 查询课程信息

  3. 成绩信息管理

    • 录入学生成绩

    • 修改学生成绩

    • 删除学生成绩

    • 查询学生成绩

类设计
  1. Student类

    • 属性:学号、姓名、性别、出生日期、联系方式

    • 方法:添加学生、修改学生信息、删除学生、查询学生信息

  2. Course类

    • 属性:课程编号、课程名称、学分、授课教师

    • 方法:添加课程、修改课程信息、删除课程、查询课程信息

  3. Grade类

    • 属性:学号、课程编号、成绩

    • 方法:录入成绩、修改成绩、删除成绩、查询成绩

数据库设计
  1. 学生表(Student)

    • 字段:学号(主键)、姓名、性别、出生日期、联系方式

  2. 课程表(Course)

    • 字段:课程编号(主键)、课程名称、学分、授课教师

  3. 成绩表(Grade)

    • 字段:学号(外键)、课程编号(外键)、成绩

系统实现
  1. 编程语言选择

    • 可以选择Java、Python、C++等支持面向对象编程的语言。

  2. 开发环境

    • 使用Eclipse、IntelliJ IDEA、Visual Studio等集成开发环境。

  3. 数据库连接

    • 使用JDBC、SQLAlchemy等数据库连接工具。

系统测试
  1. 单元测试

    • 对每个类的方法进行单元测试,确保功能正确。

  2. 集成测试

    • 测试各个模块之间的交互,确保系统整体功能正常。

  3. 用户测试

    • 邀请用户进行测试,收集反馈并进行改进。

系统部署
  1. 部署环境

    • 选择合适的操作系统和服务器,如Linux、Windows Server等。

  2. 部署工具

    • 使用Docker、Jenkins等工具进行自动化部署。

  3. 维护与更新

    • 定期进行系统维护,修复bug,更新功能。

 系统设计

主函数的业务流程

 

 代码实现

''''
1: 技术实现分析
1.数据存储的结构设计

student = [
    {"name" : "张三" , 'yw' :88,'sx': 90 , 'yy':80}
    {"name" : "李四" , 'yw' :88,'sx': 90 , 'yy':80}


]

2.实现的技术
 循环、列表、字典、函数、字符串、数值

 3.技术实现的步骤

         1运行显示欢迎信息
          2打印菜单信息
          3用户输入选择的功能
          4判断用户的选择,进行相关的操作
            添加,删除,查找,显示所有的学生
             1,用户输入
             #请输入学号
      

           ###判断程序是否退出
    (        2-4步骤,循环执行)

        5按平均分排列

        6显示学生成绩
         7退出程序
'''

源码如下
 主函数
def main():

    while True:
        menm()
        n = int(input("请选择: "))
        
        if n in [0, 1, 2, 3, 4, 5, 6, 7, 8]:
            if n == 0:
                an = input("您确定退出系统吗?y/n: ")
                if an.lower()  == 'y':
                    print('谢谢使用!!!')
                    break  # 退出系统 
                else:
                    continue 
            else:
                print(f"您选择了操作 {n},请继续其他操作。")
        else:
            print("无效的选择,请重新输入。")
 主函数调用
if __name__ == '__main__':
     main()
 菜单打印:
def menm():
            ##打印 菜单
        menustr = """
    *******************************************
    ==========欢迎使用学生成绩管理系统===========
    【1】录入学生信息
    【2】查找学生信息
    【3】删除学生信息
    【4】修改学生成绩
    【5】对学生成绩排序
    【6】统计学生信息
    【7】显示所有学生信息
    【8】########
    【0】退出管理系统
    *******************************************
    
    
    """
        print(menustr)
录入学生信息

 附源码:
import json 
import os 
 
class StudentInfoManager:
    """学生信息管理系统"""
    
    def __init__(self):
        self.students  = []
        self.load_data() 
 
    @staticmethod 
    def print_menu():
        """打印菜单"""
        menustr = """
    *******************************************
    ==========欢迎使用学生成绩管理系统===========
    【1】录入学生信息 
    【2】查找学生信息 
    【3】删除学生信息 
    【4】修改学生成绩 
    【5】对学生成绩排序 
    【6】统计学生信息 
    【7】显示所有学生信息 
    【8】########## 
    【0】退出管理系统 
    *******************************************
    """
        print(menustr)
 
    def check_stu_id(self, stu_id):
        """检验学号是否重复"""
        for student in self.students: 
            if student['stu_id'] == stu_id:
                return True 
        return False 
 
    def add_students(self):
        """添加学生信息"""
        print("*****添加学生信息******")
        stu = {}
        while True:
            stu['stu_id'] = input("请输入学生学号:")
            if self.check_stu_id(stu['stu_id']): 
                print("学号重复,请重新输入:")
            else:
                break 
 
        stu['stu_name'] = input("请输入学生姓名:")
        stu['stu_yw'] = self.validate_score(" 请输入语文成绩:")
        stu['stu_sx'] = self.validate_score(" 请输入数学成绩:")
        stu['stu_yy'] = self.validate_score(" 请输入英语成绩:")
        self.students.append(stu) 
        print(f"添加成功!学生信息为:{stu}")
 
    def delete_students(self):
        """删除学生信息"""
        print('*****删除操作******')
        while True:
            stu_id = input("请输入要删除的学生号:")
            for student in self.students: 
                if student['stu_id'] == stu_id:
                    self.students.remove(student) 
                    print(f"学生{stu_id}的信息已删除。")
                    return 
            print("未找到该学号的学生,请重新输入。")
 
    def validate_score(self, subject):
        """验证成绩有效性"""
        while True:
            score = input(subject)
            try:
                score = float(score)
                if 0 <= score <= 100:
                    return score 
                else:
                    print("成绩超出范围,请输入0到100之间的数字。")
            except ValueError:
                print("输入无效,请输入一个数字。")
 
    def load_data(self):
        """加载数据"""
        if os.path.exists('students.json'): 
            with open('students.json',  'r', encoding='utf-8') as f:
                self.students  = json.load(f) 
        else:
            self.students  = []
 
    def save_data(self):
        """保存数据"""
        with open('students.json',  'w', encoding='utf-8') as f:
            json.dump(self.students,  f, ensure_ascii=False, indent=4)
 
    def find_students(self):
        """查找学生信息"""
        stu_id = input("请输入要查找的学生学号:")
        for student in self.students: 
            if student['stu_id'] == stu_id:
                print(f"找到学生信息:{student}")
                return 
        print("未找到该学号的学生。")
 
    def modify_scores(self):
        """修改学生成绩"""
        stu_id = input("请输入要修改成绩的学生学号:")
        for student in self.students: 
            if student['stu_id'] == stu_id:
                student['stu_yw'] = self.validate_score(" 请输入新的语文成绩:")
                student['stu_sx'] = self.validate_score(" 请输入新的数学成绩:")
                student['stu_yy'] = self.validate_score(" 请输入新的英语成绩:")
                print(f"学生成绩已更新:{student}")
                return 
        print("未找到该学号的学生。")
 
    def sort_scores(self):
        """对学生成绩排序"""
        sort_key = input("请选择排序依据(yw:语文,sx:数学,yy:英语):")
        if sort_key not in ['yw', 'sx', 'yy']:
            print("输入有误,请输入'yw','sx'或'yy'。")
            return 
        self.students.sort(key=lambda  x: x[f'stu_{sort_key}'], reverse=True)
        print("排序完成。")
 
    def statistics_info(self):
        """统计学生信息"""
        num_students = len(self.students) 
        total_scores = {
            'yw': sum(student['stu_yw'] for student in self.students), 
            'sx': sum(student['stu_sx'] for student in self.students), 
            'yy': sum(student['stu_yy'] for student in self.students), 
        }
        avg_scores = {key: value / num_students for key, value in total_scores.items()} 
        print(f"学生总数:{num_students}")
        print(f"各科总成绩:{total_scores}")
        print(f"各科平均成绩:{avg_scores}")
 
    def display_all_students(self):
        """显示所有学生信息"""
        for student in self.students: 
            print(student)
 
    def run(self):
        """运行管理系统"""
        while True:
            self.print_menu() 
            choice = input("请输入您的选择:")
            if choice == '1':
                self.add_students() 
            elif choice == '2':
                self.find_students() 
            elif choice == '3':
                self.delete_students() 
            elif choice == '4':
                self.modify_scores() 
            elif choice == '5':
                self.sort_scores() 
            elif choice == '6':
                self.statistics_info() 
            elif choice == '7':
                self.display_all_students() 
            elif choice == '0':
                self.save_data() 
                print("退出管理系统。")
                break 
            else:
                print("输入有误,请重新输入。")
 
if __name__ == "__main__":
    manager = StudentInfoManager()
    manager.run() 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/913530.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

客户手机号收集小程序有什么用

客户手机号收集小程序具有多方面的重要作用&#xff0c;主要体现在以下几个领域&#xff1a; 商业营销与客户关系管理 精准营销&#xff1a;通过收集客户手机号&#xff0c;企业能够依据客户的消费行为、偏好等信息&#xff0c;进行精准的个性化营销。例如&#xff0c;电商企业…

【RabbitMQ】07-业务幂等处理

1. 方式一 序列化设置唯一Id。 Beanpublic MessageConverter messageConverter() {Jackson2JsonMessageConverter jjmc new Jackson2JsonMessageConverter();jjmc.setCreateMessageIds(true);return jjmc;}RabbitListener(bindings QueueBinding(value Queue(name "d…

web实操5——http数据详解,request对象功能

http请求数据 现在我们浏览器f12的那些是浏览器给http格式数据整理之后便于我们阅读的。 原始的http格式信息&#xff1a; 就是按照一定格式和符号的字符串&#xff1a; 请求行&#xff1a;格式如下图 请求头&#xff1a;一个个key&#xff0c;value数据&#xff0c;用,分割…

《潜行者2切尔诺贝利之心》游戏引擎介绍

潜行者2切尔诺贝利之心是基于虚幻5引擎&#xff0c;所以画面效果大家不必担心。游戏目前已经跳票了很久&#xff0c;预计发售时间是2024 年 11 月 21 日&#xff0c;这次应该不会再跳票。 潜行者2切尔诺贝利之心是虚幻5吗 答&#xff1a;是虚幻5。 潜行者官方推特之前回复了…

C++篇之继承

1&#xff0c;继承的概念及定义 1.1&#xff0c;继承的概念 继承机制是面向对象程序设计使代码可以复用的重要手段&#xff0c;它允许我们在原有类的基础上进行扩展&#xff0c;增加方法&#xff08;成员函数&#xff09;和属性&#xff08;成员变量&#xff09;&#xff0c;这…

Go语言并发编程:轻松驾驭多线程世界(九)

Go语言并发编程&#xff1a;轻松驾驭多线程世界在这里插入图片描述 在现代编程中&#xff0c;并发 是让你的程序变得更强大、更高效的关键技能。幸运的是&#xff0c;Go语言提供了一种简单、直观的方式来处理并发任务&#xff0c;使用轻量级的 Goroutine 和 Channel&#xff0c…

STM32外设之SPI的介绍

### STM32外设之SPI的介绍 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;主要用于EEPROM、FLASH、实时时钟、AD转换器等外设的通信。SPI通信只需要四根线&#xff0c;节约了芯片的管脚&#x…

浅谈语言模型推理框架 vLLM 0.6.0性能优化

在此前的大模型技术实践中&#xff0c;我们介绍了加速并行框架Accelerate、DeepSpeed及Megatron-LM。得益于这些框架的助力&#xff0c;大模型的分布式训练得以化繁为简。 然而&#xff0c;企业又该如何将训练完成的模型实际应用部署&#xff0c;持续优化服务吞吐性能&#xf…

初始 html

html 文件结构 html 标签是整个 html 文件的根标签(最顶层标签) head 标签中写页面的属性. body 标签中写的是页面上显示的内容 title 标签中写的是页面的标题 <html><head><title>这是一个标题</title></head><body></body> <…

springboot校园支付系统-计算机毕业设计源码36348

目 录 摘要 Abstract 1 绪论 1.1 研究背景与意义 1.2 开发技术和开发特点 1.3论文结构与章节安排 2 校园支付系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.…

The First项目报告:抗 MEV 交易的CoW Protocol什么?

2023年&#xff0c;当UNIswap推出UniswapX 时&#xff0c;市场迎接它的不是赞叹&#xff0c;而是一片争议。UniswapX被指抄袭 CoWSwap 和 1inch。Curve 官方称 1inch 和 CoWSwap 早已改变游戏规则&#xff0c;UniswapX 非首创。CoWSwap 强调其 Intent Based Trading 的先驱地位…

【Linux系列】 环境配置文件合并的艺术:从`.env`到`.env.combined`

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Fastadmin框架短视频系统视频知识付费源码

简介&#xff1a; FastAdmin框架短视频系统/视频知识付费源码/附带小说系统 系统视频支持包月、单独购买、观影卷等功能 源码附带小说系统 源码需要配置高服务器和VDN加速 图片&#xff1a; 下载地址&#xff1a;云盘下载 原文地址&#xff1a;Fastadmin框架短视频系统视…

计算机体系结构之多级缓存、缓存miss及缓存hit(二)

前面章节《计算机体系结构之缓存机制原理及其应用&#xff08;一&#xff09;》讲了关于缓存机制的原理及其应用&#xff0c;其中提出了多级缓存、缓存miss以及缓存hit的疑问。故&#xff0c;本章将进行展开讲解&#xff0c; 多级缓存、缓存miss以及缓存hit存在的意义是为了保持…

后端SpringBoot学习项目-用户管理-增删改查

最终代码结构 仓库地址 Entity文件 数据库表设计 entity层实现 文件创建 ● 创建entity文件夹 ● 在entity层创建Java类&#xff0c;名字为User (关键字不可使用) 代码实现 package com.example.drhtspringboot.entity;import com.baomidou.mybatisplus.annotation.IdT…

华为入围Linux 内核CVE 检视“五人团”,openEuler要再进阶?

背景&#xff1a;内核社区接管 Linux 社区漏洞发布 往年 Linux 内核漏洞发布存在来源不固定、覆盖不全面&#xff0c;有时发布无修复补丁的 CVE 从而形成 0-day 漏洞等问题&#xff0c;给 Linux 内核安全带来了不确定性&#xff0c;为了更规范化运作&#xff0c;2024 年 2 月 1…

【C语言指南】C语言内存管理 深度解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 引言 C语言是一种强大而灵活的编程语言&#xff0c;为程序员提供了对内存的直接控制能力。这种对内存…

12 Node.js API接口开发

八、API接口 8.1 json-server工具 1&#xff09;安装json-server npm i -g json-server2)示例 //students.json {"student":[{"id":1,"name":"sally","age":18,"gender":"女"},{"id":2,&…

前段时间我所在的公司收到了来自Nevicat的律师函

前段时间我所在的公司收到了来自Nevicat的律师函&#xff0c;至于原因嘛&#xff0c;大家懂的都懂。肯定是因为没有购买人家的正版软件&#xff0c;于是公司下令&#xff0c;所有人禁止继续使用Nevicat自行寻找其他sql工具&#xff0c;迫于无奈&#xff0c;在我使用了十几款主流…

【系统设计】理解带宽延迟积(BDP)、吞吐量、延时(RTT)与TCP发送窗口的关系:优化网络性能的关键

在设计和优化网络性能时&#xff0c;理解 带宽延迟积&#xff08;BDP&#xff09;、吞吐量、延时&#xff08;RTT&#xff09; 和 TCP发送窗口 之间的关系至关重要。这些概念相互影响&#xff0c;决定了网络连接的性能上限&#xff0c;尤其是在高带宽、高延迟的环境中&#xff…