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

(C语言)学生信息表(学生管理系统)(基于通讯录改版)(正式版)(C语言项目)

  1.首先是头文件:
//student.h
//头文件//防止头文件被重复包含#pragma once//宏定义符号常量,方便维护和修改
#define ID_MAX 20
#define NAME_MAX 20
#define AGE_MAX 5
#define SEX_MAX 5
#define CLA_MAX 20
//定义初始最大容量
#define MAX 1//定义结构体学生
struct Student
{//定义学生信息char id[ID_MAX];char name[NAME_MAX];char age[AGE_MAX];char sex[SEX_MAX];char cla[CLA_MAX];
};//定义结构体学生信息本
struct Book
{//数据struct Student* data;//当前学生个数int sz;//当前容量int capacity;
};//项目函数声明
void menu();
void InitBook(struct Book* stu);
void ReadBook(struct Book* stu);
void WriteBook(struct Book* stu);
void CheckBook(struct Book* stu);
void clear_screen();
void AddBook(struct Book* stu);
void ShowBook(struct Book* stu);
void CheckCapacity(struct Book* stu);
void ExitBook(struct Book* stu);
void ClearBook(struct Book* stu);
2. 然后是功能函数student.c文件
//student.c
//函数体文件//调用头文件
#include "student.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//定义函数体//定义清屏函数
//清屏操作
void clear_screen() {//判断是否为Windows系统
#ifdef _WIN32system("cls");//其他系统
#elsesystem("clear");
#endif
}//菜单函数
void menu()
{printf("*********************************************\n");printf("******** 1.添加        2.删除  **************\n");printf("******** 3.查询        4.修改  **************\n");printf("******** 5.查看        6.排序  **************\n");printf("******** 7.清空        0.退出  **************\n");printf("*********************************************\n");
}//检查容量是否溢出
void CheckCapacity(struct Book* stu) {if (stu->sz == 0) {printf("当前学生信息本为空!\n");}printf("当前容量为:%d\n", stu->capacity);printf("当前学生为:%d\n", stu->sz);
}//检查容量函数
void CheckBook(struct Book* stu) {//检查是否溢出if (stu->sz == stu->capacity) {printf("容量已满!开始扩容!\n");int newcapacity = (stu->capacity == 0) ? MAX : stu->capacity * 2;struct Student* cap = (struct Student*)realloc(stu->data, newcapacity * sizeof(struct Student));if (cap == NULL) {printf("扩容失败!\n");return;}stu->data = cap;stu->capacity = newcapacity;printf("扩容成功!\n");}
}//初始化学生信息函数
void InitBook(struct Book* stu) {//初始化为0或空stu->sz = 0;stu->data = NULL;stu->capacity = 0;//读取文件信息ReadBook(stu);//如果文件没有数据,初始化空间内存if (stu->sz == 0) {stu->data = (struct Student*)calloc(MAX, sizeof(struct Student));if (stu->data == NULL) {printf("初始化空间内存失败!\n");return;}stu->capacity = MAX;}
}
//读取文件函数
void ReadBook(struct Book* stu) {//打开文件FILE* fp = fopen("Studentbook.txt", "rb");if (fp == NULL) {return;}//定义一个临时结构体struct Student tmp;while (fread(&tmp,sizeof(struct Student),1,fp)) {//检查容量是否溢出CheckBook(stu);stu->data[stu->sz] = tmp;stu->sz++;CheckCapacity(stu);}fclose(fp);fp = NULL;
}//写入文件
void WriteBook(struct Book* stu) {FILE* fp = fopen("Studentbook.txt", "wb");if (fp == NULL) {printf("读取文件失败!\n");return;}for (int i = 0; i < stu->sz; i++) {fwrite((stu->data + i), sizeof(struct Student), 1, fp);}fclose(fp);fp = NULL;
}//添加学生信息
void AddBook(struct Book* stu) {CheckBook(stu);printf("请输入学号:");scanf("%s", stu->data[stu->sz].id);printf("请输入姓名:");scanf("%s", stu->data[stu->sz].name);printf("请输入年龄:");scanf("%s", stu->data[stu->sz].age);printf("请输入性别:");scanf("%s", stu->data[stu->sz].sex);printf("请输入班级:");scanf("%s", stu->data[stu->sz].cla);printf("添加成功!\n");(stu->sz)++;CheckCapacity(stu);
}//查询学生信息本
void ShowBook(struct Book* stu) {CheckCapacity(stu);printf("%-19s\t%-15s\t%-5s\t%-8s\t%-30s\n", "学号","姓名", "年龄", "性别", "班级");for (int i = 0; i < stu->sz; i++) {printf("%-19s\t%-15s\t%-5s\t%-8s\t%-30s\n", stu->data[i].id,stu->data[i].name,stu->data[i].age, stu->data[i].sex, stu->data[i].cla);}
}//退出学生信息本函数
void ExitBook(struct Book* stu) {WriteBook(stu);printf("退出成功!欢迎下次使用!\n");
}//释放空间函数
void ClearBook(struct Book* stu) {free(stu->data);stu->data = NULL;stu->sz = 0;stu->capacity = 0;
}
3.最后是主程序test.c文件:
//test.c
//测试文件//调用头文件
#include "student.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>enum Option
{EXIT,//0,对应退出通讯录ADD,//1,对应添加联系人DEL,//2,对应删除联系人SEARCH,//3,对应查询联系人MODIFY,//4,对应修改联系人SHOW,//5,对应查看通讯录SORT,//6,对应排序通讯录CLEAR,//7,对应清空通讯录
};//程序主函数
int main() {//定义结构体变量struct Book stu;//初始化学生信息InitBook(&stu);int input = 0;int menu_0 = 0;do {//打印菜单while (1) {printf("************按1继续************\n");if (scanf("%d", &menu_0) != 1 && menu_0 != 1) {printf("输入不合法,请按1继续\n");return 1;}clear_screen();if (menu_0 == 1){menu();break;}}printf("请选择对应模式(0-7):\n");if (scanf("%d", &input) != 1 || input < 0 || input > 7) {printf("输入不合法,请输入整数0-7\n");return 1;}switch (input){case ADD: {clear_screen();AddBook(&stu);break;}case SHOW: {clear_screen();ShowBook(&stu);break;}case EXIT: {clear_screen();ExitBook(&stu);break;}default:break;}} while (input);ClearBook(&stu);return 0;
}

