📄 logindlg.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 + -