使用数据库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 ...
随机推荐
- Linux下如何查看哪个进程占用内存多?
1.top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者 ...
- [翻译]:SQL死锁-死锁排除
As we already saw, the reasons why we have blocking issues and deadlocks in the system are pretty mu ...
- 小白linux安装php 5.6+nginx配置(踩坑版)
因为要搭建个知识库,直接用wordpress,这前提是得先装php,实在不喜欢XAMPP,所以自己折腾,没想到php这一来还不少啊,从头到尾折腾了一个小时多.记录下主要的流程和遇到的坑. 首先官网下载 ...
- java多线程-线程通信
线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线 ...
- C#实现jQuery的方法连缀
jQuery的方法连缀使用起来非常方便,可以简化语句,让代码变得清晰简洁.那C#的类方法能不能也实现类似的功能呢?基于这样的疑惑,研究了一下jQuery的源代码,发现就是需要方法连缀的函数方法最后返回 ...
- Echo.js – 简单易用的 JavaScript 图片延迟加载插件
Echo.js 是一个独立的延迟加载图片的 JavaScript 插件.Echo.js 不依赖第三方库,压缩后不到1KB大小. 延迟加载是提高网页首屏显示速度的一种很有效的方法,当图片元素进入窗口可视 ...
- swift学习笔记之-方法部分
//方法部分 import UIKit //方法(Methods) /*方法是与某些特定类型相关联的函数,类.结构体.枚举都可以定义实例方法 实例方法(Instance Methods): 1.属于某 ...
- 【转】C++标准库和标准模板库
C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义.在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花费 ...
- [Android]对BaseAdapter中ViewHolder编写简化
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3642849.html 在Android项目中,经常都会用到Li ...
- 你真的了解UIButton、UILabel 吗?
一:首先查看一下关于UIButton的定义 @class UIImage, UIFont, UIColor, UIImageView, UILabel; //设置UIButton的样式 typedef ...