2024/03/21(网络编程·day7)

一、思维导图

二、

//定义删除函数

int do_delete(sqlite3 *ppDb)
{int del_numb=0;printf("请输入要删除的学生的学号:");scanf("%d",&del_numb);getchar();//准备sql语句char sql[128]="select *from Stu";sprintf(sql,"delete from Stu where numb =%d;",del_numb);//定义接收错误信息的变量char *errmsg=NULL;//执行sql语句if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("exec:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("删除成功\n");return 0;
}

//定义修改函数

int do_update(sqlite3 *ppDb)
{int upd_numb=0;double new_score=0;printf("请输入要修改的学生的学号:");scanf("%d",&upd_numb);printf("请输入学生的新成绩:");scanf("%lf",&new_score);getchar();//准备sql语句char sql[128]="select *from Stu";sprintf(sql,"update Stu set score =%lf where numb =%d;",new_score,upd_numb);//定义接收错误信息的变量char *errmsg=NULL;//执行sql语句if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("exec:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("修改成功\n");return 0;
}

完整代码

#include<myhead.h>//封装添加学生信息函数
int do_add(sqlite3 *ppDb)
{//准备sql语句int add_numb = 0;char add_name[20] = "";double add_score = 0;//提示并输入数据printf("请输入学号:");scanf("%d", &add_numb);printf("请输入姓名:");scanf("%s", add_name);printf("请输入成绩:");scanf("%lf", &add_score);getchar();char sql[128] = "";sprintf(sql,"insert into Stu values(%d, \"%s\", %lf);", add_numb,add_name,add_score);//printf("sql = %s\n", sql);//定义接收错误信息的变量char *errmsg = NULL;//执行sql语句if(sqlite3_exec(ppDb, sql, NULL, NULL, &errmsg) != SQLITE_OK){printf("exec error:%s\n", errmsg);sqlite3_free(errmsg);       //释放错误信息的空间return -1;}printf("插入成功\n");return 0;}//定义删除函数
int do_delete(sqlite3 *ppDb)
{int del_numb=0;printf("请输入要删除的学生的学号:");scanf("%d",&del_numb);getchar();//准备sql语句char sql[128]="select *from Stu";sprintf(sql,"delete from Stu where numb =%d;",del_numb);//定义接收错误信息的变量char *errmsg=NULL;//执行sql语句if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("exec:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("删除成功\n");return 0;
}//定义修改函数
int do_update(sqlite3 *ppDb)
{int upd_numb=0;double new_score=0;printf("请输入要修改的学生的学号:");scanf("%d",&upd_numb);printf("请输入学生的新成绩:");scanf("%lf",&new_score);getchar();//准备sql语句char sql[128]="select *from Stu";sprintf(sql,"update Stu set score =%lf where numb =%d;",new_score,upd_numb);//定义接收错误信息的变量char *errmsg=NULL;//执行sql语句if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("exec:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("修改成功\n");return 0;
}//定义回调函数处理查询后的结果集
int callback(void *arg,int cols,char **msgText,char **msgHeader)
{//输出所有数据//输出表头if(*(int *)arg == 0){for(int i=0;i<cols;i++){printf("%s\t",*(msgHeader+i));}printf("\n");(*((int *)arg)) ++;}//输出当前记录的内容for(int i=0;i<cols;i++){printf("%s\t",*(msgText+i));}printf("\n");return 0;
}//定义查询函数
int do_search(sqlite3 *ppDb)
{//准备sql语句char sql[128] = "select * from Stu;";//定义错误信息容器char *errmsg = NULL;int flag = 0;        //定义标识位//执行sql语句if(sqlite3_exec(ppDb, sql, callback, &flag, &errmsg) != SQLITE_OK){printf("exec error:%s\n", errmsg);sqlite3_free(errmsg);       //释放错误信息的空间return -1;}return 0;
}
//定义查询函数1 
int do_search_1(sqlite3 *ppDb)
{//准备sql语句char sql[128] = "select *from Stu;";//定义错误信息容器char *errmsg = NULL;//准备接收结果集的相关变量char **retPtr = NULL;  //记录结果集的起始地址int rows = 0; 		//记录结果集的行数int cols = 0;  		//记录结果集的列数//执行sql语句if(sqlite3_get_table(ppDb,sql,&retPtr,&rows,&cols,&errmsg)!=SQLITE_OK){printf("get table error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}//此时查询的结果集合已经放入了retPtr作为起始地址的二维容器里面for(int i=0;i<rows+1;i++){for(int j=0;j<cols;j++){printf("%s\t",*(retPtr + (i*cols)+j)); 	//输出任意一个元素}printf("\n");}//释放结果集sqlite3_free_table(retPtr);return 0;
}/***************************主程序***********************************/
int main(int argc, const char *argv[])
{//1、定义数据库句柄指针sqlite3 *ppDb = NULL;//2、打开(创建)数据库if(sqlite3_open("./my.db",&ppDb) != SQLITE_OK){fprintf(stderr,"sqlite_open error:errmsg = %s,errcode = %d\n",sqlite3_errmsg(ppDb),sqlite3_errcode(ppDb));return -1;}printf("sqlite3_open success\n");//3、创建数据库表//3.1、准备sql语句char sql[128] = "create table if not exists Stu(numb int,name char,score double);";char *errmsg =NULL; 		//用于接收出错时的错误消息//3.2执行sql语句if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg) != SQLITE_OK){printf("exec error:%s\n,errmsg");sqlite3_free(errmsg);  //释放错误信息空间return -1;}printf("create table Stu success\n");//4、对数据表进行操作int menu = -1;while(1){system("clear");printf("\t\t============XXX 学生管理系统=============\n");printf("\t\t============1、添加学生信息=============\n");printf("\t\t============2、删除学生信息=============\n");printf("\t\t============3、修改学生信息=============\n");printf("\t\t============4、查找学生信息=============\n");printf("\t\t============0、退出系统=============\n");printf("请输入功能:");scanf("%d",&menu);getchar();//对功能多分支选择switch(menu){case 1:{do_add(ppDb);}break;case 2:{do_delete(ppDb);}break;case 3:{do_update(ppDb);}break;case 4:{do_search_1(ppDb);}break;case 0:goto END;default:printf("您输入的功能有误,请重新输入!\n");}printf("请输入任意键,按回车清屏\n");while(getchar() !='\n');}END://关闭数据库sqlite3_close(ppDb);return 0;
}

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

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

相关文章

贾志杰“大前端”系列著作出版发行

杰哥著作《VueSpringBoot前后端分离开发实战》2021年出版以来&#xff0c;累计发行2.6万册&#xff0c;受到广大读者热捧。后应读者要求&#xff0c;受出版社再次邀请&#xff0c;“大前端”系列之《剑指大前端全栈工程师》、《前端三剑客》由清华大学出版社陆续出版发行。系列…

奥特曼回应GPT5

欢迎再次与大家会面&#xff01;在积累了大量的信息和趋势后&#xff0c;今天我们将深入了解 Sora、OpenAI 董事会、以及近期与其有关的所有声讨。我们将直接跳入与 OpenAI 首席执行官 Sam Altman 的深度访谈&#xff0c;探讨从 AGI 到 GPT-5 的未来&#xff0c;以及 Sam 对人工…

敢为天下先!深圳市全力推动鸿蒙生态发展……程序员

3月19日&#xff0c;鸿蒙生态创新中心揭幕仪式在深圳正式举行。鸿蒙生态创新中心的建立是为构建先进完整、自主研发的鸿蒙生态体系&#xff0c;将深圳打造为鸿蒙生态策源地、集聚区的具体举措&#xff0c;也是推动我国关键核心技术高水平自立自强、数字经济高质量发展、保障国家…

有哪些工具可以替代Gitbook?这篇文章告诉你

你是否曾经在搜索在线文档创建和共享工具时&#xff0c;遇到了Gitbook? Gitbook 是一个相当出色的工具&#xff0c;具有强大的编辑和发布功能&#xff0c;但也有其不足之处&#xff0c;如使用起来有一定的技术要求&#xff0c;入门门槛较高等。如果你正在寻找Gitbook的替代品&…

ChatGPT为您的论文写作提供无限可能

ChatGPT无限次数:点击直达 在现代科技的快速发展下&#xff0c;人工智能正逐渐渗透到各个领域&#xff0c;为我们的生活和工作带来了诸多便利和创新。其中&#xff0c;ChatGPT作为开放AI的一项重要成果&#xff0c;以其卓越的自然语言处理能力&#xff0c;为我们的论文写作提供…

CSS问题精粹1

1.关于消除<li>列表前的符号 我相信很多人在初学CSS时会遇到该问题&#xff0c;无论是创作导航&#xff0c;还是列表&#xff0c;前面都会有个黑点点或其它符号。 解决该问题其实很简单 采用list-style-type:none或list-style:none直接解决 如果你想更换前面的黑点点&a…

java怎么做带进度条的上传

在Java中实现带进度条的文件上传功能通常涉及到前后端的配合工作。前端负责收集文件并展示上传进度&#xff0c;后端负责接收和处理文件&#xff0c;并提供进度信息给前端。 前端部分&#xff1a; HTML&#xff1a;创建文件输入控件和进度条元素。 <input type"file…

QT界面制作

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);//接收动图QMovie *mv new QMovie(":/pictrue/th.gif…

