使用数据库sqlite3 C语言实现登陆注册的功能
//此代码为注册功能
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语言实现登陆注册的功能的更多相关文章
- Spring Boot+Jpa(MYSQL)做一个登陆注册系统(前后端数据库一站式编程)
Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且连接我们的MySQL数据库. 我将假设读者为几乎零基础,在实战讲解中会渗透Sprin ...
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...
- PHP数据库登陆注册简单做法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...
- Python标准库14 数据库 (sqlite3)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...
- [转]SQLITE3 C语言接口 API 函数简介
SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...
- 数据库(SQLITE3函数总结): sqlite3_open, sqlite3_exec, slite3_close,sqlite3_prepare_v2,sqlite3_column_text,
Sqlite3 的确非常好用.小巧.速度快.近期研究它,有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记. 导入SQLLite library并引入头文件. libsqlite3.dyl ...
- 用户登陆注册【JDBC版】
前言 在讲解Web开发模式的时候,曾经写过XML版的用户登陆注册案例!现在在原有的项目上,使用数据库版来完成用户的登陆注册!如果不了解的朋友,可以看看我Web开发模式的博文! 本来使用的是XML文件作 ...
- tkinter 创建登陆注册界面
import tkinter as tk from tkinter import messagebox #设置窗口居中 def window_info(): ws = window.winfo_scr ...
随机推荐
- java内存模型-final
与前面介绍的锁和 volatile 相比较,对 final 域的读和写更像是普通的变量访问.对于final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个 final 域的写入,与随后把 ...
- SequenceInputStream
SequenceInputStream从名字上看, 他是一个序列字节输入流 既然是个序列 那么意味着 SequenceInputStream装着许多的输入流 所以 可以用他来合并文件 Sequence ...
- windows 安装 go语言
下载地址:http://www.cnblogs.com/osfipin/p/4856839.html. 官方教程说明: Windows 对于Windows用户,Go项目提供两种安装选项(从源码安装除外 ...
- css通用小笔记03——浏览器窗口变小 div错位的问题
我最近写网页的时候,经常碰到一个普遍的问题,经过我的查阅和尝试,终于解决了这一问题,这里有两种方法提供给大家,如果博友还有更好的方法,欢迎补充. 一.使用min-width属性: 我们先看看下面这段代 ...
- [deviceone开发]-仿微信应用(一):框架搭建
一.简介 这个示例是一步一步跟我学DeviceOne开发 - 仿微信应用系列文档对应的文档.详细介绍了ListView,IndexListView,add方法等常用功能,推荐初学者学习. 二.效果图 ...
- jQuery构造函数init参数分析(三)
分析完了字符串情况剩下的就不多了. 5.参数selector是函数 这个就是很容易想到了,首先说一下dom加载.我们通常在head里面写脚本的时候需要等待文档加载在进行处理,js是这么写的 windo ...
- 谈谈JavaScript类型检测
javascript内置的类型检测机制并非完全可靠.比如typeof操作符,并不能准确的判断数据是哪个类型,比如:数组和对象就不能通过typeof来区分. typeof [] ==="o ...
- ae动态显示属性表————切记DataTable中要先Add(row)之后再往里传值。
public partial class FrmAttributeTable : Form { private AxMapControl m_MapCtl; public FrmAttributeTa ...
- 用SVG绕过浏览器XSS审计
[Translated From]:http://insert-script.blogspot.com/2014/02/svg-fun-time-firefox-svg-vector.html === ...
- [ javascript canvas 插件演示 ] canvas 插件演示
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...