E )修改好友信息//按id查找,修改信息
F)退出
运行时会从数据库中读取数据,增删改查也会执行相关的数据库函数
需要加头文件:#include
在数据库中状态
基本结构体
typedef struct tongxun
{
char id[20]; //编号
char name[30];//姓名
char num[20]; //手机号码
char zhuzhi[100];//住址
char tel[20]; //家庭电话
struct tongxun * next;//下一条信息地址
}T;
查找并从数据库中读取数据
T * create() //创建链表并如果已有数据赋值
{
sqlite3 * database;
T* head;
head=(T*)malloc(SIZE);
if(head==NULL)
{
printf("error\n");
return NULL;
}
head->next=NULL;
//打开表
int ret = sqlite3_open("tongxunlu.db", &database);
if (ret != SQLITE_OK)
{
printf ("打开数据库失败\n");
return NULL;
}
printf("打开成功\n");
//创建数据库表基本结构
char *errmsg = NULL;
char *sql = "create table if not exists message(id TEXT,name TEXT,num TEXT,zhuzhi TEXT,tel TEXT,primary key(id))";
ret = sqlite3_exec(database, sql, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return NULL;
}
printf("创建成功\n");
// 3、char ***resultp: char *resultp[] = {"id", "name", "sex", "age", "1", "zhang", "M", "12","2".....};
// 4、nrow: 多少行数据
// 5、ncolumn: 多少列数据
char **resultp = NULL;
int nrow, ncolumn;
char *buf="select * from message";
ret = sqlite3_get_table(database, buf, &resultp, &nrow, &ncolumn, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return NULL;
}
printf("select成功\n");
int i;
printf ("nrow = %d, ncolumn = %d\n", nrow, ncolumn);
count11=nrow;
if(nrow==0)
{
sqlite3_free_table(resultp);// 释放
// 关闭数据库
sqlite3_close(database);
return head;
}
T* p1,*p;
for(i=ncolumn;i<(nrow+1)*ncolumn;i=i+ncolumn)
{
if(i%ncolumn==0)
{
p1=head;
while(p1->next)
{
p1=p1->next;
}
}
p=(T*)malloc(sizeof(T));
p->next=NULL;
strcpy(p->id,resultp[i]);
strcpy(p->name,resultp[i+1]);
strcpy(p->num,resultp[i+2]);
strcpy(p->zhuzhi,resultp[i+3]);
strcpy(p->tel,resultp[i+4]);
p1->next=p;
}
sqlite3_free_table(resultp);// 释放
// 关闭数据库
sqlite3_close(database);
return head;
}
添加数据
sqlite3 * database;
// 打开数据库
int ret = sqlite3_open("tongxunlu.db", &database);
if (ret != SQLITE_OK)
{
printf ("打开数据库失败\n");
return ;
}
char *errmsg = NULL;
char buf[100];
memset(buf,0,100);
sprintf (buf, "insert into message values('%s', '%s', '%s', '%s','%s')", p->id,p-> name, p->num, p->zhuzhi,p->tel);
ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return ;
}
// 关闭数据库
sqlite3_close(database);
删除数据
sqlite3 * database;
// 打开数据库
int ret = sqlite3_open("tongxunlu.db", &database);
if (ret != SQLITE_OK)
{
printf ("打开数据库失败\n");
return ;
}
char *errmsg = NULL;
char buf[100];
memset(buf,0,100);
sprintf(buf,"delete from message where name = '%s'",name);
ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return ;
}
// 关闭数据库
sqlite3_close(database);
更新数据:
void update(T* head)
{
char str[128];
int n;
printf("输入你想修改的好友id号:");
memset(str,0,128);
scanf("%s",str);
if(count11==0)
{
printf("您没有好友,无需修改\n");
return;
}
T* p; //链表遍历,找到就提前退出
p=head;
p=head->next;
while(p)
{
if(strcmp(p->id,str)==0)
break;
p=p->next;
}
if(p==NULL) //没找到,提示用户
{
printf("您没有此好友\n");
return;
}
//屏幕打印输出用户需要修改的好友原来信息
printf("此好友信息为\n");
printf("ID\t姓名(英文)\t手机号码\t家庭住址\t家庭电话\n");
printf("%s\t%s\t\t%s\t\t%s\t\t%s\n",p->id,p->name,p->num,p->zhuzhi,p->tel);
while(1)
{
printf(" 1.修改姓名输入\n");
printf(" 2.修改手机号码\n");
printf(" 3.修改家庭住址\n");
printf(" 4.修改家庭电话\n");
printf(" 5.不修改了\n");
scanf("%d",&n);
if(n==1) //修改此好友姓名
{
printf("请输入修改后的姓名:");
memset(str,0,128);
scanf("%s",str);
strcpy(p->name,str);
sqlite3 * database;
// 打开数据库
int ret = sqlite3_open("tongxunlu.db", &database);
if (ret != SQLITE_OK)
{
printf ("打开数据库失败\n");
return ;
}
char *errmsg = NULL;
char buf[100];
memset(buf,0,100);
sprintf(buf,"update message set name = '%s' where id = '%s';",str,p->id);
ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return ;
}
// 关闭数据库
sqlite3_close(database);
printf("姓名修改成功\n");
}
else if(n==2) //修改此好友手机号码
{
printf("请输入修改后的号码:");
memset(str,0,128);
scanf("%s",str);
strcpy(p->num,str);
sqlite3 * database;
// 打开数据库
int ret = sqlite3_open("tongxunlu.db", &database);
if (ret != SQLITE_OK)
{
printf ("打开数据库失败\n");
return ;
}
char *errmsg = NULL;
char buf[100];
memset(buf,0,100);
sprintf(buf,"update message set num = '%s' where id = '%s';",p->num,p->id);
ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return ;
}
// 关闭数据库
sqlite3_close(database);
printf("手机号码修改成功\n");
}
else if(n==3) //修改此好友家庭住址
{
printf("请输入修改后的住址:");
memset(str,0,128);
scanf("%s",str);
strcpy(p->zhuzhi,str);
sqlite3 * database;
// 打开数据库
int ret = sqlite3_open("tongxunlu.db", &database);
if (ret != SQLITE_OK)
{
printf ("打开数据库失败\n");
return ;
}
char *errmsg = NULL;
char buf[100];
memset(buf,0,100);
sprintf(buf,"update message set zhuzhi = '%s' where id = '%s';",p->zhuzhi,p->id);
ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return ;
}
// 关闭数据库
sqlite3_close(database);
printf("家庭住址修改成功\n");
}
else if(n==4) //修改此好友家庭电话
{
printf("请输入修改后的电话:");
memset(str,0,128);
scanf("%s",str);
strcpy(p->tel,str);
sqlite3 * database;
// 打开数据库
int ret = sqlite3_open("tongxunlu.db", &database);
if (ret != SQLITE_OK)
{
printf ("打开数据库失败\n");
return ;
}
char *errmsg = NULL;
char buf[100];
memset(buf,0,100);
sprintf(buf,"update message set tel = '%s' where id = '%s';",p->tel,p->id);
ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
printf ("数据库操作失败:%s\n", errmsg);
return ;
}
// 关闭数据库
sqlite3_close(database);
printf("家庭电话修改成功\n");
}
else if(n==5) //退出
return;
}
}
还需改进,我会继续努力,谢谢.