使用数据库sqlite3 C语言实现登陆注册的功能

简介: //此代码为注册功能 void create_regtable() { int rc; //rc为返回值,判断函数是否执行成功 rc=0函数执行成功,rc !=0函数执行失败 sqlite3 *db; //SQLite数据库指针 数据库结构体指针sqlite3为结构体 char *pFileName = "users.
//此代码为注册功能


void create_regtable()
{    
	int rc;       //rc为返回值,判断函数是否执行成功  rc=0函数执行成功,rc !=0函数执行失败
    sqlite3 *db;  //SQLite数据库指针 数据库结构体指针sqlite3为结构体
	char *pFileName = "users.db";  //数据库文件名
    char *zErr;
   
 
	rc = sqlite3_open(pFileName, &db); /*打开数据库*/
	if(rc)                             /*假,关闭数据库*/
	{
		     cleardevice();
			 setmode();
			 outtextxy(170,200,"打开数据库失败!");
			 Sleep(1000);
             main();
		     sqlite3_close(db);
	}
	
	char *pSQL="create table users(id int , pwd int ,primary key(id,pwd))";
 
   	rc = sqlite3_exec(db, pSQL, 0,0, &zErr);   /* sqlite执行接口实现表的创建*/
	
	if(rc!=SQLITE_OK)
	{
		if (zErr!=NULL)
		{
		   
			 cleardevice();
			 setmode();
			 outtextxy(170,200,"SQL错误!");
			 Sleep(1000);
             main();
			 sqlite3_free(zErr);  /* 释放错误信息所占用的空间*/
		}
	}
    	sqlite3_close(db);
 
}




void reg_Insert() 
{	
    users a;
	int rc;
 	char No_id[10]={0,0,0,0,0,0,0,0,0,0};  
	char code[6]={"12345"};
	char incode[6];
    sqlite3 *db;  //SQLite数据库指针
    char *pSQL;
    char * zErr;   /* 定义返回错误信息的变量*/
 
    char *pFileName = "users.db";  //数据库文件名  
    rc = sqlite3_open(pFileName, &db); /*打开数据库*/
 
    if(rc)                             /*假,关闭数据库*/
	{ 
	         cleardevice();
			 setmode();
			 outtextxy(170,200,"打开数据库失败!");
			 voice_name_error();
             main();
             sqlite3_close(db);
	}

       InputBox(incode,6,"验证注册编号,非教师人员不允许注册");

    if(strcmp(incode,code)==0)
	{
	
        InputBox(a.id,10,"请输入账号");
	   
     	outtextxy(295,270,a.id);

     if(strcmp(a.id,No_id)==0)
	 {
			 cleardevice();
			 setmode();
			 outtextxy(170,200,"用户名不能为空,请重新注册!");
			 voice_name_error();
             main();
		 }
	   else {
 
      
   InputBox(a.pwd,10,"请输入密码");

  	  outtextxy(293,339,"********");
   
      Sleep(1000);
 
    pSQL=sqlite3_mprintf("insert into users values('%s','%s')",a.id,a.pwd); 

	  
 	rc = sqlite3_exec(db,pSQL,0,0,&zErr); 
   
     if(rc) //rc=1
		{
		 cleardevice();
		 setmode();
		 outtextxy(220, 200, "帐号注册失败!");
		 voice_register_ok();
		 
		 main();
		 sqlite3_close(db);
		}
      else
		{
		  outtextxy(220, 200, rc);
		 cleardevice();
		 setmode();
		 outtextxy(220, 200, "帐号注册成功!");
		 voice_register_ok();
		 
		 main();
         sqlite3_close(db);
	  }
	}
        
	  } else{ cleardevice();main();}

   }     
  

 

//此代码为实现账号密码登录验证


