3.21作业

1、使用sqlite3实现简易的学生管理系统

#include<myhead.h>

//封装添加学生信息函数
int do_add(sqlite3 *ppDb)
{
	//准备sql语句
	int add_numb = 0;
	char add_name[20] = "";
	double add_socre = 0;

	printf("输入学号:");
	scanf("%d",&add_numb);
	printf("输入姓名:");
	scanf("%s",add_name);
	printf("输入成绩:");
	scanf("%lf",&add_socre);
	getchar();

	char sql[128]="";
	sprintf(sql,"insert into Stu values(%d,\"%s\",%lf);",add_numb,add_name,add_socre);

	//定义接收错误信息的变量
	char *errmsg = NULL;

	if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("add error:%s\n",errmsg);
		sqlite3_free(errmsg);
		return -1;
	}
	printf("插入成功\n");

	return 0;

}

//删除学生信息
int do_delete(sqlite3 *ppDb)
{
	char delete_name[20] = "";
	
	printf("请输入要删除信息的学生的姓名:");
	scanf("%s",delete_name);
	getchar();

	char sql[128] = "";
	sprintf(sql,"delete from Stu where name=\"%s\";",delete_name);
	
	char *errmsg = NULL;

	if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("delete error:%s\n",errmsg);
		sqlite3_free(errmsg);
		return -1;
	}
	printf("删除成功\n");
	return 0;

}

//修改学生信息
int do_update(sqlite3 *ppDb)
{
	char name[20] = "";
	int update_numb = 0;
	double update_score = 0;

	printf("请输入要修改信息的学生的姓名:");
	scanf("%s",name);
	printf("修改学号为:");
	scanf("%d",&update_numb);
	printf("修改成绩为:");
	scanf("%lf",&update_score);
	getchar();

	char sql[128]="";
	sprintf(sql,"update Stu set numb=%d,score=%lf where name=\"%s\";",update_numb,update_score,name);

	char *errmsg = NULL;
	if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("update error:%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)
{
	char sql[128] = "select * from Stu;";

	//定义错误信息容器
	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;
	}
	return 0;
}

int do_search_1(sqlite3 *ppDb)
{
	char sql[128] = "select * from Stu;";
	char *errmsg = NULL;
	
	//准备接收结果集的相关变量
	char **retPtr = NULL;    //记录结果集的起始地址
	int rows = 0;             //记录结果集的行数
	int cols = 0;             //记录结果集的列数

	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, "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 Stu(numb int, 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============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(ppDb);
				//do_search_1(ppDb);
			}
			break;
		case 0:goto END;
		default:printf("您输入的功能有误,请重新输入!!!!\n");
		}

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

END:

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

	return 0;
}

2、思维导图

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

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

相关文章

React 系列 之 React Hooks(一) JSX本质、理解Hooks

借鉴自极客时间《React Hooks 核心原理与实战》 JSX语法的本质 可以认为JSX是一种语法糖&#xff0c;允许将html和js代码进行结合。 JSX文件会通过babel编译成js文件 下面有一段JSX代码&#xff0c;实现了一个Counter组件 import React from "react";export defau…

Java代码基础算法练习-求一个三位数的各位平方之和-2024.03.21

任务描述&#xff1a; 输入一个正整数n&#xff08;取值范围&#xff1a;100<n<1000&#xff09;&#xff0c;然后输出每位数字的平方和。 任务要求&#xff1a; 代码示例&#xff1a; package march0317_0331;import java.util.Scanner;public class m240321 {public …

java.lang.String final

关于String不可变的问题&#xff1a;从毕业面试到现在&#xff0c;一个群里讨论的东西&#xff0c;反正码农面试啥都有&#xff0c;这也是我不咋喜欢面试代码&#xff0c;因为对于我而言&#xff0c;我并不喜欢这些面试。知道或不知道基本没啥含氧量&#xff0c;就是看看源代码…

程序员为什么宁愿失业都不愿意搭伙去接单?

我要说一个关键词&#xff1a;信息差&#xff0c;这个词将贯彻这整篇文章。 大多数程序员觉得&#xff0c;接单不稳定、金额低、单子少&#xff0c;又卷又没有性价比。从某种角度上说&#xff0c;这个说法也没错&#xff0c;但作为业余接单者&#xff0c;本就不应该把接单当做主…

【Java常用API】简单爬虫练习题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

【Unity实战系列】Unity的下载安装以及汉化教程

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;怎么说呢&#xff0c;其实这才是我以后真正想写想做的东西&#xff0c;虽然才刚开始&#xff0c;但好歹&#xff0c;我总算是启程了。今天要分享…

Java特性之设计模式【装饰器模式】

一、装饰器模式 概述 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中&#xff0c;以…

单片机--数电(4)

