实现用数据库存储通讯录 实现“增删改查”的功能
2016-12-28 13:01
381 查看
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <string.h>
char name[20];
int age;
char sex[20];
char phonenumber[20];
void Menu(sqlite3* db);
void insert(sqlite3* db);
void delete(sqlite3* db);
void update(sqlite3* db);
void query(sqlite3* db);
void showscreen(sqlite3* db);
int main()
{
int ret;
sqlite3 *db;
char* errmsg;
ret = sqlite3_open("cmdaddress.db", &db);
if(ret != SQLITE_OK)
{
perror("open");
exit(1);
}
char sql_create[] = "create table if not exists stu(name text, sex text, age integer, phonenumber text);";
ret = sqlite3_exec(db, sql_create, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("create");
exit(2);
}
Menu(db);
showscreen(db);
ret = sqlite3_close(db);
if(ret != SQLITE_OK)
{
perror("close");
exit(1);
}
return 0;
}
void Menu(sqlite3* db)
{
int number;
printf("欢迎来到Coder通讯录!\n");
printf("\n");
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("5:弹出操作提示\n");
printf("\n");
printf("q:退出菜单\n");
printf("\n");
printf("请输入指令\n");
while(scanf("%d", &number) == 1)
{
switch(number)
{
case 1:
{
insert(db);
break;
}
case 2:
{
delete(db);
break;
}
case 3:
{
update(db);
break;
}
case 4:
{
query(db);
break;
}
case 5:
{
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("q:退出菜单\n");
printf("\n");
printf("请输入数字\n");
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
}
void insert(sqlite3* db)
{
int ret;
char *errmsg;
char sql_insert[1024] = {0};
printf("请输入添加成员姓名:\n");
scanf("%s", name);
printf("请输入成员性别:\n");
scanf("%s", sex);
printf("请输入成员年龄:\n");
scanf("%d", &age);
printf("请输入成员手机号码:\n");
scanf("%s", phonenumber);
sprintf(sql_insert, "insert into stu values('%s', '%s', %d, '%s');", name, sex, age, phonenumber);
ret = sqlite3_exec(db, sql_insert, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("insert");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
memset(sex, 0, 20);
memset(phonenumber, 0, 20);
}
void delete(sqlite3* db)
{
char *errmsg;
int ret;
char sql_delete[1024] = {0};
int number;
printf("1.根据姓名进行删除\n");
printf("\n");
printf("2.根据手机号码进行删除\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入你想删除的姓名\n");
scanf("%s", name);
sprintf(sql_delete, "delete from stu where name = '%s';", name);
ret = sqlite3_exec(db, sql_delete, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("delete");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 2:
{
printf("请输入你想删除的手机号码\n");
scanf("%s", phonenumber);
sprintf(sql_delete, "delete from stu where phonenumber = '%s';", phonenumber);
ret = sqlite3_exec(db, sql_delete, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("delete");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
void update(sqlite3* db)
{
int ret;
char *errmsg;
char sql_update[1024] = {0};
char updatename[1024] = {0};
char updatesex[1024] = {0};
char updatephone[1024] = {0};
int number;
int updateage;
printf("1.根据姓名进行修改\n");
printf("\n");
printf("2.根据手机号码进行修改\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入你想修改的姓名\n");
scanf("%s", name);
printf("1.只修改姓名\n");
printf("\n");
printf("2.只修改性别\n");
printf("\n");
printf("3.只修改年龄\n");
printf("\n");
printf("4.只修改手机号码\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入姓名\n");
printf("\n");
scanf("%s", updatename);
sprintf(sql_update, "update stu set name = '%s' where name = '%s';", updatename, name);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update11");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 2:
{
printf("请输入性别\n");
printf("\n");
scanf("%s", updatesex);
sprintf(sql_update, "update stu set sex = '%s' where name = '%s';", updatesex, name);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update12");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 3:
{
printf("请输入年龄\n");
printf("\n");
scanf("%d", &updateage);
sprintf(sql_update, "update stu set age = %d where name = '%s';", updateage, name);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update13");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 4:
{
printf("请输入电话号码\n");
printf("\n");
scanf("%d", updatephone);
sprintf(sql_update, "update stu set phonenumber = '%s' where name = '%s';", updatephone, name);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update14");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
default: printf("请重新输入正确的操作指令\n");
}
break;
}
case 2:
{
printf("请输入你想修改的手机号码\n");
scanf("%s", phonenumber);
printf("1.只修改姓名\n");
printf("\n");
printf("2.只修改性别\n");
printf("\n");
printf("3.只修改年龄\n");
printf("\n");
printf("4.只修改手机号码\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入姓名\n");
scanf("%s", updatename);
sprintf(sql_update, "update stu set name = '%s' where phonenumber = '%s';", updatename, phonenumber);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update21");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
case 2:
{
printf("请输入性别\n");
scanf("%s", updatesex);
sprintf(sql_update, "update stu set sex = '%s' where phonenumber = '%s';", updatesex, phonenumber);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update22");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
case 3:
{
printf("请输入年龄\n");
scanf("%d", updateage);
sprintf(sql_update, "update stu set age = %d where phonenumber = '%s';", updateage, phonenumber);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update23");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
case 4:
{
printf("请输入电话号码\n");
scanf("%d", updatephone);
sprintf(sql_update, "update stu set phonenumber = '%s' where phonenumber = '%s';", updatephone, phonenumber);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update24");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
}
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
void query(sqlite3* db)
{
int ret, i, j;
char** result;
int row;
int column;
char *errmsg;
char sql_query[1024] = {0};
int number;
printf("1.根据姓名查询\n");
printf("\n");
printf("2.根据手机号码查询\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入姓名\n");
scanf("%s", name);
sprintf(sql_query, "select * from stu where name = '%s';", name);
ret = sqlite3_get_table(db, sql_query, &result, &row, &column, &errmsg);
if(ret != SQLITE_OK)
{
perror("query1");
exit(1);
}
for(i = 1; i <= row; i++)
{
for(j = 0; j < column; j++)
{
printf("%s ", result[i*column + j]);
}
printf("\n");
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 2:
{
printf("请输入手机号码\n");
scanf("%s", phonenumber);
sprintf(sql_query, "select * from stu where phonenumber = '%s';", phonenumber);
ret = sqlite3_get_table(db, sql_query, &result, &row, &column, &errmsg);
if(ret != SQLITE_OK)
{
perror("query2");
exit(1);
}
for(i = 1; i <= row; i++)
{
for(j = 0; j < column; j++)
{
printf("%s ", result[i*column + j]);
}
printf("\n");
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
void showscreen(sqlite3* db)
{
int i, j, ret;
char* errmsg;
int row;
int column;
char** result;
char sql_select[] = "select * from stu;";
ret = sqlite3_get_table(db, sql_select, &result, &row, &column, &errmsg);
if(ret != SQLITE_OK)
{
perror("showscreen");
exit(1);
}
for(i = 1; i <= row; i++)
{
for(j = 0; j < column; j++)
{
printf("%s ", result[i*column + j]);
}
printf("\n");
}
}
#include <stdlib.h>
#include <sqlite3.h>
#include <string.h>
char name[20];
int age;
char sex[20];
char phonenumber[20];
void Menu(sqlite3* db);
void insert(sqlite3* db);
void delete(sqlite3* db);
void update(sqlite3* db);
void query(sqlite3* db);
void showscreen(sqlite3* db);
int main()
{
int ret;
sqlite3 *db;
char* errmsg;
ret = sqlite3_open("cmdaddress.db", &db);
if(ret != SQLITE_OK)
{
perror("open");
exit(1);
}
char sql_create[] = "create table if not exists stu(name text, sex text, age integer, phonenumber text);";
ret = sqlite3_exec(db, sql_create, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("create");
exit(2);
}
Menu(db);
showscreen(db);
ret = sqlite3_close(db);
if(ret != SQLITE_OK)
{
perror("close");
exit(1);
}
return 0;
}
void Menu(sqlite3* db)
{
int number;
printf("欢迎来到Coder通讯录!\n");
printf("\n");
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("5:弹出操作提示\n");
printf("\n");
printf("q:退出菜单\n");
printf("\n");
printf("请输入指令\n");
while(scanf("%d", &number) == 1)
{
switch(number)
{
case 1:
{
insert(db);
break;
}
case 2:
{
delete(db);
break;
}
case 3:
{
update(db);
break;
}
case 4:
{
query(db);
break;
}
case 5:
{
printf("1:新增联系人\n");
printf("\n");
printf("2:删除联系人\n");
printf("\n");
printf("3:修改联系人信息\n");
printf("\n");
printf("4:查找通讯录信息\n");
printf("\n");
printf("q:退出菜单\n");
printf("\n");
printf("请输入数字\n");
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
}
void insert(sqlite3* db)
{
int ret;
char *errmsg;
char sql_insert[1024] = {0};
printf("请输入添加成员姓名:\n");
scanf("%s", name);
printf("请输入成员性别:\n");
scanf("%s", sex);
printf("请输入成员年龄:\n");
scanf("%d", &age);
printf("请输入成员手机号码:\n");
scanf("%s", phonenumber);
sprintf(sql_insert, "insert into stu values('%s', '%s', %d, '%s');", name, sex, age, phonenumber);
ret = sqlite3_exec(db, sql_insert, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("insert");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
memset(sex, 0, 20);
memset(phonenumber, 0, 20);
}
void delete(sqlite3* db)
{
char *errmsg;
int ret;
char sql_delete[1024] = {0};
int number;
printf("1.根据姓名进行删除\n");
printf("\n");
printf("2.根据手机号码进行删除\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入你想删除的姓名\n");
scanf("%s", name);
sprintf(sql_delete, "delete from stu where name = '%s';", name);
ret = sqlite3_exec(db, sql_delete, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("delete");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 2:
{
printf("请输入你想删除的手机号码\n");
scanf("%s", phonenumber);
sprintf(sql_delete, "delete from stu where phonenumber = '%s';", phonenumber);
ret = sqlite3_exec(db, sql_delete, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("delete");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
void update(sqlite3* db)
{
int ret;
char *errmsg;
char sql_update[1024] = {0};
char updatename[1024] = {0};
char updatesex[1024] = {0};
char updatephone[1024] = {0};
int number;
int updateage;
printf("1.根据姓名进行修改\n");
printf("\n");
printf("2.根据手机号码进行修改\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入你想修改的姓名\n");
scanf("%s", name);
printf("1.只修改姓名\n");
printf("\n");
printf("2.只修改性别\n");
printf("\n");
printf("3.只修改年龄\n");
printf("\n");
printf("4.只修改手机号码\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入姓名\n");
printf("\n");
scanf("%s", updatename);
sprintf(sql_update, "update stu set name = '%s' where name = '%s';", updatename, name);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update11");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 2:
{
printf("请输入性别\n");
printf("\n");
scanf("%s", updatesex);
sprintf(sql_update, "update stu set sex = '%s' where name = '%s';", updatesex, name);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update12");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 3:
{
printf("请输入年龄\n");
printf("\n");
scanf("%d", &updateage);
sprintf(sql_update, "update stu set age = %d where name = '%s';", updateage, name);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update13");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 4:
{
printf("请输入电话号码\n");
printf("\n");
scanf("%d", updatephone);
sprintf(sql_update, "update stu set phonenumber = '%s' where name = '%s';", updatephone, name);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update14");
exit(1);
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
default: printf("请重新输入正确的操作指令\n");
}
break;
}
case 2:
{
printf("请输入你想修改的手机号码\n");
scanf("%s", phonenumber);
printf("1.只修改姓名\n");
printf("\n");
printf("2.只修改性别\n");
printf("\n");
printf("3.只修改年龄\n");
printf("\n");
printf("4.只修改手机号码\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入姓名\n");
scanf("%s", updatename);
sprintf(sql_update, "update stu set name = '%s' where phonenumber = '%s';", updatename, phonenumber);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update21");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
case 2:
{
printf("请输入性别\n");
scanf("%s", updatesex);
sprintf(sql_update, "update stu set sex = '%s' where phonenumber = '%s';", updatesex, phonenumber);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update22");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
case 3:
{
printf("请输入年龄\n");
scanf("%d", updateage);
sprintf(sql_update, "update stu set age = %d where phonenumber = '%s';", updateage, phonenumber);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update23");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
case 4:
{
printf("请输入电话号码\n");
scanf("%d", updatephone);
sprintf(sql_update, "update stu set phonenumber = '%s' where phonenumber = '%s';", updatephone, phonenumber);
ret = sqlite3_exec(db, sql_update, NULL, NULL, &errmsg);
if(ret != SQLITE_OK)
{
perror("update24");
exit(1);
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
}
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
void query(sqlite3* db)
{
int ret, i, j;
char** result;
int row;
int column;
char *errmsg;
char sql_query[1024] = {0};
int number;
printf("1.根据姓名查询\n");
printf("\n");
printf("2.根据手机号码查询\n");
printf("\n");
printf("请输入你想选择的功能号码\n");
scanf("%d", &number);
switch(number)
{
case 1:
{
printf("请输入姓名\n");
scanf("%s", name);
sprintf(sql_query, "select * from stu where name = '%s';", name);
ret = sqlite3_get_table(db, sql_query, &result, &row, &column, &errmsg);
if(ret != SQLITE_OK)
{
perror("query1");
exit(1);
}
for(i = 1; i <= row; i++)
{
for(j = 0; j < column; j++)
{
printf("%s ", result[i*column + j]);
}
printf("\n");
}
printf("操作成功\n");
memset(name, 0, 20);
break;
}
case 2:
{
printf("请输入手机号码\n");
scanf("%s", phonenumber);
sprintf(sql_query, "select * from stu where phonenumber = '%s';", phonenumber);
ret = sqlite3_get_table(db, sql_query, &result, &row, &column, &errmsg);
if(ret != SQLITE_OK)
{
perror("query2");
exit(1);
}
for(i = 1; i <= row; i++)
{
for(j = 0; j < column; j++)
{
printf("%s ", result[i*column + j]);
}
printf("\n");
}
printf("操作成功\n");
memset(phonenumber, 0, 20);
break;
}
default: printf("请重新输入正确的操作指令\n");
}
}
void showscreen(sqlite3* db)
{
int i, j, ret;
char* errmsg;
int row;
int column;
char** result;
char sql_select[] = "select * from stu;";
ret = sqlite3_get_table(db, sql_select, &result, &row, &column, &errmsg);
if(ret != SQLITE_OK)
{
perror("showscreen");
exit(1);
}
for(i = 1; i <= row; i++)
{
for(j = 0; j < column; j++)
{
printf("%s ", result[i*column + j]);
}
printf("\n");
}
}
相关文章推荐
- linux下mongodb的副本集搭建(replica Set)
- Building Faster APIs with NodeJs and Redis
- mongodb索引
- 关于redis的单线程与后台线程的源码分析
- oracle之SQL语句
- ORACLE REFERENCES FRO TEST
- mysql关于通配符%%的优化
- SQLServer地址搜索性能优化例子
- 怎样打造一个分布式数据库——rocksDB, raft, mvcc,本质上是为了解决跨数据中心的复制
- 详解linux下redis安装、启动与停止,redis做成服务
- [转]MySQL批量更新死锁案例分析
- 如何提高MySQL的安全性!
- MySQL存储引擎中的MyISAM和InnoDB区别详解
- Oracle重做日志文件
- MySQL 维护命令
- 将php的session存放到redis里面
- mysql5.6新特性总结
- PL/SQL--变量
- pdo是如何防止 sql注入的
- 常用MySQL语句