#渗透测试#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.mzph.cn/bicheng/60212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…

微信小程序——01开发前的准备和开发工具

文章目录 一、开发前的准备1注册小程序账号2安装开发者工具 一、开发前的准备 开发前需要进行以下准备&#xff1a; 1 注册小程序账号2激活邮箱3 信息登记4 登录小程序管理后台5完善小程序信息6绑定开发者 1注册小程序账号 第1步&#xff1a;首先打开“微信公众平台” https:…

文心一言 VS 讯飞星火 VS chatgpt (388)-- 算法导论24.5 8题

八、设 G ( V , E ) G(V,E) G(V,E) 为一个带权重的有向图&#xff0c;且包含一个可以从源结点 s s s 到达的权重为负值的环路。请说明如何构造一个 G G G 的边的松弛操作的无限序列&#xff0c;使得每一步松弛操作都能对某一个最短路径估计值进行更新。如果要写代码&#x…

鸿蒙UI开发——自定义UI绘制帧率

1、概 述 随着设备屏幕的不断演进&#xff0c;当前主流设备采用LTPO屏幕&#xff08;可变刷新率屏幕&#xff09;&#xff0c;此类屏幕支持在多个档位之间切换屏幕帧率。 对于快速变化的内容&#xff0c;如射击游戏&#xff0c;交互动画等&#xff0c;显示帧率越高&#xff0…

计算机毕业设计 | SpringBoot慈善公益平台 爱心互助活动发布管理系统(附源码)

1&#xff0c;项目介绍 爱慈善公益平台&#xff08;love-charity&#xff09;是一个基于 SpringBoot 开发的标准 Java Web 项目。整体页面非常的简约大气&#xff0c;项目的完整度较高&#xff0c;是一个偏向公益论坛的系统。非常适合刚刚接触学习 SpringBoot 的技术小白学习&…

在 AMD GPU 上使用 AI2 的 OLMo 模型进行推理

Inferencing with AI2’s OLMo model on AMD GPU — ROCm Blogs 2024 年 4 月 17 日&#xff0c;作者&#xff1a;Douglas Jia. 在这篇博客中&#xff0c;我们将向您展示如何在 AMD GPU 上使用 AI2 的 OLMo 模型生成文本。 简介 由艾伦人工智能研究所&#xff08;Allen Instit…

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置...-CSDN博客 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明-CSDN博客 工作…

C++数学

前言 C算法与数据结构 打开打包代码的方法兼述单元测试 数论&#xff1a;质数、最大公约数、菲蜀定理 组合数学汇总 计算几何 博弈论 曼哈顿距离与切比雪夫距离 红线是哈曼顿距离&#xff0c;绿线是切比雪夫距离。 二维曼哈顿距离转切比雪夫距离 曼哈顿距离&#xff1a;|…

前深度学习时代-经典的推荐算法

参考自《深度学习推荐系统》—— 王喆&#xff0c;用于学习记录。 1.协同过滤 “协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤&#xff0c;从中筛选出目标用户可能感兴趣的信息的推荐过程。 基于用户相似度进行推荐的协同过滤算法 UserCF 用户相似度…

10 Oracle Data Guard:打造高可用性与灾难恢复解决方案,确保业务连续性

文章目录 10 Oracle Data Guard&#xff1a;打造高可用性与灾难恢复解决方案&#xff0c;确保业务连续性一、Data Guard基本概念二、Data Guard技术架构三、配置Oracle Data Guard的步骤3.1 准备主数据库和备用数据库3.2 配置Redo日志传输服务3.3 配置Data Guard Broker3.4 启动…

计算机网络综合题

IP数据报的划分 CRC差错检测 冗余码的计算 因此&#xff0c;余数是1110&#xff0c;传输的数为11010110111110。在传输过程中最后两位变成o&#xff0c;接收端能够发现&#xff0c;因为11010110111110除以10011余数不为0。 子网划分 暴力求解法 &#xff08;定长子网划分大量…

计算机课程管理:Spring Boot与工程认证的协同

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Java | Leetcode Java题解之第557题反转字符串中的单词III

题目&#xff1a; 题解&#xff1a; class Solution {public String reverseWords(String s) {StringBuffer ret new StringBuffer();int length s.length();int i 0;while (i < length) {int start i;while (i < length && s.charAt(i) ! ) {i;}for (int …

C++ | Leetcode C++题解之第556题下一个更大元素III

题目&#xff1a; 题解&#xff1a; class Solution { public:int nextGreaterElement(int n) {int x n, cnt 1;for (; x > 10 && x / 10 % 10 > x % 10; x / 10) {cnt;}x / 10;if (x 0) {return -1;}int targetDigit x % 10;int x2 n, cnt2 0;for (; x2 …

第14张 GROUP BY 分组

一、分组功能介绍 使用group by关键字通过某个字段进行分组&#xff0c;对分完组的数据分别 “SELECT 聚合函数”查询结果。 1.1 语法 SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]; 明确&#…

go函数传值是值传递?还是引用传递?slice案例加图解

先说下结论 Go语言中所有的传参都是值传递&#xff08;传值&#xff09;&#xff0c;都是一个副本&#xff0c;一个拷贝。 值语义类型&#xff1a;参数传递的时候&#xff0c;就是值拷贝&#xff0c;这样就在函数中就无法修改原内容数据。 基本类型&#xff1a;byte、int、bool…

UDP checksum(UDP校验和)

UDP校验和&#xff08;UDP checksum&#xff09;是一种用于检测传输中的UDP数据包在传输过程中是否发生错误的机制。UDP&#xff08;用户数据报协议&#xff09;是一种简单的无连接的传输层协议&#xff0c;它用于在网络中发送数据包&#xff0c;但不提供数据包的传输可靠性或顺…

使用pycharm调试程序——完全显示张量的数值

我在使用PyCharm调试程序时&#xff0c;发现有些张量因为shape过大&#xff08;数据量太多&#xff09;&#xff0c;导致该张量中的数值无法完全显示。下面就简单介绍怎样完全显示张量中的数值。 假设某个张量 inp_voxel 的 shape 为 torch.Size([5, 128, 128])&#xff0c;如…

MYSQL隔离性原理——MVCC

表的隐藏字段 表的列包含用户自定义的列和由系统自动创建的隐藏字段。我们介绍3个隐藏字段&#xff0c;不理解也没有关系&#xff0c;理解后面的undo log就懂了&#xff1a; DB_TRX_ID &#xff1a;6 byte&#xff0c;最近修改( 修改/插入 )事务ID&#xff0c;记录创建这条记…

strtok函数详解

strtok函数 strtok 函数是一个字符串分割函数&#xff0c;用于将字符串分割成一系列的标记。这个函数通过一组分隔符字符来确定标记的边界&#xff0c;每次调用都会返回字符串中的下一个标记&#xff0c;并且将原始字符串中的分隔符替换为空字符‘\0’&#xff0c;从而实际上是…