LinuxC SQLite3数据库实现通讯录

tongxunlu.h

#ifndef _TONGXUNLU_H_
#define _TONGXUNLU_H_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sqlite3.h>

void welcome(); //欢迎界面
void menu(); //菜单界面
int create_table(sqlite3 *pdb); //创建表
int insert_record(sqlite3 *pdb); //插入数据
int insert_record(sqlite3 *pdb); //插入数据
void is_tel_right(char *tel); //检查号码格式是否有误
int lookinfo(sqlite3 *pdb); //查看通讯录
void findinfo(sqlite3 *pdb); //查找联系人
int findinfo_id(sqlite3 *pdb); //按id查找联系人
int findinfo_name(sqlite3 *pdb); //按姓名查找联系人
int deleteinfo(sqlite3 *pdb); //删除联系人
int changeinfo(sqlite3 *pdb); //修改联系人信息
void display(char **pResult, int rowc, int colc); //打印结果
void mypause(); //暂停

#endif 

tongxunlu.c

#include "tongxunlu.h"

void welcome() //欢迎界面
{
	system("clear");
	printf("-----------------------------------------------------\n");
	printf("\t\t欢迎使用BK通讯录系统\n");
	printf("\t\t正在加载......\n");
	printf("-----------------------------------------------------\n");
}

void menu() //菜单界面
{
	sleep(1);
	system("clear");
	printf("********************************\n");
	printf("\t1.***添加用户***\n");
	printf("\t2.***查看用户***\n");
	printf("\t3.***搜索用户***\n");
	printf("\t4.***删除用户***\n");
	printf("\t5.***修改用户***\n");
	printf("\t6.***退出系统***\n");
	printf("********************************\n");
}

int create_table(sqlite3 *pdb) //创建表
{
	char *sql = NULL;
	char *errmsg = NULL;
	
	sql = "create table if not exists person (id integer primary key not null, name text not null unique, age integer not null, tel text not null, address text not null);";
	
	if (SQLITE_OK != sqlite3_exec(pdb, sql, NULL, NULL, &errmsg))
	{
		printf("Create table fail: %s\n", errmsg);
		sleep(1);
		
		return -1;
	}
	
	return SQLITE_OK;
	
}

int insert_record(sqlite3 *pdb) //插入数据
{
	system("clear");
	char sql[100];
	char *errmsg = NULL;
	int id, age;
	char name[20];
	char tel[20];
	char address[20];
	
	
	printf("Please input (id name age tel address):\n");
	scanf("%d %s %d %s %s", &id, name, &age, tel, address);
	is_tel_right(tel);
	sprintf(sql, "insert into person values (%d, '%s', %d, '%s', '%s');", id, name, age, tel, address);
	
	if (SQLITE_OK != sqlite3_exec(pdb, sql, NULL, NULL, &errmsg))
	{
		printf("insert record fail: %s\n", errmsg);
		sleep(1);
		
		return -1;
	}
	system("clear");
	printf("插入成功!\n");
	printf("返回主菜单中...\n");
	
	return SQLITE_OK;
}

void is_tel_right(char *tel) //检查号码格式是否有误
{
	int mark = 0; //创建一个标记,如果号码有误,mark标记为1,然后重新输入
	char *p = tel;
	
	if (11 != strlen(tel)) // 手机号码必须为11位
	{
		mark = 1;
	}
	
	while (*p != '\0') //挨个遍历查询输入的是否正确
	{
		if (*p < '0' || *p > '9')
		{
			mark = 1;
		}
		p++;
	}
	
	if (1 == mark)
	{
		printf("联系人手机号码输入格式有误!请重新输入号码!\n");
		scanf("%s", tel);
		is_tel_right(tel); //递归调用直到输入无误为止
	}
	//输入无误mark为0不需要处理
}

