数据库实现简单通讯录管理系统

#include<cstdio>
#include<sqlite3.h>
#include<iostream>

using namespace std;

char name[18];
char sex;
int age;
int telephone;
char address[128];

void add_a_contact(sqlite3 *db)
{
    char * errmsg;
	char sql[256];
    // printf("Please enter the contact information (name, sex, age, telephone, address): ");
    cout << "Please enter the contact information (name, sex, age, telephone, address): " ;
    // sscanf("%s %s %d %d %s", name, &sex, &age, &telephone, address);
    cin >> name >> sex >> age >> telephone >> address ;
    // 拼接SQL语句,将联系人的信息添加到数据库
    sprintf(sql, "insert into contacts values('%s', '%s', %d, %d, '%s');", name, &sex, age, telephone, address);
    // printf("%s\n", sql);                                         // 调试语句,打印sql语句内容
    if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK) // 便捷函数返回异常,代表注册失败,注册名已存在
    {
        // printf("%s\n", errmsg);
        cout << errmsg << endl;
    }
    else
    {
        // printf("Adding a contact succeeded!\n"); // 成功
        cout << "Adding a contact succeeded!" << endl;
    }
}

int callBack_select(void* arg,int column,char** column_text,char** collumn_name)
{
    //表头
    if(0 == *(int*)arg){
        for(int i=0;i<column;i++){
            // printf("%s\t",collumn_name[i]);
            cout << collumn_name[i] << "\t" ;
        }
        // putchar(10);
        cout << endl;
        *(int*)arg = 1;
    }

    //记录的内容
    for(int i=0;i < column; i++){
        // printf("%s\t",column_text[i]);
        cout << column_text[i] << "\t" ;
    }
    // putchar(10);
    cout << endl;
    return(0);
}
int show_contacts(sqlite3* db)
{
    char * errmsg;
	char sql[256];
    int flag = 0;
    sprintf(sql,"select * from contacts;");
    if(sqlite3_exec(db,sql,callBack_select,&flag,&errmsg) != SQLITE_OK){
        fprintf(stderr,"line:%d sqlite3_exec: %s\n",__LINE__,errmsg);
        return -1;
    }
    // printf("show contacts success\n");
    cout << "show contacts success" << endl;
    return 0;
}

int delete_a_contact(sqlite3 *db)
{
    char * errmsg;
	char sql[256];
    // printf("Enter the name of the contact you want to delete:");
    cout << "Enter the name of the contact you want to delete:" ;
    // scanf("%s",name);
    cin >> name;
    while (getchar() != 10);  //吸收回车
    sprintf(sql,"delete from contacts where name='%s';", name);
    // printf("%s\n", sql);                                         // 调试语句,打印sql语句内容
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){
        fprintf(stderr,"line:%d sqlite3_exec: %s\n",__LINE__,errmsg);
        return -1;
    }
    // printf("contacts table delect %s success\n", name);
    cout << "contacts table delect  " << name << " success" << endl;
    return 0;
}

int find_a_contact(sqlite3 *db)
{
    int flag = 0;
    char * errmsg;
	char sql[256];
    // printf("Enter the name of the contact you want to find:");
    cout << "Enter the name of the contact you want to find:" ;
    // scanf("%s",name);
    cin >> name;
    while (getchar() != 10);  //吸收回车
    sprintf(sql,"select * from contacts where name='%s';", name);
    if(sqlite3_exec(db,sql,callBack_select,&flag,&errmsg) != SQLITE_OK){
        fprintf(stderr,"line:%d sqlite3_exec: %s\n",__LINE__,errmsg);
        return -1;
    }
    // printf("show contacts success\n");
    cout << "show contacts success" << endl;
    return 0;
}

int change_contact_person(sqlite3 *db)
{
    char * errmsg;
	char sql[256];
    // printf("Enter the modified contact information(name, sex, age, telephone, address): ");
    cout << "Enter the modified contact information(name, sex, age, telephone, address): " ;
    // scanf("%s %s %d %d %s", name, &sex, &age, &telephone, address);
    cin >> name >> sex >> age >> telephone >> address ;
    sprintf(sql,"delete from contacts where name='%s';", name);
    // printf("%s\n", sql);                                         // 调试语句,打印sql语句内容
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){
        fprintf(stderr,"line:%d sqlite3_exec: %s\n",__LINE__,errmsg);
        return -1;
    }
    sprintf(sql, "insert into contacts values('%s', '%s', %d, %d, '%s');", name, &sex, age, telephone, address);
    // printf("%s\n", sql);                                         // 调试语句,打印sql语句内容
    if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK) // 便捷函数返回异常,代表注册失败,注册名已存在
    {
        // printf("%s\n", errmsg);
        cout << errmsg << endl;
    }
    else
    {
        // printf("Modifying a contact succeeded!\n"); // 成功
        cout << "Modifying a contact succeeded!" << endl;
    }
    return 0;
}

int clear_contacts(sqlite3 *db)
{
    char * errmsg;
	char sql[256];
    sprintf(sql,"delete from contacts");
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){
        fprintf(stderr,"line:%d sqlite3_exec: %s\n",__LINE__,errmsg);
        return -1;
    }
    // printf("contacts delect  success\n");
    cout << "contacts delect  success\n" << endl;
    return 0;
}

int main(int argc, char const *argv[])
{
    //创建打开数据库
	sqlite3 *db;
	if(sqlite3_open("my.db", &db) != SQLITE_OK)
	{
		printf("%s\n", sqlite3_errmsg(db));
		return -1;
	}
	else
	{
		printf("open Database success\n");
	}

    //创建联系人信息表
	char sql_cont[256]="create table if not exists contacts(name text, sex char, age int, telephone int, address text);";
	char *errmsg;
	if(sqlite3_exec(db,sql_cont,NULL,NULL,&errmsg)!=0)
	{
		fprintf(stderr,"__%d__create table fail! %s\n",__LINE__,errmsg);
		return -1;
	}
	printf("create Contacts table success\n");
    int choose;
    while(1)
    {
        printf("*****************************************\n");
        printf("***************1.添加联系人***************\n");
        printf("***************2.显示联系人***************\n");
        printf("***************3.删除联系人***************\n");
        printf("***************4.查找联系人***************\n");
        printf("***************5.修改联系人***************\n");
        printf("***************6.清空联系人***************\n");
        printf("***************7.退出通讯录***************\n");
        printf("*****************************************\n");
        // printf("please choose:");
        cout << "please choose:" ;
        // scanf("%d", &choose);
        cin >> choose ;
        while (getchar() != 10);  //吸收回车
        switch (choose)
        {
        case 1:
            add_a_contact(db);
            break;

        case 2:
            show_contacts(db);
            break;

        case 3:
            delete_a_contact(db);
            break;

        case 4:
            find_a_contact(db);
            break;

        case 5:
            change_contact_person(db);
            break;

        case 6:
            clear_contacts(db);
            break;

        case 7:
            goto END;
            break;

        default:
            break;
        }
    }
    END:
    sqlite3_close(db);
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值