基于sqlite3的通讯录(c语言)

这个C语言程序创建了一个基于SQLite3的通讯录系统,包括创建表、插入记录、显示联系人列表、搜索联系人、删除联系人和更新联系人等功能。用户可以交互式地输入联系人姓名和电话,进行相应的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
**************************************************************************
* File Name: 4.address_book.c
* Function : 1) 
*            2) 
* Author   : Xubing 
* Created Time: 2016年11月04日
**************************************************************************
*/

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

#define NAME_SIZE 20
#define PHONE_SIZE 15

static sqlite3 *db = NULL;
static char *errmsg = NULL;

struct node
{
    char name[NAME_SIZE];
    char phone[PHONE_SIZE];
    struct node *next;
};

typedef struct node Node;

void create_table(sqlite3 *db);
void insert_record(sqlite3 *db);
int displaycb(void *para, int ncolumn, char ** columnvalue, char *columnname[]);
//void inquire_usecb(sqlite3 *db);
void Menu_Face();
void Menu();
void search_contact();
void contact_list();
void delete_contact();
void update_contact();

int main()
{
    int ret;

    ret = sqlite3_open("test.db", &db);
    create_table(db);

    while(1)
    {
        Menu();
#if 0
        insert_record(db);
        sqlite3_exec(db,"select * from addr_ablt",displaycb, NULL, &errmsg);
        if(ret != SQLITE_OK)
        {
            printf("insert table error: %s\n", errmsg);
        }
#endif
    
    }
    sqlite3_close(db);

    return 0;
}

void Menu_Face()
{

    printf("                              ============================================================================\n");
    printf("                              |                                                                          |\n");
    printf("                              |                               ADDRESS BOOK                               |\n");
    printf("                              |                                                                          |\n");
    printf("                              ============================================================================\n");
    printf("                              *                                                                          *\n");
    printf("                              *                                                                          *\n");
    printf("                              *                            1.Add new contact                             *\n");
    printf("                              *                                                                          *\n");
    printf("                              *                            2.Contact list                                *\n");
    printf("                              *                                                                          *\n");
    printf("                              *                            3.Search contact                              *\n");
    printf("                              *                                                                          *\n");
    printf("                              *                            4.Delete contact                              *\n");
    printf("                              *                                                                          *\n");
    printf("                              *                            5.Update contact                              *\n");
    printf("                              *                                                                          *\n");
    printf("                              *                            5.Exit                                        *\n");
    printf("                              *                                                                          *\n");
    printf("                              ============================================================================\n\n");
    printf("                              Please input order (1 - 6): ");
}
void Menu()
{
    int ret;
    int order;

    system("clear");
    Menu_Face();
    scanf("%d", &order);
    getchar();

    switch(order)
    {
        case 1:
        {
            insert_record(db);
            break;
        }
        case 2:
        {
            contact_list();
            break;
        }
        case 3:
        {
            search_contact();
            break;
        }
        case 4:
        {
            delete_contact();        
            break;
        }
        case 5:
        {
            
            update_contact();
            break;
        }
        case 6:
        {
            printf("Exit success!\n");
            exit(0);
            break;
        }
        default:
        {
            printf("Please input right order!\n\n");
            break;
        }
    }

}
void create_table(sqlite3 *db)
{
    char *sql = NULL;
    char *errmsg = NULL;
    int ret;

    sql = "create table if not exists addr_ablt ( name text, phone text)";
    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if(ret != SQLITE_OK)
    {
         printf("create table error: %s\n", errmsg);
    }

}

void insert_record(sqlite3 *db)
{
    char sql[100];
    char *errmsg = NULL;
    char name[20];
    char phone[15];
    char flag;

    int ret;
    int isinput = 1;

    system("clear");
    printf("Insert contact\n");

    while(isinput)
    {
    //    system("clear");
        printf("Please input name and phone:\n");
        printf("name: ");
        scanf("%s", name);
        getchar();
        printf("phone: ");
        scanf("%s", phone);
        getchar();

        sprintf(sql, "insert into addr_ablt values('%s', '%s')", name, phone);
        printf("Add success!\n");

        printf("Continue or not(y / n):");
        scanf("%c", &flag);
        getchar();
        if('y' == flag)
        {
            isinput = 1;
        }
        else if('n' == flag)
        {
            isinput = 0;
            system("clear");
        }
        else
        {
            isinput = 1;
            printf("Please input right choice\n");
        }
    }

    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if(ret != SQLITE_OK)
    {
        printf("insert table error: %s\n", errmsg);
    }
}

