当前位置: 首页 > article >正文

#渗透测试#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() 


http://www.kler.cn/a/389565.html

相关文章:

  • 【计算机网络】Socket编程接口
  • const限定符-C语言中指针的“可变与不可变”法则
  • 安全生产管理的重要性:现状、痛点与改进之路
  • 解决:WSL2可视化opencv和pyqt冲突:QObject::moveToThread
  • Java中的不可变集合:性能与安全并重的最佳实践
  • 【JavaEE进阶】导读
  • 20241108,LeetCode 每日一题,用 Go 计算字符串中最长无重复字符
  • 创元集团携手火山引擎,数据飞轮驱动美妆品牌数字化转型
  • 一个基于Zookeeper+Dubbo3+SpringBoot3的完整微服务调用程序示例代码
  • C语言中,“extern”关键字的含义与用法
  • 网页版五子棋——用户模块(服务器开发)
  • 金山云C++面试题及参考答案
  • jenkins配置前端自动部署
  • MSB8041此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装-错误解决
  • 2024 年度分布式电力推进(DEP)系统发展探究
  • VBA08-if语句
  • 互动电影《催眠麦克风》官宣定档2.21预售正式开始
  • Kafka-linux环境部署
  • ssm077铁岭河医院医患管理系统+vue(论文+源码)_kaic
  • http协议与内外网的划分
  • uni-app资源管理与图标使用全解
  • Android 获取 SHA1 值的详细步骤
  • 【系统架构设计师】2024年下半年真题论文: 论面向服务的架构设计(包括解题思路和参考素材)
  • 【Linux探索学习】第十二弹——初识进程:进程的定义、描述和一些简单的相关操作
  • Spring Boot框架:构建符合工程认证的计算机课程
  • AIGC:人工智能生成内容的未来