第一篇:登錄注冊對話框實驗報告
登錄注冊對話框實驗報告
班 級:10網工三班
學生姓名:謝昊天
學號:1215134046
實驗目的和要求: 實驗目的
1、加深理解Windows程序設計的基本概念;
2、基于單文檔的應用程序的創建;
3、學會對話框及相關控件的創建;
4、熟悉基本的Windows消息映射機制和消息相應過程。實驗要求:
1.使用基于對話框應用程序框架; 2.設計對話框中用于用戶交互的控件; 3.完成用戶注冊功能;
4.用戶數據可以使用文件或者數據庫進行存儲; 5.必須完成數據的存儲。
實驗內容與分析設計:
1.創建一個基于對話框的應用程序,實現具有身份驗證的應用程序。2.對話框具有用戶注冊的功能;
3.系統實現用戶輸入用戶名和密碼后,程序能夠判斷該用戶的信息的正確性; 4.在完成身份的驗證以后要通知用戶結果。
實驗步驟與調試過程:
1.打開Visual c++ 6.0編程環境;
2.點擊文件->新建、選擇建立新的工程;選擇MCFAppWizard[exe]選項建立工程名為“Windows程序設計
(一)”的一個空工程;點擊確定后,選擇基本對話框。3.點擊左邊的ResourceView,在Dialog上面鼠標右鍵單擊彈出一彈出框,單擊Insert Dialog。在右邊新增的對話框中,加入靜態文本框和文本編輯框。4.鼠標右鍵單擊剛才加進去的第一個靜態文本框控件,點擊屬性。在彈出的標題中填寫:“請輸入賬號:”然后回車,同樣在下面的第二個靜態文本框的屬性標題改為:“請輸入密碼:”然后回車。
5.在第一個文本編輯框上右鍵單擊,點擊屬性,把ID框中的IDC_EDIT1改為容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,這樣容易見名而知義。同樣,對第二個文本編輯框的屬性中的IDC_EDIT2改為:IDC_EDIT_PWD。
6.在對話框上的任何空白的地方右鍵單擊,點擊建立類向導。選擇建立Create a new class,點擊OK。在Name中,為該對話框類取個名字:CDlg_login。下面的Base class以及Dialog ID不要隨便改動。然后點擊OK。這樣新的類CDlg_login就與本對話框建立起了聯系。點擊OK后,點擊member variables。7.左鍵雙擊IDC_EDIT_NAME(或者單擊后,點擊右邊的add variables),為IDC_EDIT_NAME增加一個對應在類中的名字:m_login_name。點擊OK。同樣也對IDC_EDIT_PWD也取一個名字:m_login_pwd。8.點擊確定。這樣我們就建立好了登錄對話框以及其對應的類CDlg_login。我們在ClassView里面可以看到我們新加入 類CDlg_login。在對話框空白的地方單擊右鍵,點擊屬性,在標題中輸入:請登錄。
9.點擊右邊的FileView,點擊source files,雙擊MainFrm.cpp。這樣在右邊就打開了該文件。找到CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct),這是窗體框架創建函數。在該函數的后面(在return 0;的前面)加入語句:
CDlg_login dlg;//生成一個登錄對話框對象
dlg.DoModal();//讓對話框對象以有模式形式顯示出來 10.在MainFrm.cpp文件的前面添加:#include “dlg_login.h”。11.然后對按鈕編譯響應函數。
12.在組建選項中點擊執行【服務器.exe】(或者Ctrl+F5)執行程序;
實驗結果:
彈出登錄對話框,賬號輸入“xiehaotian”,密碼輸入“123456”,可實現登錄、并彈出“登陸成功”的對話框,如果輸入錯誤會彈出“登錄失敗”的對話框,點擊“請注冊新用戶”,彈出注冊的對話框,實現注冊新用戶。并且可以對數據庫的讀寫更新,對數據的用戶驗證。
疑難小結:
通過本次試驗,了解了MFC簡單對話框編程的一些基礎知識,學習到了用MFC編寫基本對話框應用程序。學習到了如何編寫登錄、注冊新用戶的對話框,從而實現用戶的登錄和新用戶的注冊等功能。從而使我對MFD基本對話框應用程序有了進一步的了解,通過動手試驗,更加深刻的理解了MFC基本對話框編程的特點。同時,在實驗過程中,回顧書本上的理論知識,鞏固了我的知識。學會了簡單的控制臺應用程序的創建,加深理解Windows程序設計的基本概念;利用基于單文檔的應用程序的創建;學會對話框及相關控件的創建;熟悉基本的Windows消息映射機制和消息相應過程。
主要算法和程序清單: 1.編輯登錄按鈕
void logDlg::OnBUTTONlogbt(){
//判斷輸入框里的內容和數據庫里的內容是否一致
UpdateData(true);CDaoRecordset Dbset(&db);CString Filepath=“Database.mdb”;CString Sname,Spsw;_variant_t varname,varpsw;db.Open(Filepath);Dbset.Open(AFX_DAD_USE_DEFAULT_TYPE.“SELECT * FROM DataTable”,0);varname=Dbset.GetFieldValue(“name”);varpsw=Dbset.GetFieldValue(psw);Sname=(LPCSTR)_bstr_t(varname);Spsw=(LPCSTR)_bstr_t(varpsw);Dbset.Close();db.Close();if(m_logname.IsEmpty()||m_logpsw.IsEmpty())//如果輸入對話框中存在空輸入
{
MessageBox(“信息不能為空!”,“溫馨提示”);
return;} // TODO: Add your control notification handler code here if(Sname.Compare(m_logname)==0&&Spsw.Compare(m_logpsw)==0)//如果密碼和賬號與數據庫一致
{
MessageBox(“登錄成功!”,“溫馨提示”);
CDialog::OnOK();} else {
MessageBox(“賬戶或密碼錯誤!”,“溫馨提示”);
return;}
} 2.編輯注冊按鈕
void RegDlg::OnBUTTONregbt1(){ // TODO: Add your control notification handler code here
UpdataData(true);//更新數據庫
CString Filepath=“Database.mdb”;CString Sname;_variant_t varname;CDaoRecordset Dbset(&db);db.Open(Filepath);Dbset.Open(AFX_DAD_USE.DEFAULT_TYPE,“SELECT * FROM DataTable”,0);varname=Dbset.GetFieldValue(name);Sname=(LPCSTR)_bstr_t(varname);if(m_regname.IsEmpty()||m_regpsw.IsEmpty()){
MessageBox(“信息不能為空!”,“溫馨提示”);
} else {
if(Sname.Conpare(m_regname)!=0)//如果輸入框的名字在數據
} { Dbset.Edit();Dbset.SetFieldValue(“name”,_variant_t(m_regname));Dbset.SetFieldValue(“psw”,_variant_t(m_regpsw));Dbset.Update();MessageBox(“注冊成功!”,“溫馨提示”);} else //如果輸入的名字和數據庫的一致,則提示村愛該用戶 { MessageBox(“該用戶已存在”,“溫馨提示”);//其實應該添加一個修改密碼的功能的,}
第二篇:C# 將窗體顯示為模式對話框,登錄界面的制作
C# 將窗體顯示為模式對話框,登錄界面的制作
首先:窗體的兩個屬性 AcceptButton,和 CancelButton 分別設置為窗體上“確定”和“取消”按鈕的名字:bnok 和 bncancel.其次:確定按鈕和取消按鈕的“DialogResult”屬性分別設置為:ok , cancel
然后:窗體上的控件textbox要在類外部讀出來那么設置其 modifier屬性為public即可
接著:
int errCount = 0;
while(errCount < 3)
{
FrmLogin flog = new frmLogin();
flog.ShowDialog(this);
if(flog.DialogResult == DialogResult.OK)
{
flog.Username = flog.txtusername.Text;
flog.Password = flog.txtpassword.Text;
if(flog.Username == “liumu” &&
flog.Password == “198331622”)
{
MessageBox.Show(“歡迎訪問該系統”, “登錄成功”);
ShowWelcomePage();
break;
}
else
{
errCount++;
MessageBox.Show(“用戶名或密碼有誤請核對后重新輸入”, “錯誤提示”);}
}
else if(flog.ShowDialog()== DialogResult.Cancel)
{
Application.Exit();
}
}
if(errCount == 3)
{
MessageBox.Show(“您三次輸入有誤,被迫推出系統,Sorry!”, “退出提示”);Application.Exit();
}
第三篇:unity3d游戲開發之登錄注冊應用
在注冊的時候,輸入了數據庫已存在的用戶名,會顯示用戶已存在。
//驗證用戶是否存在
Users u = new Users().register(name);
if(name == u.Name)
{
name = “該用戶已存在”;
a =GUI.Button(new Rect(600, 360, 40, 20), “注冊”);
}
在登錄的時候,當用戶輸入錯誤密碼或用戶名就會出現提示:
章來自狗刨學習網
代碼部分:
如果用戶名和數據庫的不同
就提示:
print(“用戶或密碼錯誤”);
name = “";
password = ”";
flag = true;
這篇文章來自狗刨學習網
這篇文
第四篇:會員登錄
目錄
準備否調用isNameFormar方法判斷用戶名輸入的是否滿足要求?是是調用自定義isName方法判斷用戶名是否已存在?否獲取用戶填寫的登錄名,登錄密碼(使用MD5加密),性別,電子郵箱,QQ用戶名已存在,Label控件為紅提示“請正確填寫信息!”創建SQL語句,該語句用來添加用戶的詳細信息創建數據庫連接,打開數據庫連接,創建SqlCommand對象否判斷ExecuteNonQuery方法返回的參數是否大于0?是注冊成功提示“請正確填寫信息!”結束 圖4.5 Register_Clink事件實現框圖
圖4.6 會員注冊頁面設計圖
會員登錄
目錄
會員登錄主要通過判斷用戶輸入的會員名和密碼是否與數據庫中的會員名和密碼相同,如果相同則登錄成功。
第五篇:MFC 對話框編程 -- 總結
MFC 對話框編程--總結
一、創建對話框對象
1.首先利用資源編輯器創建對話框資源,并針對該對話框資源定義一個對話框類:classCTestDlg :public CDialog
2.創建話話框對象
模態對話框的創建:
如:
CTestDlgdlg;
dlg.DoModal();
非模態對話框創建:
如:
CTestDlgdlg;
dlg.Create(IDD_DIALOG, this);
但這樣是得不到一個正常顯示的非模態對話框的。因為模態與非模態對話框的實現方式并不相同,這里我們還要注意幾點。
非模態對話框創建完成后是隱藏著的,必須調用ShowWindow來進行顯示。
對于模態對話框,當執行到DoModal 函數以創建對話框時,程序會暫停執行,直至模態對話框關閉。所以創建模態對話框可以采用局部對象。
但是,對于非模態對話框,當執行Create函數時并不會暫停執行,當執行到大括號“}后Dlg局部對象被銷毀生命周期結束,于是異常出現了。
解決方法有兩個:
一、在View類中定義一個CTestDlg 成員變量。
二、動態創建一個CTestDlg 變量,并重寫CTestDlg 類的 PostNcDestroy函數,在該函數里銷毀對象 deletethis;
無論創建的是模態對話框,還是非模態對話框,當我們單擊確定或取消按鈕后對話框都會消失。但這時低層的操作卻是不同的。
對于模態對話框,此時對話框對象的確是被銷毀了,但對于非模態對話框,這時只是隱藏起來不再顯示。這需要我們自己調用DestoryWindow函數來進行銷毀工作。
這時我們必須重寫 CTestDlg 的 OnOK、OnCancel 兩個函數(這兩個是基類CDialog的虛函數),在這兩個函數內調用DestroyWindow函數,并注意不再調用基類CDialog相應的函數。正確地創建非模態對話框的代碼如下:
CTestDlg*pDlg = new CTestDlg;
pDlg->Create(IDD_DIALOG, this);
pDlg->ShowWindow(SW_SHOW);
同時,在CTestDlg 類的 PostNcDestroy函數中銷毀對象:deletethis;
二、動態創建按鈕
1.在對話框類CTestDlg 中定義一個 CButton 類對象,作為其成員變量。
2.在相應的消息處理中,調用 CButton類的Create函數創建按鈕。
要注意兩點:
如果在調用CButton::Create創建按鈕時沒有指定WS_VISIBLE 風格,那么隨后一定要調用這個按鈕對象的ShowWindow函數,來將該按鈕顯示出來。
為防止該CButton關聯多個按鈕,這里需要進行一些設置,如下:
if(!m_btn.m_hwnd)
{
// CButton 對象m_btn 未關聯一個按鈕
m_btn.Create(....);
}
else
{
// CButton 對象m_btn 已關聯一個按鈕
其他操作...}
當然,方法并不只這一種。但這是最漂亮的方法。
三、設置控件文本文字
1.下面列舉幾個用來設置控件文本文字的函數:
// 取得對話框中指定控件的窗口句柄。控件通過ID標識來指定
CWnd*GetDlgItem(int nID)const;
void CWnd::GetDlgItem(int nID, HWND* phWnd)const;
// 取得窗口文本
intGetWindowText(LPTSTR lpszStringBuf, int nMaxCount)const;
voidGetWindowText(CString& rString)const;
// 設置窗口文本
voidSetWindowText(LPCTSTR lpszString);
// 取得指定控件窗口文本。控件通過ID標識來指定
intGetDlgItemText(int nID, LPTSTR lpStr, int nMaxCount)const;
intGetDlgItemText(int nID, CString& rString)const;
// 設置指定控件窗口文本。控件通過ID標識來指定
void SetDlgItemText(int nID, LPCTSTR lpszString);
// 取得指定控件窗口文本,并轉化為UINT 類型返回。控件通過ID標識來指定
UINT GetDlgItemInt(int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE)const;// 設置指定控件窗口文本,由UINT類型轉化為字符。控件通過ID標識來指定
voidSetDlgItemInt(int nID, UINT nValue, BOOL bSigned = TRUE);
2.可以為對話框控件關聯一個變量,在CTestDlg 類的DoDataExchange來完成數據的更新與交換。這里我們需要重點說明 DoDataExChange 函數:
首先引用MSDN的一段解釋吧:Called by the framework to exchange and validate dialog data。意指框架調用此函數來改寫與確認對話框數據。
其實DoDataExChange函數主要是通過DDX_TEXT(....)或 DDX_CONTROL(....)來實現數據的實時關聯的。
我從我的MSDN中隨便拿來一個定義:
void AFXAPI DDX_Text(CDataExchange* pDX, int nIDC, BYTE& value);
其實這個要關聯的話也很簡單,沒有那么復雜。如下:
value = GetDlgItemInt(nIDC);
SetDlgItemInt(nIDC, value);
而DoDataExchange 函數是在UpdateData函數內部調用的。
該函數只有一個布爾型參數,b31.org 它決定了數據傳送的方向:
調用UpdateData(TRUE),將數據從對話框的控件中傳送到對應的數據成員中。
調用UpdateData(FALSE),則將數據從數據成員中傳送給對應的控件。
UpdateData(FALSE)是將變量的值傳到控件.UpdateData(TRUE)是從控件中取值到關聯的變量
四、對話框伸縮功能的實現
只關聯到兩個函數:
// 取得指定窗口邊框折尺寸
void GetWindowRect(LPRECT lpRect)const;
// 設置指定窗口(控件)的位置同尺寸
BOOL SetWindowPos(const CWnd* pWndInsertAfter, intx, inty, int cx, intcy, UINTnFlags);
五、逃跑按鈕的實現
1.創建一個基于對話框的MFC 程序,刪除原有的控件后,再添加兩個按鈕,更改兩按鈕名為”你能抓到我嗎?“
2.打開類視圖,定義一個新類CNewButton,這個新類的基類為CButton。并為此類添加一個成員變量:CNewButton*m_pbtn;
3.打開資源視圖,分別為兩個按鈕創建兩個CNewButton類關聯變量:m_btn1, m_btn2;
4.在CXXXDlg中改寫其OnInitDialog函數。主要添加:
m_btn1.m_pbtn = &m_btn2;
m_btn2.m_pbtn = &m_btn1;
5.對于CNewButton 類,必定其OnMouseMove函數。主要添加:
ShowWindow(SW_HIDE);
m_pbtn->ShowWindow(SW_SHOW);
編譯,連接。OK
六、屬性頁、屬性表單與向導的建立
1.創建屬性頁
打開資源編輯器,點擊Dialog 資源并在列出的選項中,選擇:IDD_PROPPAGE_LARGE。建立屬性頁資源。
之后,我們就可以其上添加其他控件來完善我們的屬性頁。關于屬性頁的完善操作我們在后面會談到。
屬性頁資源完善后,再為每一個屬性頁關聯一個類。
2.創建屬性表單
打開類視圖,添加新類CPropSheet,其基類為CPropertySheet。
之后再為其添加屬性頁類對象,并在其構造函數中利用AddPage函數將屬性頁添加到表單上。
3.消息響應
再主菜單的最后再增加一個菜單項,并為此菜單添加消息響應函數。
在此響應函數中創建屬性表單:
CPropSheetpropSheet(TEXT(”屬性表單"));
propSheet.DoModal();
4.向導的創建
創建一個向導類型的對話框,應該遵循創建一個標準屬性表單的步驟來實現。
但在調用屬性表單對象的DoModal函數之前,應該先調用SetWizardMode函數,來聲明建立的是一個作為向導的屬性表單。
所以,應在DoModal函數之前添加如下代碼:
propSheet.SetWizardMode();
5.屬性頁的完善操作
首先我們要注意到屬性頁,澳門新濠天地官網66bb.org 在三個不同時期的關鍵性操作:當屬性表單中的某屬性頁被選中,從而成為一個活動的頁面時,應用程序框架就會調用OnSetActive函數。
OnSetActive 是其基類的一個虛函數,我們可以重寫這個函數并在其中進行一些操作。
假設當前我們處于屬性表單中的某屬性頁,當我們點擊下一步并將進入下一個屬性頁時,應用程序框架會調用OnWizardNext函數。
OnWizardNext 是其基類的一個虛函數,我們可以重寫這個函數并在其中進行一些操作。類似的還有OnWizardBack 同 OnWizardFinish函數。
當一個屬性頁被創建時,會調用其OnInitDialog函數。
我們可以在這個函數里對屬性頁中的控件進行一些操作。如為列表框或下拉框添加字符串等。