首页 > 数据库 >【sqlite3】联系人管理系统

【sqlite3】联系人管理系统

时间:2024-06-30 19:29:29浏览次数:25  
标签:zErrMsg 管理系统 联系人 rc db printf sqlite3

SQLite3实现简单的联系人管理系统

有关sqlite3的基础知识请点击:SQLite3的使用
效果展示:
在这里插入图片描述

创建一个名为contacts.db的数据库

首先,我们需要创建一个名为contacts.db的数据库,并建立一个名为"contact"的表,用于存储联系人信息。该表包含四个列:id、name、phone和email。
以下是创建数据表的SQL语句:

CREATE TABLE IF NOT EXISTS contact (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    phone TEXT,
    email TEXT
);

代码:

#include <sqlite3.h>
#include <stdio.h>

#define DATABASE_NAME "contacts.db"

int main(int argc, char* argv[]) {
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;
	/*打开数据库*/
	rc = sqlite3_open(DATABASE_NAME, &db);
	if (rc) {
		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		return 1;
	} else {
		fprintf(stdout, "Opened database successfully\n");
	}

	/*创建表的SQL语句*/
	char *sql = "CREATE TABLE IF NOT EXISTS contact ("
		"id INTEGER PRIMARY KEY AUTOINCREMENT,"
		"name TEXT NOT NULL,"
		"phone TEXT,"
		"email TEXT"
		");";

	/*执行SQL语句*/
	rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
	if (rc != SQLITE_OK) {
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	} else {
		printf("Table created successfully\n");
	}

	/*关闭数据库文件*/
	sqlite3_close(db);
	return 0;
}

实现“添加联系人”功能的代码:

#include <sqlite3.h>
#include <stdio.h>

#define DATABASE_NAME "contacts.db"
#define STRLEN 50

int main(int argc, char* argv[]) {
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;
	/*打开数据库*/
	rc = sqlite3_open(DATABASE_NAME, &db);
	if (rc) {
		fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		return 1;
	}

	char *sql_query, name[STRLEN], phone[STRLEN], email[STRLEN];
	int opt;

	/*创建表的SQL语句*/
	char *sql = "CREATE TABLE IF NOT EXISTS contact ("
		"id INTEGER PRIMARY KEY AUTOINCREMENT,"
		"name TEXT NOT NULL,"
		"phone TEXT,"
		"email TEXT"
		");";

	/*执行SQL语句*/
	rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);
	if (rc != SQLITE_OK) {
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	} else {
		printf("Table created successfully\n");
	}

	while(1) {
		printf("请输入要执行的操作:\n");
		printf("1. 添加联系人\n");
		printf("2. 查找联系人\n");
		printf("3. 更新联系人\n");
		printf("4. 删除联系人\n");
		printf("5. 退出程序\n");
		/*获取用户命令*/
		while( !scanf("%d", &opt) ) getchar();

		switch(opt) {
		case 1:
			// 添加联系人
			printf("请输入姓名:\n");
			scanf("%s", name);
			getchar();
			printf("请输入电话号码:\n");
			scanf("%s", phone);
			getchar();
			printf("请输入电子邮件地址:\n");
			scanf("%s", email);
			getchar();
			printf("您输入的姓名是: %s\t电话号码是: %s\n电子邮件是: %s\n", name, phone, email);
			printf("请输入[y]确认 \n");
			if('y' != getchar()) {
				while(getchar() != '\n');
				printf("添加联系人失败 [已取消]\n");
				continue;
			}
			sql_query = sqlite3_mprintf("INSERT INTO contact "
					"(name, phone, email) VALUES('%s', '%s', '%s')", 
					name, phone, email);
			rc = sqlite3_exec(db, sql_query, NULL, NULL, &zErrMsg);
			if(rc != SQLITE_OK) {
				printf("添加联系人失败 [%s]\n", zErrMsg);
				sqlite3_free(zErrMsg);
			} else {
				printf("添加联系人成功!\n");
			}
			sqlite3_free(sql_query);
			break;	
		case 2:
			//查找联系人
			break;
		case 3:
			//更新联系人
			break;
		case 4:
			//删除联系人
			break;
		case 5:
			sqlite3_close(db);
			return 1;
			break;
		default:
			printf("无效的选项,请重新输入!\n");
			break;
		}
	}
	/*关闭数据库文件*/
	sqlite3_close(db);
	return 0;
}

