您的位置:首页 > 数据库

用数据库制作通讯录示例

2014-03-08 21:22 387 查看
工具:sqlite3.8.6

PC机:ubuntu13.10

本示例是利用数据库制作一个简单的通讯录,功能有:查看通讯录,增加联系人,删除联系人,修改联系人,查找联系人。数据库表名为contact。/*************************************************************************
> File Name: contact.c
> Author: kid
> Mail: 280197326@qq.com
> Created Time: 2014年02月25日 星期二 14时30分07秒
************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"

sqlite3 *db = NULL;

static int callback(void *NotUsed, int argc, char **argv, char **name) //回调函数,打印数据库内容
{
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", name[i], argv[i] ? argv[i] : "NULL"); //输出记录中的每个字段
}
printf("\n");
return 0;
}

void show(void) //查看通讯录函数
{
char *errmsg = 0;
char *sql = NULL;
int rc;
sql ="select * from contact;"; //sql语句赋值给变量
rc = sqlite3_exec( db , sql , callback, 0, &errmsg ); //执行sql语句
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", errmsg);
sqlite3_free(errmsg); //释放错误信息所占的内存空间
}
}

void add() //增加联系人函数
{
char *errmsg = 0;
char *sql = NULL;
char *name;
int age;
int rc;
char *relation;
char *number;
name = (char*)malloc(sizeof(char)*10);
relation = (char*)malloc(sizeof(char)*10);
number = (char*)malloc(sizeof(char)*11);
sql = (char*)malloc(sizeof(char)*100);
printf("请输入联系人姓名:");
scanf("%s",name);
printf("请输入联系人年龄:");
scanf("%d",&age);
printf("请输入与联系人关系:");
scanf("%s",relation);
printf("请输入电话号码:");
scanf("%s",number);
sprintf(sql,"insert into contact values('%s','%d','%s','%s');",name,age,relation,number); //把变量值传入sql语句
rc = sqlite3_exec( db , sql , 0 , 0 , &errmsg ); //执行sql语句
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", errmsg);
sqlite3_free(errmsg); //释放错误信息所占的内存空间
}
free(name); //释放内存空间
free(relation);
free(number);
free(sql);
}

void delete() //删除联系人函数
{
char *errmsg = 0;
char *sql = NULL;
int rc;
char *name;
name=(char *)malloc(sizeof(char)*10);
sql =(char *)malloc(sizeof(char)*64);
printf("请输入需要删除联系人姓名:");
scanf("%s",name);
sprintf(sql,"delete from contact where name='%s'",name);
rc = sqlite3_exec( db , sql , 0, 0 , &errmsg );
if( rc!=SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", errmsg);
sqlite3_free(errmsg);//释放错误信息所占的内存空间
}
free(name);
free(sql);
}

void update() //修改联系人信息函数
{
char *errmsg = 0;
char *sql = NULL;
int rc;
char *name;
char *number;
name=(char *)malloc(sizeof(char)*10);
number=(char *)malloc(sizeof(char)*11);
sql =(char *)malloc(sizeof(char)*64);
printf("请输入修改的联系人姓名:");
scanf("%s",name);
printf("请输入新电话号码:");
scanf("%s",number);
sprintf(sql,"update contact set number = '%s' where name ='%s'",number,name);
rc = sqlite3_exec(db,sql,0,0,&errmsg);
if( rc!=SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", errmsg);
sqlite3_free(errmsg);//释放错误信息所占的内存空间
}
free(name);
free(number);
free(sql);
}

void search() //查找联系人函数
{
char *errmsg = 0;
char *sql = NULL;
char *name;
int rc;
name=(char *)malloc(sizeof(char)*10);
sql=(char *)malloc(sizeof(char)*64);
printf("请输入查找的联系人姓名:");
scanf("%s",name);
sprintf(sql,"select * from contact where name ='%s'",name);
rc = sqlite3_exec(db,sql,callback,0,&errmsg);
if( rc!=SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", errmsg);
sqlite3_free(errmsg);//释放错误信息所占的内存空间
}
free(name);
free(sql);
}

int main(void)
{
char *errmsg = 0;
int rc;
int i = 0;
rc = sqlite3_open("contact.db", &db); //打开数据库
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", errmsg);
sqlite3_free(errmsg); //释放错误信息所占的内存空间
}
while(1){
printf("功能:\n");
printf("1.查看通讯录\n");
printf("2.增加联系人\n");
printf("3.删除联系人\n");
printf("4.修改联系人信息\n");
printf("5.查找联系人\n");
printf("6.退出\n");
printf("请输入功能序号:");
scanf("%d",&i);
if( i==6 ){
break;
}
printf("\n");
switch(i){
case 1 : show();break;
case 2 : add();break;
case 3 : delete();break;
case 4 : update();break;
case 5 : search();break;
case 6 : break;
}
}
sqlite3_close(db); //关闭数据库
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: