sqlite3 编写简易通讯录

以下贴出的是我用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();
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值