每日一题 第二十一期 洛谷 组合的输出

组合的输出 题目描述 排列与组合是常用的数学方法&#xff0c;其中组合就是从 n n n 个元素中抽出 r r r 个元素&#xff08;不分顺序且 r ≤ n r \le n r≤n&#xff09;&#xff0c;我们可以简单地将 n n n 个元素理解为自然数 1 , 2 , … , n 1,2,\dots,n 1,2,…,n&a…

REINFORCE算法

REINFORCE&#xff08;REward Increment Nonnegative Factor Offset Reinforcement Characteristic Eligibility&#xff09;算法是一种用于解决强化学习问题的基本策略梯度方法之一。它主要用于解决策略优化问题&#xff0c;其中智能体需要学习一个策略&#xff0c;以最大化…

springboot企业级抽奖项目业务一(登录模块)

开发流程 该业务基于rouyi生成好了mapper和service的代码&#xff0c;现在需要在controller层写接口 实际操作流程&#xff1a; 看接口文档一>controller里定义函数一>看给出的工具类一>补全controller里的函数一>运行测试 接口文档 在登录模块有登录和登出方…

扫雷(蓝桥杯,acwing)

题目描述&#xff1a; 扫雷是一种计算机游戏&#xff0c;在 2020 世纪 80 年代开始流行&#xff0c;并且仍然包含在某些版本的 Microsoft Windows 操作系统中。 在这个问题中&#xff0c;你正在一个矩形网格上玩扫雷游戏。 最初网格内的所有单元格都呈未打开状态。 其中 M个…

