ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

通讯录3.0(数据库版)

2022-03-02 16:30:50  阅读:324  来源: 互联网

标签:int 数据库 sql ret 通讯录 3.0 printf sqlite3 pdb


通讯录3.0版本

一、序言

这是使用数据库写成的通讯录
相较于链表与文件 更加的简洁
操作单一 主要是要记得懂得 数据库的命令 然后用C写出
最常用的两个函数

  1. sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)
    第一个参数是指向数据库的指针 第二个是你想要执行的命令(提前赋给sql,第三和第四个参数 是当你用这个函数进行查找命令时候 要使用回调函数时候需要传值
    但是我在需要使用查找命令时 我更喜欢使用
  2. sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg)
    相较于使用回调函数更简单些
    第一个 第二个参数同上
    第三个参数是需要定义一个二级指针的然后传过去是一个三级指针
    它的作用是用来存储数据库表中的内容的 这个数组是一个指针数组
    每个元素是一个指针 而这个指针内保存的又是数组,所以这个指针是个数组指针 所以要传三级指针
    第四第五是行数和列数 这里的行数是不算总表头的

二、功能

1.增加成员及信息 2.显示通讯录所以成员信息
3.查找成员信息 4.删除成员
5.修改成员信息 6.退出数据库

三、代码

1、主函数

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sqlite3.h>
#include"address_list.h"

int main(){
	sqlite3 * pdb;
	int ret;

	ret = sqlite3_open("database.db",&pdb);

	if(ret != SQLITE_OK){
		printf("open database fail! %s\n",sqlite3_errmsg(pdb));
		exit(0);
	}
	else{
		printf("open database success!\n");
	}

	if(create_table(pdb) == SQLITE_OK){
		printf("create or open table success!\n");
	}
	else{
		printf("create or open table fail!\n");
		sqlite3_close(pdb);
		return 0;
	}

	welcome();
	while(1){
		int num;
		printf("请输入你的选择:\n");
		scanf("%d",&num);
		switch(num){
			case 1:
				if(insert_record(pdb) != SQLITE_OK){
					sqlite3_close(pdb);
					exit(-1);
				}
				break;
				
			case 2:
				if(inquire_nocb(pdb) == SQLITE_OK){
					printf("inquire success\n");
				}
				else{
					printf("inquire fail!\n");
				}
				break;

			case 3:
				find_record(pdb);
				break;

			case 4:
				delete_record(pdb);
				break;

			case 5:
				update_data(pdb);
				break;

			case 6:
				sqlite3_close(pdb);
				printf("退出成功\n");
				exit(0);
		}
	}

	return 0;
}

2、函数声明

#ifndef address_list
#define address_list
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sqlite3.h>

void welcome();
int create_table(sqlite3 *pdb);
int insert_record(sqlite3 *pdb);
int inquire_nocb(sqlite3 *pdb);
int find_record(sqlite3 *pdb);
int delete_record(sqlite3 *pdb);
int update_data(sqlite3 *pdb);

#endif

3、功能函数

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sqlite3.h>
#include"address_list.h"


void welcome(){
	printf("*************************************************************************\n");
	printf("****************                                        *****************\n");
	printf("****************             编程从通讯录开始           *****************\n");
	printf("****************                                        *****************\n");
	printf("*************************************************************************\n");
	printf("\n");
	printf("****************      what can I do for you ,sir        *****************\n");
	printf("\n");
	printf("******          1 Add Information!        2 Display List!          ******\n");
	printf("******          3 Information Find!       4 Delete Information     ******\n");
	printf("******          5 Alter Information!      6 Exit!                  ******\n");
	printf("******          7 敬请期待                                         ******\n");
	printf("*************************************************************************\n");
}

int create_table(sqlite3 *pdb){
	char * sql = NULL;
	char *errmsg = NULL;
	int ret;

	sql = "create table if not exists mytable (id int primary key,name text,tel text);";

	ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);

	if(SQLITE_OK != ret){
		printf("create table fail! %s\n",errmsg);
		return -1;
	}
	else{
		return SQLITE_OK;
	}
}

