代码:
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>
int do_insert(sqlite3 *sq)
{
char sql[128] = "";
char *errmsg = NULL;
int id = 0;
char name[20] = "";
float score = 0;
while(1)
{
bzero(sql,sizeof(sql));
bzero(name,sizeof(name));
//输入sqlite3指令
printf("请输入学生学号,姓名,分数:\n");
scanf("%d %s %g",&id,name,&score);
while(getchar()!=10);
sprintf(sql,"%s%d,'%s',%g%s","insert into stu values (",id,name,score,");");
//发送指令
printf("%s\n",sql);
if(sqlite3_exec(sq,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
fprintf(stderr,"line:%d sqlite3_exec failed:%s\n",__LINE__,errmsg);
return -1;
}
printf("继续添加:1,退出添加:0\n");
scanf("%d",&id);
while(getchar()!=10);
if(0 == id)
{
goto END;
}
}
END:
return 0;
}
int do_delete(sqlite3 *sq)
{
char sql[128] = "";
char *errmsg = NULL;
int id = 0;
while(1)
{
bzero(sql,sizeof(sql));
printf("请输入要删除的学生学号:\n");
scanf("%d",&id);
while(getchar()!=10);
sprintf(sql,"%s%d%s","delete from stu where id=",id,";");
printf("%s\n",sql);
if(sqlite3_exec(sq,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
fprintf(stderr,"line:%d sqlite3_exec failed:%s\n",__LINE__,errmsg);
return -1;
}
printf("继续添加:1,退出添加:0\n");
scanf("%d",&id);
while(getchar()!=10);
if(0 == id)
{
goto END;
}
}
END:
return 0;
}
int do_update(sqlite3 *sq)
{
char sql[128] = "";
char change[20] = "";
char *errmsg = NULL;
int id = 0;
float score = 0;
while(1)
{
bzero(sql,sizeof(sql));
printf("请输入要修改的学生学号:\n");
scanf("%d",&id);
while(getchar()!=10);
A:
printf("请输入要修改的选项:\n");
scanf("%s",change);
while(getchar()!=10);
if(strcmp(change,"id") == 0)
{
printf("请输入需要修改的学号:\n");
scanf("%d",&id);
while(getchar()!=10);
sprintf(sql,"%s%d%s%d%s","update stu set id=",id," where id=",id,";");
}
else if(strcmp(change,"name") == 0)
{
printf("请输入需要修改的姓名:\n");
scanf("%s",change);
while(getchar()!=10);
sprintf(sql,"%s%s%s%d%s","update stu set name='",change,"' where id=",id,";");
}
else if(strcmp(change,"score") == 0)
{
printf("请输入需要修改的分数\n");
scanf("%f",&score);
while(getchar()!=10);
sprintf(sql,"%s%g%s%d%s","update stu set score=",score," where id=",id,";");
}
else
{
printf("输入错误\n");
goto A;
}
printf("%s\n",sql);
if(sqlite3_exec(sq,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
fprintf(stderr,"line:%d sqlite3_exec failed:%s\n",__LINE__,errmsg);
return -1;
}
printf("继续添加:1,退出添加:0\n");
scanf("%d",&id);
while(getchar()!=10);
if(0 == id)
{
goto END;
}
}
END:
return 0;
}
int do_find(sqlite3 *sq)
{
return 0;
}
int main(int argc, const char *argv[])
{
//创建数据库
sqlite3 *sq = NULL;
if(sqlite3_open("my.dl",&sq) != SQLITE_OK)
{
fprintf(stderr,"err_msg[%d] : %s line:%d\n",\
sqlite3_errcode(sq),sqlite3_errmsg(sq),__LINE__);
return -1;
}
printf("数据库打开成功\n");
char sql[128] = "create table if not exists stu (id int primary key,name char,score float);";
char *errmsg = NULL;
if(sqlite3_exec(sq,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
fprintf(stderr,"line:%d sqlite3_exec failed:%s\n",__LINE__,errmsg);
return -1;
}
printf("table create success\n");
while(1)
{
system("clear");
printf("********************\n");
printf("*******1.insert******\n");
printf("*******2.delete*****\n");
printf("*******3.update*****\n");
printf("*******4.find*******\n");
printf("*******5.exit*******\n");
printf("********************\n");
printf("请输入>>");
int sig = 0;
scanf("%d",&sig);
while(getchar()!=10);
switch(sig)
{
case 1:
do_insert(sq);
break;
case 2:
do_delete(sq);
break;
case 3:
do_update(sq);
break;
case 4:
do_find(sq);
break;
case 5:
goto END;
break;
default:
printf("输入错误,请重新输入\n");
}
printf("按任意字符清屏\n");
while(getchar()!=10);
}
END:
if(sqlite3_close(sq) != SQLITE_OK)
{
fprintf(stderr,"line:%d sqlite3_close failed\n",__LINE__);
return -1;
}
return 0;
}
ubuntu
实现效果:
添加成员:输入需要的信息后,函数按固定的sqlite格式发送给数据库
删除成员:输入需要删除的学生学号
该学号的学生删除情况:
修改成员信息:修改成员姓名
修改成员分数:
由于只有学号具有唯一性,姓名可能出现重名,分数可能出现同分,因此sqlite3中的update修改指令中的限制条件不能填姓名与分数,因此学号不可以被修改。