电子通讯录(数据库版存储)

                     需求
制作一个电子通讯录,通过该通讯录能存入好友ID号、姓名(英文)、手机号码、家庭住址、公司电话。
模块
 主界面:主要显示软件功能。
A) 添加好友信息。                                   //  id为唯一标识
B) 列表好友信息。(包含排序功能)
C) 搜索好友
D) 删除好友//按姓名查找,如有重名全部列出,让用户选择

E )修改好友信息//按id查找,修改信息

F)退出



运行时会从数据库中读取数据,增删改查也会执行相关的数据库函数

需要加头文件:#include  


电子通讯录(数据库版存储)_第1张图片

在数据库中状态


电子通讯录(数据库版存储)_第2张图片




基本结构体

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;
	}
	
}


还需改进,我会继续努力,谢谢.






你可能感兴趣的:(电子通讯录(数据库版存储))