完整代码

联系人管理系统完整代码

#include <sqlite3.h>
#include <stdio.h>

#define DATABASE_NAME "contacts.db"
#define STRLEN 50

static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
    int i;
    printf("查询结果:\n");
    for(i = 0; i < argc; i++) {
        printf("%s: %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");

    return 0;
}

int main(int argc, char* argv[]) {
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;
	/*打开数据库*/
	rc = sqlite3_open(DATABASE_NAME, &db);
	if (rc) {
		fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		return 1;
	}

	char *sql_query, name[STRLEN], phone[STRLEN], email[STRLEN];
	int id, opt;

	/*创建表的SQL语句*/
	char *sql = "CREATE TABLE IF NOT EXISTS contact ("
		"id INTEGER PRIMARY KEY AUTOINCREMENT,"
		"name TEXT NOT NULL,"
		"phone TEXT,"
		"email TEXT"
		");";

	/*执行SQL语句*/
	rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg); // 创建表
	if (rc != SQLITE_OK) {
		fprintf(stderr, "SQL error: %s\n", zErrMsg);
		sqlite3_free(zErrMsg);
	} else {
		printf("Table created successfully\n");
	}

	while(1) {
		printf("请输入要执行的操作:\n");
		printf("1. 添加联系人\n");
		printf("2. 查找联系人\n");
		printf("3. 更新联系人\n");
		printf("4. 删除联系人\n");
		printf("5. 退出程序\n");
		/*获取用户命令*/
		while( !scanf("%d", &opt) ) getchar();

		switch(opt) {
		case 1:
			// 添加联系人
			printf("请输入姓名:\n");
			scanf("%s", name); 
			getchar();
			printf("请输入电话号码:\n");
			scanf("%s", phone);
			getchar();
			printf("请输入电子邮件地址:\n");
			scanf("%s", email);
			getchar();
			printf("您输入的姓名是: %s\t电话号码是: %s\n电子邮件是: %s\n", name, phone, email);
			printf("请输入[y]确认 \n");
			if('y' != getchar()) {
				while(getchar() != '\n');
				printf("添加联系人失败 [已取消]\n");
				continue;
			}
			sql_query = sqlite3_mprintf("INSERT INTO contact "
					"(name, phone, email) VALUES('%s', '%s', '%s')", 
					name, phone, email);
			rc = sqlite3_exec(db, sql_query, NULL, NULL, &zErrMsg);
			if(rc != SQLITE_OK) {
				printf("添加联系人失败 [%s]\n", zErrMsg);
				sqlite3_free(zErrMsg);
			} else {
				printf("添加联系人成功!\n");
			}
			sqlite3_free(sql_query);
			break;	
		case 2:
			//查找联系人
			printf("请输入要查找的姓名或部分姓名:\n");
			scanf("%s", name);
			getchar();

			sql_query = sqlite3_mprintf("SELECT * FROM contact WHERE name LIKE '%s'", name);
			rc = sqlite3_exec(db, sql_query, callback, NULL, &zErrMsg);
			if(rc != SQLITE_OK) {
				printf("查询联系人失败: %s\n", zErrMsg);
				sqlite3_free(zErrMsg);
			}
			break;
		case 3:
			// 更新联系人
			printf("请输入要更新的联系人ID:\n");
			while( !scanf("%d", &id) ) getchar();
			printf("请输入新的姓名:\n");
			scanf("%s", name);
			getchar();
			printf("请输入新的电话号码:\n");
			scanf("%s", phone);
			getchar();
			printf("请输入新的电子邮件地址:\n");
			scanf("%s", email);
			getchar();

			sql_query = sqlite3_mprintf("UPDATE contact SET name='%s', phone='%s', email='%s' WHERE id=%d", 
					name, phone, email, id);
			rc = sqlite3_exec(db, sql_query, NULL, NULL, &zErrMsg);
			if(rc != SQLITE_OK) {
				printf("更新联系人失败: %s\n", zErrMsg);
				sqlite3_free(zErrMsg);
			} else {
				printf("更新联系人成功!\n");
			}
			break;
		case 4:
			// 删除联系人
			printf("请输入要删除的联系人ID:\n");
			while( !scanf("%d", &opt) ) getchar();

			sql_query = sqlite3_mprintf("DELETE FROM contact WHERE id=%d", id); // sqlite3_mprintf函数会自动申请内存空间,
			rc = sqlite3_exec(db, sql_query, NULL, NULL, &zErrMsg);
			if(rc != SQLITE_OK) {
				printf("删除联系人失败: %s\n", zErrMsg);
				sqlite3_free(zErrMsg); // 释放内存空间
			} else {
				printf("删除成功!\n");
			}
			break;
		case 5:
			sqlite3_close(db);
			return 1;
			break;
		default:
			printf("无效的选项,请重新输入!\n");
			break;
		}
	}
	/*关闭数据库文件*/
	sqlite3_close(db);
	return 0;
}

