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

📄 logindlg.cpp

📁 一个与金融方面有关的问题
💻 CPP
字号:
/**************************************************
登陆系统模块
作者:颜永华
***************************************************/
// LoginDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "BankClient.h"
#include "LoginDlg.h"
#include ".\logindlg.h"
#include "RegDlg.h"

#include "Md5.h"
#include "sock.h"
CLIENT_STATUS	clientStatus;//客户端状态管理
extern CSock sock;
// CLoginDlg 对话框

IMPLEMENT_DYNAMIC(CLoginDlg, CDialog)
CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLoginDlg::IDD, pParent)
{
}

CLoginDlg::~CLoginDlg()
{
}

void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_COMBO3, m_ComBankIp);
	DDX_Control(pDX, IDC_COMBO2, m_ComUser);
	DDX_Control(pDX, IDC_EDIT1, m_EditPwd);
	DDX_Control(pDX, IDC_CHECK1, m_CheckRememberPwd);
	DDX_Control(pDX, IDC_UPDATE, m_CheckUpdate);
}


BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
	ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3)
	ON_BN_CLICKED(IDOK, OnBnClickedOk)
	ON_CBN_EDITCHANGE(IDC_COMBO2, OnCbnEditchangeCombo2)
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
	ON_EN_SETFOCUS(IDC_EDIT1, OnEnSetfocusEdit1)
END_MESSAGE_MAP()


// CLoginDlg 消息处理程序

void CLoginDlg::OnBnClickedButton3()
{
	CRegDlg RegDlg;
	RegDlg.DoModal();
	// TODO: 在此添加控件通知处理程序代码
}

BOOL CLoginDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	
	//状态栏设置
	m_bar.Create(WS_CHILD|WS_VISIBLE|SBS_SIZEGRIP, CRect(0, 0, 0, 0), this, 101);
	m_bar.SetBkColor(RGB(0xa6, 0xca, 0xf0));		// 背景色
	int arWidth[] = { 130, -1 };
	m_bar.SetParts(2, arWidth);				// 分栏
	m_bar.SetText("  银行系统--输入用户名和密码进行登陆", 1, 0);	// 第一个栏的文本
	m_bar.SetText(" 空闲", 0, 0);			

	//
	m_CheckUpdate.EnableWindow(0);

	//设置默认光标
	m_ComBankIp.SetCurSel(0);
	
	//银行数组
	m_BankIP[0]="192.168.0.136";
	m_BankIP[1]="192.168.0.102";
	m_BankIP[2]="192.168.0.101";
	m_BankIP[3]="192.168.0.110";
	
	//设置秘密长度
	m_EditPwd.SetLimitText(16);
	
	//初始化用户表单
	//从文件里读入数据
	char username[100],user[11];
	int ret=::GetPrivateProfileSection("userinfo",username,100,".\\userinfo.ini");
	for(int i=0,j=0;i<ret;i++)
	{
		if(username[i]=='\0')
			j=i+1;
		else if(username[i]=='=')
		{username[i]='\0';
			strcpy(user,username+j);
			m_ComUser.AddString(user);
		}
	}
	GetPrivateProfileString("nearuser","username",user,user,11,".\\userinfo.ini");
	m_ComUser.SetWindowText(user);
////////////////////////////////////////////	

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}
 int connFlag=0,loginNum=0;//记录连接状态 和登陆次数
