以下贴出的是我用sqlite3写的简易通讯录,注意编译时链接上sqlite3库,若有什么错误望大牛指正
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlite3.h>
#define MAX_SIZE 1024
static sqlite3 *db = NULL;
static char *errmsg = NULL;
int count = 0;
int dis();
void welcome()
{
printf("\t\t******************************************************\n");
printf("\t\t* *\n");
printf("\t\t* 欢迎使用通讯录 *\n");
printf("\t\t******************************************************\n");
printf("\t\t* | *\n");
printf("\t\t* (1)添加联系人 | (2)查找联系人 *\n");
printf("\t\t* - - ---------------------- *\n");
printf("\t\t* | *\n");
printf("\t\t* (3)删除联系人 | (4)修改联系人 *\n");
printf("\t\t* - - - - - - - - - - - - - - - - - *\n");
printf("\t\t* | *\n");
printf("\t\t* (5)查看联系人 | (6)退出 *\n");
printf("\t\t******************************************************\n");
printf("\n");
printf("\n");
}
//---------add---------//
void add()
{
char add;
char quit_add;
char name[MAX_SIZE];
char phone[MAX_SIZE];
char adds[MAX_SIZE];
char sql[MAX_SIZE];
while(1)
{
printf("按'a'添加联系人\n");
printf("按'q'退出\n");
scanf("%s",&add);
while(('a' != add)&&('q' != add))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&add);
}
if('q' == add)
{
system("clear");
break;
}
if('a' == add)
{
printf("输入姓名:\n");
scanf("%s",name);
printf("输入手机号码:\n");
scanf("%s",phone);
printf("输入地址:\n");
scanf("%s",adds);
if(sprintf(sql,"insert into tel(姓名,号码,地址) values('%s','%s','%s')",name,phone,adds) == -1)
{
printf("添加失败!\n");
exit(1);
}
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != 0)
{
printf("添加失败!\n");
exit(1);
}
memset(sql,0,MAX_SIZE);
memset(name,0,MAX_SIZE);
memset(phone,0,MAX_SIZE);
memset(adds,0,MAX_SIZE);
printf("添加成功!\n");
printf("是否继续添加联系人?(y)or(n):");
scanf("%s",&quit_add);
while(('y' != quit_add) && ('n' != quit_add))
{
printf("信息输入错误,请重新输入!\n");
scanf("%s",&quit_add);
}
if('n' == quit_add)
{
system("clear");
break;
}
if('y' == quit_add)
{
system("clear");
}
}
}
}
//----------end--------------//
//----------delete----------//
void delete()
{
int id;
char src1;
char src2;
char src3;
char flag;
char sql[MAX_SIZE];
char name[MAX_SIZE];
while(1)
{
strcpy(sql,"select * from tel");
sqlite3_exec(db,sql,dis,NULL,&errmsg);
memset(sql,0,MAX_SIZE);
printf("按'n'姓名删除\n");
printf("按'i'ID删除\n");
printf("按'q'退出\n");
scanf("%s",&src1);
while(('n' != src1)&&('q' != src1)&&('i' != src1))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&src1);
}
if('q' == src1)
{
system("clear");
break;
}
if('n' == src1)
{
printf("请输入要删除联系人的姓名:");
scanf("%s",name);
system("clear");
if(sprintf(sql,"select * from tel where 姓名='%s'",name) ==-1)
{
printf("删除失败!\n");
exit(1);
}
if(sqlite3_exec(db,sql,dis,NULL,&errmsg) != 0)
{
printf("删除失败!\n");
exit(1);
}
memset(sql,0,MAX_SIZE);
printf("是否删除该联系人?(y)or(n)");
scanf("%s",&src2);
while(('y' != src2)&&('n' != src2))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&src2);
}
if('y' == src2)
{
if(sprintf(sql,"delete from tel where 姓名='%s'",name) == -1)
{
printf("删除失败!\n");
exit(1);
}
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != 0)
{
printf("删除失败!\n");
exit(1);
}
printf("删除成功!\n");
sleep(1);
memset(sql,0,MAX_SIZE);
memset(name,0,MAX_SIZE);
system("clear");
}
if('n' == src2)
{
system("clear");
}
}
if('i' == src1)
{
printf("请输入想删除联系人的ID:");
scanf("%d",&id);
system("clear");
if(sprintf(sql,"select * from tel where ID=%d",id) == -1)
{
printf("删除失败!\n");
exit(1);
}
if(sqlite3_exec(db,sql,dis,NULL,&errmsg) != 0)
{
printf("删除失败!\n");
exit(1);
}
memset(sql,0,MAX_SIZE);
printf("是否删除该联系人?(y)or(n)");
scanf("%s",&src3);
while(('y' != src3)&&('n' != src3))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&src3);
}
if('y'== src3)
{
if(sprintf(sql,"delete from tel where ID=%d",id) == -1)
{
printf("删除失败!\n");
exit(1);
}
if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != 0)
{
printf("删除失败!\n");
exit(1);
}
printf("删除成功!\n");
system("clear");
memset(sql,0,MAX_SIZE);
}
if('n' == src3)
{
system("clear");
}
}
}
}
//------------end-------------//
//------------find------------//
void find()
{
char find;
char quit_find;
char sql[MAX_SIZE];
char name[MAX_SIZE];
char **result = NULL;
int nrow;
int column;
int count;
while(1)
{
getchar();
printf("按'n'查找\n");
printf("按'q'退出\n");
scanf("%s",&find);
while(('n' != find)&&('q' != find))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&find);
}
if('q' == find)
{
system("clear");
break;
}
if('n' == find)
{
printf("请输入姓名:");
scanf("%s",name);
strcpy(sql,"select * from tel");
if(sqlite3_get_table(db,sql,&result,&nrow,&column,&errmsg) != 0)
{
printf("查找失败!\n");
exit(1);
}
if(nrow == 0)
{
printf("找不到联系人!\n");
}
for(count = 0; count < (nrow + 1)*column; count++)
{
if(strcmp(name,result[count]) == 0)
{
printf("ID:\t\t");
printf("%s\n",result[count - 1]);
printf("姓名:\t\t");
printf("%s\n",result[count]);
printf("号码\t\t");
printf("%s\n",result[count + 1]);
printf("地址:\t\t");
printf("%s\n",result[count + 2]);
printf("=======================");
printf("\n");
}
}
memset(sql,0,MAX_SIZE);
memset(name,0,MAX_SIZE);
sqlite3_free_table(result);
result = NULL;
printf("是否退出查看?(y)or(n)");
scanf("%s",&quit_find);
while(('y' != quit_find)&&('n' != quit_find))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&quit_find);
}
if('y' == quit_find)
{
system("clear");
break;
}
system("clear");
}
}
}
//-------------end-------------//
//------------alter------------//
void alter()
{
int ID;
char alter;
char quit_alter;
char sql[MAX_SIZE];
char name_al[MAX_SIZE];
char name[MAX_SIZE];
char phone[MAX_SIZE];
char adds[MAX_SIZE];
while(1)
{
strcpy(sql,"select * from tel");
if(sqlite3_exec(db,sql,dis,NULL,&errmsg) != 0)
{
printf("修改联系人失败!\n");
exit(1);
}
memset(sql,0,MAX_SIZE);
printf("(n)姓名修改\n");
printf("(i)ID修改\n");
printf("(q)退出\n");
printf("输入选项:");
scanf("%s",&alter);
while(('n' != alter)&&('q' != alter)&&('i' != alter))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&alter);
}
if('q' == alter)
{
system("clear");
break;
}
if('n' == alter)
{
printf("请输入要修改联系人的姓名");
scanf("%s",name_al);
system("clear");
printf("输入姓名:\n");
scanf("%s",name);
printf("输入手机号码:\n");
scanf("%s",phone);
printf("输入地址:\n");
scanf("%s",adds);
sprintf(sql,"update tel set 姓名='%s',号码='%s',地址='%s' where 姓名='%s'",name,phone,adds,name_al);
sqlite3_exec(db,sql,NULL,NULL,&errmsg);
memset(sql,0,MAX_SIZE);
memset(name_al,0,MAX_SIZE);
memset(name,0,MAX_SIZE);
memset(phone,0,MAX_SIZE);
memset(adds,0,MAX_SIZE);
printf("修改成功\n");
}
if('i' == alter)
{
printf("请输入要修改联系人的ID:");
scanf("%d",&ID);
system("clear");
printf("输入姓名:\n");
scanf("%s",name);
printf("输入手机号码:\n");
scanf("%s",phone);
printf("输入地址:\n");
scanf("%s",adds);
sprintf(sql,"update tel set 姓名='%s',号码='%s',地址='%s' where ID=%d",name,phone,adds,ID);
sqlite3_exec(db,sql,NULL,NULL,&errmsg);
memset(sql,0,MAX_SIZE);
memset(name,0,MAX_SIZE);
memset(phone,0,MAX_SIZE);
memset(adds,0,MAX_SIZE);
printf("修改成功!\n");
}
printf("是否退出?(y)or(n)");
scanf("%s",&quit_alter);
while(('y' != quit_alter)&&('n' != quit_alter))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&quit_alter);
}
if('y' == quit_alter)
{
system("clear");
break;
}
if('n' == quit_alter)
{
system("clear");
}
}
}
//------------end----------------//
//-------------display------------//
int dis(void *para,int column,char **columnvalue,char *columnname[])
{
int i;
for(i = 0; i < column; i++)
{
printf("%s:\t\t%s\n",columnname[i],columnvalue[i]);
}
printf("====================");
printf("\n");
return 0;
}
void display()
{
char quit_dis;
char sql[MAX_SIZE];
char **Result = NULL;
int Row;
int Column;
while(1)
{
strcpy(sql,"select * from tel");
if(sqlite3_get_table(db,sql,&Result,&Row,&Column,&errmsg) != 0)
{
printf("查找失败!\n");
exit(1);
}
if(Row == 0)
{
printf("无联系人!\n");
sleep(1);
system("clear");
memset(sql,0,MAX_SIZE);
sqlite3_free_table(Result);
Result = NULL;
return;
}
else
{
memset(sql,0,MAX_SIZE);
Result = NULL;
strcpy(sql,"select * from tel order by 姓名");
if(sqlite3_exec(db,sql,dis,NULL,&errmsg) != 0)
{
printf("查看联系人失败!\n");
exit(1);
}
memset(sql,0,MAX_SIZE);
printf("是否退出查看?(y)or(n)");
scanf("%s",&quit_dis);
while(('y' != quit_dis)&&('n' != quit_dis))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&quit_dis);
}
if('y' == quit_dis)
{
system("clear");
break;
}
if('n' == quit_dis)
{
system("clear");
}
}
}
}
//-------------end-------------//
//-----------order-------------//
void order()
{
char odr;
while(1)
{
printf("请输入您的选项:");
scanf("%s",&odr);
while(('1' != odr)&&('2' != odr)&&('3' != odr)&&('4' != odr)&&('5' != odr)&&('6' != odr))
{
printf("输入信息错误,请重新输入!\n");
scanf("%s",&odr);
}
switch(odr)
{
case '1':
{
system("clear");
add();
break;
}
case '2':
{
system("clear");
find();
break;
}
case '3':
{
system("clear");
delete();
break;
}
case '4':
{
system("clear");
alter();
break;
}
case '5':
{
system("clear");
display();
break;
}
case '6':
{
system("clear");
sqlite3_exec(db,".exit",NULL,NULL,&errmsg);
exit(0);
}
default:
{
break;
}
}
welcome();
}
}
//------------end-------------//
//-------create table---------//
int table()
{
if(sqlite3_exec(db,"create table tel(ID integer primary key,姓名 text,号码 text,地址 text)",NULL,NULL,&errmsg) == 0)
{
printf("关系创建成功\n");
sleep(1);
system("clear");
return 0;
}
else
{
return -1;
}
}
int main()
{
if(sqlite3_open("tel.db",&db) != 0)
{
printf("创建数据库失败!\n");
exit(1);
}
table();
welcome();
order();
}