C语言与sqlite3数据库模拟用户登陆流程

实现功能

1、实现用户注册账号

2、注册完成后将用户信息存储在数据库中

3、用户登陆,如果多次登陆不成功可以重新注册账号再次登陆

4、退出登陆页面

 

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

int mysqlite3_callback(void *para, int f_num, char **f_value, char **f_name)
{
	static int flag = 0;
	int i;
	if (flag == 0)
	{
		for (i = 0; i < f_num; i++)
		{
			printf("%-12s", f_name[i]);
		}
		printf("\n");
		flag = 1;
	}

	for (i = 0; i < f_num; i++)
	{
		printf("%-12s", f_value[i]);
	}
	printf("\n");

	return 0;
}

int main()
{
	sqlite3 *mydb = NULL;

	int ret = sqlite3_open("./student.db", &mydb); //句柄
	if (ret != SQLITE_OK)
	{
		printf("open sqlite failed\n");
		return -1;
	}

	char sql[1024];

	sprintf(sql, "create table if not exists user (users varchar(20), password varchar(20));");
	ret = sqlite3_exec(mydb, sql, NULL, NULL, NULL);
	if (ret != SQLITE_OK)
	{
		printf("create table failed\n");
		return -1;
	}
	while(1)
	{


		int a;
		printf("***************************************\n");
		printf("请输入你想要执行的操作:\n");
		printf("其他字符,退出!!!\n");
		printf("1.已有账户请登录:\n");
		printf("2.没有账户,请注册:\n");
		printf("***************************************\n");
		scanf("%d",&a);
		printf("\n");
		char users[20];
		char password[20];

		if(a==2)
		{
		   char *errmsg;
			printf("请输入想要注册户名:");
			char username[20];
			scanf("%s",users);

			printf("请输入密码:");
			char password[20];
			scanf("%s",password);

			sprintf(sql, "insert into user(users,password)values('%s', '%s');", users, password);
		//	pritnf("%s\n",sql);
			ret = sqlite3_exec(mydb, sql, NULL, NULL,&errmsg);
			if (ret != SQLITE_OK)
			{
				printf("%s\n",errmsg);
				printf("注册失败!\n");
				return -1;
			}

			printf("注册成功!\n");
		}

		if(a==1)
		{
		
			printf("请输入用户名:");
			scanf("%s", users);

			printf("请输入密码:");
			scanf("%s", password);

			sprintf(sql, "select * from user where users='%s' and password='%s';", users, password);
			ret = sqlite3_exec(mydb, sql, mysqlite3_callback, NULL, NULL);
			if (ret != SQLITE_OK)
			{
				printf("登录失败账户或密码错误,请重新输入\n");
				continue;
			}
			if(ret==SQLITE_OK)
			{
				printf("登录成功!!");
				return 0;

			}


		}	
		elif()
		{
			return 0 ;
		}
	}
		sqlite3_close(mydb);
		return 0;
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 我不能提供完整的代码,但是我可以提供一些c语言sqlite3数据库实现停车场功能的示例代码。 1. 首先,需要使用sqlite3库来连接数据库,并创建相应的数据表,例如车位表和车辆信息表。 ```c #include <sqlite3.h> int main() { sqlite3 *db; char *err_msg = 0; int rc = sqlite3_open("parking.db", &db); if (rc != SQLITE_OK) { fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } char *sql = "CREATE TABLE parking_spaces(" \ "id INTEGER PRIMARY KEY," \ "is_available BOOLEAN);" \ "CREATE TABLE vehicles(" \ "id INTEGER PRIMARY KEY," \ "plate_number TEXT," \ "parking_space_id INTEGER," \ "FOREIGN KEY(parking_space_id) REFERENCES parking_spaces(id));"; rc = sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; } sqlite3_close(db); return 0; } ``` 2. 然后实现停车场的基本功能,例如车辆进入停车场和离开停车场,以及查询停车场的状态。 ```c int enter_parking_lot(sqlite3 *db, char *plate_number) { char *sql = "INSERT INTO vehicles (plate_number, parking_space_id) " \ "SELECT ?, id " \ "FROM parking_spaces " \ "WHERE is_available = 1 " \ "ORDER BY id " \ "LIMIT 1;"; sqlite3_stmt *stmt; sqlite3_prepare_v2(db, sql, -1, &stmt, 0); sqlite3_bind_text(st ### 回答2: 使用C语言SQLite3数据库实现停车场功能的详细代码如下: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sqlite3.h> typedef struct { int id; char license_plate[10]; char enter_time[20]; char exit_time[20]; int status; // 0: 空位, 1: 已停车 } ParkingSpace; sqlite3 *db; char *errMsg; // 初始化数据库 int initializeDatabase() { int rc = sqlite3_open("parking.db", &db); if (rc) { fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db)); return 0; } char *sql = "CREATE TABLE IF NOT EXISTS ParkingSpaces (ID INT PRIMARY KEY NOT NULL, LicensePlate TEXT, EnterTime TEXT, ExitTime TEXT)"; rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "无法创建表: %s\n", errMsg); sqlite3_free(errMsg); return 0; } return 1; } // 停车 int park(ParkingSpace *parkingSpaces, int numSpaces) { char licensePlate[10]; printf("请输入车牌号: "); scanf("%s", licensePlate); for (int i = 0; i < numSpaces; i++) { if (parkingSpaces[i].status == 0) { parkingSpaces[i].id = i + 1; strcpy(parkingSpaces[i].license_plate, licensePlate); time_t rawtime; struct tm *timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); strftime(parkingSpaces[i].enter_time, sizeof(parkingSpaces[i].enter_time), "%Y-%m-%d %H:%M:%S", timeinfo); parkingSpaces[i].status = 1; // 将停车记录插入数据库 char sql[100]; sprintf(sql, "INSERT INTO ParkingSpaces (ID, LicensePlate, EnterTime) VALUES (%d, '%s', '%s')", parkingSpaces[i].id, parkingSpaces[i].license_plate, parkingSpaces[i].enter_time); int rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "无法插入数据: %s\n", errMsg); sqlite3_free(errMsg); return 0; } printf("停车成功,车位号: %d\n", parkingSpaces[i].id); return 1; } } printf("暂无空余车位\n"); return 0; } // 离开车位 int leave(ParkingSpace *parkingSpaces, int numSpaces) { int spaceId; printf("请输入车位号: "); scanf("%d", &spaceId); for (int i = 0; i < numSpaces; i++) { if (parkingSpaces[i].id == spaceId && parkingSpaces[i].status == 1) { time_t rawtime; struct tm *timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); strftime(parkingSpaces[i].exit_time, sizeof(parkingSpaces[i].exit_time), "%Y-%m-%d %H:%M:%S", timeinfo); // 更新停车记录中的离开时间 char sql[100]; sprintf(sql, "UPDATE ParkingSpaces SET ExitTime = '%s' WHERE ID = %d", parkingSpaces[i].exit_time, parkingSpaces[i].id); int rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc != SQLITE_OK) { fprintf(stderr, "无法更新数据: %s\n", errMsg); sqlite3_free(errMsg); return 0; } parkingSpaces[i].status = 0; printf("离开成功,车牌号: %s\n", parkingSpaces[i].license_plate); return 1; } } printf("该车位未停车或车位号输入有误\n"); return 0; } int main() { int numSpaces; printf("请输入停车场总共的车位数:"); scanf("%d", &numSpaces); ParkingSpace *parkingSpaces = (ParkingSpace *)malloc(numSpaces * sizeof(ParkingSpace)); if (!initializeDatabase()) { return 1; } int choice; while (1) { printf("\n请选择以下操作:\n"); printf("1. 停车\n"); printf("2. 离开车位\n"); printf("3. 退出\n"); printf("请输入操作的序号:"); scanf("%d", &choice); switch (choice) { case 1: park(parkingSpaces, numSpaces); break; case 2: leave(parkingSpaces, numSpaces); break; case 3: free(parkingSpaces); sqlite3_close(db); return 0; default: printf("请输入有效的序号\n"); break; } } return 0; } ``` 以上代码实现了一个基本的停车场系统,包括停车和离开车位的功能,并在SQLite3数据库中记录了停车信息。代码通过控制台输入来模拟用户与系统的交互,并将停车信息存储在名为"parking.db"的SQLite3数据库中的"ParkingSpaces"表中。停车信息包括车位号、车牌号、进入时间和离开时间。 ### 回答3: 实现停车场功能需要以下几个步骤:创建数据库、创建表、插入数据、查询数据、更新数据和删除数据。 首先,我们需要使用C语言中的sqlite3库,确保已经安装了sqlite3,并在代码中包含了适当的头文件。 1. 创建数据库: 可以使用`sqlite3_open()`函数创建一个数据库,指定数据库名称并将其保存在sqlite3指针中。示例代码如下: ```c #include <stdio.h> #include <sqlite3.h> int main() { sqlite3 *db; int rc = sqlite3_open("parking.db", &db); if (rc) { fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db)); return 0; } sqlite3_close(db); return 0; } ``` 将上述代码保存为`create_db.c`文件,并编译运行,将创建名为`parking.db`的数据库文件。 2. 创建表: 创建停车场表,该表将存储每个车辆的相关信息,如车牌号、进入时间和离开时间。示例代码如下: ```c sqlite3 *db; char *sql = "CREATE TABLE ParkingLot (LicensePlate TEXT, EntryTime TEXT, ExitTime TEXT);"; rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc != SQLITE_OK){ fprintf(stderr, "无法创建表: %s\n", errorMsg); return 0; } ``` 3. 插入数据: 向停车场表中插入新的车辆信息,例如车牌号和进入时间。示例代码如下: ```c char *sql = "INSERT INTO ParkingLot (LicensePlate, EntryTime) VALUES ('车牌号', '进入时间');"; rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc != SQLITE_OK){ fprintf(stderr, "无法插入数据: %s\n", errorMsg); return 0; } ``` 4. 查询数据: 查询停车场表中的车辆信息,例如查询所有车辆的进入时间和车牌号。示例代码如下: ```c char *sql = "SELECT LicensePlate, EntryTime FROM ParkingLot;"; rc = sqlite3_exec(db, sql, callback, 0, &errMsg); if (rc != SQLITE_OK){ fprintf(stderr, "无法查询数据: %s\n", errorMsg); return 0; } ``` 其中,callback函数是用于处理查询结果的回调函数。 5. 更新数据: 更新停车场表中的数据,例如更新指定车辆的离开时间。示例代码如下: ```c char *sql = "UPDATE ParkingLot SET ExitTime='离开时间' WHERE LicensePlate='车牌号';"; rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc != SQLITE_OK){ fprintf(stderr, "无法更新数据: %s\n", errorMsg); return 0; } ``` 6. 删除数据: 删除停车场表中的数据,例如删除指定车辆的相关信息。示例代码如下: ```c char *sql = "DELETE FROM ParkingLot WHERE LicensePlate='车牌号';"; rc = sqlite3_exec(db, sql, 0, 0, &errMsg); if (rc != SQLITE_OK){ fprintf(stderr, "无法删除数据: %s\n", errorMsg); return 0; } ``` 这些代码片段是实现停车场功能的基本步骤。你可以将上述代码整合到一个文件中,并根据具体需求进行修改和补充。记得在代码文件中包含适当的头文件和函数声明,以及适当的错误处理机制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值