网络编程3.21作业

1.现象

1.增

2.删

3.改

4.查

2.源码

#include<myhead.h>

int callback(void* arg,int a,char **msgtext,char **msgheader){
	if(*(int *)arg==0){
		for(int i=0;i<a;i++){
			printf("%s\t",*(msgheader+i));
		}
		printf("\n");
	}
	for(int i=0;i<a;i++){
		printf("%s\t",*(msgtext+i));
	}
	printf("\n");

	return 0;
}

int seach(sqlite3 *ppDb){
	char sql[128]="select *from workman;";	
	char *errmsg=NULL;
	int flag=0;
	if(sqlite3_exec(ppDb, sql, &callback, &flag, &errmsg) != SQLITE_OK)
	{
		printf("exec error:%s\n", errmsg);

		sqlite3_free(errmsg);
		return -1;
	}
}


int insert(sqlite3 *ppDb){

	int num;
	char name[20]="";
	double score;
	char ch[128]="";
	char *errmsg=NULL;
	printf("请输入学号:");
	scanf("%d",&num);
	printf("请输入姓名:");
	scanf("%s",name);
	printf("请输入成绩:");
	scanf("%lf",&score);
	sprintf(ch,"insert into workman values(%d,\"%s\",%lf);",num,name,score);
	if(sqlite3_exec(ppDb,ch,NULL,NULL,NULL) != SQLITE_OK){
		printf("添加失败\n");
		return -1;
	}
	return 0;
}



int update(sqlite3 *ppDb){
	int num;
	char name[20]="";
	double score;
	char ch[128]="";
	printf("请输入待修改学生信息学号:");
	scanf("%d",&num);
	getchar();

	printf("请输入被修改后的成绩:");
	scanf("%lf",&score);
	getchar();
	sprintf(ch,"update workman set score=%lf where numb=%d;",score,num);
	if(sqlite3_exec(ppDb,ch,NULL,NULL,NULL)!=SQLITE_OK){
		printf("修改失败!");
	}
	printf("修改成功!");

		printf("更新后的学生信息库为:\n");
		seach(ppDb);

};



int delete(sqlite3 *ppDb){
	int menu=0;
	int num=0;
	char name[20]="";
	double score=0;
	char ch[128]="select name from workman;";

	printf("1.删除某一个学生信息(此操作不可撤回,请谨慎操作!)\n");
	printf("2.删除所有信息学生(此操作不可撤回,请谨慎操作!!!)\n");
	scanf("%d",&menu);
	getchar();
	switch(menu){

	case 1:
		printf("学生信息库里有以下学生:\n");
		seach(ppDb);
		printf("请输入待删除的学生学号:");
		scanf("%d",&num);
		getchar();
		sprintf(ch,"delete from workman where numb=%d;",num);
		if(sqlite3_exec(ppDb,ch,NULL,NULL,NULL)!=SQLITE_OK){
			printf("删除失败!!!\n");
			return -1;
		}
		printf("更新后的学生信息库为:\n");
		seach(ppDb);
		break;

	case 2:
		printf("学生信息库里有以下学生:\n");
		seach(ppDb);
		sprintf(ch,"delete from workman;");
		printf("是否删除:\n");
		printf("1.删除\n");
		printf("2.取消\n");
		scanf("%d",&num);
		getchar();
		if(num==1){
		if(sqlite3_exec(ppDb,ch,NULL,NULL,NULL)!=SQLITE_OK){
			printf("删除失败!!!\n");
			return -1;
		}
		printf("删除成功!\n");
		printf("更新后的学生信息库为:\n");
		seach(ppDb);
		}else{
			printf("取消成功\n");
		}
		break;
	default:
		printf("输入错误,请重新输入!\n");
		break;
	}
}
int main(int argc, const char *argv[])
{
	//1、定义数据库句柄指针
	sqlite3 *ppDb = NULL;

	//2、打开(创建)数据库
	if(sqlite3_open("./my.db", &ppDb) != SQLITE_OK)
	{
		fprintf(stderr, "sqlite3_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 workman(numb int primary key, name char, score double);";
	//char *sql =  "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);

		return -1;
	}
	printf("create table Stu success\n");

	//4、对数据表进行操作
	int menu = -1;
	while(1)
	{
		system("clear");
		printf("\t\t============= 学生管理系统==============\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:
			{
				insert(ppDb);
			}
			break;
		case 2:
			{
				delete(ppDb);
			}
			break;

		case 3:
			{
				update(ppDb);
			}
			break;
		case 4:
			{
				seach(ppDb);
			}
			break;
		case 0:goto END;
		default:printf("您输入的功能有误,请重新输入!!!!\n");
		}

		printf("请输入任意键,按回车清屏\n");
		while(getchar() != '\n');
	}



END:


	//关闭数据库
	sqlite3_close(ppDb);

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】深入了解Linux磁盘配额:限制用户磁盘空间的利器

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 前言 在多用户环境下管理磁盘空间是服务器管理中的一项重要任务。Linux提供了强大的磁盘配额功能&#xff0c;可以帮助管理员限制用户或组对文件系统…

3.21总结​.Codeforces 第 935 轮(第 3 组)(A~D)题解​

一.Codeforces 第 935 轮&#xff08;第 3 组&#xff09;(A~D)题解 (直接给原文了,我电脑的翻译就是一坨.......) 这到题是一道思维题,理解题目意思就会觉得很简单首先内向的人肯定是一个人一个帐篷,我们只要关心外向的人就可以了,我们只要分外向的人可不可以被3整除,分成两种…

找不到msvcp110.dll无法继续执行程序的多种解决方法

在计算机操作系统中&#xff0c;msvcp110.dll文件扮演着至关重要的角色。作为Microsoft Visual C Redistributable Package的一部分&#xff0c;这个特定的dll文件包含了系统运行多种应用程序所必需的关键运行时库函数。许多Windows应用程序依赖于msvcp110.dll文件来执行基本操…

畅谈AIGC,ISIG-AIGC技术与应用发展峰会成功举办

3月16日&#xff0c;第四届ISIG中国产业智能大会在上海中庚聚龙酒店如期开幕&#xff0c;此次大会由苏州市金融科技协会指导、企智未来科技&#xff08;RPA中国、LowCode低码时代、AIGC开放社区&#xff09;主办。大会聚集了来自不同领域的专家学者、行业领军人物及技术研发者&…

亚信安慧AntDB:数字化创新背后的数据力量

亚信安慧AntDB的“融合实时”的特性&#xff0c;不仅使得数据库具备了更强大的适应性&#xff0c;更让企业在不同业务场景下能够更好地实现业务目标&#xff0c;释放出更大的商业价值。融合实时的特性让AntDB具有了高度灵活性和实时性&#xff0c;使其能够满足企业在不同业务需…

【机器学习】深入解析线性回归模型

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

基于springboot的学生心理健康评估系统

技术&#xff1a;springbootvuemysql 一、系统背景 这次开发的学生心理咨询评估系统有管理员和用户。管理员可以管理个人中心&#xff0c;用户管理&#xff0c;试题管理&#xff0c;试卷管理&#xff0c;考试管理等。用户参加考试。经过前面自己查阅的网络知识&#xff0c;加上…

智能模型新篇章:RAG + Fine-Tuning 混合增强策略

一、前言 在之前的探讨中&#xff0c;我们已经分别深入了解了RAG&#xff08;检索增强生成&#xff09;和 Fine-tuning&#xff08;微调&#xff09;这两种优化大型语言模型的方法&#xff0c;探讨了它们在不同业务场景下的适用性、优势及局限。然而&#xff0c;我们很少讨论将…

解读 Xend Finance:向 RWA 叙事拓展,构建更具包容性的 DeFi 体系

在二十世纪后&#xff0c;非洲地区陆续爆发了主权运动&#xff0c;这也让非洲大陆逐渐摆脱“殖民地”的标签。目前&#xff0c;非洲大陆公有 54 个主权国家&#xff0c;接近 15 亿且仍在飙升的人口规模&#xff0c;其 GDP 已经与印度相当&#xff0c;且仍旧处于飞速的发展进程中…

Python学习:字符串

Python 字符串概念 在Python中&#xff0c;字符串是一种不可变的数据类型&#xff0c;用于表示文本数据。字符串可以包含字母、数字、符号以及空格等字符&#xff0c;通常用引号&#xff08;单引号或双引号&#xff09;括起来表示。 var1 Hello World! var2 "www.csdn…

运维篇SHELL脚本实战案例

统计出每个IP的访问量有多少&#xff1f; 检查是否提供了日志文件的路径作为参数。使用awk从日志文件的每行中提取第一个字段&#xff08;假设这是IP地址&#xff09;。使用sort对提取的IP地址进行排序。使用uniq -c统计每个唯一IP地址的出现次数。最后&#xff0c;使用sort -…

Java的类与对象

前言 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序&#xff0c;更符合人们…

2024年【熔化焊接与热切割】模拟考试题库及熔化焊接与热切割实操考试视频

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 熔化焊接与热切割模拟考试题库参考答案及熔化焊接与热切割考试试题解析是安全生产模拟考试一点通题库老师及熔化焊接与热切割操作证已考过的学员汇总&#xff0c;相对有效帮助熔化焊接与热切割实操考试视频学员顺利通…

YOLOv9有效改进|CVPR2023即插即用的到残差注意力机制(轻量化注意力机制)Inverted Residual Mobile Block

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 在YOLOv9中加入CVPR2023即插即用的到残差注意力机制。 二、模块详解 2.1 模块简介 Inverted Residual Mobile Block结合了倒置残差块…

MySQL高级学习笔记

1、MySQL架构组成 1.1 高级MySQL介绍 什么是DBA&#xff1f; 数据库管理员&#xff0c;英文是Database Administrator&#xff0c;简称DBA&#xff1b; 百度百科介绍 数据库管理员&#xff08;简称DBA&#xff09;&#xff0c;是从事管理和维护数据库管理系统&#xff08;D…

使用PLCSIM Advanced仿真博途运动控制

作者顾工首先&#xff0c;添加一个CPU&#xff0c;直接添加一个1518T&#xff0c;反正仿真&#xff0c;不用最好的干嘛呢。是吧。当然&#xff0c;你也可以添加一个你喜欢的PLC&#xff0c;这里不强求。 然后添加工艺对象&#xff0c;我们简单添加一个定位轴。 在工艺对象&am…

php laravel 二维码

public function qr($url,$name2,$inpath){require_once(dirname(__FILE__) . /../../../Library/phpqrcode/phpqrcode.php);$errorCorrectionLevel L;//容错级别$matrixPointSize 10;//生成图片大小$QRcode new \QRcode() ;$QRcode->png($url, $inpath.$name2, $errorCor…

参数化学习

因为parameters的参数不能和数据驱动类使用&#xff0c;会出现报错&#xff0c;可以使用before test/等参数

NCV6323BMTAATBG同步降压转换器芯片中文资料规格书PDF数据手册参数引脚图图片

产品概述&#xff1a; NCV6323 是一款同步降压转换器&#xff0c;用于使用一个锂电池或三个碱性/镍镉/镍氢电池供电的便携式应用的各种子系统。此类器件能够基于外部可调电压提供高达 2 A 的电流。使用 3 MHz 开关频率的运行允许采用小尺寸电感器和电容器。采用输入电源电压前…

Premiere模板|200个视频标题文字动画pr字幕模板包

Premiere模板&#xff0c;13个类别200个Pr视频标题字幕文字动画模板mogrt包。 几乎适用于任何场景。粗体标题&#xff0c;标注&#xff0c;未来主义和线条标题&#xff0c;下三分之一&#xff0c;霓虹灯&#xff0c;带数字的标题&#xff0c;倒计时&#xff0c;表格&#xff0c…