(附源码)基于Spring Boot + Vue的校园综合信息服务平台设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31…

牛客NC196 编辑距离(一)【较难 DFS/DP,动态规划,样本对应模型 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da 思路 编辑距离问题 什么是两个字符串的编辑距离&#xff08;edit distance&#xff09;&#xff1f;给定字符串s1和s2&#xff0c;以及在s1上的如下操作&#xff1a;插入&…

基于springboot的大学生租房平台系统

技术&#xff1a;springbootmysqlvue 一、系统背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对大学生租房信息管理混乱…

基于小波神经网络的回归分析,基于ANN的回归分析

目标 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 小波神经网络(以小波基为传递函数的BP神经网络) 代码链接:小波神经网络回归分析,小波分解+BP神经网络-机器学习文档类资源-CSDN文库 …

Nginx:部署及配置详解(linux)

Nginx&#xff1a;部署及配置详解&#xff08;linux&#xff09; 1、nginx简介2、安装编译工具及库文件3、安装 pcre4、nginx安装5、nginx配置文件nginx.conf组成6、nginx配置实例-反向代理7、nginx 配置实例-负载均衡 &#x1f496;The Begin&#x1f496;点点关注&#xff0c…

长连接技术

个人学习记录&#xff0c;欢迎指正 1.轮询 1.1 轮询的形式 短连接轮询 前端每隔一段时间向服务端发起一次Http请求来获取数据。 const shortPolling () > { const intervalHandler setInterval(() > {fetch(/xxx/yyy).then(response > response.json()).then(respo…

HarmonyOS NEXT应用开发之跨文件样式复用和组件复用

介绍 本示例主要介绍了跨文件样式复用和组件复用的场景。在应用开发中&#xff0c;我们通常需要使用相同功能和样式的ArkUI组件&#xff0c;例如购物页面中会使用相同样式的Button按钮、Text显示文字&#xff0c;我们常用的方法是抽取公共样式或者封装成一个自定义组件到公共组…

力扣4寻找两个正序数组的中位数

1.实验内容 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 2.实验目的 算法的时间复杂度应该为 O(log (mn)) 。 3.基本思路 碰到时间复杂度要求log的&#xff0c;肯定用二分查找&…