sqlite第六天

今天把之前那个简单用户登录程序,进行修改并且加一些新的程序:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <string.h>
int	total		= 0;            /* 登陆错误的次数,三次为上限 */
int	successflag	= 0;            /* 登陆成功标识 */
int	flag		= 0;
int	rc;
char	strSQL[200];                    /* 要执行的sql查询 */
char	strlogin[200];                  /* 用户名 */
char	strpwd[200];                    /* 密码 */
char	userid[200];                    /* 用户的id */
int	strsum		= 0;            /* <8的roleid出现的次数 */
int	tabids[4]	= { 0 };        /* 收集当前用户可以操作的权限:用户管理(1)、角色管理(2) */

/* 登陆部分的回调函数 */
static int callback_login( void *data, int argc, char **argv, char **azColName )
{
	flag = 1;
	int i;
	for ( i = 0; i < 3; i++ )
	{
		printf( "请输入密码:\n" );
		scanf( "%s", strpwd );
		if ( strcmp( argv[1], strpwd ) != 0 )
		{
			printf( "密码错误!\n" );
			total++;
		}else if ( strcmp( argv[2], "1" ) != 0 )
		{
			printf( "账户被锁定!\n" );
			break;
		}else{
			printf( "登陆成功!\n" );
			strcpy( userid, argv[3] );
			printf( "当前用户id:%s\n", userid );
			successflag = 1;
			break;
		}
	}
	if ( i == 3 )
	{
	printf( "3次密码错误+账户被锁定!\n" );
	memset( strSQL, 0, 200 );
	strcpy( strSQL,  "update USER  set  status=0 where LoginName ='" );
	strcat(strSQL, argv[2]);
	strcat( strSQL, "';" );
	sql = strSQL;
	rc= sqlite3_exec( db, sql,NULL,NULL, &zErrMsg );
	if ( rc != SQLITE_OK )
	{
		fprintf( stderr, "SQL error: %s\n", zErrMsg );
		sqlite3_free( zErrMsg );

	}
	}
}


/* 主页的回调函数 */
static int callback_index( void *data, int argc, char **argv, char **azColName )
{
	/* argv[1]  它是roleid的值 */
	if ( atoi( argv[1] ) == 11 )
	{
		printf( "1.用户角色分配  " );
		printf( "2.角色管理  " );
		printf( "3.用户管理  " );
		printf( "4.图书管理  " );
		tabids[0]	= 1;
		tabids[1]	= 2;
		tabids[2]	= 3;
		tabids[3]	= 4;
	}else if ( atoi( argv[1] ) == 10 )
	{
		printf( "1.用户角色分配  " );
		tabids[0] = 1;
	}else if ( atoi( argv[1] ) == 9 )
	{
		printf( "2.角色管理  " );
		tabids[1] = 2;
	}else if ( atoi( argv[1] ) == 8 )
	{
		printf( "3.用户管理  " );
		tabids[2] = 3;
	}else if ( atoi( argv[1] ) < 8 )
	{
		strsum++;
		if ( strsum < 2 )
		{
			tabids[3] = 4;
			printf( "4.图书管理  " );
		}
	}

	return(0);
}


/* 主函数 */
int main( int argc, char* argv[] )
{
	sqlite3		*db;
	char		*zErrMsg = 0;
	char		*sql;                   /* 要执行的sql */
	char		*SuccessMsg = 0;        /* 提示成功的消息 */
	const char	* data;
	/* 打开数据库 */
	rc = sqlite3_open( "test.db", &db );
	if ( rc )
	{
		fprintf( stderr, "无法打开数据库 : %s\n", sqlite3_errmsg( db ) );
		exit( 0 );
	}else{
		fprintf( stdout, "打开数据库成功!\n" );
	}

	/* 登录模块 */
	while ( 1 )
	{
		memset( strSQL, 0, 200 );
		memset( strlogin, 0, 200 );
		memset( strpwd, 0, 200 );
		strcpy( strSQL, "select LoginName,Passwd,Status,userid from User where LoginName ='" );
		printf( "请输入用户名:\n" );
		scanf( "%s", strlogin );

		/* 拼接字符串 */
		strcat( strSQL, strlogin );
		strcat( strSQL, "';" );
		sql	= strSQL; /* 登陆查询sql */
		rc	= sqlite3_exec( db, sql, callback_login, (void *) data, &zErrMsg );
		if ( rc != SQLITE_OK )
		{
			fprintf( stderr, "SQL error: %s\n", zErrMsg );
			sqlite3_free( zErrMsg );
		}
		if ( flag == 0 )
		{
			printf( "查无此户!\n" );
		}

		if ( successflag == 1 )
		{
			break;
		}
	}
	/* 主页 */
	memset( strSQL, 0, 200 );
	strcpy( strSQL, "select userid,roleid from ur where userid=" );
	strcat( strSQL, userid );
	strcat( strSQL, " order by  roleid desc;" );
	sql	= strSQL; /* 跟据userid查询当前用户的所有roleid */
	rc	= sqlite3_exec( db, sql, callback_index, (void *) data, &zErrMsg );
	if ( rc != SQLITE_OK )
	{
		fprintf( stderr, "错误: %s\n", zErrMsg );
		sqlite3_free( zErrMsg );
	}else{
		printf( "\n" );
		strsum = 0;
	}

	/* 模块操作:用户管理、角色管理、图书管理等 */
	int	tabid;                                  /* 您选择的id */
	char	tabname[20];                            /* 您选择的id对应模块,如:用户管理 */
	while ( 1 )
	{
		printf( "请选择ID:\n" );
		scanf( "%d", &tabid );
		int	y = 0;                          /* 判断是否有进入的权限 */
		int	x;                              /* 当前循环次数 */
		for ( x = 0; x < 4; x++ )               /* 遍历可选id集合 */
		{
			if ( tabids[x] == tabid )       /* 判断当前选择的id在可选集合中 */
			{
				y = 1;
				switch ( tabid )        /* 通知您的选择 */
				{
				case 1:
					strcpy( tabname, "用户角色分配" );
					break;
				case 2:
					strcpy( tabname, "角色管理" );
					break;
				case 3:
					strcpy( tabname, "用户管理" );
					break;
				case 4:
					strcpy( tabname, "图书管理" );
					break;
				default:
					break;
				}
				printf( "您已进入:%s\n", tabname );
			}
		}
		if ( y == 0 )
		{
			printf( "无此权限!\n" );
		}else{
			break;
		}
	}
	/* 关闭数据库 */
	sqlite3_close( db );
	return(0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值