sqlite3 编写简易通讯录

来源:互联网 发布:文学名著阅读软件 编辑:程序博客网 时间:2024/06/07 01:15

以下贴出的是我用sqlite3写的简易通讯录,注意编译时链接上sqlite3库,若有什么错误望大牛指正

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sqlite3.h>#define MAX_SIZE 1024static 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();}


0 0