通讯录3.0(数据库编程)

三个文件 : address_list.h address_list.c function.c

address_list.h

#ifndef _ADDRESS_LIST_H_
#define _ADDRESS_LIST_H_

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

enum return_val{
    CREATE_OK = 100,
    CREATE_NO,
};

extern void welcome();   //欢迎界面

extern void interface();  //登录界面

extern int create_address(sqlite3 **address);   //create database

extern void select_function(int *select);  //select function

extern void insert_data(sqlite3 *address);  //insert data

extern void display_data(sqlite3 *address);  //display data

extern void select_data(sqlite3 *address);  //select data

extern void delete_data(sqlite3 *address); //delete data
            
extern void empty_data(sqlite3 *address);  //empty data

extern void exit_address(sqlite3 *address);   //exit

#endif

address_list.c

#include "address_list.h"

int main(int argc, char *argv[])
{
    sqlite3 *address = NULL;
    int select;

    welcome();   //create welcome interface
    sleep(1);
    system("clear");

    interface();   //register interface


    if(CREATE_NO == create_address(&address))   //create database
    {
        return 0;
    }

    while (1)
    {
        select_function(&select);

        switch (select)
        {
        case 1:
            insert_data(address);  //insert data
            break;

        case 2:
            display_data(address);  //display data
            break;

        case 3:
            select_data(address);  //select data
            break;

        case 4:
            delete_data(address); //delete data
            break;

        case 5:
            empty_data(address);  //empty data
            break;

        case 6:
            exit_address(address);  //exit
            break;
        
        default:
            printf("    请重新输入!\n");
            break;
        }   

        if(select == 6)
        {
            break;
        }   
    }
    
    return 0;
}

function.c

#include "address_list.h"

void welcome()   //欢迎界面
{
    printf("    ");
    printf("*******************************************************");
    printf("\n\n");
 
    printf("                       Welcome you!");
    printf("\n\n");
 
    printf("    ");
    printf("*******************************************************");
    printf("\n\n");
}


//通讯录界面
void interface()
{
    printf("    ");
    printf("*******************************************************");
    printf("\n\n");
    
    printf("    ");
    printf("************************目录**************************");
    printf("\n\n");
    
    printf("    ");
    printf("******************* 1、输入数据 ***********************");
    printf("\n\n");
 
    printf("    ");
    printf("******************* 2、显示数据 ***********************");
    printf("\n\n");
 
    printf("    ");
    printf("******************* 3、查找数据 ***********************");
    printf("\n\n");
 
    printf("    ");
    printf("******************* 4、删除数据 ***********************");
    printf("\n\n");
 
    printf("    ");
    printf("******************* 5、清空数据 ***********************");
    printf("\n\n");
 
    printf("    ");
    printf("****************** 6、退出通讯录 **********************");
    printf("\n\n");
 
    printf("    ");
    printf("*******************************************************");
    printf("\n\n");
}

int create_address(sqlite3 **address)   //create database
{
    char *errmsg = NULL;
    char *sql = NULL;

    if(SQLITE_OK != sqlite3_open("database.db", address))
    {
        printf("    ");
        printf("open database error!%s\n", sqlite3_errmsg(*address));
        exit(EXIT_FAILURE);
    }

    sql = "create table if not exists mytable(id int primary key, name text, sex char(1), number varchar(11));";
    if(SQLITE_OK != sqlite3_exec(*address, sql, NULL, NULL, &errmsg))
    {
        printf("    ");
        printf("create table error!%s\n", errmsg);
        sqlite3_close(*address);
        exit(EXIT_FAILURE);
    }

    return CREATE_OK;
}

void select_function(int *select)    //select funtion
{
    printf("\n\n    ");
    printf("please select function number:");
    scanf("%d", select);
}

