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

2025.1.2

练习:

1> 创建一个工人信息库,包含工号(主键)、姓名、年龄、薪资。

2> 添加三条工人信息(可以完整信息,也可以非完整信息)

3> 修改某一个工人的薪资(确定的一个)

4> 展示出工资在10000到20000之间的所有工人信息

5> 删除掉指定姓名工人的信息

6> 删除工人信息库

#include<myhead.h>
#include<sqlite3.h>

sqlite3 * creat_sqlite() //创建数据库并返回数据库句柄
{
	const char *p = "./my.db";
	sqlite3 *ppDb;
	if(sqlite3_open(p,&ppDb)!=SQLITE_OK) //调用数据库提供的第三方库函数
	{
		printf("打开数据库失败\n");
		printf("%s\n",sqlite3_errmsg(ppDb)); //错误信息
		printf("%d\n",sqlite3_errcode(ppDb)); //错误码
		printf("sqlite3_open");
	}
	return ppDb; //返回数据库句柄
}
void insert_worker(sqlite3 *ppDb) //插入员工信息
{
	char sql[1024];
	char *errmsg; //存储错误信息的指针
	sprintf(sql,"%s","create table worker(num int primary key,name char,age int,salary int);");
	if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(ppDb)); //错误信息
		printf("%d\n",sqlite3_errcode(ppDb)); //错误码
	}
	printf("创建表格成功\n");
	int num;
	char name[100];
	int age;
	int salary;
	printf("请输入你要添加的工人信息:\n");
	scanf("%d %s %d %d",&num,name,&age,&salary);
	getchar();
	snprintf(sql,sizeof(sql),"insert into worker values(%d,\"%s\",%d,%d);",num,name,age,salary);
	if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(ppDb)); //错误信息
		printf("%d\n",sqlite3_errcode(ppDb)); //错误码
	}
	printf("添加成功\n");

}

void update_worker(sqlite3 *ppDb)
{
	int num;
	int salary;
	char * errmsg;
	char sql[1024];
	printf("请输入你要修改的工人的工号:\n");
	scanf("%d",&num);
	getchar();
	printf("请你输入改的值:\n");
	scanf("%d",&salary);
	getchar();
	snprintf(sql,sizeof(sql),"update worker set salary=%d where num=%d",salary,num);
	if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(ppDb));
		printf("%d\n",sqlite3_errcode(ppDb));
	}
	printf("修改成功\n");
}
void show(sqlite3 *ppDb)
{
	char sql[1024];
	char * errmsg;
	int salary;
	const char *sq = "select * from worker where salary>10000 and salary<20000";
	sqlite3_stmt *stmt;
	snprintf(sql,sizeof(sql),"select * from worker where salary>10000 and salary<20000");
	if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(ppDb));
		printf("%d\n",sqlite3_errcode(ppDb));
	}
	int res = sqlite3_prepare_v2(ppDb,sq,-1,&stmt,NULL);
	printf("工资在10000到20000的工人:\n");
	while((res = sqlite3_step(stmt))==SQLITE_ROW)
	{
		printf("num = %d,name = %s,age = %d,salary = %d\n",
		sqlite3_column_int(stmt,0),
		sqlite3_column_text(stmt,1),
		sqlite3_column_int(stmt,2),
		sqlite3_column_int(stmt,3));
	}
	sqlite3_finalize(stmt);
}
void delete_worker(sqlite3 *ppDb)
{
     char name[20];
     char * errmsg;
     char sql[1024];
     printf("请输入你要删除的工人的姓名:\n");
     scanf("%s",name);
     getchar();
     snprintf(sql,sizeof(sql),"delete from worker where name = '%s' ",name);
     if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
     {
         printf("%s\n",sqlite3_errmsg(ppDb));
         printf("%d\n",sqlite3_errcode(ppDb));
     }
     printf("删除成功\n");
}
void delete(sqlite3 *ppDb)
{
     char name[20];
     char * errmsg;
     char sql[1024];
     snprintf(sql,sizeof(sql),"drop table worker ");
     if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
     {
         printf("%s\n",sqlite3_errmsg(ppDb));
         printf("%d\n",sqlite3_errcode(ppDb));
     }
     printf("删除成功\n");
}
void menu()
{
	int ch;
	sqlite3 *ppDb;
	while(1)
	{
		printf("\t\t\t1、创建数据库\n");
		printf("\t\t\t2、添加工人信息\n");
		printf("\t\t\t3、修改工人信息\n");
		printf("\t\t\t4、展示所有信息\n");
		printf("\t\t\t5、删除指定工人信息\n");
		printf("\t\t\t6、删除整表\n");
		printf("\t\t\t0、退出\n");
		printf("请输入你的选择:");
		scanf("%d",&ch);
		getchar();
		switch(ch)
		{
			case 1:
				{
				ppDb = creat_sqlite();
				}
				break;
			case 2:
				{
				insert_worker(ppDb);
				}
				break;
			case 3:
				{
				update_worker(ppDb);
				}
				break;
			case 4:
				{
				show(ppDb);
				}
				break;
			case 5:
				{
				delete_worker(ppDb);
				}
				break;
			case 6:
				{
				delete(ppDb);
				}
				break;
			case 0:
				exit(0);
			break;
			default:
				printf("输入错误,请重新输入\n");

		}
	}
}
int main(int argc, const char *argv[])
{
	menu(); //调用菜单函数	
	return 0;
}


http://www.kler.cn/a/470402.html

相关文章:

  • 基于RK3568/RK3588大车360度环视影像主动安全行车辅助系统解决方案,支持ADAS/DMS
  • GOAT‘S AI早鸟报Part9
  • visual studio 自动调整代码格式的问题:
  • 微信小程序校园自助点餐系统实战:从设计到实现
  • 源代码编译安装X11及相关库、vim,配置vim(3)
  • 【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】
  • CE中注册的符号地址如何通过编程获取
  • [开源]自动化定位建图系统
  • ETL处理工具Kettle入门
  • 如何开通阿里云DDoS保护服务:全面防护您的网站安全
  • 让Qt 具有多选文件夹和记忆上一次打开位置的文件对话框
  • 前端基础函数算法整理应用(sort+reduce+date+双重for循环)
  • 32单片机从入门到精通之软件编程——通信协议(十一)
  • C++二十三种设计模式之建造者模式
  • 学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用
  • ES_如何设置ElasticSearch 8.0版本的匿名访问以及https_http模式的互相切换
  • 掌阅iReader发布Ocean 4C:便携创新,彩屏书写无限可能
  • Kafka运维指南
  • Redis的优势/Redis八股01
  • 出租号平台网站系统源码/单合租用模式 提供用户提现功能
  • leetcode热题100(84. 柱状图中最大的矩形)c++
  • 如何利用Java爬虫按关键字搜索淘宝商品案例指南
  • 机器学习基础-支持向量机SVM
  • 玉米识别数据集,4880张图,正确识别率可达98.6%,支持yolo,coco json,pasical voc xml格式的标注,可识别玉米
  • 工控安全需求分析与安全保护工程
  • java学习 单例模式