学生成绩管理系统-MySQL版-Part6-登录程序
本文已被浏览5187次
登录程序是这个学生成绩管理系统比较简单的一个部分。它是整个程序的大门,也是必不可少的一部分。
首先,先看一下数据在数据库中的形式。在安装程序中,曾经要求用户注册用于登录的用户记录,这些记录是以用户名-密码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); } }
评论
您需要 先登录 才可以回复.