通讯录 数据库文件读入链表 链表数据存入数据库
来源:互联网 发布:哪个新顶级域名好 编辑:程序博客网 时间:2024/05/19 04:03
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include <sqlite3.h>
#define len sizeof(struct Node)
#define ERROR 1
#define OK 0
void inquire_nocb(sqlite3 *db);
void inquire_usecb(sqlite3 * db);
struct Node
{
char name[30];
char data[30];
struct Node *next;
};
typedef struct Node LinkList; /* 定义LinkList */
/* 初始化顺序线性表生成一个头
返回head */
LinkList * InitList()
{
LinkList *head;
head=(LinkList *)malloc(len); /* 产生头结点,并使L指向此头结点 */
if(head==NULL) /* 存储分配失败 */
printf("malloc is not good");
head->next=NULL; /* 指针域为空 */
return head;
}
/*数据的输出打印*/
void print(LinkList *head)
{
LinkList *p;
p=head->next;
if(p==NULL)
printf("this is empty\n");
while(p!=NULL)
{
printf("姓名: %-10s 号码: %-10s\n",p->name,p->data);
p=p->next;
}
}
/* 初始化后 数据添加 采用(头插法) */
LinkList * CreateListHead(LinkList *head)
{
printf("*表示输入结束\n");
LinkList *p;
int i;
//head = (LinkList *)malloc(len);
//head->next = NULL; /* 先建立一个带头结点的单链表 */
//p=head->next;//////////////
while(1)
{
p = (LinkList *)malloc(len); /* 生成新结点 */
printf("请输入姓名:\n");
scanf("%s",p->name);
if(strcmp(p->name,"*") == 0)
break;
printf("请输入号码:\n");
scanf("%s",&p->data);
p->next = head->next;
head->next = p;/* 插入到表头 */
}
return head;
}
/* 删除 */
/* 操作结果:输入要删除的 元素 进行删除 */
LinkList * ListDelete(LinkList *head)
{
LinkList *pre,*after,*p;
p=(LinkList *)malloc(len);//插入时申请空间
printf("请输入要删除姓名:\n");
scanf("%s",p->name);
pre = head;
after=head->next;
while(after != NULL)
{
if(strcmp(after->name,p->name)==0)
{
pre->next=after->next;
free(after);
break;
}
else
{
pre=after;
after=after->next;//错误地点
}
}
if(after == NULL)
printf("this data is not exist\n");
return head;
}
/* 插入 */
/* 操作结果:把数据插在第 n 个位置 */
LinkList * ListInsert(LinkList *head,int n)
{
LinkList *new,*look;;
new=(LinkList *)malloc(len);//插入时申请空间
printf("添加 新联系人\n");
printf("新加 姓名:\n");
scanf("%s",new->name);
printf("新加 号码:\n");
scanf("%s",&new->data);
int count=0;
if(head==NULL)
{
head=new;
new->next=NULL;
}
if(n==0)
{
new->next=head;
head=new;
}
else
{
look=head;
while((look!=NULL)&&(count<n-1))
{
look=look->next;
count++;
}
if(count==n-1)
{
new->next=look->next;
look->next=new;
}
if(new==NULL)
printf("out of the range,");
}
return head;
}
/* 排序*/
/* 按照 名字 排序*/
LinkList *ListSort(LinkList *head)
{
LinkList *p1,*p2,*p,*s;
int i,j,n=1;
s=head->next; /* s指向第一个结点 */
while(s) /*数元素的个数,计数...........遍历得到n*/
{
n++;
s=s->next;
}
p=(LinkList *)malloc(len);
for(i=0;i<(n-1);i++)
{ p1=head;
p2=p1->next;
for(j=0;j<(n-i-1);j++)
{
if(strcmp(p1->name,p2->name)>0)
{
/*p->data=p1->data;
p1->data=p2->data;
p2->data=p->data;*/
strcpy(p->data,p1->data);
strcpy(p1->data,p2->data);
strcpy(p2->data,p->data);
strcpy(p->name,p1->name);
strcpy(p1->name,p2->name);
strcpy(p2->name,p->name);
}
p1=p2;
p2=p2->next;
}
}
return head;
}
/* 查找 通过名字,找到电话号码*/
LinkList *xuzhao(LinkList *head)
{
LinkList *p,*x;
p=head;
int count=0;
x=(LinkList *)malloc(len);//申请空间
printf("****输入要查找姓名****\n");
scanf("%s",x->name);
while(1)
{
if( strcmp(p->name,x->name)==0 )
{
printf("姓名%-10s 号码:%-10s\n",p->name,p->data);
break;
}
p=p->next;
if(p==NULL)
{
printf("*********查无此人*************\n");
break;
}
}
}
LinkList * xiugai(LinkList *head)
{
LinkList *p,*x,*q;
p=head;
int count=0;
x=(LinkList *)malloc(len);
printf("输入要修改姓名\n");
scanf("%s",x->name);
while(1)
{
if( strcmp(p->name,x->name)==0 )
{
break;
}
p=p->next;
if(p == NULL)
{
printf("这个名字不存在\n");
return head;
}
}
printf("修改为:姓名 \n");
scanf("%s",p->name);
printf("修改为: 号码\n");
scanf("%s",p->data);
printf("姓名%-10s 号码:%-10s\n",p->name,p->data);
return head;
}
/*桌面显示*/
int beijing()
{
printf("********************************************\n");
printf("**选择:1 创建通讯录 \n");
printf("**选择:2 查找联系人 \n");
printf("**选择:3 删除联系人 \n");
printf("**选择:4 添加联系人 \n");
printf("**选择:5 对联系人排序 \n");
printf("**选择:6 对联系人信息修改 \n");
printf("**选择:0 退出编辑 \n");
printf("********************************************\n");
}
/*将数据进行保存*/
void save(LinkList *head)
{
sqlite3 *db;
char *sql;
char sql1[100];
char *errmsg;
char *name;
char *data;
int ret;
LinkList *p;
FILE *fp;
p=head->next;
///////////////////////
ret=sqlite3_open("kuwenj.db",&db);
if(ret != SQLITE_OK)
{
printf("open error");
exit(1);
}
/////////////////////////////
sql="create table if not exists kuwenj(name text primary key,data text);";
ret=sqlite3_exec(db,sql,NULL,NULL,&errmsg);
if(ret != SQLITE_OK)
printf("creat error");
/////////////////////////////
sql="delete from kuwenj;";
ret=sqlite3_exec(db,sql,NULL,NULL,&errmsg);
if(ret != SQLITE_OK)
printf("delete error\n");
while( p != NULL)
{
sprintf(sql1,"insert into kuwenj values('%s','%s');",p->name,p->data);
ret=sqlite3_exec(db,sql1,NULL,NULL,&errmsg);
if(ret != SQLITE_OK)
{
printf("insert error");
exit(1);
}
p=p->next;
}
//inquire_nocb(db);
inquire_usecb(db);
sqlite3_close(db);
}
/*******显示数据库内部数据**************/
void inquire_nocb(sqlite3 *db)
{
int nrow,ncolumn;
char **azresult;
char *sql;
char *errmsg;
int ret;
int i;
sql = "select * from kuwenj;";
ret = sqlite3_get_table(db,sql,&azresult,&nrow,&ncolumn,&errmsg);
if(ret != SQLITE_OK)
printf("get table error:%s",errmsg);
printf("nrow = %d,column = %d\n",nrow,ncolumn);
for(i = ncolumn;i < (nrow + 1) * ncolumn;i++)
{
printf("%10s",azresult[i]);
if((i + 1) % ncolumn == 0)
{
printf("\n");
}
}
sqlite3_free_table(azresult);
}
/*数据库读入链表*/
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++)
{
printf("col_name:%s----> clo_value:%s\n",columnname[i],columnvalue[i]);
}
printf("===========================\n");
return 0;
}
void inquire_usecb(sqlite3 * db)
{
char *sql;
char *errmsg;
int ret;
sql = "select * from kuwenj;";
ret = sqlite3_exec(db,sql,displaycb,NULL,&errmsg);
if(ret != SQLITE_OK)
{
printf("select error : %s\n",errmsg);
exit(-1);
}
}
/*数据库存入链表中*/
LinkList * out_liaobiao(LinkList *head)
{
LinkList *tmp,*p;
int nrow,ncolumn;
char **azresult;
char *sql,*a[1000];
char *errmsg;
int ret;
int i,j;
sqlite3 *db;
ret=sqlite3_open("kuwenj.db",&db);
if(ret != SQLITE_OK)
{
printf("open error");
exit(1);
}
sql = "select * from kuwenj;";
ret = sqlite3_get_table(db,sql,&azresult,&nrow,&ncolumn,&errmsg);
if(ret != SQLITE_OK)
{
printf("get table error:%s",errmsg);
}
tmp=(LinkList *)malloc(len);
for(i=1;i<=nrow;i++)
{
strcpy(tmp->name,azresult[i * ncolumn]);
strcpy(tmp->data,azresult[i * ncolumn+1]);
tmp->next = head->next;
head->next = tmp;
tmp=(LinkList *)malloc(len);
}
sqlite3_free_table(azresult);
return head;
}
int main()
{
LinkList *head;
int num;
head=InitList();
head=out_liaobiao(head);
print(head);
while(1)
{
beijing();
printf("请选择\n");
scanf("%d",&num);
switch(num)
{
case 0: save(head);
exit(0);
case 1: head=CreateListHead(head);
print(head);
break;
case 2: xuzhao(head);
break;
case 3: head=ListDelete(head);
print(head);
break;
case 4: head=ListInsert(head,1);
print(head);
break;
case 5: head=ListSort(head);
print(head);
break;
case 6: head=xiugai(head);
print(head);
break;
default : printf("这是错误的,请重新选择\n"); break;
}
}
}
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include <sqlite3.h>
#define len sizeof(struct Node)
#define ERROR 1
#define OK 0
void inquire_nocb(sqlite3 *db);
void inquire_usecb(sqlite3 * db);
struct Node
{
char name[30];
char data[30];
struct Node *next;
};
typedef struct Node LinkList; /* 定义LinkList */
/* 初始化顺序线性表生成一个头
返回head */
LinkList * InitList()
{
LinkList *head;
head=(LinkList *)malloc(len); /* 产生头结点,并使L指向此头结点 */
if(head==NULL) /* 存储分配失败 */
printf("malloc is not good");
head->next=NULL; /* 指针域为空 */
return head;
}
/*数据的输出打印*/
void print(LinkList *head)
{
LinkList *p;
p=head->next;
if(p==NULL)
printf("this is empty\n");
while(p!=NULL)
{
printf("姓名: %-10s 号码: %-10s\n",p->name,p->data);
p=p->next;
}
}
/* 初始化后 数据添加 采用(头插法) */
LinkList * CreateListHead(LinkList *head)
{
printf("*表示输入结束\n");
LinkList *p;
int i;
//head = (LinkList *)malloc(len);
//head->next = NULL; /* 先建立一个带头结点的单链表 */
//p=head->next;//////////////
while(1)
{
p = (LinkList *)malloc(len); /* 生成新结点 */
printf("请输入姓名:\n");
scanf("%s",p->name);
if(strcmp(p->name,"*") == 0)
break;
printf("请输入号码:\n");
scanf("%s",&p->data);
p->next = head->next;
head->next = p;/* 插入到表头 */
}
return head;
}
/* 删除 */
/* 操作结果:输入要删除的 元素 进行删除 */
LinkList * ListDelete(LinkList *head)
{
LinkList *pre,*after,*p;
p=(LinkList *)malloc(len);//插入时申请空间
printf("请输入要删除姓名:\n");
scanf("%s",p->name);
pre = head;
after=head->next;
while(after != NULL)
{
if(strcmp(after->name,p->name)==0)
{
pre->next=after->next;
free(after);
break;
}
else
{
pre=after;
after=after->next;//错误地点
}
}
if(after == NULL)
printf("this data is not exist\n");
return head;
}
/* 插入 */
/* 操作结果:把数据插在第 n 个位置 */
LinkList * ListInsert(LinkList *head,int n)
{
LinkList *new,*look;;
new=(LinkList *)malloc(len);//插入时申请空间
printf("添加 新联系人\n");
printf("新加 姓名:\n");
scanf("%s",new->name);
printf("新加 号码:\n");
scanf("%s",&new->data);
int count=0;
if(head==NULL)
{
head=new;
new->next=NULL;
}
if(n==0)
{
new->next=head;
head=new;
}
else
{
look=head;
while((look!=NULL)&&(count<n-1))
{
look=look->next;
count++;
}
if(count==n-1)
{
new->next=look->next;
look->next=new;
}
if(new==NULL)
printf("out of the range,");
}
return head;
}
/* 排序*/
/* 按照 名字 排序*/
LinkList *ListSort(LinkList *head)
{
LinkList *p1,*p2,*p,*s;
int i,j,n=1;
s=head->next; /* s指向第一个结点 */
while(s) /*数元素的个数,计数...........遍历得到n*/
{
n++;
s=s->next;
}
p=(LinkList *)malloc(len);
for(i=0;i<(n-1);i++)
{ p1=head;
p2=p1->next;
for(j=0;j<(n-i-1);j++)
{
if(strcmp(p1->name,p2->name)>0)
{
/*p->data=p1->data;
p1->data=p2->data;
p2->data=p->data;*/
strcpy(p->data,p1->data);
strcpy(p1->data,p2->data);
strcpy(p2->data,p->data);
strcpy(p->name,p1->name);
strcpy(p1->name,p2->name);
strcpy(p2->name,p->name);
}
p1=p2;
p2=p2->next;
}
}
return head;
}
/* 查找 通过名字,找到电话号码*/
LinkList *xuzhao(LinkList *head)
{
LinkList *p,*x;
p=head;
int count=0;
x=(LinkList *)malloc(len);//申请空间
printf("****输入要查找姓名****\n");
scanf("%s",x->name);
while(1)
{
if( strcmp(p->name,x->name)==0 )
{
printf("姓名%-10s 号码:%-10s\n",p->name,p->data);
break;
}
p=p->next;
if(p==NULL)
{
printf("*********查无此人*************\n");
break;
}
}
}
LinkList * xiugai(LinkList *head)
{
LinkList *p,*x,*q;
p=head;
int count=0;
x=(LinkList *)malloc(len);
printf("输入要修改姓名\n");
scanf("%s",x->name);
while(1)
{
if( strcmp(p->name,x->name)==0 )
{
break;
}
p=p->next;
if(p == NULL)
{
printf("这个名字不存在\n");
return head;
}
}
printf("修改为:姓名 \n");
scanf("%s",p->name);
printf("修改为: 号码\n");
scanf("%s",p->data);
printf("姓名%-10s 号码:%-10s\n",p->name,p->data);
return head;
}
/*桌面显示*/
int beijing()
{
printf("********************************************\n");
printf("**选择:1 创建通讯录 \n");
printf("**选择:2 查找联系人 \n");
printf("**选择:3 删除联系人 \n");
printf("**选择:4 添加联系人 \n");
printf("**选择:5 对联系人排序 \n");
printf("**选择:6 对联系人信息修改 \n");
printf("**选择:0 退出编辑 \n");
printf("********************************************\n");
}
/*将数据进行保存*/
void save(LinkList *head)
{
sqlite3 *db;
char *sql;
char sql1[100];
char *errmsg;
char *name;
char *data;
int ret;
LinkList *p;
FILE *fp;
p=head->next;
///////////////////////
ret=sqlite3_open("kuwenj.db",&db);
if(ret != SQLITE_OK)
{
printf("open error");
exit(1);
}
/////////////////////////////
sql="create table if not exists kuwenj(name text primary key,data text);";
ret=sqlite3_exec(db,sql,NULL,NULL,&errmsg);
if(ret != SQLITE_OK)
printf("creat error");
/////////////////////////////
sql="delete from kuwenj;";
ret=sqlite3_exec(db,sql,NULL,NULL,&errmsg);
if(ret != SQLITE_OK)
printf("delete error\n");
while( p != NULL)
{
sprintf(sql1,"insert into kuwenj values('%s','%s');",p->name,p->data);
ret=sqlite3_exec(db,sql1,NULL,NULL,&errmsg);
if(ret != SQLITE_OK)
{
printf("insert error");
exit(1);
}
p=p->next;
}
//inquire_nocb(db);
inquire_usecb(db);
sqlite3_close(db);
}
/*******显示数据库内部数据**************/
void inquire_nocb(sqlite3 *db)
{
int nrow,ncolumn;
char **azresult;
char *sql;
char *errmsg;
int ret;
int i;
sql = "select * from kuwenj;";
ret = sqlite3_get_table(db,sql,&azresult,&nrow,&ncolumn,&errmsg);
if(ret != SQLITE_OK)
printf("get table error:%s",errmsg);
printf("nrow = %d,column = %d\n",nrow,ncolumn);
for(i = ncolumn;i < (nrow + 1) * ncolumn;i++)
{
printf("%10s",azresult[i]);
if((i + 1) % ncolumn == 0)
{
printf("\n");
}
}
sqlite3_free_table(azresult);
}
/*数据库读入链表*/
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++)
{
printf("col_name:%s----> clo_value:%s\n",columnname[i],columnvalue[i]);
}
printf("===========================\n");
return 0;
}
void inquire_usecb(sqlite3 * db)
{
char *sql;
char *errmsg;
int ret;
sql = "select * from kuwenj;";
ret = sqlite3_exec(db,sql,displaycb,NULL,&errmsg);
if(ret != SQLITE_OK)
{
printf("select error : %s\n",errmsg);
exit(-1);
}
}
/*数据库存入链表中*/
LinkList * out_liaobiao(LinkList *head)
{
LinkList *tmp,*p;
int nrow,ncolumn;
char **azresult;
char *sql,*a[1000];
char *errmsg;
int ret;
int i,j;
sqlite3 *db;
ret=sqlite3_open("kuwenj.db",&db);
if(ret != SQLITE_OK)
{
printf("open error");
exit(1);
}
sql = "select * from kuwenj;";
ret = sqlite3_get_table(db,sql,&azresult,&nrow,&ncolumn,&errmsg);
if(ret != SQLITE_OK)
{
printf("get table error:%s",errmsg);
}
tmp=(LinkList *)malloc(len);
for(i=1;i<=nrow;i++)
{
strcpy(tmp->name,azresult[i * ncolumn]);
strcpy(tmp->data,azresult[i * ncolumn+1]);
tmp->next = head->next;
head->next = tmp;
tmp=(LinkList *)malloc(len);
}
sqlite3_free_table(azresult);
return head;
}
int main()
{
LinkList *head;
int num;
head=InitList();
head=out_liaobiao(head);
print(head);
while(1)
{
beijing();
printf("请选择\n");
scanf("%d",&num);
switch(num)
{
case 0: save(head);
exit(0);
case 1: head=CreateListHead(head);
print(head);
break;
case 2: xuzhao(head);
break;
case 3: head=ListDelete(head);
print(head);
break;
case 4: head=ListInsert(head,1);
print(head);
break;
case 5: head=ListSort(head);
print(head);
break;
case 6: head=xiugai(head);
print(head);
break;
default : printf("这是错误的,请重新选择\n"); break;
}
}
}
0 0
- 通讯录 数据库文件读入链表 链表数据存入数据库
- TXT数据文档读入,存入数组
- 如何将exel表中数据存入到数据库
- c语言链表数据存入文件和读取文件
- 链表通讯录
- 链表通讯录
- 链表之通讯录
- 链表通讯录demo
- 链表之通讯录
- MySQL存入图片+Qt读入读出数据库中的图片
- MySQL存入图片+Qt读入读出数据库中的图片
- MySQL存入图片+Qt读入读出数据库中的图片
- MySQL存入图片+Qt读入读出数据库中的图片
- python中把一数据库表 数据存入另一个数据库中
- 通讯录数据库插入数据
- oracle数据库表空间 追加数据库文件
- 将 Session 数据存入数据库
- 数据存入数据库乱码问题
- HTTP协议
- ThinkPHP之数据模型操作
- linux常见命令
- 如何退出Activity?如何安全退出已调用多个Activity的Application?
- Problem A. Lazy Spelling Bee Google APAC 2017 University Test Practice Round
- 通讯录 数据库文件读入链表 链表数据存入数据库
- PAM Chroot用法
- 题目1086:最小花费
- 配置centos所遇问题集锦
- 横竖屏切换的时候 接下来会发生生么
- STL算法_基本算法篇
- 教你理解复杂的C-C++ 指针函数声明
- java之pdf转jpg图片
- 2.5.2