void insert_data(sqlite3 *address)  //insert data
{
    char sql[100];
    char *errmsg = NULL;
    int id;
    int i;
    int num;
    char name[10];
    char sex[5];
    char number[15];

    system("clear");
    interface();   //register interface

    printf("    ");
    printf("please input data number:");
    scanf("%d", &num);

    for(i = 0; i < num; i++)
    {
        printf("    ");
        printf("please input id, name, sex, number:\n");
        printf("    ");
        scanf("%d%s%s%s", &id, name, sex, number);
        getchar();

        sprintf(sql, "insert into mytable(id, name, sex, number) values (%d, '%s', '%s', '%s');", id, name, sex, number);

        if(SQLITE_OK != sqlite3_exec(address, sql, NULL, NULL, &errmsg))
        {
            printf("    ");
            printf("insert error!%s\n", errmsg);
            sqlite3_close(address);
            exit(EXIT_FAILURE);
        }
    }

}

void display_data(sqlite3 *address)  //display data
{
    char *sql = NULL;
    char *errmsg = NULL;
    char **result = NULL;
    int row_num;
    int col_num;
    int i;

    system("clear");
    interface();   //register interface

    sql = "select *from mytable;";
    if(SQLITE_OK != sqlite3_get_table(address, sql, &result, &row_num, &col_num, &errmsg))
    {
        printf("display error!%s\n", errmsg);
        sqlite3_close(address);
        exit(EXIT_FAILURE);
    }   
    else
    {
        for(i = 0; i < (row_num + 1)*col_num; i++)
        {
            printf("    ");
            printf("%6s", result[i]);

            if((i + 1)%col_num == 0)
            {
                printf("\n");
            }

        }
    } 

    sqlite3_free_table(result);
}

int display(void *para, int col_num, char **col_val, char **col_name)
{
    int i;
    int *flag = NULL;
    flag = (int *)para;

    if(0 == *flag)
    {
        *flag = 1;

        for(i = 0; i < col_num; i++)
        {
            printf("    ");
            printf("%6s", col_name[i]);
        }
        printf("\n");
    }

    for(i = 0; i < col_num; i++)
    {
        printf("    ");
        printf("%6s", col_val[i]);
    }
    printf("\n");

    return SQLITE_OK;
}

void select_data(sqlite3 *address)  //select data
{
    char sql[100];
    char *errmsg = NULL;
    int flag = 0;
    int id;

    system("clear");
    interface();   //register interface
    
    printf("    ");
    printf("please input id of select data:");
    scanf("%d", &id);

    sprintf(sql, "select *from mytable where id = %d;", id);
    if(SQLITE_OK != sqlite3_exec(address, sql, display, (void *)&flag, &errmsg))
    {
        printf("select data error!%s\n", errmsg);
        sqlite3_close(address);
        exit(EXIT_FAILURE);
    }
}

void delete_data(sqlite3 *address) //delete data
{
    char sql[100];
    char *errmsg = NULL;
    int flag = 0;
    char name[10];

    system("clear");
    interface();   //register interface
    
    printf("    ");
    printf("please input name of delete data:");
    scanf("%s", name);

    sprintf(sql, "delete from mytable where name = '%s';", name);
    if(SQLITE_OK != sqlite3_exec(address, sql, NULL, NULL, &errmsg))
    {
        printf("delete data error!%s\n", errmsg);
        sqlite3_close(address);
        exit(EXIT_FAILURE);
    }
    printf("    ");
    printf("删除成功!\n");
}

void empty_data(sqlite3 *address)  //empty data
{
    char *sql = NULL;
    char *errmsg = NULL;

    system("clear");
    interface();   //register interface

    sql = "delete from mytable;";
    if(SQLITE_OK != sqlite3_exec(address, sql, NULL, NULL, &errmsg))
    {
        printf("empty data error!%s\n", errmsg);
        sqlite3_close(address);
        exit(EXIT_FAILURE);
    }
    printf("    ");
    printf("清空成功!\n");
}

void exit_address(sqlite3 *address)   //exit
{
    system("clear");
    interface();   //register interface

    printf("    ");
    printf("退出成功!\n");
    sqlite3_close(address);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值