通讯录数据库文件读入链表链表数据存入数据库

    xiaoxiao2021-03-26  35

    #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("s",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; } } }
    转载请注明原文地址: https://ju.6miu.com/read-662019.html

    最新回复(0)