C++语言课程设计
第四章 详细设计
4.1程序源代码
4.1.1登陆模块
Login.h
#pragma once
#include\#include \// Login 对话框
class Login : public CDialog {
DECLARE_DYNAMIC(Login) int a; public:
Login(CWnd* pParent = NULL); // 标准构造函数 virtual ~Login();
// 对话框数据
enum { IDD = IDD_LOGIN }; protected:
virtual void DoDataExchange(CDataExchange* pDX); CtianjinDlg dlg;
DECLARE_MESSAGE_MAP() public:
virtual BOOL OnInitDialog(); afx_msg void OnClose(); CString user;
CString password;
afx_msg void OnBnClickedOk(); CButton regis;
afx_msg void OnBnClickedButton1();
Login.cpp
#include \#include \#include \
#include \#include \
IMPLEMENT_DYNAMIC(Login, CDialog) Login::Login(CWnd* pParent /*=NULL*/) : CDialog(Login::IDD, pParent) , user(_T(\
8
C++语言课程设计
, password(_T(\{ }
Login::~Login() { }
void Login::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT3, user); DDX_Text(pDX, IDC_EDIT4, password); DDX_Control(pDX, IDC_BUTTON1, regis); }
BEGIN_MESSAGE_MAP(Login, CDialog) ON_WM_CLOSE()
ON_BN_CLICKED(IDOK, &Login::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &Login::OnBnClickedButton1) END_MESSAGE_MAP()
BOOL Login::OnInitDialog() {
CDialog::OnInitDialog();
a=0;//初始化a的值为0 用于判断该值是否退出本程序 当输入密码错误,就使该a的值增加1
CRect r;//矩形的类,数据成员是 矩形左上角的x的坐标,矩形左上角Y的坐标,矩形右下角x的坐标,矩形右下角Y的坐标 CString user;
this->GetClientRect(&r);//是获得窗口的当前的客户区,把各坐标值保存在r对象。
this->MoveWindow(600,300,r.right,r.bottom);//根据上面获得窗口的大小,来调整并且移动。
GetPrivateProfileString(\/setting.ini\
//从setting.ini配置文件中的login节名中获取该user键名的值并保存在user的值,如果找不到该键名,则保存第三个参
//数的值 即默认的值 表示未注册的账号,反之 找到了该值,表示已经注册了 if(user!=\用于判断上面获得的值是否已经注册过 如注册过,则执行if()后边的语句
regis.EnableWindow(0);//在该函数的参数赋值为0 表示禁止指定的控件接受鼠标和键盘的输入 由于该已经注册过的。
regis.SetWindowTextA(\已注册\指定该控件的内容设为 ”已注册\用于提示 }
return TRUE;
9
C++语言课程设计
}
void Login::OnClose() {
CDialog::OnClose(); }
void Login::OnBnClickedOk() {
this->UpdateData(1);//将各控件中的数据保存到相应的变量分别为”user“ ” password“
if(!user.IsEmpty()&&!password.IsEmpty())//检查该各变量的值是否为空,如该值为空,就执行else后边的语句 {
CString user1,password1;//定义两个字符串类变量 用于从配置文件的注册过的用户及密码的值保存在该变量的
GetPrivateProfileString(\./setting.ini\从本身程序的当前的setting.ini配置
//文件中的login节名中获取该user键名的值并保存在user1的值,如果找不到该键名,则保存默认值为”NULL“
GetPrivateProfileString(\20),20,\如同上面的方法
if(user==user1&&password==password1)//对比各值是否一致,满足此条件表示该用户名及密码都是正确,可以登陆,即执行if()后边的语句 {
this->ShowWindow(SW_HIDE);//把该对话框的显示方式为隐藏 dlg.DoModal();//启动主窗口的对话框 CDialog::OnOK(); } else{
a++;//密码错误次数
if(a>3)//如超过3次的错误密码就执行if()后边的语句 { CDialog::OnCancel(); return;
//调用关闭该对话框的函数 }
CString d;
d.Format(\用户名或者密码错误%d次 超过三次错误即将自动退出\
MessageBox(d,\登陆提示\用于提示密码错误 以避免令人觉得这程序有问题 } } else
MessageBox(\用户名或者密码的字符串为空\登陆提示
10
C++语言课程设计
\当该值为空,则执行该语句 用于提示。 }
void Login::OnBnClickedButton1() {
Register dialog;//定义注册对话框的对象变量 dialog.DoModal();//启动 注册对话框 } };
4.1.2注册模块
Register.h #pragma once
#include \// Register 对话框
class Register : public CDialog {
DECLARE_DYNAMIC(Register) public:
Register(CWnd* pParent = NULL); // 标准构造函数 virtual ~Register(); // 对话框数据
enum { IDD = IDD_REGISTER }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV DECLARE_MESSAGE_MAP() public:
afx_msg void OnBnClickedOk(); CString user;
CString password; CString password1; };
Register.cpp
#include \#include \#include \#include \// Register 对话框
IMPLEMENT_DYNAMIC(Register, CDialog)
Register::Register(CWnd* pParent /*=NULL*/) : CDialog(Register::IDD, pParent) , user(_T(\
, password(_T(\ , password1(_T(\
11
支持 C++语言课程设计
{ }
Register::~Register() { }
void Register::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, user); DDX_Text(pDX, IDC_EDIT6, password); DDX_Text(pDX, IDC_EDIT3, password1); }
BEGIN_MESSAGE_MAP(Register, CDialog)
ON_BN_CLICKED(IDOK, &Register::OnBnClickedOk) END_MESSAGE_MAP()
void Register::OnBnClickedOk() {
this->UpdateData();//默认值是TRUE,即从控件传给变量
if(!user.IsEmpty()&&!password.IsEmpty()&&!password1.IsEmpty())//各变量的字符串是否为空,如都不为空,则执行if()后边的语句继续注册 {
if(password==password1)//新密码与第二次新密码对比下,如相等,则继续执行注册,反之不继续注册
{if(IDOK==MessageBox(\确定要注册该账号吗?\注册提示\MB_ICONQUESTION ))//输出提示 是否要确定注册,如点击确认返回值为IDOK {
WritePrivateProfileString(\
////向该setting.ini配置文件中的login节名中设置该user键名的值为user的值
WritePrivateProfileString(\;
HWND button; //定义窗口句柄
this->GetParent()->GetDlgItem(IDC_BUTTON1,&button);//获取当前窗口的父窗口句柄(登陆对话框),然后通过父窗口句柄获取指定参数ID为IDC_BUTTON1的子元素的句柄并绑定button窗口句柄
::SetWindowTextA(button,\已注册\改变指定button窗口句柄的文本内容为\已注册\。
::EnableWindow(button,0);//第二个参数的值为0表示禁止指定的控件接受鼠标和键盘的输入
MessageBox(\已经成功注册该账号:\注册提示\MB_ICONASTERISK );//注册成功输出提示 CDialog::OnCancel(); }} else
12