使用数据库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);
}

 

目录
相关文章
|
6天前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
17 4
|
14天前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
22 3
|
16天前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
28天前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
6天前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
15 0
|
28天前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
|
28天前
|
XML 数据库 数据格式
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
45 1
|
1月前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
60 0
|
9天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
43 6
|
7天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
39 3
Mysql(4)—数据库索引