上述代码实现了一个简单的联系人管理系统,可以通过命令行进行添加、查找、更新和删除操作。其中,使用sqlite3_mprintf()函数来创建SQL查询语句。
在程序开始时,会提示用户输入要执行的操作,并根据用户输入的选项来执行相应的操作。每个操作都有相应的提示信息和输入要求,例如添加联系人需要输入姓名、电话号码和电子邮件地址等信息。
在查询联系人时,我们使用回调函数callback()来处理查询结果并将输出内容改为中文。对于其他操作,我们只需检查SQL查询是否成功并处理相应的错误消息即可。
需要注意的是,在实际开发中,还需要对输入进行合法性验证以及防止SQL注入攻击等安全问题。

标签:zErrMsg,管理系统,联系人,rc,db,printf,sqlite3
From: https://blog.csdn.net/2201_75563094/article/details/140081588

相关文章

  • 基于java+springboot+vue实现的毕业论文管理系统(文末源码+Lw)251
    摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本毕业论文管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效......
  • 基于JSP的体育竞赛成绩管理系统
    开头语:你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。开发语言:JSP数据库:MySQL技术:JSP+Java工具:MyEclipse,Tomcat,MySQL系统展示首页管理员功能模块运动员功能模块裁判员功能模块摘要体育竞赛成绩管理系统的开发旨在适应网络市场的发......
  • 基于SpringBoot的高校大学生学科竞赛管理系统+53135(免费领源码)可做计算机毕业设计JAVA
    springboot高校大学生学科竞赛管理系统的设计与实现摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设高校大学生学科竞赛管理系统。......
  • Java毕业设计基于SSM的社区物业管理系统
    使用旧方法对社区物业信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在社区物业信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的社区物业管理系统管理员功能有个人中心,用户管理,楼盘......
  • Java毕业设计基于SSM的封闭式学校高校师生外出请假管理系统
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本疫情期间高校师生外出请假管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理......
  • Java毕业设计基于SSM的留守儿童帮助救助管理系统
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了葛溪乡留守儿童信息管理系统的开发全过程。通过分析高校学生综合素质评价管理方面的不足,创建了一个计算机管理葛溪乡留守儿童信息管理系统的方案。文章介绍了葛溪乡留守儿童......
  • 课题分享:智能停车场管理系统,基于java+SSM+mysql
     一、前言介绍       随着互联网技术的飞速进步和网络覆盖的日益扩大,智能停车场管理系统依托于强大的网络技术基础,实现了迅猛的发展。在设计和开发这样的系统时,首要任务是深入理解并满足用户的实际需求。这要求开发者通过市场调研和用户反馈,准确把握用户需求,从而打造......
  • 课题分享:学生成绩管理系统,基于java+SSM+mysql
     一、前言介绍    随着互联网技术的飞速发展和普及,学生成绩管理系统也得到了显著的提升和改进。这一进步首先源于对学生实际需求的深入理解和满足。开发者通过与学生的互动和反馈,了解到他们对于成绩管理的具体需求,并据此开发出具有针对性的功能。这些功能不仅满足了学......
  • 基于java jsp ssm vue校园拓展活动培训管理系统(源码+LW+部署讲解)
    前言......
  • JAVA农机管理系统
    一、项目介绍首页展示、个人中心、农机机主管理、使用者管理、农机类型管理、农机管理、农机预约管理、系统管理、系统公告二、环境需要jdk1.8、mysql8.0、推荐IDEA三、技术栈java编程语言、springboot框架、vue框架、mybatis数据持久层、mysql数据库、maven构建工具......