void display(char **pResult, int rowc, int colc) //打印结果
{
	int i;
	for (i = 0; i < (rowc + 1) * colc; i++)
		{
			printf("%-15s", pResult[i]);
			if (((i + 1) % colc) == 0)
			{
				putchar(10);
			}
		}
}

void mypause() //暂停
{
	char mark;
	printf("按任意键输入回车后返回主菜单\n");
	scanf(" %c", &mark);
	system("clear");
	printf("返回主菜单中...\n");
}

int lookinfo(sqlite3 *pdb) //查看通讯录
{
	system("clear");
	char *sql = NULL;
	char *errmsg = NULL;
	char **pResult = NULL;
	int rowc, colc;
	int flag = 0;
	
	sql = "select * from person;";
	
	if (SQLITE_OK != sqlite3_get_table(pdb, sql, &pResult, &rowc, &colc, &errmsg))
	{
		printf("lookinfo fail: %s\n", errmsg);
		sqlite3_free_table(pResult);
		sleep(1);
		
		return -1;
	}
	else
	{
		display(pResult, rowc, colc);
		sqlite3_free_table(pResult);
		mypause();
	
		return SQLITE_OK;
	}
}

void findinfo(sqlite3 *pdb) //查找联系人
{
	system("clear");
	int choice;
	
	while (1)
	{
		printf("按1输入id进行查找!\n");
		printf("按2输入姓名进行查找!\n");
		scanf("%d", &choice);
		switch(choice)
		{
		case 1:
			if (SQLITE_OK != findinfo_id(pdb))
			{
				printf("返回主菜单中...\n");
			}
			
			return;
			
		case 2:
			if (SQLITE_OK != findinfo_name(pdb))
			{
				printf("返回主菜单中...\n");
			}
			
			return;
		default:
			printf("输入有误!请重新输入!\n");
			printf("返回上一级菜单中...\n");
			sleep(1);
			system("clear");
			
			continue;
		}
	}
}

int findinfo_id(sqlite3 *pdb) //按id查找联系人
{
	system("clear");
	char sql[100];
	char *errmsg;
	char **pResult;
	int rowc, colc, id;
	
	printf("Please input id you want to find:\n");
	scanf("%d", &id);
	sprintf(sql, "select * from person where id = %d;", id);
	
	if (SQLITE_OK != sqlite3_get_table(pdb, sql, &pResult, &rowc, &colc, &errmsg))
	{
		system("clear");
		printf("findinfo_id fail: %s\n", errmsg);
		sqlite3_free_table(pResult);
		sleep(1);
		
		return -1;
	}
	else
	{
		if (0 == rowc)
		{
			system("clear");
			printf("查无此人!\n");
			printf("返回主菜单中...\n");
			sleep(1);
		}
		else
		{
			system("clear");
			display(pResult, rowc, colc); //打印结果
			mypause();
		}
		sqlite3_free_table(pResult);
		
		return SQLITE_OK;
	}
}

int findinfo_name(sqlite3 *pdb) //按姓名查找联系人
{
	system("clear");
	char sql[100];
	char name[20];
	char *errmsg;
	char **pResult;
	int rowc, colc;
	
	printf("Please input name you want to find:\n");
	scanf("%s", name);
	sprintf(sql, "select * from person where name = '%s';", name);
	
	if (SQLITE_OK != sqlite3_get_table(pdb, sql, &pResult, &rowc, &colc, &errmsg))
	{
		system("clear");
		printf("findinfo_id fail: %s\n", errmsg);
		sqlite3_free_table(pResult);
		sleep(1);
		
		return -1;
	}
	else
	{
		if (0 == rowc)
		{
			system("clear");
			printf("查无此人!\n");
			printf("返回主菜单中...\n");
			sleep(1);
		}
		else
		{
			system("clear");
			display(pResult, rowc, colc); //打印结果	
			mypause();
		}
		sqlite3_free_table(pResult);
		
		return SQLITE_OK;
	}
}

