#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
// 定义worker结构体
typedef struct {
int gh; // 工号
char name[20]; // 姓名
double salary; // 薪水
} worker;
// 插入工人信息函数
int do_insert(sqlite3 *ppDb) {
worker work;
printf("请输入插入的工号: ");
scanf("%d", &work.gh);
printf("请输入插入的姓名: ");
scanf("%s", work.name);
printf("请输入插入的薪水: ");
scanf("%lf", &work.salary);
char *errmsg = NULL; // 用于存储错误信息
char sqlite[200]; // 用于存储SQL语句
// 格式化SQL语句,插入工人信息
snprintf(sqlite, sizeof(sqlite), "INSERT INTO work VALUES(%d, '%s', %lf);", work.gh, work.name, work.salary);
// 执行SQL插入语句
if (sqlite3_exec(ppDb, sqlite, NULL, NULL, &errmsg) != SQLITE_OK) {
fprintf(stderr, "sqlite3_exec error: %s\n", errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("添加工人信息成功\n");
return 0;
}
// 回调函数,用于查询工人信息时的输出
int callback(void *arg, int nCols, char **msgText, char **msgTable) {
for (int i = 0; i < nCols; i++) {
printf("%s: %s\t", msgTable[i], msgText[i] ? msgText[i] : "NULL");
}
printf("\n");
return 0;
}
// 查询并显示所有工人信息
int show_all(sqlite3 *ppDb) {
char *errmsg = NULL; // 存储错误信息
char sqlite[100] = "SELECT * FROM work;"; // SQL语句,查询所有工人信息
// 执行SQL查询语句并调用回调函数输出结果
if (sqlite3_exec(ppDb, sqlite, callback, NULL, &errmsg) != SQLITE_OK) {
fprintf(stderr, "sqlite3_exec error: %s\n", errmsg);
sqlite3_free(errmsg);
return -1;
}
return 0;
}
// 菜单函数
void menu(sqlite3 *ppDb) {
int ch;
while (1) {
printf("\t\t\t**工人信息管理系统**\n");
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\t0. 退出\n");
printf("请输入你的选择: ");
scanf("%d", &ch);
switch (ch) {
case 1:
do_insert(ppDb); // 插入一个工人信息
break;
case 2:
// 这里应该是删除工人信息的函数调用,暂未实现
printf("删除功能未实现\n");
break;
case 3:
// 这里应该是修改工人信息的函数调用,暂未实现
printf("修改功能未实现\n");
break;
case 4:
// 这里应该是查找工人信息的函数调用,暂未实现
printf("查找功能未实现\n");
break;
case 5:
show_all(ppDb); // 输出所有工人信息
break;
case 0:
sqlite3_close(ppDb); // 关闭数据库连接
exit(0); // 退出程序
default:
printf("无效的选择,请重新输入\n");
}
}
}
// 主函数
int main() {
sqlite3 *db;
int rc;
// 打开数据库
rc = sqlite3_open("workers.db", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return -1;
}
// 创建表格,如果不存在则创建
char *errmsg = NULL;
const char *sql_create_table = "CREATE TABLE IF NOT EXISTS work ("
"gh INTEGER PRIMARY KEY, "
"name TEXT NOT NULL, "
"salary REAL NOT NULL);";
rc = sqlite3_exec(db, sql_create_table, 0, 0, &errmsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to create table: %s\n", errmsg);
sqlite3_free(errmsg);
sqlite3_close(db);
return -1;
}
// 显示菜单
menu(db);
return 0;
}