#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;
}
数据库实现简单通讯录管理系统
最新推荐文章于 2023-11-16 21:26:24 发布