一、实现功能
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查找学生信息
二、添加
int do_add(sqlite3 *ppDb)
{
// 准备sql语句
int add_num = 0;
char add_name[20] = "";
double add_score = 0;
// 提示并输入数据
printf("请输入学号:");
scanf("%d", &add_num);
printf("请输入姓名:");
scanf("%s", add_name);
printf("请输入成绩:");
scanf("%lf", &add_score);
getchar();
char sql[128] = "";
sprintf(sql, "insert into Stu values(%d,\"%s\",%lf);", add_num, add_name, add_score);
// 定义接受错误信息的变量
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)
{
// 准备sql语句
char sql[128] = "";
char name[10] = "";
printf("请输入要删除学生的姓名\n");
scanf("%s", name);
getchar();
sprintf(sql, "delete from Stu where name=\"%s\";", name);
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_update(sqlite3 *ppDb)
{
char name[10] = "";
int score;
printf("输入要修改的学生的姓名\n");
scanf("%s", name);
getchar();
printf("修改的成绩为\n");
scanf("%d", &score);
getchar();
char sql[128] = "";
sprintf(sql, "update Stu set score=%d where name=\"%s\";", score, name);
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");
}
五、查看
法一:exec
// 定义回调函数处理查询后的结果集
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; // 定义标识符
if (sqlite3_exec(ppDb, sql, callback, &flag, &errmsg) != SQLITE_OK)
{
printf("exec error:%s\n", errmsg);
sqlite3_free(errmsg); // 释放错误信息的空间
return -1;
}
return 0;
}
法二:get——table
// 定义查询函数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, char const *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(num 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==========学生管理系统==========\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;
}