触发器 数字电路中&#xff1a;分组合逻辑电路与时序逻辑电路两大类 组合逻辑电路的基本单元是门电路&#xff08;与或非等一些门电路&#xff09; 时序逻辑电路的基本单元是触发器 触发器与门电路的区别 门电路某一时刻的输出信号完全取决于该时刻的输入信号&#xff0c;…

【目标检测实验系列】AutoDL线上GPU服务器租用流程以及如何用Pycharm软件远程连接服务器进行模型训练 (以Pycharm远程训练Yolov5项目为例子 超详细)

目录 1. 文章主要内容2. 租用AutoDL服务器详细教程2.1 注册AutoDL账号&#xff0c;并申请学生认证(学生认证有优惠&#xff0c;如果不是学生可以忽略此点)2.2 算力市场选择GPU&#xff0c;并选择初始化配置环境2.3 控制台参数解析&#xff0c;并使用相关参数登录Xftp(Windows与…

安卓开发日记:实现APP重启逻辑,适用于热更后重启游戏进行加载

可根据合适的弹窗搭配使用重启逻辑&#xff0c;建议使用在热更包加载后使用&#xff0c;帮助部分热更后未及时生效的逻辑范围首先&#xff0c;在逻辑调用Activity类中创建一个成员变量&#xff0c;给后续逻辑接口直接使用 如下 public class MainActivity extends Activity {…

rundeck k8s部署踩坑

1、镜像启动后原来的定时任务无法运行 参考&#xff1a; https://github.com/rundeck/rundeck/issues/4275 https://stackoverflow.com/questions/60942785/env-variable-for-rundeck-feature-joblifecycleplugin-enabled/60959605#60959605 结论&#xff1a; &#xff08;1&…

vue3项目中使用 hiprint

基于 vue3 的打印 hiprint 打印官网 hiprint hiprint 是一个web 打印的js组件&#xff0c;无需安装软件。支持移动端&#xff0c;PC端浏览器&#xff0c;angular,vue,react, 等 分页预览&#xff0c;打印&#xff0c;操作简单&#xff0c;运行快速。 在 vue3 项目中使用打印&a…

【嵌入式学习】Qtday03.21

一、思维导图 二、练习 自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面。&#xff08;不要使用课堂上的图片和代码&#xff0c;自己发挥&#xff0c;有利于后面项目的完成&#xff09; 要求&#xff1a; 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件…

shell脚本命令

最后更新日期&#xff1a;2024-03-21 文章目录 一、echo二、特殊变量1、$n2、$#3、$*4、$5、$? 三、运算符1、expr2、$[nn] 三、条件判断1、[ condition ]2、&&3、|| 四、流程控制1、if2、case3、for4、while 五、read读取控制台输入 一、echo 打印变量 #! /bin/ba…

k8s安装详细教程1

环境初始化 1、检查操作系统的版本 Last login: Mon Mar 18 08:57:10 2024 [rootcontroller ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootcontroller ~]# vi /etc/hosts2、时间同步 kubernetes要求集群中的节点时间必须精确一直&#xff0c;这里…

32.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-网络数据分析原理与依据

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;31.其它消息的实…

除了Confluence,有没有其他工具一样好用?

每个团队都需要一个协同工作工具&#xff0c;以更有效地管理任务、跟踪进度和分享知识。这就是Atlassian的Confluence发挥作用的地方。然而&#xff0c;尽管它相当强大&#xff0c;其昂贵的价格和复杂的界面可能会让某些用户望而却步。所以&#xff0c;还有其他工具可以替代Con…

Markdown快速入门(常用技巧)

目录 说明常用书写技巧1.标题分级2.代码块3.字体4.引用语法5.分割线6.图片插入(本地/网络&#xff09;7.超链接8.列表9.表格10.换行&#xff08;两个空格&#xff09;11.插入公式12.脚注 说明 markdown实际上类似于网页&#xff0c;可以根据喜欢设置其样式变化&#xff0c;创建…

多模态开源大模型

感知类总榜单&#xff0c;是将各项感知任务综合起来的总评分&#xff0c;显示是BLIP-2最高&#xff1a; 认知类总榜单&#xff0c;则是各种涉及认知类任务的榜单&#xff0c;加起来是MiniGPT-4最高&#xff1a; 一、LLaVA-1.5&#xff08;浙大实验室》&#xff1a;LLaVA 二、…

如何修复WordPress网站媒体库上传文件失败的问题

公司最近推出了一系列新产品&#xff0c;为了更新网站的视频和图片&#xff0c;我们需要将它们上传至网站媒体库。然而&#xff0c;在上传视频时&#xff0c;我们却遇到了一些问题。系统提示说&#xff0c;我们尝试上传的视频文件大小超出了站点的最大上传限制。尽管我们的视频…