int insert_record(sqlite3 *pdb){
	char sql[100];
	char * errmsg = NULL;
	int ret;
	int id;
	char name[20];
	char tel[20];

	printf("请输入你想增加的成员id: 姓名: 电话号码:\n");
	scanf("%d %s %s",&id,name,tel);

	sprintf(sql,"insert into mytable (id,name,tel) values (%d,'%s','%s');",id,name,tel);

	ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);

	if(ret == SQLITE_OK){
		printf("insert record success\n");
		return SQLITE_OK;
	}
	else{
		printf("insert record fail! %s\n",errmsg);
		return -1;
	}
}

int inquire_nocb(sqlite3 * pdb){
	char * sql = NULL;
	char * errmsg = NULL;
	char **ret_val = NULL;
	int nrow;
	int ncol;
	int ret;
	int i;

	sql = "select * from mytable;";

	ret = sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg);

	if(ret == SQLITE_OK){
		printf("nrow = %d,ncol = %d\n",nrow,ncol);

		for(i = 0; i < (nrow + 1) * ncol;i++){
			printf("%-15s",ret_val[i]);

			if((i + 1) % ncol == 0){
				printf("\n");
			}
		}
	}
	else{
		sqlite3_free_table(ret_val);

		return -1;
	}

	sqlite3_free_table(ret_val);

}

int find_record(sqlite3 *pdb){
	char sql[100];
	char * errmsg = NULL;
	char ** ret_val = NULL;
	char name[20];
	int nrow;
	int ncol;
	int ret;
	int i;

	printf("please input you want to find name:\n");
	scanf("%s",name);

	sprintf(sql,"select * from mytable where name = '%s';",name);

	ret = sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg);
	
	if(ret == SQLITE_OK){
		printf("nrow = %d,ncol = %d\n",nrow,ncol);
		for(i = 0;i < (nrow + 1) * ncol;i++){
			printf("%-15s",ret_val[i]);
			if((i+1) % ncol == 0){
				printf("\n");
			}
		}
		return SQLITE_OK;
	}
	else{
		printf("find fail! %s\n",errmsg);
		return -1;
	}

}

int delete_record(sqlite3 * pdb){
	char sql[100];
	char * errmsg = NULL;
	int ret;
	char name[20];

	printf("请输入你想删除人的姓名:\n");
	scanf("%s",name);

	sprintf(sql,"delete from mytable where name = '%s';",name);

	ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);
	if(ret == SQLITE_OK){
		printf("delete success!\n");
		return SQLITE_OK;
	}
	else{
		printf("delete fail! %s\n",errmsg);
		return -1;
	}
}

int update_data(sqlite3 * pdb){
	char sql[100];
	char * errmsg = NULL;
	int ret;
	char name[20];
	char rename[20];
	int id;
	char tel[20];
	int num;

	printf("请输入你想修改人的姓名:\n");
	scanf("%s",name);
	printf("请输入你想更改的信息:\n");
	printf("1----id\n");
	printf("2----name\n");
	printf("3----tel\n");
	scanf("%d",&num);

	switch(num){
		case 1:
			printf("更改id的功能在维护\n");
			break;

		case 2:
			printf("请输入你想更改的名字:\n");
			scanf("%s",rename);

			sprintf(sql,"update mytable set name='%s' where name='%s';",rename,name);

			ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);
			if(ret == SQLITE_OK){
				printf("update message success!\n");
				return SQLITE_OK;
			}
			else{
				printf("updata message fail! %s\n",errmsg);
				return -1;
			}
			break;

		case 3:
			printf("更改电话号码功能维护中\n");
			break;
	}
}

标签:int,数据库,sql,ret,通讯录,3.0,printf,sqlite3,pdb
来源: https://blog.csdn.net/qq_46186025/article/details/123233035

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有