int deleteinfo(sqlite3 *pdb) //删除联系人
{
	system("clear");
	char sql[100];
	char name[20];
	char *errmsg;
	int rowc, colc;
	
	printf("Please input name you want to delete:\n");
	scanf("%s", name);
	sprintf(sql, "delete from person where name = '%s';", name);

	if (SQLITE_OK != sqlite3_exec(pdb, sql, NULL, NULL, &errmsg))
	{
		printf("Delete info fail: %s\n", errmsg);
		sleep(1);
		
		return -1;
	}
	else
	{
		system("clear");
		printf("联系人%s已删除!\n", name);
		printf("返回主菜单中...\n");
		
		return SQLITE_OK;
	}
}

int changeinfo(sqlite3 *pdb) //修改联系人信息
{
	system("clear");
	char sql[100];
	char name[20];
	int id, age;
	char tel[20];
	char address[20];
	char *errmsg;
	
	
	printf("Please input name you want to change:\n");
	scanf("%s", name);
	printf("Please input (id age tel address):\n");
	scanf("%d %d %s %s", &id, &age, tel, address);
	is_tel_right(tel);
	sprintf(sql, "update person set id = %d, age = %d, tel = '%s', address = '%s' where name = '%s';", id, age, tel, address, name);
	
	if (SQLITE_OK != sqlite3_exec(pdb, sql, NULL, NULL, &errmsg))
	{
		printf("Change info fail: %s\n", errmsg);
		sleep(1);
		
		return -1;
	}
	else
	{
		system("clear");
		printf("联系人%s已修改!\n", name);
		printf("返回主菜单中...\n");
		
		return SQLITE_OK;
	}
}
				


main.c

#include "tongxunlu.h"

int main()
{
	sqlite3 *pdb = NULL;
	
	if (SQLITE_OK != sqlite3_open("database_txl.db", &pdb)) //创建(打开)数据库
	{
		printf("Open database fail: %s\n", sqlite3_errmsg(pdb));
		
		exit (-1);
	}
	
	printf("Open database success!\n");
	
	if (SQLITE_OK != create_table(pdb)) //创建表
	{
		sqlite3_close(pdb);
		
		exit(-1);
	}
	
	welcome();
	int chioce;

	while(1)
	{
		menu();
		scanf("%d", &chioce);
		
		switch(chioce)
		{
			case 1:
				if (SQLITE_OK != insert_record(pdb)) //插入数据
				{
					printf("有错误,返回主菜单中...\n");
					sleep(1);
		
					continue;
				}
			
			break;
			
			case 2:
				if (SQLITE_OK != lookinfo(pdb)) //查看通讯录
				{
					printf("有错误,返回主菜单中...\n");
					sleep(1);
		
					continue;
				}
			
				break;
				
			case 3:
				findinfo(pdb); //查找联系人
				
				break;
				
			case 4:
				if (SQLITE_OK != deleteinfo(pdb)) //删除联系人
				{
					printf("有错误,返回主菜单中...\n");
					sleep(1);
		
					continue;
				}
				
				break;
				
			case 5:
				if (SQLITE_OK != changeinfo(pdb)) //修改联系人信息
				{
					printf("有错误,返回主菜单中...\n");
					sleep(1);
		
					continue;
				}
				
				break;
			
			case 6:
				system("clear");
				sqlite3_close(pdb); //关闭数据库
				printf("close database success!\n");
				printf("正在退出......期待您的下次使用!\n");
				sleep(1);
				system("clear");
			
				exit(0);
		
			default:
				system("clear");
				printf("输入有误,请重新输入!\n");
				sleep(1);
				continue;
		}
	}
	
	
}

makefile

OBJS=main.o tongxunlu.o
txl:$(OBJS)
	gcc $(OBJS) -o txl -lsqlite3
tongxunlu.o:$<
	gcc -c tongxunlu.c
main.o:main.c
	gcc -c main.c
.PHONY:clean
clean:
	rm *.o txl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值