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;“大前端”系列之《剑指大前端全栈工程师》、《前端三剑客》由清华大学出版社陆续出版发行。系列…

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

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

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

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

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…

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

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

(附源码)基于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;搭配信息管理工具可以很好地为人们提供服务。针对大学生租房信息管理混乱…

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;我们常用的方法是抽取公共样式或者封装成一个自定义组件到公共组…

shell编程入门(笔记)

1、shell编程基础&#xff1a; 1.1、shell的解释执行功能 1.2、什么是shell程序&#xff1f; 1.3、shell程序编程的主要内容 1.4、shell程序的第一行 1.5、变量要求 1.6、环境变量和只读变量 1.7、位置参量 1.8、位置参量列表 1.9、数组 2、输入输出 2.1、输入-read命令 2.2…

Pytest用例间参数传递的两种实现方式示例

前言 我们在做接口自动化测试的时候&#xff0c;会经常遇到这种场景&#xff1a;接口A的返回结果中的某个字段&#xff0c;是接口B的某个字段的入参。如果是使用postman&#xff0c;那我们可以通过设置后置变量&#xff0c;然后在需要使用的地方通过{{}}的方式来进行调用。但是…

银行卡账户交易异常已被限制部分功能,怎么办?

文章目录 I 解决方案1.1 限制原因1.2 防范1.3 案例1.4 用卡安全小知识II 个人账户收款监管规则III 反诈提醒I 解决方案 处理非柜面交易限制,只能到开户行柜台申请解除。异地卡的,需要联系开户行,提供相关资料。有些地方银行的,比如长沙银行,可以使用线上柜台进行审核。先到…

Flume入门概述及安装部署

目录 一、Flume概述1.1 Flume定义1.2 Flume基础架构 二、Flume安装部署 一、Flume概述 1.1 Flume定义 Flume是Cloudera提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构&#xff0c;灵活简单。 1.2 Flume基础…

13、Deconstructing Denoising Diffusion Models for Self-Supervised Learning

简介 研究了最初用于图像生成的去噪扩散模型(DDM)的表示学习能力 解构DDM&#xff0c;逐步将其转变为经典的去噪自动编码器(DAE) 探索现代ddm的各个组成部分如何影响自监督表征学习 结论&#xff1a; 只有很少的现代组件对于学习良好的表示是至关重要的&#xff0c;而其他许多…

智能ai写作神器,推荐5个ai在线写作生成器

智能AI写作神器&#xff0c;是不是听起来就很神奇&#xff1f;它们可以帮助我们省去无尽的头疼和煎熬&#xff0c;让我们的文字轻松流畅&#xff0c;幽默风趣。今天&#xff0c;我要向大家推荐五款AI在线写作生成器&#xff0c;让我们一起来看看吧&#xff01; 第一个&#xff…

训练YOLOv9-S

1. YOLOv9-S网络结构 1.1 改前改后的网络结构&#xff08;参数量、计算量&#xff09;对比 修改前调用的yolo.py测试的yolov9.yaml的打印网络情况&#xff0c;包含参数量、计算量 修改后调用的yolo.py测试的yolov9.yaml的打印网络情况&#xff0c;包含参数量、计算量 1.2 …