int displaycb(void *para, int ncolumn, char ** columnvalue, char *columnname[])
{
    int i;

//    printf("total column is %d\n", ncolumn);
    

    for(i = 0; i < ncolumn; i++)
    {
        if(0 == i)
        {
            printf("%s : %s\t", columnname[i], columnvalue[i]);
        }
        else
        {
            printf("%s: %s\n", columnname[i], columnvalue[i]);
        }
    }
    printf("-------------------------------------------\n");
    return 0;
}

#if 0
void inquire_usecb(sqlite3 *db)
{
    char *sql = NULL;
    char *errmsg = NULL;
    int ret;

    sql = "select * from addr_ablt";
    ret = sqlite3_exec(db, sql, displaycb, NULL, &errmsg);
    if(ret != SQLITE_OK)
    {
        printf("select is error: %s\n", errmsg);
    }
}
#endif
void search_contact()
{
    char name[20];
    char sql[100];
   
    int ret;
    
    system("clear");
    printf("Search contact\n");
    printf("name: ");
    scanf("%s", name);
    getchar();
    sprintf(sql, "select *from addr_ablt where name='%s'", name);
    ret = sqlite3_exec(db, sql, displaycb, NULL, &errmsg);
    if(ret != SQLITE_OK)
    {
        printf("select is error: %s\n", errmsg);
    }

    printf("press any key to continue\n");
    getchar();
 }

void contact_list()
{
    int ret;

    system("clear");
    printf("Contact list\n");
    sqlite3_exec(db,"select *from addr_ablt",displaycb, NULL, &errmsg);
    if(ret != SQLITE_OK)
    {
        printf("insert table error: %s\n", errmsg);
    }
    printf("Press any key to continue\n");
    getchar();
     
}

void delete_contact()
{
    char sql[100];
    char name[20];
    char running = 'y';

    int ret;

    system("clear");
    printf("Delete name\n");
    while('y' == running)
    {
        scanf("%s", name);
        getchar();
        sprintf(sql, "delete from addr_ablt where name='%s'", name);
        ret = sqlite3_exec(db, sql, 0, 0, &errmsg);//删除
    
        if(ret != SQLITE_OK)
        {
            printf("insert table error: %s\n", errmsg);
            exit(1);
        }
        printf("Delete success!\n");
        printf("Continue or not(y / n):");
        scanf("%c", &running);
        getchar();
        if('y' == running)
        {
            running = 'y';
        }
        else if('n' == running)
        {
            running = 'n';
        }
        else
        {
            running = 'y';
            printf("Please input right choice\n");
        }
    }
}

void update_contact()
{
    char sql[100];
    char name[20];
    char phone[15];
    char running = 'y';

    int ret;

    system("clear");
    printf("Update contact\n");
    while('y' == running)
    {
        printf("name: ");
        scanf("%s", name);
        getchar();
        sprintf(sql, "select *from addr_ablt where name='%s'", name);
        ret = sqlite3_exec(db, sql, displaycb, NULL, &errmsg);
        if(ret != SQLITE_OK)
        {
            printf("select is error: %s\n", errmsg);
        }
        printf("new number:");
        scanf("%s", phone);
        getchar();
        sprintf(sql, "update addr_ablt set phone='%s' where name='%s'", phone, name);
        ret = sqlite3_exec(db, sql, 0, 0, &errmsg);//删除
    
        if(ret != SQLITE_OK)
        {
            printf("insert table error: %s\n", errmsg);
            exit(1);
        }
        printf("Update success!\n");
        printf("Continue or not(y / n):");
        scanf("%c", &running);
        getchar();
        if('y' == running)
        {
            running = 'y';
        }
        else if('n' == running)
        {
            running = 'n';
        }
        else
        {
            running = 'y';
            printf("Please input right choice\n");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值