MySQL学生成绩管理系统based on C++ and Clion

mysql_free_result()函数的作用是释放结果集的内存,是同步的,也就是要中断一下

该实验使用了MySQL链接数据库的基本使用方法,具体使用了

MYSQL_RES 数据库的mysql_store_result()函数的返回值是一个结果集,该函数的作用是检索比并存储整个结果集
MYSQL_ROW 数据库的mysql_fetch_row()函数的返回值是一个集行,搭配上一个mysql_res使用的,一个一个读他,函数的作用是获取下一个结果集行

mysql_query()函数是执行语句的意思,也就是发给数据库让他执行这条语句,函数传递语句的使用如果是std::string 类型的话,需要调用.c_str()函数进行转化成字符才能进行传递

std::ifstream  infile("../src/student2.txt",std::ios::in);
infile>>temp[j];
std::ofstream outfile("../src/student2.txt",std::ios::out);
outfile<<"学号\t"<<"名字\t"<<"得分\n"<<std::endl;

该方法分别对应了流对于文件的读入和写入操作的执行,使用完毕之后要执行close()操作

本实验我认为最重要的是对于mysql的链接建立问题

    MYSQL mysql;const char db_Username[]="root";const char db_Password[]="123456";const char db_Host[]="localhost";const char db_Name[]="sp";unsigned long db_Port=3306;mysql_init(&mysql);mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"gbk");if(mysql_real_connect(&mysql,db_Host,db_Username,db_Password,db_Name,db_Port,NULL,0)==NULL){std::cout<<"connect error!!!"<<std::endl;return false;}std::cout<<"connect success!!!"<<std::endl;
  1. build
  2. docs
  3. include
    1. Main.h
    2. Student.h
  4. src
    1. main.cpp
    2. Methods.cpp
    3. student.cpp
    4. student2.txt
  5. CMakeLists.txt

Main.h


#ifndef NEW_PROJECTS_MAIN_H
#define NEW_PROJECTS_MAIN_H#include<iostream>
#include<mysql.h>
#include <fstream>void show_mean();//显示菜单bool connect_mysql(MYSQL& mysql);//链接数据库void query(MYSQL& mysql);//查询学生数据void modify(MYSQL& mysql);//修改学生数据void insert(MYSQL& mysql);//添加学生数据void Delete(MYSQL& mysql);//删除学生数据void filein(MYSQL& mysql);//导入文件数据int getline();//获取文件行数void fileout(MYSQL& mysql);//将数据库中的文件导出到另外一个文件中void createTable(MYSQL& mysql);//创建表格#endif //NEW_PROJECTS_MAIN_H

Student.h

#ifndef NEW_PROJECTS_STUDENT_H
#define NEW_PROJECTS_STUDENT_H
#include"main.h"
class Student{
private:int Id;std::string name;int score;
public:int getId();std::string getName();int getScore();void setId(int& Id);void setName(std::string& name);void setScore(int& score);
};
#endif //NEW_PROJECTS_STUDENT_H

main.cpp

#include "Main.h"int main() {MYSQL mysql;mysql_init(&mysql);mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"gbk");system("chcp 65001");if(connect_mysql(mysql)==false){return 0;}else{int choices=1;while(choices!=0){show_mean();std::cin>>choices;switch (choices) {case 1:filein(mysql);break;case 2:query(mysql);break;case 3:modify(mysql);break;case 4:insert(mysql);break;case 5:Delete(mysql);break;case 0:fileout(mysql);break;default:std::cout<<"Input error,please again!!!"<<std::endl;break;}}std::cout<<"success"<<std::endl;system("pause");system("cls");}}

Methods.cpp

#include"Main.h"
#include"Student.h"
void show_mean() // 展示功能菜单并让用户选择功能
{std::cout << std::endl << "=========================================欢迎使用学生管理系统========================================" << std::endl << std::endl;;std::cout << "请选择您要进行的操作" << std::endl;std::cout << "\t 1. 读取学生数据并显示" << std::endl;std::cout << "\t 2. 查询学生数据" << std::endl;std::cout << "\t 3. 修改学生数据" << std::endl;std::cout << "\t 4. 添加学生数据" << std::endl;std::cout << "\t 5. 删除学生数据" << std::endl;std::cout << "\t 0. 退出管理系统" << std::endl;}
void create_table(MYSQL& mysql){char Quest[]= "CREATE TABLE IF NOT EXISTS `Student1`(\`Id` int AUTO_INCREMENT,\`name` varchar(20),\`score` double,\PRIMARY KEY (`Id`)\)ENGINE=InnoDB DEFAULT CHARSET=utf8;";int re=mysql_query(&mysql,Quest);if(re==0)std::cout<<"table already"<<std::endl;
}bool connect_mysql(MYSQL& mysql){const char db_Username[]="root";const char db_Password[]="123456";const char db_Host[]="localhost";const char db_Name[]="sp";unsigned long db_Port=3306;mysql_init(&mysql);mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"gbk");if(mysql_real_connect(&mysql,db_Host,db_Username,db_Password,db_Name,db_Port,NULL,0)==NULL){std::cout<<"connect error!!!"<<std::endl;return false;}std::cout<<"connect success!!!"<<std::endl;create_table(mysql);return true;
}
int getline(){int len=0;std::ifstream infile("../src/student2.txt",std::ios::in);char c;
//    if (!infile.is_open()) {
//        std::cerr << "Error: Unable to open file. ";
//        std::cerr << "Error code: " << errno << std::endl;
//        return -1; // 或者其他适当的错误码
//    }while(infile.get(c)){
//        if(c=='\n')len++;len++;std::cout<<c;}infile.close();std::cout<<"data_len is "<<len-1<<std::endl;return len;
}void filein(MYSQL& mysql){int n=getline();std::cout<<"already student data:"<<std::endl;mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"gbk");std::ifstream  infile("../src/student2.txt",std::ios::in);const int N=300;const int N2=100;std::string temp[N];Student* student=new Student[N2];int x=0;int tempId;int tempScore;if(!infile.is_open()){std::cout<<"file open errr!!!"<<std::endl;exit(0);}else{char line[256]={0};int i=0;while(!infile.eof()&&i<N){for(int j=i;j<i+3;j++){infile>>temp[j];std::cout<<"\t\t"<<temp[j]<<"\t";}std::cout<<std::endl;tempId=atoi(temp[i].c_str());tempScore=atoi(temp[i+2].c_str());student[x].setId(tempId);student[x].setName(temp[i+1]);student[x].setScore(tempScore);x++;i=i+3;}infile.close();}std::cout<<"insert into student1 table"<<std::endl;for(int i=1;i<x;i++){std::string sql = "insert into Student1 values (" + std::to_string(student[i].getId()) + "," + "'" + student[i].getName() + "'" + "," + std::to_string(student[i].getScore()) + ")";std::cout<<sql<<std::endl;mysql_query(&mysql,sql.c_str());}delete[] student;
}void fileout(MYSQL& mysql){MYSQL_RES* res;MYSQL_ROW row;std::ofstream outfile("../src/student2.txt",std::ios::out);mysql_query(&mysql,"select * from student1 order by Id");res= mysql_store_result(&mysql);std::cout<<"data:"<<std::endl;std::cout<<"学号\t"<<"名字\t"<<"得分\n"<<std::endl;outfile<<"学号\t"<<"名字\t"<<"得分\n"<<std::endl;while(row= mysql_fetch_row(res)){std::cout<<"\t"<<row[0]<<"\t\t"<<row[1]<<"\t\t"<<row[2]<<std::endl;outfile << row[0] << "\t" << row[1] << "\t" << row[2] << std::endl;}std::cout << "他们将被保存到../src/student2.txt中" << std::endl;outfile.close();mysql_free_result(res);
}void query(MYSQL& mysql) // 查询学生数据
{MYSQL_RES* res; // 创建一个结果集MYSQL_ROW row; // 二维数组存放记录std::cout << "您选择了查询学生信息" << std::endl;std::cout << "请输入您要查询的选项" << std::endl;std::cout << "\t 1. 查询全部学生" << std::endl;std::cout << "\t 2. 按学号查询" << std::endl;std::cout << "\t 3. 按照名字进行查询" << std::endl;std::cout << "\t 4. 按照分数进行查询" << std::endl;std::cout << "\t 5.自定义SQL命令进行查询" << std::endl;int choice;std::string sql;std::cin >> choice;switch (choice) {case 1:{std::cout << "全体学生信息如下:" << std::endl;sql = "select * from student1 order by Id";std::cout << "查询的SQL语句如下:" << std::endl << sql << std::endl; // 检查语句mysql_query(&mysql, sql.c_str());break;}case 2:{std::cout << "请输入要查询的学生学号" << std::endl;int Id;std::cin >> Id;sql = "select * from student1 where Id = " + std::to_string(Id) + " order by Id";std::cout << "查询的SQL语句如下:" << std::endl << sql << std::endl; // 检查语句mysql_query(&mysql, sql.c_str());break;}case 3:{std::cout << "请输入要查询的学生姓名" << std::endl;std::string name;std::cin >> name;sql = "select * from student1 where name = '" + name + "' order by Id";std::cout << "查询的SQL语句如下:" << std::endl << sql << std::endl; // 检查语句mysql_query(&mysql, sql.c_str());break;}case 4:{std::cout << "请输入要查询的学生分数" << std::endl;int score;std::cin >> score;sql = "select * from student1 where score = " + std::to_string(score) + " order by Id";std::cout << "查询的SQL语句如下:" << std::endl << sql << std::endl; // 检查语句mysql_query(&mysql, sql.c_str());break;}case 5:{std::cout << "请输入SQL命令语句" << std::endl;std::cin.ignore(1024, '\n');getline(std::cin, sql);std::cout << "查询的SQL语句如下:" << std::endl<< sql << std::endl; // 检查语句mysql_query(&mysql, sql.c_str());break;}default:std::cout << "输入有误请重试" << std::endl;}std::cout << "\t\t查询结果如下" << std::endl;res = mysql_store_result(&mysql); // 将查询得到的数据存入结果集if (res == NULL)std::cout << "所有学生均与你查询的数据不匹配" << std::endl;else {std::cout << "\t学号\t" << "\t姓名\t" << "\t得分\t" << std::endl;while (row = mysql_fetch_row(res)){std::cout << "\t" << row[0] << "\t\t" << row[1] << "\t\t" << row[2] << std::endl;}}mysql_free_result(res);
}void modify(MYSQL& mysql) // 修改学生数据
{int choice;int Id;std::string name;int score;std::string sql1;std::string sql2;std::string sql;MYSQL_RES* res;MYSQL_ROW row;std::cout << "您选择了修改学生信息" << std::endl;std::cout << "请输入您要修改的学生的信息及数据" << std::endl;std::cout << "\t 1. 按学号修改" << std::endl;std::cout << "\t 2. 按名字修改" << std::endl;std::cin >> choice;switch (choice){case 1:{std::cout << "请输入要修改的学生学号" << std::endl;std::cin >> Id;sql = "select * from student1 where Id = " + std::to_string(Id) + " order by Id";// sql = "select * from student1 where Id =" + to_string(Id);mysql_query(&mysql, sql.c_str());res = mysql_store_result(&mysql);row = mysql_fetch_row(res);if (row == NULL){std::cout << "不存在该学号的学生" << std::endl;break;}elsestd::cout << "请输入修改之后的学生姓名" << std::endl;std::cin >> name;std::cout << "请输入修改之后的学生分数" << std::endl;std::cin >> score;sql1 = "update Student1 set name= '" + name + "' where Id=" + std::to_string(Id);sql2 = "update Student1 set score= " + std::to_string(score) + " where Id=" + std::to_string(Id);std::cout << "修改的的SQL语句如下:" << std::endl << sql1 << std::endl << sql2 << std::endl; // 检查语句mysql_query(&mysql, sql1.c_str());mysql_query(&mysql, sql2.c_str());break;}case 2:{std::cout << "请输入要修改的学生姓名" << std::endl;std::cin >> name;sql1 = "select * from Student1 where name ='" + name + "'";mysql_query(&mysql, sql1.c_str());res = mysql_store_result(&mysql);row = mysql_fetch_row(res);if (row == NULL){std::cout << "不存在该姓名的学生" << std::endl;break;}elsestd::cout << "请输入修改之后的学生学号" << std::endl;std::cin >> Id;std::cout << "请输入修改之后的学生分数" << std::endl;std::cin >> score;sql1 = "update Student1 set Id= " + std::to_string(Id) + " where name='" + name + "'";sql2 = "update Student1 set score= " + std::to_string(score) + " where name='" + name + "'";std::cout << "修改的的SQL语句如下:" << std::endl << sql1 << std::endl << sql2 << std::endl; // 检查语句mysql_query(&mysql, sql1.c_str());mysql_query(&mysql, sql2.c_str());break;}default:std::cout << "输入有误请重试" << std::endl;}//mysql_free_result(res);
}void insert(MYSQL& mysql)//添加学生信息
{int Id;std::string name;int score;MYSQL_RES* res; // 创建一个结果集MYSQL_ROW row; // 二维数组存放记录std::string sql1;std::string sql2;std::cout << "您选择了添加学生信息" << std::endl;std::cout << "请输入学生学号" << std::endl;std::cin >> Id;sql1 = "select * from student1 where Id = " + std::to_string(Id) + " order by Id";mysql_query(&mysql, sql1.c_str());res = mysql_store_result(&mysql);row = mysql_fetch_row(res);if (row != NULL)std::cout << "已存在该学号的学生,系统不允许学号相同,请重新添加或选择修改该学生信息" << std::endl;else {std::cout << "请输入学生名字" << std::endl;std::cin >> name;std::cout << "请输入学生得分" << std::endl;std::cin >> score;sql2 = "insert into Student1 values (" + std::to_string(Id) + "," + "'" + name + "'" + "," + std::to_string(score) + ")";std::cout << "插入的SQL语句如下:" << std::endl << sql2 << std::endl; // 检查语句mysql_query(&mysql, sql2.c_str());// 使用sql命令对数据库进行数据添加}mysql_free_result(res);
}
void Delete(MYSQL& mysql) // 删除学生数据
{int choice = 1;int Id;std::string name, sql1, sql2;int score;MYSQL_RES* res;MYSQL_ROW row;std::cout << "您选择了删除学生信息" << std::endl;//std::cout << "请输入您要删除的学生信息" << std::endl;std::cout << "\t 1. 按学号删除" << std::endl;std::cout << "\t 2. 按名字删除" << std::endl;std::cout << "\t 3. 按照分数删除" << std::endl;std::cin >> choice;switch (choice) {case 1:{std::cout << "请输入该生学号" << std::endl;std::cin >> Id;sql1 = "select * from Student1 where Id =" + std::to_string(Id);mysql_query(&mysql, sql1.c_str());res = mysql_store_result(&mysql);row = mysql_fetch_row(res);if (row == NULL){std::cout << "不存在该学号的学生" << std::endl;break;}elsesql2 = "delete  from Student1 where Id= " + std::to_string(Id);std::cout << "删除的SQL语句如下:" << std::endl << sql2 << std::endl; // 检查语句mysql_query(&mysql, sql2.c_str());break;}case 2:{std::cout << "请输入该生姓名" << std::endl;std::cin >> name;sql1 = "select * from Student1 where name ='" + name + "'";mysql_query(&mysql, sql1.c_str());res = mysql_store_result(&mysql);row = mysql_fetch_row(res);if (row == NULL){std::cout << "不存在该姓名的学生" << std::endl;break;}elsesql2 = "delete  from Student1 where name= '" + name + "'";std::cout << "删除的SQL语句如下:" << std::endl << sql2 << std::endl; // 检查语句mysql_query(&mysql, sql2.c_str());break;}case 3:{std::cout << "您确定要使用分数来删除信息吗,该操作可能会影响多名学生" << std::endl;std::cout << "1.确定\t 2.取消" << std::endl;int c = 0;std::cin >> c;if (c != 1){std::cout << "您选择了取消操作" << std::endl; break;}elsestd::cout << "您依旧选择了使用分数删除信息!" << std::endl;std::cout << "请选择要删除的分数" << std::endl;std::cin >> score;sql1 = "select * from Student1 where score =" + std::to_string(score);mysql_query(&mysql, sql1.c_str());res = mysql_store_result(&mysql);row = mysql_fetch_row(res);if (row == NULL){std::cout << "不存在该分数的学生" << std::endl;break;}elsesql2 = "delete  from Student1 where score= " + std::to_string(score);std::cout << "删除的SQL语句如下:" << std::endl << sql2 << std::endl; // 检查语句mysql_query(&mysql, sql2.c_str());break;}default:std::cout << "您输入的选项有误,请重新输入" << std::endl;}
}

Students.cpp

#include "Student.h"
int Student::getId() {return Id;
}
std::string Student::getName() {return name;
}
int Student::getScore() {return score;
}
void  Student::setId(int &id) {Id=id;
}
void Student::setName(std::string& Name) {name=Name;
}
void Student::setScore(int &Score) {score=Score;
}

student2.txt

学号 姓名 成绩
21 张三 98
22 李四 45
CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(new_projects)set(CMAKE_CXX_STANDARD 17)include_directories(include)include_directories(D:/develop/MySQL/MySQL\ Server\ 8.0/include)
link_directories(D:/develop/MySQL/MySQL\ Server\ 8.0/lib)
link_libraries(libmysql)aux_source_directory(src DIR_SRCS)add_executable(new_projects ${DIR_SRCS})
AUTO_INCREMENT是主键,主键具有唯一性

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

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

相关文章

langchain学习笔记(七)

RunnablePassthrough: Passing data through | &#x1f99c;️&#x1f517; Langchain 1、RunnablePassthrough可以在不改变或添加额外键的情况下传递输入。通常和RunnableParallel结合使用去分配数值给到字典的新键 两种方式调用RunnablePassthrough &#xff08;1&#…

FL Studio21编曲制作软件中文版2024最新版本功能详细介绍

一、软件概述 FL Studio 21&#xff0c;全称Fruity Loops Studio 21&#xff0c;是一款功能强大的编曲制作软件&#xff0c;被广泛应用于音乐创作、编曲、录音、混音和后期制作等领域。其中文版为中国的音乐制作人和爱好者提供了更加便捷的操作体验。 FL Studio 21 Win-安装包…

探索ECMAScript语法的深度奥秘

随着现代Web应用的崛起&#xff0c;ECMAScript&#xff08;简称ES&#xff09;成为了前端开发者的必备利器。ECMAScript定义了JavaScript的语法和基本结构&#xff0c;是JavaScript的标准规范。本文将深入探讨ECMAScript语法的一些精妙之处&#xff0c;为读者揭示其中的深度奥秘…

P10166 [DTCPC 2024] 环

解题思路 满足的序列即为环若图上有环&#xff0c;则代价为0若无环&#xff0c;则在图上已有的边在添加一条回边可形成环对所有的点由小到大排序由于环的大小可以为2初值设为&#xff0c;先不管最小点之间是否有边&#xff0c;反正不会更劣通过拓扑排序找环&#xff0c;在找环…

js:lodash template文件模板语法和应用

文档 https://www.lodashjs.com/docs/lodash.templatehttps://lodash.com/docs/4.17.15#template 语法 <% VALUE %> 用来做不转义插值&#xff1b;<%- VALUE %> 用来做 HTML 转义插值&#xff1b;<% expression %> 用来描述 JavaScript 流程控制。 示例 …

AI技术大揭秘!你不可不知的顶级大模型

在这个数字化飞速发展的时代&#xff0c;AI大模型以其惊人的应用范围和深远的影响力&#xff0c;正逐渐成为各行各业的革命性力量。想象一下&#xff0c;在一个晴朗的午后&#xff0c;一个智能客服系统正轻松地处理着成千上万的客户咨询&#xff0c;不仅回答速度快捷&#xff0…

http状态,cookie、session、token的对比

http是无状态的&#xff0c;也就是说断开会话了服务器就不记得任何事情了&#xff0c;但这样对于用户会很麻烦&#xff0c;因为要不停输入用户名和密码 cookie是放在浏览器里的数据&#xff0c;第一次访问后服务器会set cookie&#xff0c;然后浏览器保存这个cookie&#xff0…

面向制造的设计

面向制造的设计&#xff08;Design for Manufacturing, DFM&#xff09;是一种设计方法论&#xff0c;它强调在产品设计阶段就考虑制造过程中的各种约束和限制&#xff0c;以确保设计的可行性和可制造性。这种方法的目标是在产品设计的早期阶段就优化设计方案&#xff0c;以减少…

win10如何添加指纹登陆

1、首先进入设置,进入下一个设置页面 2、在下一个设置页面内,我们直接使用右上角的搜索框,输入“指纹/finger”进行搜索。回车之后进入设置指纹登陆选项 3、设置指纹登陆的前期是设置好你的密码和pin码(先要设定登录密码和pin码),这里pin和密码都可以直接登陆我们的win10,设…

qt 5.15版本安装

1.qt5.15版本安装 2.安装慢时&#xff0c;切换到清华镜像源&#xff1a;.\qt-unified-windows-x64-online.exe --mirror https://mirrors.tuna.tsinghua.edu.cn/qt/ 3.没有qt 5.15版本在旁边进行筛选&#xff0c;只选archive

YOLOv9:使用可编程梯度信息学习您想学习的内容

摘要 arxiv.org/pdf/2402.13616.pdf 当今的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果能最接近于实际结果。同时,还必须设计一个适当的架构,以便于获取足够的预测信息。现有的方法忽略了一个事实,即当输入数据经历层层特征提取和空间变换时,会损失…

机器人与AGI会撞出什么火花?

真正的科技变革是不是就要来临了&#xff1f;各方大佬都开始布局机器人&#xff0c;对于普通人的就业会造成什么影响&#xff1f; ​ 优牛企讯-企业动态信息监控专家 在优牛企讯-企业动态监控专家搜索可知&#xff0c;全国目前的机器人公司已经达到了26401家&#xff0c;近一年…

关于机械臂的控制和基于tftp文件的上传和下载功能的实现

1、TCP客户端控制机械臂代码实现&#xff1a; #include <myhead.h> #define IP "192.168.126.58" #define PORT 8888#define CLI_IP "192.168.126.91" //客户端IP #define CLI_PORT 6666 //客户端端口号int main(int argc, const char *argv[]) {…

【AI Agent系列】【MetaGPT多智能体学习】3. 开发一个简单的多智能体系统,兼看MetaGPT多智能体运行机制

本系列文章跟随《MetaGPT多智能体课程》&#xff08;https://github.com/datawhalechina/hugging-multi-agent&#xff09;&#xff0c;深入理解并实践多智能体系统的开发。 本文为该课程的第四章&#xff08;多智能体开发&#xff09;的第一篇笔记。主要记录下多智能体的运行…

rsyslog配置中支持的模块

rsyslog 配置语法 官方文档 支持的模块 rsyslog包含了很多模块,主要分为输入模块、输出模块等等。 下面是关于 rsyslog 支持的大的模块分类及其作用的说明: 模块分类作用代表模块链接Output Modules用于将日志消息输出到不同的目的地omfile - 将日志消息输出到文件omstdou…

CF 1867B

代码 #include<bits/stdc.h>using namespace std;const int N1e510;int ans[N];void solve() {//输入字符串长度和字符串int n;string s;cin>>n>>s;//下面说的修改操作是进行异或操作//k表示前后对称位置不相等的字符的对数//m表示前后对称位置相等的字符的…

C/C++基础语法

C/C基础语法 文章目录 C/C基础语法头文件经典问题链表链表基础操作 秒数转换闰年斐波那契数列打印n阶菱形曼哈顿距离菱形图案的定义大数计算 输入输出格式化输入输出getline()函数解决cin只读入一个单词的问题fgets读入整行输出字符数组&#xff08;两种方式puts和printf&#…

Linux或Windows下判断socket连接状态

前言 场景&#xff1a;客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制&#xff0c;每隔一端时间发送心跳能回复说明服务器正常。 实际应用场景中&#xff0c;服务端和客户端并不是一家厂商的&#xff0c;比如说笔者这种情况&#xff0c;服务端…

推特API(Twitter API)V2 查询用户信息

前面章节已经介绍使用code换取Token的整个流程了&#xff0c;这里不再重复阐述了&#xff0c;下面我们介绍如何使用Token查询用户信息等操作。 1.引入相关依赖Maven <dependency> <groupId>oauth.signpost</groupId> <artifactId>signpost-co…

二刷代码随想录——贪心day34

文章目录 前言贪心知识点贪心的套路 贪心一般解题步骤一、860. 柠檬水找零二、406. 根据身高重建队列三、452. 用最少数量的箭引爆气球总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精…