void Login()
{   
    users a;
    int rc;    
    sqlite3 *db;  //SQLite数据库指针   sqlite3结构体  *db指向sqlite3结构体的指针
   const    char *pFileName = "users.db";   
   char * zErr;   /* 定义返回错误信息的变量*/
    rc = sqlite3_open(pFileName, &db); /*打开数据库*/
    if(rc)                             /*假,关闭数据库*/
    {
                   cleardevice(); 
                   setmode();
                   settextstyle(30, 0, "楷体"); 
                   settextcolor(RGB(0,500,0)); 
                   outtextxy(220, 200, "打开数据库失败!");
                   voice_No_name();
                   main();
                   sqlite3_close(db);
    }
    InputBox(a.id,10,"请输入账号");
     outtextxy(295,270,a.id); 
     InputBox(a.pwd,10,"请输入密码");  
    outtextxy(293,339,"********");  
    Sleep(1500); 
  char *pSQL=sqlite3_mprintf("insert into users(id,pwd)values('%s','%s')",a.id,a.pwd); 
  //主要是获取rc返回值,进行判断
 // id和pwd共同组成一个表的主键(联合主键) id/pwd谁都不能插入重复的 rc==1 错误 if取反rc==0登陆成功
 //插入的id不同pwd不同 插入成功 rc==0 if取反rc==1登陆失败
 //相当于用户名不能有重复的,用户名跟密码不能一样,增强账号的安全性。
 rc = sqlite3_exec(db, pSQL, NULL, NULL, &zErr);
//!rc==1;  error
        if (!rc)  
        {  //删除多余的数据
            char *pSQL=sqlite3_mprintf("delete from users where id = '%s' and pwd = '%s' ",a.id,a.pwd); 
            rc = sqlite3_exec(db, pSQL, NULL, NULL, &zErr);
           cleardevice(); 
           setmode();
           settextstyle(30, 0, "楷体");
           settextcolor(RGB(255,0,0)); 
           outtextxy(250, 200, "登录失败!");
           Sleep(1000);
           cleardevice();       
           main();      
        }
       else     ///rc=0 ok
      {
            cleardevice(); 
            setmode();
            settextstyle(30, 0, "楷体");
            settextcolor(RGB(0,500,0)); 
            outtextxy(250, 200, "登录成功,欢迎使用!");
            voice_succeed();
            cleardevice();       
            option_Menu();      
      }
         sqlite3_close(db);
}

 

目录
相关文章
|
1月前
|
存储 NoSQL 关系型数据库
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
63 1
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
让PolarDB更了解您--PolarDB云原生数据库核心功能体验馆
让PolarDB更了解您——PolarDB云原生数据库核心功能体验馆,由阿里云数据库产品事业部负责人宋震分享。内容涵盖PolarDB技术布局、开源进展及体验馆三大部分。技术布局包括云计算加速数据库演进、数据处理需求带来的变革、软硬协同优化等;开源部分介绍了兼容MySQL和PostgreSQL的两款产品;体验馆则通过实际操作让用户直观感受Serverless、无感切换、SQL2Map等功能。
152 7
|
11天前
|
SQL Linux 数据库
【YashanDB知识库】崖山数据库Outline功能验证
本文来自YashanDB官网,主要测试了数据库优化器在不同场景下优先使用outline计划的功能。测试环境包括相同版本新增数据、绑定参数执行、单机主备架构以及数据库版本升级等场景。通过创建表、插入数据、收集统计信息和创建outline等步骤,验证了在各种情况下优化器均能优先采用存储的outline计划。测试结果表明,即使统计信息失效或数据库版本升级,outline功能依然稳定有效,确保查询计划的一致性和性能优化。详情可见[原文链接](https://www.yashandb.com/newsinfo/7488286.html?templateId=1718516)。
【YashanDB知识库】崖山数据库Outline功能验证
|
1天前
|
NoSQL 关系型数据库 MongoDB
Apifox与Apipost数据库连接功能详细对比,让接口管理更高效!
在现代软件开发中,数据库是应用运行的核心组件,接口管理工具则是连接和调试数据库的重要桥梁。本文对比了 Apifox 和 Apipost 两款工具的数据库连接功能。Apipost 支持全面的关系型与非关系型数据库(如 MySQL、Redis、MongoDB),功能强大且免费,适合复杂项目;而 Apifox 在关系型数据库支持上表现良好,但非关系型数据库(尤其是 Redis)功能有限且收费,更适合中小项目以关系型数据库为主的需求。根据项目需求选择合适的工具,可显著提升开发效率和稳定性。
|
20天前
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
|
20天前
|
PHP 数据库
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
|
25天前
|
存储 NoSQL 关系型数据库
Apifox与Apipost数据库连接功能详细对比,让接口管理更高效!
Apipost 更加全面:无论是关系型还是非关系型数据库,它都为开发者提供了一站式解决方案,非常适合数据库架构复杂的大型项目。相对来说,Apifox偏重关系型分析和管理:若项目主要需求在于管理关系型数据库,而对非关系型的依赖较小,Apifox倒是可以应付。
46 2
|
14天前
|
SQL 关系型数据库 数据库连接
|
1月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课16 接入PostGIS全功能及应用举例
本文介绍了如何在PolarDB数据库中接入PostGIS插件全功能,实现地理空间数据处理。此外,文章还提供了使用PostGIS生成泰森多边形(Voronoi diagram)的具体示例,帮助用户理解其应用场景及操作方法。
43 1
|
2月前
|
存储 Java 数据库连接
时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
TDengine 3.3.5.0 版本正式发布,带来多项更新与优化。新特性包括提升 MQTT 稳定性和高并发性能、新增 taosX 增量备份与恢复、支持 JDBC 和 Rust 连接器 STMT2 接口、灵活配置 Grafana Dashboard 等。性能优化涵盖查询内存管控、多级存储迁移、强密码策略等,全面提升时序数据管理的效率和可靠性。欢迎下载体验并提出宝贵意见。
69 5