整个项目只有三个文件,头文件和两个源代码

一、头文件 student.h

1. 防止头文件重复包含
#pragma once
  • 作用:确保头文件在单个编译单元中只被包含一次,替代传统的 #ifndef 宏定义方式。

2. 宏定义常量
#define ID_MAX 20
#define NAME_MAX 20
// ...
  • 作用:统一管理字符串长度限制,提高代码可维护性。

  • 示例char id[ID_MAX] 表示学号最多存储 19 个字符 + 1 个终止符 \0

3. 结构体定义
struct Student {char id[ID_MAX];char name[NAME_MAX];// ...
};
  • 知识点:结构体用于封装学生信息字段,每个字段是定长字符数组。

  • 内存布局Student 结构体的大小为 ID_MAX + NAME_MAX + ... 字节。

struct Book {struct Student* data;int sz;int capacity;
};
  • 作用:管理动态数组,data 指向堆内存,sz 为当前学生数,capacity 为容量。

4. 函数声明
void InitBook(struct Book* stu);
void AddBook(struct Book* stu);
// ...
  • 作用:声明函数原型,实现模块化编程。


二、核心功能文件 student.c

1. 清屏函数
void clear_screen() {
#ifdef _WIN32system("cls");
#elsesystem("clear");
#endif
}
  • 跨平台处理:通过预编译指令区分 Windows 和其他系统(如 Linux/macOS)。

2. 菜单函数
void menu() {printf("*********************************************\n");printf("******** 1.添加        2.删除  **************\n");// ...
}
  • 作用:打印用户操作菜单,通过数字选择功能。

