⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 login.cpp

📁 用户登陆系统存入车辆(存入时间
💻 CPP
字号:

//login.cpp
//登陆系统


#include "StdAfx.h"
#include "typedef.h"
#include "md5.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>


//	名称:login
//	作用:判断用户名和密码是否正确
//	参数:void
//	返回值:登录成功:(bool)true
//			登录失败:(bool)false
bool login(void)
{
	if ((fp_user = fopen("user.dat","r")) == 0)
	{
		printf("The program run appears an accident error, click arbitrarily the key go on.");/*程序运行出现意外错误,按任意键继续*/
		getch();
		return false;
	}

	char read_username_md5[40],read_password_md5[40];
	unsigned char username_md5[17],	password_md5[17];

	read_username_md5[0] = '\0';
	read_password_md5[0] = '\0';

	rewind(fp_user);
	
	fscanf(fp_user,"%s\n%s\n%f\n%c\n%d\n%d",read_username_md5,read_password_md5,&user.price,&user.language,&user.Dimension.p_long,&user.Dimension.p_breadth);
	
	if (user.language == 'c')				//初始化界面语言
	{
		p_language_print = Chinese;
	}
	else
	{
		p_language_print = English;
	}


	//*********************************************************			Debug
		#ifdef DEBUG
		printf("\n\nDebug\n");

		printf("The strlen of read username_md5 = %d",strlen(read_username_md5));
		printf("\n%s\n",read_username_md5);

		printf("\n\n");
		getch();
		#endif
	//**********************************************************

	fclose(fp_user);

	if ((strlen(read_username_md5)) == 0)
	{
		Out_hander_ce();
		printf("Running system for the first time, click any key establish an user.\n\n第一次运行系统,按任意键创建用户\n\n");
		getch();
		char password[20];

		system("cls");
		Out_hander_ce();
		while(1)
		{
			printf("\t\t\t\te.English\n\n\t\t\t\tc.简体中文\n\n\nPlease choose an interface language:\n\n请选择界面语言:\n\n");
			scanf("%c",&user.language);

			system("cls");

			if (user.language == 'c')				//初始化界面语言
			{
				p_language_print = Chinese;
				Out_hander_ch();
			}
			else
			{
				p_language_print = English;
				Out_hander_en();
			}

			printf("\n\n%s",*(p_language_print));/*请输入用户名:*/
			scanf("%s",&user.username);

			while (1)
			{	
				printf("\n%s",*(p_language_print+1));/*请输入密码:*/
				starword(user.password);
				printf("\n\n%s",*(p_language_print+2));/*请重复输入密码:*/
				starword(password);

				if (strcmp(password,user.password) == 0)
					break;
				else
					printf("\n%s\n",*(p_language_print+3));/*两次密码输入不一致,请重新输入!*/
			}

			printf("\n\n%s",*(p_language_print+4));/*请设置每小时停车价格(格式:元.角分,例如:15.00):*/
			scanf("%f",&user.price);
			printf("\n\n%s",*(p_language_print + 77));/*请设置停车场的容量(格式:长.宽,例如:5.4):*/
			scanf("%d%*c%d",&user.Dimension.p_long,&user.Dimension.p_breadth);

			printf("\n%s%s\n%s",*(p_language_print+5),user.username,*(p_language_print+6));/*您的用户名是:*/	/*密  码  是  :*/
			
			for (unsigned i=0; i<strlen(user.password); i++)					//按照密码长度输出星号
				printf("*");

			printf("\n%s%.2f\n%s%d * %d.\n%s",*(p_language_print+7),user.price,*(p_language_print + 78),user.Dimension.p_long,user.Dimension.p_breadth,*(p_language_print+8));/*每小时停车价格是:*/	/*以上信息正确吗?(y/n)*/

			char command = 'y';
			fflush(stdin);
			command = getchar();
			switch(command)
			{
				case 'y':
					{					
						MD5_CTX md5;												//初始化用于MD5的加密结构
						MD5Init(&md5);
						
						MD5Update(&md5,username_md5,strlen((char *)user.username)); //对用户名和密码进行MD5加密
						MD5Final(username_md5,&md5); 
						MD5Update(&md5,password_md5,strlen((char *)user.password)); 
						MD5Final(password_md5,&md5); 
						

						if ((fp_user = fopen("user.dat","w")) == 0)
						{
							printf("%s",*(p_language_print+9));/*程序运行出现意外错误,按任意键继续*/
							getch();
							fclose(fp_user);
							return false;
						}

						for (int ij=0;	ij<17;	ij++)			//将md5密文写入到文件
						{
							fprintf(fp_user,"%x",username_md5[ij]);
						}

						fprintf(fp_user,"\n");

						for (ij=0;	ij<17;	ij++)
						{
							fprintf(fp_user,"%x",password_md5[ij]);
						}

						fprintf(fp_user,"\n%f",user.price);

						fprintf(fp_user,"\n%c",user.language);

						fprintf(fp_user,"\n%d",user.Dimension.p_long);

						fprintf(fp_user,"\n%d",user.Dimension.p_breadth);

						fclose (fp_user);


						carlist = InitList_Sq(sizeof(park_car),user.Dimension.p_long * user.Dimension.p_breadth);		//生成停车记录文件

						if((InPush(carlist, user.Dimension.p_long, user.Dimension.p_breadth)) == false)					//初始化车位
						{
							return false;
						}
						

						if ((fp_car = fopen("parkcar.dat","wb")) == 0)
						{
							printf("%s",*(p_language_print+9));/*程序运行出现意外错误,按任意键继续*/
							getch();
							
							return false;
						}
						if (fwrite(carlist,sizeof(park_car),user.Dimension.p_long * user.Dimension.p_breadth,fp_car) == 0)	
						{
							printf("%s",*(p_language_print+9));/*程序运行出现意外错误,按任意键继续*/
							getch();

							fclose(fp_car);
							return false;
						}
						fclose(fp_car);

						printf("\n\n%s",*(p_language_print+10));/*用户创建成功,现在将以新用户身份登录,按任意键继续。*/

						login_log();

						getch();

						return true;
					}
				case 'n':
					{
						fclose (fp_user);
						break;
					}
			}
		}
	}

	char in_username[20],in_password[20];
	while(1)
	{
		if (user.language == 'c')
		{
			Out_hander_ch();
		}
		else if (user.language == 'e')
		{
			Out_hander_en();
		}


		printf("\t\t%s",*(p_language_print));/*请输入用户名:*/
		gets(in_username);
		printf("\n\t\t%s",*(p_language_print+1));/*请输入  密码:*/
		starword(in_password);

		for(int ini = 0;	ini<20;		ini++)
		{
			user.username[ini] = in_username[ini];
			user.password[ini] = in_password[ini];
		}

		unsigned char in_username_md5[17],	in_password_md5[17];
		
		MD5_CTX md5;												//初始化用于MD5的加密结构
		MD5Init(&md5);
				
		MD5Update(&md5,in_username_md5,strlen(in_username));		//对得到的用户名和密码进行MD5加密
		MD5Final(username_md5,&md5);
		MD5Update(&md5,in_password_md5,strlen(in_password));
		MD5Final(password_md5,&md5);



		if ((fp_user = fopen("temp.tmp","w")) == 0)
		{
			printf("%s",*(p_language_print+9));/*程序运行出现意外错误,按任意键继续*/
			getch();
			return false;
		}
			
		for (int ij=0;	ij<17;	ij++)			//将md5密文写入到文件
		{
			fprintf(fp_user,"%x",username_md5[ij]);
		}

		fprintf(fp_user,"\n");

		for (ij=0;	ij<17;	ij++)
		{
			fprintf(fp_user,"%x",password_md5[ij]);
		}
						
		fclose (fp_user);


		if ((fp_user = fopen("temp.tmp","r")) == 0)
		{
			printf("%s",*(p_language_print+9));/*程序运行出现意外错误,按任意键继续*/
			getch();
			return false;
		}

		char write_username_md5[40],write_password_md5[40];

		rewind(fp_user);

		fscanf(fp_user,"%s\n%s",write_username_md5,write_password_md5);
		
		fclose(fp_user);

		//*********************************************************			Debug
			#ifdef DEBUG
			printf("\n\nDebug\n");

			printf("read_username_md5 = %s\n",read_username_md5);
			printf("write_username_md5 = %s\n",write_username_md5);
			printf("read_password_md5 = %s\n",read_password_md5);
			printf("write_password_md5 = %s\n",write_password_md5);
	
			printf("\n\n");
			getch();
			#endif 
		//**********************************************************


		if (strcmp(read_username_md5, write_username_md5) == 0 && strcmp(read_password_md5,write_password_md5) == 0)	//比较输入帐户的和文件中读取的MD5值是否相等
		{
			printf("\n\n%s\n",*(p_language_print+11));/*登陆成功,按任意键继续*/
			getch();

			break;
		}
		else
		{
			printf("\n\n%s\n\n",*(p_language_print+12));/*用户名或密码输入错误,请重新输入。按任意键继续*/

			getch();
			system("cls");
		}
	}


	carlist = InitList_Sq(sizeof(park_car),user.Dimension.p_long * user.Dimension.p_breadth);

	if ((fp_car = fopen("parkcar.dat","rb")) == 0)		//将车辆数据文件载入内存
	{
		printf("%s",*(p_language_print+9));/*程序运行出现意外错误,按任意键继续*/
		getch();

		return false;
	}

	if(fread(carlist,sizeof(park_car),user.Dimension.p_long * user.Dimension.p_breadth,fp_car) == 0)
	{
		printf("%s",*(p_language_print+9));/*程序运行出现意外错误,按任意键继续*/
		getch();

		fclose(fp_car);
		return false;
	}

	fclose(fp_car);


	login_log();
	
	system("del temp.tmp");

	return true;

}




//回显星号输入密码
//   密码可输入范围:0-9,A-Z,a-z,space
void starword(char password[20])
{
	char ch;
	int ii=0;
	while ((ch = getch()) != 13)
	{
		if ((ch>=48 && ch<=57) || (ch>=65 && ch<=90) || (ch>=97 && ch<=122) || ch==10)
		{
			password[ii] = ch;
			ii++;
			printf("*");
		}
		else if (ch == '\b' && ii>0)
		{
			printf("\b");
			printf(" ");
			printf("\b");
			ii--;
		}
	}
	password[ii] = '\0';
	for (ii=ii+1; ii<20; ii++)
	{
		password[ii] = 0;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -