数据库:创建员工表,实现对员工的管理(增、删、改、查)

news2024/11/26 4:53:04
#include <myhead.h>
int do_add(sqlite3 *ppdb)
{
	int numb;
	char name[20];
	double salary;
	printf("请输入员工信息:numb name salary\n");
	printf("请输入工号>>>");
	scanf("%d",&numb);
	printf("请输入员工姓名>>>");
//	fgets(name,sizeof(name),stdin);
//	name[strlen(name)-1]=0;
	scanf("%s",name);
	printf("请输入员工工资>>>");
	scanf("%lf",&salary);
	getchar();
	char sql[128]="";
	sprintf(sql,"insert into wker values(%d,\"%s\",%.2lf);",numb,name,salary);
	char *errmsg=NULL;//存放执行sql语句中的错误信息
	if(sqlite3_exec(ppdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("add error:%s\n",errmsg);
		sqlite3_free(errmsg);
		errmsg=NULL;
		return -1;
	}
	printf("员工信息添加成功\n");
	return 0;
}

//删除员工信息
int do_del(sqlite3 *ppdb)
{
	printf("请输入要删除指定员工的工号>>>");
	int numb;
	scanf("%d",&numb);
	char sql[128]="";
	sprintf(sql,"delete from wker where numb=%d;",numb);
	char *errmsg=NULL;//存放执行sql语句中的错误信息
	if(sqlite3_exec(ppdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("del error:%s\n",errmsg);
		sqlite3_free(errmsg);
		errmsg=NULL;
		return -1;
	}
	printf("员工信息删除成功\n");
	return 0;

}

//修改员工信息
int do_update(sqlite3 *ppdb)
{
	printf("请输入要修改员工对应的工号>>>");
	int numb;
	scanf("%d",&numb);
	printf("请输入要修改员工的姓名>>>");
	char name[20];
	scanf("%s",name);
	printf("请输入要修改员工的工资>>>");
	double salary;
	scanf("%lf",&salary);
	getchar();
	char sql[128]="";
	sprintf(sql,"update wker set name=\'%s\',salary=%.2f where numb=%d;",name,salary,numb);
	char *errmsg=NULL;//存放执行sql语句中的错误信息
	if(sqlite3_exec(ppdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("update error:%s\n",errmsg);
		sqlite3_free(errmsg);
		errmsg=NULL;
		return -1;
	}
	printf("员工信息修改成功\n");
	return 0;

}

int callback(void *arg,int cols,char** colum_text,char ** colum_name)
{
	if((*(int*)arg)==0)
	{
		for(int i=0;i<cols;i++)//输出表头
		{
			printf("%8s",colum_name[i]);
		}
		printf("\n");
		(*(int*)arg)=1;
	}
	//输出文本内容
	for(int i=0;i<cols;i++)
	{
		printf("%8s",colum_text[i]);
	}
	printf("\n");
	return 0;

}

//查询员工信息
int do_query(sqlite3 *ppdb)
{
	int flag=0;
	char sql[128]="select * from wker;";
	char *errmsg=NULL;//存放执行sql语句中的错误信息
	if(sqlite3_exec(ppdb,sql,callback,&flag,&errmsg)!=SQLITE_OK)
	{
		printf("query error:%s\n",errmsg);
		sqlite3_free(errmsg);
		errmsg=NULL;
		return -1;
	}
	printf("查询员工信息成功\n");
	return 0;

}



int main(int argc, const char *argv[])
{
	//定义数据库操作的指针
	sqlite3 *ppdb=NULL;
	if(sqlite3_open("./my.db",&ppdb)!=SQLITE_OK)
	{
		printf("sqlite3_open error,errcode=%d\n",sqlite3_errcode(ppdb));
		return -1;
	}
	printf("sqlite3_open success\n");

	//创建数据表
	//准备sql语句
	char sql[128]="create table if not exists wker(numb int primary key,name char,salary double);";
	char *errmsg=NULL;//存放执行sql语句中的错误信息
	if(sqlite3_exec(ppdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		printf("exec error:%s\n",errmsg);
		sqlite3_free(errmsg);
		errmsg=NULL;
		return -1;
	}
	printf("员工信息表创建成功\n");

	int menu=-1;
	for(;;)
	{
		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_del(ppdb);
			}
			break;
		case 3:
			{
				do_update(ppdb);
			}
			break;
		case 4:
			{
				do_query(ppdb);
			}
			break;
		case 0:
			goto END;
		default:
			printf("你输入的有误,请重新输入\n");

		}
	}
END:
	//关闭数据库
	sqlite3_close(ppdb);
	return 0;
}

运行结果:

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

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

相关文章

技术型项目经理和管理型项目经理有何区别?

在项目管理领域中&#xff0c;项目管理岗位涵盖了两种不同职责的角色&#xff0c;即技术型项目经理和管理型项目经理。这两个角色在职责、技能和关注点上存在一定的差异。 技术型项目经理 技术型项目经理通常具备广泛的专业知识和技术背景&#xff0c;他们关注项目的具体技术实…

Win11 24H2什么时候发布-你期待哪些新功能?

Win11 24H2什么时候发布&#xff1f;Win11 24H2的发布日期终于有了确切的消息。微软官方已宣布&#xff0c;这款备受期待的重要更新将在2024年下半年与大家见面。24H2版本的推出无疑将为广大用户带来更加流畅、安全和易用的操作系统体验。接下来跟随小编去看看这个新版本带来哪…

Android使用OpenGL和FreeType绘制文字

Open GL主要是渲染图形的&#xff0c;有时候需要绘制文字&#xff0c;网上搜了一下&#xff0c;基本思路都是把文字转成位图&#xff0c;再使用Open GL纹理进行渲染。加载纹理在特定阶段才能成功&#xff08;在onSurfaceCreated中加载&#xff09;&#xff0c;这样就无法动态的…

Cocos Creator 3.8.x 制作模糊效果(比如游戏弹窗需要的模糊效果)

接着上一个讨论的话题,关于3.8.x的后效,今天来分享自定义后效来制作模糊效果,并将他应用到弹窗中做背景,话不多说开整。 一:最终效果 首先咱们来看官网自定义后效怎么搞的,从它的实例开始:自定义后效 二:定义PostProcessSettings给节点提供资源(通过编辑器修改参数的…

【JavaScript】Map、Reduce 和 Filter - 通过代码示例解释 JS 数组函数

Map、reduce 和 filter 都是 JavaScript 中的数组方法。每个都将迭代一个数组并执行转换或计算。每个函数都会根据函数的结果返回一个新数组。在本文中&#xff0c;您将了解为什么以及如何使用每一个。 以下是 Steven Luscher 的有趣总结&#xff1a; Map map()方法用于从现…

抖音开店实操步骤,图文详解!

大家好&#xff0c;我是电商糖果 话不多说&#xff0c;最近准备在抖音开店的朋友&#xff0c;这份图文开店笔记&#xff0c;记得收藏&#xff01; 一、开店前的准备 1. 营业执照 执照最好选个体的&#xff0c;个体执照可以直接去工商局办理&#xff0c;也可以找专业的代办。…

2024/3/5打卡最长上升子序列**----线性DP,贪心,单调栈

目录 题目&#xff1a; DP分析&#xff1a; 代码&#xff1a; 3.6更新 贪心 第一个思考方式 先上代码&#xff1a; 解析&#xff1a; 贪心 第二个思考方式 &#xff08;与上面的思路差不多&#xff0c;但是换了个角度&#xff09; 思路&#xff1a; 代码&#xff1a; …

探索神经网络在商品销售和图像识别中的应用

目录 前言人工神经网络简介1.1 人工神经网络与深度学习简介1.2 生物神经元结构与神经元机器模型1.3 神经网络的数据量与性能关系 2 需求预测2.1 需求预测的背景2.2 商品销售神经元机器模型2.3 多层神经网络结构的优势 3 图像识别3.1 图像识别神经网络技术3.2 实际应用场景 结语…

AI领域再出“王炸“----Claude3是否会成为下一个“神“

目录 一.Claude3最新发布 二.Claude3支持20万token 三.Claude3在未公开算法上取得重大突破 1.Claude 3读懂博士论文 2.量子跃迁集成&#xff1a; Claude 3智商&#xff1a;101 测试方法 测试细节 通过Karpathy挑战 Claude 3自画像&#xff0c;突破本我 从洛杉矶排到…

3_1储能容量配置

% 创建优化问题 problem optimproblem(ObjectiveSense, minimize);% 定义变量 x optimvar(x, 2, 1, LowerBound, 0); % 储能设备容量变量% 定义目标函数 problem.Objective 2*x(1) 3*x(2); % 假设成本函数为2*x1 3*x2% 定义约束条件 problem.Constraints.capacity1 x(1) …

01-环境搭建、SpringCloud微服务(注册发现、服务调用、网关)

环境搭建、SpringCloud微服务(注册发现、服务调用、网关) 1)课程对比 2)项目概述 2.1)能让你收获什么 2.2)项目课程大纲 2.3)项目概述 随着智能手机的普及&#xff0c;人们更加习惯于通过手机来看新闻。由于生活节奏的加快&#xff0c;很多人只能利用碎片时间来获取信息&…

画图解题思路( ccf 201512-3)

分析 首先需要转换坐标系&#xff0c;可以将两个坐标系的点写出来&#xff0c;对比一下找规律 可以发现题目中的坐标(x, y)转变成数组坐标系为(n - y - 1, x); 然后再判断是画线还是填充 画线&#xff1a;先转换题目坐标&#xff0c;再遍历画线 填充&#xff1a;采用dfs

Vue中有哪些优化性能的方法?

Vue是一款流行的JavaScript框架&#xff0c;用于构建交互性强的Web应用程序。在前端开发中&#xff0c;性能优化是一个至关重要的方面&#xff0c;尤其是当应用程序规模变大时。Vue提供了许多优化性能的方法&#xff0c;可以帮助开发人员提升应用程序的性能&#xff0c;从而提升…

LABEL-EFFICIENT SEMANTIC SEGMENTATION WITHDIFFUSION MODELS

基于扩散模型的标签高效语义分割 摘要&#xff1a; 去噪扩散概率模型最近受到了很多研究的关注&#xff0c;因为它们优于gan等替代方法&#xff0c;并且目前提供了最先进的生成性能。扩散模型的优越性能使其成为一些应用程序的吸引人的工具&#xff0c;包括绘图&#xff0c;超…

【Python】3. 基础语法(2)

顺序语句 默认情况下, Python 的代码执行顺序是按照从上到下的顺序, 依次执行的. print("1") print("2") print("3")执行结果一定为 “123”, 而不会出现 “321” 或者 “132” 等. 这种按照顺序执行的代码, 我们称为 顺序语句. 这个顺序是很关…

使用php_screw实现PHP代码加密

一&#xff1a;php_screw下载地址 https://gitee.com/splot/php-screw-plus https://github.com/del-xiong/screw-plus 二&#xff1a;php_screw安装 1&#xff1a;解压并修改加密key unzip php-screw-plus-master.zip cd php-screw-plus-master 打开php-screw-plus-mast…

【Docker】技术架构演变

【Docker】技术架构演变 目录 【Docker】技术架构演变架构中的概念架构演进单机架构相关软件 应用数据分离架构应用服务集群架构相关软件 读写分离/主从分离架构相关软件 引入缓存——冷热分离架构相关软件 垂直分库&#xff08;分布式数据库架构&#xff09;相关软件 业务拆分…

力扣--动态规划516.最长回文子序列

思路分析&#xff1a; 创建一个二维动态规划表dp&#xff0c;其中dp[i][j]表示在子串s[i...j]中的最长回文子序列的长度。初始化基本情况&#xff1a;对角线上的元素dp[i][i]都为1&#xff0c;因为单个字符本身就是长度为1的回文子序列。从字符串末尾向前遍历&#xff0c;填充…

Java Day2 面向对象

这里写目录标题 1、static总结1.1 代码块1.1.1 静态代码块1.1.2 实例代码块1.1.3 小例子 2、继承2.1 权限修饰符2.2 方法重写2.3 子类访问成员特点2.4子类构造器的特点 3、多态4、final、常量4.1 final4.2 常量 5 抽象类5.1 概念5.2 模板设计方法 6、接口6.1 接口新方法6.2 接口…

Java工程师必备知识,系列教学

一、前言 在这里我不得不感慨Spring的代码的完善与优秀&#xff0c;从之前看源码迷迷糊糊到现在基本了解Spring的部分源码后&#xff0c;愈来愈发现Spring开发者的思虑之周全&#xff01; 之前说过学习源码的目的在哪&#xff1f;正如我特别喜欢的一句话&#xff0c;有道无术…