学生成绩管理系统-MySQL版-Part6-登录程序
本文已被浏览5856次
登录程序是这个学生成绩管理系统比较简单的一个部分。它是整个程序的大门,也是必不可少的一部分。
首先,先看一下数据在数据库中的形式。在安装程序中,曾经要求用户注册用于登录的用户记录,这些记录是以用户名-密码MD5值形式记录的,所以在登录时应当同时比较用户名和密码的MD5值。
对于MD5的问题先解决一下。MD5本身的加密计算代码量就相当巨大,再加之并没有必要自己去写这个MD5加密的功能,因为MySQL这个开源数据库提供了一些函数,这些函数之中就有提供MD5的加密函数。
作为密码的保存,MD5并不是最佳的方案,MD5本身已经被破解,导致单从密文本身是有可能推测出密码明文的。作为密码的储存,最好应当是使用AES的加密,但是AES加密的结果是完全无规则的二进制数据,存储起来有一定的困难,也比较麻烦,就没有使用AES的加密。
ok,上代码:
#include <windows.h>
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//引入头文件
extern MYSQL mysql;
extern MYSQL_RES *result;
extern MYSQL_ROW row;
extern MYSQL_FIELD *field;
extern char Host[15];
extern char Port[8];
extern char Username[10];
extern char Password[20];
extern char DB[10];
extern char Current_User[100];
//继承变量
int LoadSettings();
int Install(int mode);
int Connect_DB();
void ChangeColorScreen(const char* color);
void ChangeWindowSize(int Width,int Height);
void ChangeWindowTitle(const char* title);
void Pause(int mode);
void CS();
void Ring();
int Drop_Table(const char* table);
int Sum_ints(int number);
void scanPass(char*p);
//声明原型
//登录界面
void Login(){
//用户名密码读入及sql语句的变量
char Username[100],Password[100];
char sql[100];
int usercount,i;
//获取用户数量
mysql_query(&mysql,"SELECT * From scm_user;");
result=mysql_store_result(&mysql);
if(mysql_num_rows(result)==0){
//如果没有用户可以考虑数据表损坏
Install(3);
}
//更改窗口样式
ChangeWindowTitle("Login");
ChangeWindowSize(26,9);
system("color 0f");
Login_tag:CS();
printf("╔══════════╗n");
printf("║ 学生成绩管理系统 ║n");
printf("║ 基于MySQL║n");
printf("╟──────────╢n");
printf("║开始使用请先登录! ║n");
printf("╚══════════╝n");
printf("Username>");
fflush(stdin);
//读入一个用户名
scanf("%s",Username);
printf("Password>");
//读入一个密码
scanPass(Password);
//查询有次此用户否
sprintf(sql,"SELECT 1 FROM scm_user WHERE Pass=MD5('%s') AND Username='%s'",Password,Username);
mysql_query(&mysql,sql);
result=mysql_store_result(&mysql);
usercount=mysql_num_rows(result);
if(usercount!=1){
//不是一个就是密码错误
CS();
Ring();
printf("╔══════════╗n");
printf("║ 学生成绩管理系统 ║n");
printf("║ 基于MySQL ║n");
printf("╟──────────╢n");
printf("║ >密码错误!< ║n");
printf("╚══════════╝n");
for(i=0;i<10;i++){
ChangeColorScreen("fc");
Sleep(50);
ChangeColorScreen("0f");
Sleep(50);
}
goto Login_tag;
}else{
//通过验证将数据转存至全局变量
strcpy(Current_User,Username);
}
}


评论
您需要 先登录 才可以回复.