用数据库实现通讯录:
/**************************************
* 电子通讯录:
* 内容:序号,姓名,电话,住址。
* 功能:添加好友、删除好友、清空联系人、好友排序、搜索好友、显示所有联系人。
* 添加好友:如果重名,可选择覆盖或新建。
* 好友排序:可选择按姓氏正序排或逆序排。
* 删除好友:若遇到重名好友,则按序号删除。
****************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sqlite3.h>
static char *errmsg= NULL;
static char **Result= NULL;
static sqlite3_stmt*stmt=NULL;
//显示数据库
void Display(sqlite3*db)
{
int rc;
int i, j, nrow, ncolumn;
rc = sqlite3_get_table(db, "select *from test_table", &Result, &nrow, &ncolumn,&errmsg);
if(rc)
{
printf("display error!\n");
exit(1);
}
else
{
printf("\t\t\tContactList:\n\n");
for(i = 1; i <= nrow; i++)
{
for(j = 0; j < ncolumn; j++)
{
printf("\t%s\t|",Result[i * ncolumn + j]);
}
printf("\n");
}
}
printf("display ok!\n");
}
//添加
void Add(sqlite3*db)
{
int rc;
char sql[100];
char name[10];
char phone[20];
char add[10];
printf("input name:\n");
scanf("%s",name);
printf("input phone:\n");
scanf("%s",phone);
printf("input address:\n");
scanf("%s",add);
sprintf(sql,"insert into test_tablevalues('%s','%s','%s')",name,phone,add);
rc = sqlite3_exec(db,sql,0,0,&errmsg);
if(rc)
{
printf("insert error!\n");
}
else
{
printf("insert ok!\n");
}
}
//主界面
int menu()
{
int choice;
printf("\n****************WELCOME TOCONTACTLISE***************\n\n");
printf("\t\t0*****************插入\n");
printf("\t\t1*****************显示\n");
printf("\t\t2*****************删除\n");
printf("\t\t3*****************搜索\n");
printf("\t\t4*****************升序\n");
printf("\t\t9*****************退出\n");
printf("\n\n");
printf("input your choice!\n");
scanf("%d",&choice);
return choice;
}
//删除
void Delete(sqlite3*db)
{
int rc;
char sql[100];
char name[10];
printf("please input the name ofdeleting:\n");
scanf("%s",name);
sprintf(sql,"delete from test_tablewhere name = '%s'",name);
rc = sqlite3_exec(db,sql,0,0,&errmsg);
if(rc)
{
printf("delete error!\n");
}
else
{
printf("delete ok!\n");
}
}
//搜索
void Search(sqlite3*db)
{
int rc;
char name[10];
char sql[100];
int i,j;
int nrow;
int ncolumn;
printf("please input the name ofsearching:\n");
scanf("%s",name);
sprintf(sql,"select * from test_tablewhere name = '%s'",name);
rc= sqlite3_get_table(db,sql, &Result,&nrow, &ncolumn,&errmsg);
if(rc)
{
printf("search error!\n");
}
else
{
printf("search ok!\n");
for(i = 1; i <= nrow; i++)
{
printf("\t");
for(j = 0; j < ncolumn; j++)
{
printf("%s\t|\t",Result[i * ncolumn + j]);
}
printf("\n");
}
}
}
//升序
void Shengxu(sqlite3*db)
{
int rc;
int i, j, nrow, ncolumn;
rc = sqlite3_get_table(db, "select *from test_table order by name", &Result, &nrow,&ncolumn,&errmsg);
if(rc)
{
printf("升序失败!\n");
exit(1);
}
else
{
printf("\t\t\tContactList:\n\n");
for(i = 1; i <= nrow; i++)
{
for(j = 0; j < ncolumn; j++)
{
printf("\t%s\t|",Result[i * ncolumn + j]);
}
printf("\n");
}
}
printf("升序成功\n");
}
//主函数
int main()
{
int rc;
int i, j, nrow, ncolumn;
char name[20];
int choice;
sqlite3 *db = NULL;
rc =sqlite3_open("test.db",&db);
while(1)
{
choice = menu();
switch(choice)
{
case 0: Add(db); break;
case 1: Display(db); break;
case 2: Delete(db); break;
case 3: Search(db); break;
case 4: Shengxu(db); break;
case 9: exit(0);
default : break ;
}
}
sqlite3_free_table(Result);
sqlite3_close(db);
return 0;
}