#include <myhead.h>
#include <sqlite3.h>
typedef struct {
int gh;
char name[20];
double salary;
} worker;
// 回调函数 输出查找到的工人信息
int callback(void *arg, int n, char **magtext, char **msgtable) {
int i;
for (i = 0; i < n; i++) {
printf("%s\t", msgtable[i]);
}
printf("\n");
for (i = 0; i < n; i++) {
printf("%s\t", magtext[i]);
}
printf("\n");
printf("查找成功\n");
return 0;
}
// 插入工人信息函数
int do_insert(sqlite3 *Db) {
worker work;
printf("请输入插入的工号:");
scanf("%d", &work.gh);
printf("请输入插入的姓名:");
scanf("%s", work.name);
printf("请输入工人的薪资:");
scanf("%lf", &work.salary);
char *errmsg = NULL;
char sql_syntax[100];
snprintf(sql_syntax, sizeof(sql_syntax), "insert into work values(%d, \"%s\", %lf);", work.gh, work.name, work.salary);
if (sqlite3_exec(Db, sql_syntax, NULL, NULL, &errmsg) != 0) {
perror("sqlite3_exec2");
printf("错误码:%d,错误信息:%s,出错行是%d\n", sqlite3_errcode(Db), sqlite3_errmsg(Db), __LINE__);
printf("错误信息:%s\n", errmsg);
return -1;
}
printf("插入成功\n");
return 0;
}
// 删除工人信息函数
int do_delete(sqlite3 *Db) {
int gh;
printf("请输入要删除的工人工号:");
scanf("%d", &gh);
char *errmsg = NULL;
char sql_syntax[100];
snprintf(sql_syntax, sizeof(sql_syntax), "delete from work where gh=%d;", gh);
if (sqlite3_exec(Db, sql_syntax, NULL, NULL, &errmsg) != 0) {
perror("sqlite3_exec2");
printf("错误码:%d,错误信息:%s,出错行是%d\n", sqlite3_errcode(Db), sqlite3_errmsg(Db), __LINE__);
printf("错误信息:%s\n", errmsg);
return -1;
}
printf("删除成功\n");
return 0;
}
// 修改工人信息函数
int do_update(sqlite3 *Db) {
int gh;
printf("请输入要修改的工人工号:");
scanf("%d", &gh);
worker work;
printf("请输入新的姓名:");
scanf("%s", work.name);
printf("请输入新的薪资:");
scanf("%lf", &work.salary);
char *errmsg = NULL;
char sql_syntax[200];
snprintf(sql_syntax, sizeof(sql_syntax), "update work set name=\"%s\", salary=%lf where gh=%d;", work.name, work.salary, gh);
if (sqlite3_exec(Db, sql_syntax, NULL, NULL, &errmsg) != 0) {
perror("sqlite3_exec2");
printf("错误码:%d,错误信息:%s,出错行是%d\n", sqlite3_errcode(Db), sqlite3_errmsg(Db), __LINE__);
printf("错误信息:%s\n", errmsg);
return -1;
}
printf("修改成功\n");
return 0;
}
// 查找工人信息函数
int do_search(sqlite3 *Db) {
char key[20];
printf("请输入你要查找的工人姓名:");
scanf("%s", key);
char *errmsg = NULL;
char sql_syntax[100];
snprintf(sql_syntax, sizeof(sql_syntax), "select * from work where name=\"%s\";", key);
if (sqlite3_exec(Db, sql_syntax, callback, NULL, &errmsg) != 0) {
perror("sqlite3_exec2");
printf("错误码:%d,错误信息:%s,出错行是%d\n", sqlite3_errcode(Db), sqlite3_errmsg(Db), __LINE__);
printf("错误信息:%s\n", errmsg);
return -1;
}
return 0;
}
// 回调函数 显示所有信息
int show_all(void *arg, int n, char **magtext, char **msgtable) {
int i, j;
if(*(int *)arg == 0){
for (i = 0; i < n; i++) {
printf("%s\t", msgtable[i]);
}
*(int *)arg = 1;
printf("\n");
}
for (j = 0; j < n; j++) {
printf("%s\t", *(magtext+j));
}
printf("\n");
return 0;
}
// 显示所有工人信息函数
int do_showall(sqlite3 *Db) {
int flag = 0;
char *errmsg = NULL;
char sql_syntax[100] = "select * from work";
if (sqlite3_exec(Db, sql_syntax, show_all, &flag, &errmsg) != 0) {
perror("sqlite3_exec2");
printf("错误码:%d,错误信息:%s,出错行是%d\n", sqlite3_errcode(Db), sqlite3_errmsg(Db), __LINE__);
printf("错误信息:%s\n", errmsg);
return -1;
}
return 0;
}
// 菜单函数
void menu(sqlite3 *Db) {
int ch;
while (1) {
printf("**************工人阶级为主导的社会主义国家**************\n");
printf("\t\t1.插入一个工人信息\n");
printf("\t\t2.删除一个工人信息\n");
printf("\t\t3.修改一个工人信息\n");
printf("\t\t4.查找一个工人信息\n");
printf("\t\t5.查找所有工人信息\n");
printf("\t\t0.退出\n");
printf("请输入你的选择:");
scanf("%d", &ch);
switch (ch) {
case 1: do_insert(Db); break;
case 2: do_delete(Db); break;
case 3: do_update(Db); break;
case 4: do_search(Db); break;
case 5: do_showall(Db); break;
case 0: return;
default: printf("输入有误,请重新输入\n");
}
}
}
int main(int argc, const char *argv[]) {
// 1.创建或打开一个数据库文件
sqlite3 *Db;
int k = sqlite3_open("./new.db", &Db); // 打开或者创建一个数据库
if (k != SQLITE_OK) {
perror("sqlite3_open");
printf("错误码:%d,错误信息:%s,出错的行是%d\n", sqlite3_errcode(Db), sqlite3_errmsg(Db), __LINE__);
return -1;
}
printf("数据库打开成功\n");
// 2.创建一个表格
char *errmsg = NULL;
char sql_syntax[100] = "create table if not exists work (gh int primary key, name char(20), salary double);";
if (sqlite3_exec(Db, sql_syntax, NULL, NULL, &errmsg) != 0) {
perror("sqlite3_exec1");
printf("错误码:%d,错误信息:%s,出错行是%d\n", sqlite3_errcode(Db), sqlite3_errmsg(Db), __LINE__);
printf("错误信息:%s\n", errmsg);
return -1;
}
// 显示菜单
menu(Db);
sqlite3_close(Db); // 关闭数据库文件
return 0;
}