这是使用数据库写成的通讯录
相较于链表与文件 更加的简洁
操作单一 主要是要记得懂得 数据库的命令 然后用C写出
最常用的两个函数
- sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)
第一个参数是指向数据库的指针 第二个是你想要执行的命令(提前赋给sql,第三和第四个参数 是当你用这个函数进行查找命令时候 要使用回调函数时候需要传值
但是我在需要使用查找命令时 我更喜欢使用- sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg)
相较于使用回调函数更简单些
第一个 第二个参数同上
第三个参数是需要定义一个二级指针的然后传过去是一个三级指针
它的作用是用来存储数据库表中的内容的 这个数组是一个指针数组
每个元素是一个指针 而这个指针内保存的又是数组,所以这个指针是个数组指针 所以要传三级指针
第四第五是行数和列数 这里的行数是不算总表头的
1.增加成员及信息 2.显示通讯录所以成员信息
3.查找成员信息 4.删除成员
5.修改成员信息 6.退出数据库
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sqlite3.h> #include"address_list.h" int main(){ sqlite3 * pdb; int ret; ret = sqlite3_open("database.db",&pdb); if(ret != SQLITE_OK){ printf("open database fail! %s\n",sqlite3_errmsg(pdb)); exit(0); } else{ printf("open database success!\n"); } if(create_table(pdb) == SQLITE_OK){ printf("create or open table success!\n"); } else{ printf("create or open table fail!\n"); sqlite3_close(pdb); return 0; } welcome(); while(1){ int num; printf("请输入你的选择:\n"); scanf("%d",&num); switch(num){ case 1: if(insert_record(pdb) != SQLITE_OK){ sqlite3_close(pdb); exit(-1); } break; case 2: if(inquire_nocb(pdb) == SQLITE_OK){ printf("inquire success\n"); } else{ printf("inquire fail!\n"); } break; case 3: find_record(pdb); break; case 4: delete_record(pdb); break; case 5: update_data(pdb); break; case 6: sqlite3_close(pdb); printf("退出成功\n"); exit(0); } } return 0; }
#ifndef address_list #define address_list #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sqlite3.h> void welcome(); int create_table(sqlite3 *pdb); int insert_record(sqlite3 *pdb); int inquire_nocb(sqlite3 *pdb); int find_record(sqlite3 *pdb); int delete_record(sqlite3 *pdb); int update_data(sqlite3 *pdb); #endif
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sqlite3.h> #include"address_list.h" void welcome(){ printf("*************************************************************************\n"); printf("**************** *****************\n"); printf("**************** 编程从通讯录开始 *****************\n"); printf("**************** *****************\n"); printf("*************************************************************************\n"); printf("\n"); printf("**************** what can I do for you ,sir *****************\n"); printf("\n"); printf("****** 1 Add Information! 2 Display List! ******\n"); printf("****** 3 Information Find! 4 Delete Information ******\n"); printf("****** 5 Alter Information! 6 Exit! ******\n"); printf("****** 7 敬请期待 ******\n"); printf("*************************************************************************\n"); } int create_table(sqlite3 *pdb){ char * sql = NULL; char *errmsg = NULL; int ret; sql = "create table if not exists mytable (id int primary key,name text,tel text);"; ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg); if(SQLITE_OK != ret){ printf("create table fail! %s\n",errmsg); return -1; } else{ return SQLITE_OK; } } int insert_record(sqlite3 *pdb){ char sql[100]; char * errmsg = NULL; int ret; int id; char name[20]; char tel[20]; printf("请输入你想增加的成员id: 姓名: 电话号码:\n"); scanf("%d %s %s",&id,name,tel); sprintf(sql,"insert into mytable (id,name,tel) values (%d,'%s','%s');",id,name,tel); ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg); if(ret == SQLITE_OK){ printf("insert record success\n"); return SQLITE_OK; } else{ printf("insert record fail! %s\n",errmsg); return -1; } } int inquire_nocb(sqlite3 * pdb){ char * sql = NULL; char * errmsg = NULL; char **ret_val = NULL; int nrow; int ncol; int ret; int i; sql = "select * from mytable;"; ret = sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg); if(ret == SQLITE_OK){ printf("nrow = %d,ncol = %d\n",nrow,ncol); for(i = 0; i < (nrow + 1) * ncol;i++){ printf("%-15s",ret_val[i]); if((i + 1) % ncol == 0){ printf("\n"); } } } else{ sqlite3_free_table(ret_val); return -1; } sqlite3_free_table(ret_val); } int find_record(sqlite3 *pdb){ char sql[100]; char * errmsg = NULL; char ** ret_val = NULL; char name[20]; int nrow; int ncol; int ret; int i; printf("please input you want to find name:\n"); scanf("%s",name); sprintf(sql,"select * from mytable where name = '%s';",name); ret = sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg); if(ret == SQLITE_OK){ printf("nrow = %d,ncol = %d\n",nrow,ncol); for(i = 0;i < (nrow + 1) * ncol;i++){ printf("%-15s",ret_val[i]); if((i+1) % ncol == 0){ printf("\n"); } } return SQLITE_OK; } else{ printf("find fail! %s\n",errmsg); return -1; } } int delete_record(sqlite3 * pdb){ char sql[100]; char * errmsg = NULL; int ret; char name[20]; printf("请输入你想删除人的姓名:\n"); scanf("%s",name); sprintf(sql,"delete from mytable where name = '%s';",name); ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg); if(ret == SQLITE_OK){ printf("delete success!\n"); return SQLITE_OK; } else{ printf("delete fail! %s\n",errmsg); return -1; } } int update_data(sqlite3 * pdb){ char sql[100]; char * errmsg = NULL; int ret; char name[20]; char rename[20]; int id; char tel[20]; int num; printf("请输入你想修改人的姓名:\n"); scanf("%s",name); printf("请输入你想更改的信息:\n"); printf("1----id\n"); printf("2----name\n"); printf("3----tel\n"); scanf("%d",&num); switch(num){ case 1: printf("更改id的功能在维护\n"); break; case 2: printf("请输入你想更改的名字:\n"); scanf("%s",rename); sprintf(sql,"update mytable set name='%s' where name='%s';",rename,name); ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg); if(ret == SQLITE_OK){ printf("update message success!\n"); return SQLITE_OK; } else{ printf("updata message fail! %s\n",errmsg); return -1; } break; case 3: printf("更改电话号码功能维护中\n"); break; } }