void CLoginDlg::OnBnClickedOk()
{//登陆
	loginNum++;
	if(loginNum%3==0)
	{//登陆三次以上失败
		m_CheckUpdate.EnableWindow(1);
		if(m_CheckUpdate.GetCheck())
		{
			if(!connFlag)
			{connFlag=sock.connectServer();
				connFlag++;
			}
			else 
			{
				EXIT_PACKET exitpacket;
				memset(&exitpacket,0,sizeof(EXIT_PACKET));
				exitpacket.wCode=CLIENT_EXIT;
				exitpacket.wLen=sizeof(EXIT_PACKET);
				m_ComUser.GetWindowText(exitpacket.customerName,10);
				sock.sendPacket((BYTE*)&exitpacket,sizeof(EXIT_PACKET));
			}
		}
		else
		{
			MessageBox("可能是系统故障,你可以点击修复系统再试!");
			return ;
		}
		m_CheckUpdate.EnableWindow(0);
    }
	//验证输入
	int errnum=0;
	int strlen=this->m_ComUser.GetWindowTextLength();
	if(strlen==0||strlen>10)
	{	errnum++;
		MessageBox("必须正确输入用户名");
		m_ComUser.SetFocus();
	}if(!errnum)
	{//打包登陆封包
		LOGIN_PACKET loginPacket;
		memset(&loginPacket,0,sizeof(LOGIN_PACKET));
		loginPacket.wCode=CLIENT_LOGIN;
		loginPacket.wLen=sizeof(LOGIN_PACKET);
		strcpy(loginPacket.customer_login_ip,m_BankIP[m_ComBankIp.GetCurSel()]);
		m_ComUser.GetWindowText(loginPacket.customerName,10);
		m_EditPwd.GetWindowText(loginPacket.customerPwd,16);
		//保存状态信息
		strcpy(clientStatus.cUserName,loginPacket.customerName);
		strcpy(clientStatus.cUserPwd,loginPacket.customerPwd);
		//MD5加密密码
		CMD5 md5;
		md5.MD5Update((BYTE*)&loginPacket.customerPwd[0],16);
		md5.MD5Final((BYTE*)&loginPacket.customerPwd[0]);
		
		if(!connFlag)//判断是否连接
			connFlag=sock.connectServer();
		if(connFlag)
		{//如果连接就发送登陆封包
			m_bar.SetText("  系统正在验证....", 0, 0);	
			if(sock.sendPacket((BYTE*)&loginPacket,sizeof(LOGIN_PACKET)))
			{
				int i=sock.RetFlag();
				if(i==0)
				{
					MessageBox("登陆失败!");
					m_bar.SetText(" 登陆失败!", 0, 0);	
					m_ComUser.SetFocus();}
				else if(i==FLAG_SUCCEED)
				{if(m_CheckRememberPwd.GetCheck())
					WritePrivateProfileString("userinfo",clientStatus.cUserName,clientStatus.cUserPwd,".\\userinfo.ini");
				else
					WritePrivateProfileString("userinfo",clientStatus.cUserName,"",".\\userinfo.ini");
					WritePrivateProfileString("nearuser","username",clientStatus.cUserName,".\\userinfo.ini");
				OnOK();
				}
				else
					MessageBox("没有登陆银行!");
			}
		}
	}
}

void CLoginDlg::OnCbnEditchangeCombo2()
{
	//限制输入字符为英文
	int i=m_ComUser.GetWindowTextLength();
	
	if(i)
	{	
		if(i<11)
		{CString str;
			m_ComUser.GetWindowText(str);
			char curCh=str.GetAt(i-1);
			if(!(curCh>='a' && curCh<='z'||curCh>='A'&&curCh<='Z'))
			{
				m_ComUser.SetWindowText(""); 
					//MessageBox("只能输入英文"); 
			}
		}else
		{	
			m_ComUser.SetWindowText("用户名长度不能大于10");
			m_ComUser.SetFocus();
		}
	}
}

void CLoginDlg::OnBnClickedCancel()
{
	//关闭连接
	sock.disconnectServer();
	OnCancel();
}

void CLoginDlg::OnEnSetfocusEdit1()
{
	//如果用户选择了保护密码,当密码框获得焦点是 自动填充
	char user[11],pwd[17];
	m_ComUser.GetWindowText(user,11);
	int ret=::GetPrivateProfileString("userinfo",user,"",pwd,17,".\\userinfo.ini");
	if(ret)
		this->m_EditPwd.SetWindowText(pwd);
	// TODO: 在此添加控件通知处理程序代码
}

⌨️ 快捷键说明

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