//此代码为注册功能

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(, , "楷体");
                   settextcolor(RGB(,,));
                   outtextxy(, , "打开数据库失败!");
                   voice_No_name();
                   main();
                   sqlite3_close(db);
    }
    InputBox(a.id,,"请输入账号");
     outtextxy(,,a.id);
     InputBox(a.pwd,,"请输入密码");
    outtextxy(,,"********");
    Sleep();
  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(, , "楷体");
           settextcolor(RGB(,,));
           outtextxy(, , "登录失败!");
           Sleep();
           cleardevice();
           main();
        }
       else     ///rc=0 ok
      {
            cleardevice();
            setmode();
            settextstyle(, , "楷体");
            settextcolor(RGB(,,));
            outtextxy(, , "登录成功,欢迎使用!");
            voice_succeed();
            cleardevice();
            option_Menu();
      }
         sqlite3_close(db);
}

使用数据库sqlite3 C语言实现登陆注册的功能的更多相关文章

  1. Spring Boot+Jpa(MYSQL)做一个登陆注册系统(前后端数据库一站式编程)

    Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且连接我们的MySQL数据库. 我将假设读者为几乎零基础,在实战讲解中会渗透Sprin ...

  2. Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)

    写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...

  3. PHP数据库登陆注册简单做法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

                   在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...

  5. Python标准库14 数据库 (sqlite3)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...

  6. [转]SQLITE3 C语言接口 API 函数简介

    SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...

  7. 数据库(SQLITE3函数总结): sqlite3_open, sqlite3_exec, slite3_close,sqlite3_prepare_v2,sqlite3_column_text,

    Sqlite3 的确非常好用.小巧.速度快.近期研究它,有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记. 导入SQLLite library并引入头文件. libsqlite3.dyl ...

  8. 用户登陆注册【JDBC版】

    前言 在讲解Web开发模式的时候,曾经写过XML版的用户登陆注册案例!现在在原有的项目上,使用数据库版来完成用户的登陆注册!如果不了解的朋友,可以看看我Web开发模式的博文! 本来使用的是XML文件作 ...

  9. tkinter 创建登陆注册界面

    import tkinter as tk from tkinter import messagebox #设置窗口居中 def window_info(): ws = window.winfo_scr ...

随机推荐

  1. testng对失败时截图处理

    1.截图类: public class ScreenShot { public WebDriver driver; public ScreenShot(WebDriver driver) { this ...

  2. Git删除错误提交的commit

    git reset --hard <commit_id> git push origin HEAD --force

  3. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  4. CSS3文本温故

    1.CSS早期属性,分为三大类:字体.颜色和文本: 2.CSS文本类型有11个属性: 注:还有一个颜色属性:color,主要用来设置文本颜色 3.CSS3文本阴影属性:text-shadow语法:te ...

  5. .Net框架2.0和4.0版本对比

    .Net版本 2.0 SP2 4.0 操作系统 Windows 2000 SP4以上 Windows XP SP3以上 安装包大小 NetFx20SP2_x86.exe 23.8 MBNetFx20S ...

  6. 【Leafletjs】5.L.Control 自定义一个Control

    L.Control 所有leaflet控制的基础类.继承自IControl接口. 你可以这样添加控件: control.addTo(map); // the same as map.addContro ...

  7. Android Action Bar简介

    Android Action Bar简介 Design: Action Bar Action Bar是在屏幕顶端的一部分内容,通常在整个app进行中都保持存在. 它提供了几个关键的功能: 1.使得重要 ...

  8. iOS上架90034问题解决

    开发完成的APP,我们当然要上传到AppStore里面了,这可是我们心血的结晶. 可是,就当我们兴奋之余,却发现我们的App根本无法上传到AppStore.我们百度.谷歌了N种方法,就像我这种逗逼,整 ...

  9. CoreLocation 定位

    前言: 本章会使用OC和Swift分别进行实现,需要了解Swift的小伙伴可以翻一下之前的博文 LBS和SoloMo(索罗门) LBS:基于位置的服务,根据定位展示周边美食.景点等信息(全称:Loca ...

  10. Routine

    前端要学习三个部分:HTML,CSS,JavaScript(简称JS),因此首先明确三个概念:HTML是内容层,它的目的是表示一个HTML标签在页面里是个什么角色. CSS是样式层,它的目的是表示一块 ...