#include <myhead.h>//定义添加学生信息函数
int do_add(sqlite3 *ppDb)
{int add_id; //要添加的ID号char add_name[20]; //要添加的姓名double add_score; // 要添加的成绩printf("请输入要添加学生的学号:");scanf("%d", &add_id);printf("请输入要添加学生的姓名:");scanf("%s", add_name);printf("请输入要添加学生的成绩:");scanf("%lf", &add_score);getchar();//准备sql语句char sql[128] = "";sprintf(sql ,"insert into student values(%d, \"%s\",%.2lf);", \add_id,add_name,add_score);//执行sql语句char *errmsg = NULL;if(sqlite3_exec(ppDb, sql, NULL, NULL, &errmsg) != SQLITE_OK){printf("添加失败:%s\n", errmsg);sqlite3_free(errmsg);errmsg = NULL;return -1;}if(sqlite3_changes(ppDb) != 0){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 = 1;}//输出内容for(int i=0; i<cols; i++){printf("%s\t", msgtext[i]);}printf("\n");return 0;
}//定义查找函数
int search(sqlite3 *ppDb)
{//1、准备sql语句char *sql = "select * from student;";//char sql[128] = "select * from student;";//2、执行sql语句char *errmsg = NULL;int flag = 0;if(sqlite3_exec(ppDb, sql, callback, &flag, &errmsg) != SQLITE_OK){printf("查询失败:%s\n", errmsg);sqlite3_free(errmsg);errmsg = NULL;return -1;}printf("查询成功\n");return 0;}//删除学生信息的函数
int delete(sqlite3 *ppDb)
{char name[20]="";printf("请输入你要删除人信息的姓名:");scanf("%s",name);//准备SQL语句char sql[128]="";sprintf(sql,"delete from student where name=\"%s\";",name);//执行sql语句char *errmsg=NULL;if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("添加失败:%s\n", errmsg);sqlite3_free(errmsg);errmsg = NULL;return -1;}printf("删除成功\n");return 0;
}//修改学生信息
int update(sqlite3 *ppDb)
{char name[20]="";printf("请输入要修改的学生姓名:");scanf("%s",name);getchar();int id;printf("请输入要修改的学生学号:");scanf("%d",&id);getchar();double score;printf("请输入要修改的学生成绩:");scanf("%lf",&score);getchar();//准备SQL语句char sql[128]="";sprintf(sql,"update student set id=%d,score=%.2lf where name=\"%s\";",id,score,name);//执行sql语句char *errmsg =NULL;if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("修改失败:%s\n",errmsg);sqlite3_free(errmsg);errmsg=NULL;return -1;}//检查是否有记录被修改if(sqlite3_changes(ppDb)>0){printf("修改成功\n");}else{printf("未找到该学生信息,修改失败\n");return -1;}return 0;
}int main(int argc, const char *argv[])
{//1、打开数据库并返回一个操作该数据库的句柄sqlite3 *ppDb =NULL;if(sqlite3_open("./my.db",&ppDb)!=SQLITE_OK){printf("errcode=%d,errmsg=%s\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb));return -1;}//程序执行到此,后期可以使用ppDb指针,进行数据库操作//2.创建一个学生信息表//2.1准备sql语句char *sql ="create table if not exists student(id int primary key,name text not NULL,score double);";//定义指针接收执行sql语句后的错误信息char *errmsg =NULL;//执行sql语句if(sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("创建数据表失败:%s\n",errmsg);sqlite3_free(errmsg);errmsg =NULL;return -1;}printf("学生信息表创建成功\n");//循环做个菜单用于操作数据库int menu;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:delete(ppDb);break;case 3:update(ppDb);break;case 4:search(ppDb);break;case 0:exit(EXIT_SUCCESS);default:printf("输入有错,请重新输入\n");}}//关闭数据库sqlite3_close(ppDb);return 0;
}