3. 动态内存管理
void CheckBook(struct Book* stu) {if (stu->sz == stu->capacity) {int newcapacity = (stu->capacity == 0) ? MAX : stu->capacity * 2;struct Student* cap = realloc(stu->data, newcapacity * sizeof(struct Student));// ...}
}
  • 知识点

    • realloc:动态调整内存大小,初始容量为 MAX=1,后续每次扩容为当前容量的 2 倍。

    • 扩容策略:避免频繁扩容,时间复杂度均摊为 O(1)。

  • 风险点:若 realloc 失败需处理 NULL 返回值。

4. 文件读写
void ReadBook(struct Book* stu) {FILE* fp = fopen("Studentbook.txt", "rb");while (fread(&tmp, sizeof(struct Student), 1, fp)) {CheckBook(stu);  // 动态扩容stu->data[stu->sz++] = tmp;}
}
  • 知识点

    • fopen:以二进制读模式打开文件,"rb" 表示读取二进制数据。

    • fread:按块读取数据,每次读取一个 Student 结构体。

    • 文件格式:数据以二进制形式存储,与内存布局一致。

void WriteBook(struct Book* stu) {FILE* fp = fopen("Studentbook.txt", "wb");for (int i = 0; i < stu->sz; i++) {fwrite(&stu->data[i], sizeof(struct Student), 1, fp);}
}
  • 知识点fwrite 将内存中的结构体直接写入文件,效率高但缺乏可读性。

5. 添加学生
void AddBook(struct Book* stu) {CheckBook(stu);  // 确保容量足够scanf("%s", stu->data[stu->sz].id);  // 输入学号// ...其他字段输入stu->sz++;  // 更新学生数量
}
  • 风险点scanf 未限制输入长度,可能溢出缓冲区。

  • 改进建议:使用 scanf("%19s", id) 限制输入长度。

6. 显示学生信息
void ShowBook(struct Book* stu) {printf("%-19s\t%-15s\t...\n", "学号", "姓名", ...);for (int i = 0; i < stu->sz; i++) {printf("%-19s\t%-15s\t...\n", stu->data[i].id, stu->data[i].name, ...);}
}
  • 格式化输出%-19s 表示左对齐且占 19 字符宽度,确保表格对齐。


三、主程序 test.c

1. 枚举定义
enum Option {EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, SORT, CLEAR
};
  • 作用:用枚举常量代替数字,提高代码可读性。

2. 主函数逻辑
int main() {struct Book stu;InitBook(&stu);  // 初始化do {menu();      // 显示菜单scanf("%d", &input);switch(input) {case ADD: AddBook(&stu); break;// ...其他选项}} while (input != EXIT);ClearBook(&stu);  // 释放内存return 0;
}
  • 知识点

    • do-while 循环:确保至少执行一次菜单显示。

    • 内存泄漏预防:退出时调用 ClearBook 释放堆内存。


四、关键知识点总结

1. 动态内存管理
  • 函数callocreallocfree

  • 应用场景:学生数据的动态扩容和释放。

  • 示例

    struct Student* cap = realloc(old_ptr, new_size);
    if (cap == NULL) { /* 处理失败 */ }
2. 文件操作
  • 模式"rb"(二进制读)、"wb"(二进制写)

  • 函数fopenfreadfwritefclose

  • 注意事项:二进制文件无换行符,直接读写结构体。

3. 结构体与内存布局
  • 对齐:结构体成员在内存中按声明顺序连续存储,可能存在填充字节。

  • 示例Student 结构体的内存布局直接影响文件读写。

4. 输入输出安全
  • 风险scanf 不限制输入长度,可能导致缓冲区溢出。

  • 改进

    char id[ID_MAX];
    scanf("%19s", id);  // 限制输入长度为 ID_MAX-1

五、操作示例

1. 添加学生
请输入学号:2023001
请输入姓名:张三
请输入年龄:20
请输入性别:男
请输入班级:计算机1班
添加成功!
2. 查看学生
学号                姓名            年龄  性别  班级
2023001            张三            20    男    计算机1班
3. 退出程序
  • 数据自动保存到 Studentbook.txt,下次启动自动加载。


六、扩展与改进建议

1. 输入验证
// 示例:安全输入年龄
char age[AGE_MAX];
if (scanf("%4s", age) != 1 || !is_numeric(age)) {printf("年龄不合法!\n");
}
2. 错误处理
FILE* fp = fopen("studentbook.txt", "rb");
if (fp == NULL) {perror("错误原因");  // 输出系统错误信息return;
}
3. 功能扩展
  • 删除学生:实现通过学号或姓名删除。

  • 修改学生:根据学号定位学生并修改字段。

  • 排序学生:按学号或姓名排序(可使用 qsort 函数)。

容量已满!开始扩容!
扩容成功!
当前容量为:1
当前学生为:1
容量已满!开始扩容!
扩容成功!
当前容量为:2
当前学生为:2
容量已满!开始扩容!
扩容成功!
当前容量为:4
当前学生为:3
当前容量为:4
当前学生为:4
************按1继续************
当前容量为:4
当前学生为:4
学号                    姓名            年龄    性别            班级
231                     张三            12      男              C语言2班
232                     李四            13      女              C语言3班
456                     翟六            34      女              C语言9班
233                     wangwu          12      2               22-2
************按1继续************

 源代码:

双叶/学生管理系统

注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!! 

相关文章:

(C语言)学生信息表(学生管理系统)(基于通讯录改版)(正式版)(C语言项目)

1.首先是头文件&#xff1a; //student.h //头文件//防止头文件被重复包含#pragma once//宏定义符号常量&#xff0c;方便维护和修改 #define ID_MAX 20 #define NAME_MAX 20 #define AGE_MAX 5 #define SEX_MAX 5 #define CLA_MAX 20 //定义初始最大容量 #define MAX 1//定义结…...

【Linux】Linux 系统启动流程详解

1. BIOS/UEFI 阶段 硬件自检&#xff08;POST&#xff09; BIOS/UEFI 执行硬件检查&#xff08;内存、CPU、外设等&#xff09;。若硬件异常&#xff0c;通过蜂鸣码或屏幕提示错误。 选择启动设备 按配置顺序&#xff08;硬盘、U盘、网络等&#xff09;寻找可引导设备。BIOS&a…...

Jetson 设备卸载 OpenCV 4.5.4 并编译安装 OpenCV 4.2.0

‌一、卸载 OpenCV 4.5.4‌ 清除已安装的 OpenCV 库‌ sudo apt-get purge libopencv* python3-opencv # 卸载所有APT安装的OpenCV包‌:ml-citation{ref"1,3" data"citationList"}sudo apt autoremove # 清理残留依赖‌:ml-citation{ref"1,4"…...

【计算机网络】OSI七层模型完全指南:从比特流到应用交互的逐层拆解

OSI模型 导读一、概念二、模型层次结构2.1 物理层&#xff08;Physical Layer&#xff09;2.2 数据链路层&#xff08;Data Link Layer&#xff09;​2.3 ​网络层&#xff08;Network Layer&#xff09;​2.4 ​传输层&#xff08;Transport Layer&#xff09;​2.5 ​会话层&…...

渗透测试:登录页面的测试-弱口令思路和实战

渗透测试&#xff1a;登录页面的测试思路和实战 渗透测试&#xff08;Penetration Testing&#xff09;&#xff0c;也称为“渗透性测试”&#xff0c;是一种评估计算机系统、网络或Web应用安全性的一种方法。它通过模拟真实世界中的攻击手段和策略&#xff0c;来检测目标系统…...

Android BottomNavigationView 完全自定义指南:图标、文字颜色与选中状态

1. 核心功能概述 通过 Material Design 的 BottomNavigationView&#xff0c;你可以轻松实现以下自定义&#xff1a; ✅ 动态切换选中/默认图标 ✅ 自定义选中与默认文字颜色 ✅ 控制文字显示模式&#xff08;始终显示/仅选中显示/自动隐藏&#xff09; ✅ 添加动画和高级样…...

提示词工程

参考网站&#xff1a;提示工程指南 – Nextra 声明&#xff1a;我现在也才刚刚开始学习 人工智能&#xff0c;我会着重于 agent 的学习&#xff0c;如果有不对的地方请大家及时指出。 模型设置 前言 在向大模型发送请求时&#xff0c;常常能看到以下参数&#xff1a; {&qu…...

分页查询原理与优化方案完全指南

分页查询原理与优化方案完全指南 一、分页查询基础原理 1.1 传统分页实现方式 分页查询的核心目的是将大数据集分割成多个小块进行展示,最常见的实现方式是使用LIMIT-OFFSET语法: -- 基础分页查询 SELECT * FROM table_name ORDER BY id LIMIT page_size OFFSET (page_n…...

嵌入式软件设计规范框架(MISRA-C 2012增强版)

以下是一份基于MISRA-C的嵌入式软件设计规范&#xff08;完整技术文档框架&#xff09;&#xff0c;包含编码规范、安全设计原则和工程实践要求&#xff1a; 嵌入式软件设计规范&#xff08;MISRA-C 2012增强版&#xff09; 一、编码基础规范 1.1 文件组织 头文件保护 /* 示…...

课程6. 决策树

课程6. 决策树 决策树直觉模型结构几何解释决策树的构建ID3算法信息内容标准使用决策树处理差距推广到回归问题分支标准与经典损失函数的关系 过度拟合和欠拟合欠拟合过拟合 优点和缺点案例随机生成数据集分类IRIS 数据集解决回归问题的一个简短例子 决策树 今天我们继续探索一…...

【UE5.3.2】初学1:适合初学者的入门路线图和建议

3D人物的动作制作 大神分析:3D人物的动作制作通常可以分为以下几个步骤: 角色绑定(Rigging):将3D人物模型绑定到一个骨骼结构上,使得模型能够进行动画控制。 动画制作(Animation):通过控制骨骼结构,制作出人物的各种动作,例如走路、跳跃、打斗等。 动画编辑(Ani…...

OpenCV 图形API(4)内核 API

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 G-API 背后的核心理念是可移植性——使用 G-API 构建的流水线必须是可移植的&#xff08;或者至少具备可移植的能力&#xff09;。这意味着&…...

pom.xml与.yml,java配置参数传递

pom.xml与 .yml java配置参数传递 在Java项目中&#xff0c;通过 pom.xml 和 .yml 文件&#xff08;如 application.yml&#xff09;传递变量通常涉及 构建时&#xff08;Maven&#xff09;和 运行时&#xff08;Spring Boot&#xff09;两个阶段的配置。以下是具体的实现方法&…...

LeetCode算法题(Go语言实现)_21

题目 给你一个整数数组 arr&#xff0c;如果每个数的出现次数都是独一无二的&#xff0c;就返回 true&#xff1b;否则返回 false。 一、代码实现 func uniqueOccurrences(arr []int) bool {freq : make(map[int]int)// 统计每个数字的出现次数for _, num : range arr {freq[n…...

Docker部署前后端分离项目

镜像下载 在有网络的电脑下载镜像&#xff08;Windows&#xff09;&#xff1a;依次在CMD命令台执行以下代码 docker pull node:20docker pull openjdk:22-jdkdocker pull mysql:8.0docker pull nginx:1.27 删除镜像代码&#xff1a; docker rmi node:latest 查看镜像列表…...

Linux系统安装MySQL 8.0完整指南(新手友好版)

MySQL作为最流行的开源关系型数据库之一&#xff0c;广泛应用于各种开发和生产环境。本教程将详细介绍在Linux系统上安装MySQL 8.0的全过程&#xff0c;包括卸载旧版本、安装新版本、基础配置和远程连接设置&#xff0c;特别适合Linux新手学习使用。 一、卸载旧版MySQL&#x…...

第二次作业

#创建表&#xff0c;把id设为主键 mysql> create table test02(-> id int primary key, #----主键约束-> name varchar(50)-> ); Query OK, 0 rows affected (0.02 sec) ​ #插入数据测试 mysql> insert into test02 values(1,"成都"); Query OK, 1 r…...

AI大模型下传统 Spring Java工程开发的演进和变化方向

1. 背景和动因 传统Spring开发优势&#xff1a;Spring生态以稳定、模块化、依赖注入&#xff08;DI&#xff09;等特性著称&#xff0c;长期支撑企业级应用开发&#xff0c;具备高扩展性和可维护性。AI大模型崛起&#xff1a;近几年&#xff0c;LLM&#xff08;如GPT-4、LLaMA…...

周学习总结

这周继续学习了Java的知识点&#xff0c;还写了考查递归、递推与贪心的算法题。 算法小结 递归与递推一般是观察观察题干&#xff0c;分析题目的规律&#xff0c;可能还会用到分治算法&#xff0c;推导出一个合理的表达式&#xff0c;再使用函数递归来进行求解。 贪心在求解时…...

‌19.思科路由器:OSPF协议引入直连路由的实验研究

思科路由器:OSPF协议引入直连路由的实验研究 一、实验拓扑二、基本配置2.1、sw1的配置2.2、开启交换机三层功能三、ospf的配置3.1、R1的配置3.2、R2的配置3.3、重启ospf进程四、引入直连路由五、验证结果随着互联网技术的不断发展,路由器作为网络互联的关键设备,其性能与稳定…...

Zcanpro搭配USBCANFD-200U在新能源汽车研发测试中的应用指南(周立功/致远电子)

——国产工具链的崛起与智能汽车测试新范式 引言&#xff1a;新能源汽车测试的国产化突围 随着新能源汽车智能化、网联化程度的提升&#xff0c;研发测试面临三大核心挑战&#xff1a;多协议融合&#xff08;CAN FD/LIN/以太网&#xff09;、高实时性数据交互需求、复杂工况下…...

JSON的基础知识

文章目录 前言json协议的基本格式json 数组类型 的语法规则json协议报文的实例json常见的一些格式错误在gd32中使用cjson库小结 前言 json协议在互联网应用&#xff0c;物联网应用中都会用到。所谓工欲善其事必先利其器&#xff0c;我们需要学习了解json协议的具体格式&#xf…...

week2|机器学习(吴恩达)学习笔记

一、多维特征 1.1、什么是多维特征&#xff1f; 1&#xff09;在我们的原始估计房价的版本中&#xff0c;我们只有一个变量&#xff1a; x x x 来预估 y y y 2&#xff09;但是现在假设你也知道其他的参数变量&#xff0c;那么我们就可以引入多个参数来提高预测 y y y的准确…...

各类神经网络学习:(七)GRU 门控循环单元(上集),详细结构说明

上一篇下一篇LSTM&#xff08;下集&#xff09;GRU&#xff08;下集&#xff09; GRU&#xff08;门控循环单元&#xff09; 它其实是 R N N RNN RNN 和 L S T M LSTM LSTM 的折中版&#xff0c;有关 R N N RNN RNN 和 L S T M LSTM LSTM 请参考往期博客。 实际应用要比 …...

uniapp利用第三方(阿里云)实现双人视频/音频通话功能(附完整的项目代码)

要在UniApp中利用阿里云实现双人视频/音频通话功能,你需要使用阿里云的实时音视频服务(RTC)。以下是一个基本的实现步骤和示例代码。 基本的操作步骤 注册阿里云账号并开通RTC服务: 访问阿里云官网,注册账号并开通RTC服务。 获取AppID和AppKey: 在RTC控制台创建应用,…...

wsl2的centos7安装jdk17、maven

JDK安装 查询系统中的jdk rpm -qa | grep java按照查询的结果&#xff0c;删除对应版本 yum -y remove java-1.7.0-openjdk*检查是否删除 java -version 下载JDK17 JDK17&#xff0c;下载之后存到wsl目录下&#xff08;看你自己&#xff09;然后一键安装 sudo rpm -ivh jd…...

Android 单例模式全解析:从基础实现到最佳实践

单例模式&#xff08;Singleton Pattern&#xff09;是软件开发中常用的设计模式&#xff0c;其核心是确保一个类在全局范围内只有一个实例&#xff0c;并提供全局访问点。在 Android 开发中&#xff0c;单例模式常用于管理全局资源&#xff08;如网络管理器、数据库助手、配置…...

Redis GEO

Redis GEO 引言 Redis GEO是Redis数据库中的一种高级功能&#xff0c;允许用户存储地理位置信息并执行基于地理空间查询的操作。本文将详细介绍Redis GEO的基本概念、使用方法以及在实际应用中的优势。 基本概念 GEO编码 GEO编码是指将地理位置信息&#xff08;如经纬度&a…...

vulnhub-serile靶机通关攻略

下载地址&#xff1a;https://www.vulnhub.com/entry/serial-1,349/ 靶机安装特殊&#xff0c;附带安装参考文章&#xff1a;https://zhuanlan.zhihu.com/p/113887109 扫描IP地址 arp-scan -l扫描端口 nmap -p- 192.168.112.141访问80端口 线索指向cookie cookie是base64编…...

SAP-ABAP:OData 协议深度解析:架构、实践与最佳应用

OData 协议深度解析:架构、实践与最佳应用 一、协议基础与核心特性 协议定义与目标 定位:基于REST的开放数据协议,标准化数据访问接口,由OASIS组织维护,最新版本为OData v4.01。设计哲学:通过统一资源标识符(URI)和HTTP方法抽象数据操作,降低异构系统集成复杂度。核心…...

408 计算机网络 知识点记忆(3)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容&#xff0c;系统梳理核心知识记忆点和框架&#xff0c;既为个人复习沉淀思考&#xff0c;亦希望能与同行者互助共进。&#xff08;PS&#xff1a;后续将持续迭代优化细节&#xff09; 往期内容 408 计算机网络 知识…...

java学习笔记10——集合框架

枚举类的使用 Collection接口继承树 Map接口继承树 Collection 接口方法 总结&#xff1a; 集合框架概述 1.内存层面需要针对于多个数据进行存储。此时&#xff0c;可以考虑的容器有:数组、集合类2.数组存储多个数据方面的特点:> 数组一旦初始化&#xff0c;其长度就是确定的…...

埃文科技企业AI大模型一体机——昇腾体系+DeepSeek+RAG一站式解决方案

面对企业级市场海量数据资产与复杂业务场景深度耦合的刚需&#xff0c;埃文科技重磅推出基于华为昇腾算力DeepSeek大模型的企业一体机产品&#xff0c;提供DeepSeek多版本大模型一体机选择&#xff0c;为企业提供本地昇腾算力DeepSeek大模型RAG知识库的一体化解决方案&#xff…...

蓝桥杯---BFS解决FloofFill算法1---图像渲染

文章目录 1.算法简介2.题目概述3.算法原理4.代码分析 1.算法简介 这个算法是关于我们的floodfill的相关的问题&#xff0c;这个算法其实从名字就可以看出来&#xff1a;洪水灌溉&#xff0c;其实这个算法的过程就和他的名字非常相似&#xff0c;下面的这个图就生动的展示了这个…...

个人博客网站从搭建到上线教程

步骤1:设计个人网站 设计个人博客网站的风格样式,可以在各个模板网站上多浏览浏览,以便有更多设计网站风格样式的经验。 设计个人博客网站的内容,你希望你的网站包含哪些内容如你的个人基本信息介绍、你想分享的项目、你想分享的技术文档等等。 步骤2:选择开发技术栈 因…...

【FreeRTOS】裸机开发与操作系统区别

&#x1f50e;【博主简介】&#x1f50e; &#x1f3c5;CSDN博客专家 &#x1f3c5;2021年博客之星物联网与嵌入式开发TOP5 &#x1f3c5;2022年博客之星物联网与嵌入式开发TOP4 &#x1f3c5;2021年2022年C站百大博主 &#x1f3c5;华为云开发…...

力扣每日一题:2712——使所有字符相等的最小成本

使所有字符相等的最小成本 题目示例示例1示例2 题解这些话乍一看可能看不懂&#xff0c;但是多读两遍就明白了。很神奇的解法&#xff0c;像魔术一样。 题目 给你一个下标从 0 开始、长度为 n 的二进制字符串 s &#xff0c;你可以对其执行两种操作&#xff1a; 选中一个下标…...

Java EE(17)——网络原理——IP数据报结构IP协议解析(简述)

一.IP数据报结构 (1)版本&#xff1a;指明协议的版本&#xff0c;IPv4就是4&#xff0c;IPv6就是6 (2)首部长度&#xff1a;单位是4字节&#xff0c;表示IP报头的长度范围是20~60字节 (3)8位区分服务&#xff1a;实际上只有4位TOS有效&#xff0c;分别是最小延时&#xff0c;最…...

Pycharm运行时报“Empty suite”,可能是忽略了这个问题

问题&#xff1a;使用Pycharm运行testcases目录下的.py文件&#xff0c;报“Empty suite”&#xff0c;没有找到测试项。 排查过python解释器、pytest框架安装等等&#xff0c;依然报这个错&#xff0c;依然没找到&#xff0c;最后终端运行&#xff1a; pytest test_demo.py&a…...

Linux快速安装docker和docker-componse步骤

在 CentOS 7 上安装 Docker 和 Docker Compose 的步骤如下&#xff1a; 1. 安装 Docker 1.1. 更新系统 首先&#xff0c;确保你的系统是最新版本&#xff1a; sudo yum update -y1.2. 安装必要的包 安装 yum-utils&#xff0c;这是管理 YUM 源的工具&#xff1a; sudo yu…...

OP2177运算放大器:高性能模拟信号处理的关键元件

在现代电子系统中&#xff0c;模拟信号处理至关重要&#xff0c;运算放大器作为模拟电路的核心部件&#xff0c;其性能优劣直接影响系统的整体表现。OP2177 是一款具有卓越性能的运算放大器&#xff0c;在众多领域有着广泛应用。以下将结合相关资料&#xff0c;对 OP2177 进行全…...

paddle ocr

paddle ocr paddle ocr笔记准备工作referenceto onnx文本检测文本检测文字识别 paddle ocr笔记 准备工作 下载字典ppocr_keys_v1.txt&#xff0c;下标从1开始模型转换 reference paddlepaddle to onnx 下载模型&#xff0c;或者直接使用python跑一下并且把本地模型拿过来…...

通过动态获取项目的上下文路径来确保请求的 URL 兼容两种启动方式(IDEA 启动和 Tomcat 部署)下都能正确解析

背景 因为在不同的启动环境下&#xff0c;获取上下文路径的方式需要有所调整。在 IDEA 中运行时&#xff0c;路径是基于当前页面的 URL&#xff08;如 index.html&#xff09;&#xff0c;而在 Tomcat 部署时&#xff0c;它是基于项目上下文路径&#xff08;如 ssm-project&am…...

Spring Boot 整合 ElasticJob 分布式任务调度教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 整合 ElasticJob 分布式任务调度教程 一、ElasticJob 简介 ElasticJob 是当当网开源的分布式任务调度解决方案&#xff0c;支持&#xff1a; …...

Django项目之订单管理part6(message组件和组合搜索组件)

一.前言 我们前面讲的差不多了&#xff0c;接着上节课讲&#xff0c;今天要来做一个撤单要求&#xff0c;我们可以用ajax请求&#xff0c;但是我这里介绍最后一个知识点&#xff0c;message组件&#xff0c;但是我会把两种方式都讲出来的&#xff0c;讲完这个就开始讲我们最重…...

[MySql] 多表关系, 多表查询

一. 多表关系 1.1 一对多 例如: 员工 - 部门表 (一个部门可以有多个员工) 并且在多的一方增加一个字段关联一的一方的主键. 外键约束: 物理外键 (使用 foreign key 定义外键关联另一张表的主键) 缺点: 影响增删改效率; 仅用于单节点, 不适用与集群; 易引发死锁, 性能低; …...

Open GL ES ->GLSurfaceView在正交投影下的图片旋转、缩放、位移

XML文件 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:o…...

一文详解QT环境搭建:Windows使用CLion配置QT开发环境

在当今的软件开发领域&#xff0c;跨平台应用的需求日益增长&#xff0c;Qt作为一款流行的C图形用户界面库&#xff0c;因其强大的功能和易用性而备受开发者青睐。与此同时&#xff0c;CLion作为一款专为C/C打造的强大IDE&#xff0c;提供了丰富的特性和高效的编码体验。本文将…...

MSTP和链路聚合

MSTP 802.1S --- MSTP --- 多生成树协议 --- 就是在RSTP基础上&#xff0c;再针对链路利用率低问题进行优化&#xff0c;可以和RSTP以及STP向下兼容。 实例 --- Instance --- 可以理解为一个V LAN或者多个VALN的集合。一个交换网络可以针对一个实例创建一棵树&#xff0c;起到…...

每天学一个 Linux 命令(8):ls

大家好,欢迎来到《每天掌握一个Linux命令》系列。在这个系列中,我们将逐步学习并熟练掌握Linux命令,今天,我们要学习的命令是ls。 01 什么是ls命令 在Linux系统中,ls命令是“list”的缩写,其英文全称为“list directory contents”,即“列出目录内容”。该命令非常实用…...