用数据库制作通讯录示例
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;
}
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;
}
相关文章推荐
- win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
- 《mysql技术内幕》---第一章总结笔记
- SQL Server 存储过程
- OGG_GoldenGate数据库配置DDL同步(案例)
- 连接 Oracle 协议适配器错误 的解决方案
- <<OCM实验选讲>> 第七课 Oracle数据库管理实验
- Redis配置文件redis.conf 详解
- 安装与配置Oracle 11g 精简客户端
- 关于Java_Web连接Oracle数据库
- 读《NoSQL精粹》前三章有感
- Oracle 表的管理
- mysql navcat进行a与b数据库同步
- 【oracle操作札记】oracle通过sql语句查看表的约束
- oracle分享相关链接
- SQL Server 2008小知识
- doc建立数据库简单的用法
- SQL Server与VS2010不兼容的问题
- 关于mysql,使用脚本导入数据
- MySQL性能分析及explain的使用说明
- 关于nosql的讲解