本期概述
上一期我們實現了對電影記錄的資料操作(增刪改查).這一期,我們一起來實現下針對使用者的密碼修改功能.
原理簡介
原理很簡單,系統擷取使用者輸入的使用者名稱,執行select語句從資料庫中擷取該使用者名稱下的密碼,再與使用者輸入的舊密碼進行匹配,若相同則允許輸入新密碼,然後執行Update語句將新密碼儲存到資料庫.
由於系統功能逐漸增多,我們需要建立一個主介面表單,來方便使用各個功能.
建立一個表單 name:FrmMain
我們在主表單建立一個ToolStrip工具列,用於後期功能表單的切換.
然後,右鍵在ToolStrip上添加 Button 按鈕.
將Button按鈕的顯示模式改成Text 文本顯示.
設定完管理介面按鈕後,同理設定 密碼修改 返回登陸介面 直接退出 功能按鈕.
ToolStrip按鈕 管理介面name:tsbManager 密碼修改name:tsbPwdChange 重新登入name:tsbLogin 退出系統name:tsbExit
主介面FrmMain.cs裡的代碼
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;/******************************************************* ** 作者: SoFlash - 部落格園 http://www.cnblogs.com/longwu ** 描述: FrmMain.cs 主表單 用於銜接各項功能表單 ******************************************************/namespace 電影記錄管理系統{ public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } private void tsbManager_Click(object sender, EventArgs e) { //new一個Manger表單的對象 FrmManager manager = new FrmManager(); //轉入FrmManager表單 manager.Show(); //隱藏當前表單 this.Hide(); } private void tsbPwdChange_Click(object sender, EventArgs e) { //同理 FrmPwdChange pwdChange = new FrmPwdChange(); pwdChange.Show(); this.Hide(); } private void tsbLogin_Click(object sender, EventArgs e) { //同理 FrmLogin login = new FrmLogin(); login.Show(); this.Hide(); } private void tsbExit_Click(object sender, EventArgs e) { //直接退出應用程式 Application.Exit(); } }}
同樣,由於登入成功後的跳轉介面換了,所以我們需要修改下登入後跳轉介面的代碼.
在登入表單類FrmLogin.cs中修改(如下)
//如果 文字框中輸入的密碼 ==資料庫中的密碼 if (pwd == txtPwd.Text) { //擷取登陸成功後的使用者ID Uid = txtName.Text; //說明在該賬戶下 密碼正確, 系統登入成功 MessageBox.Show("系統登入成功,正在跳轉首頁面..."); //FrmManager manager = new FrmManager(); //manager.Show(); //this.Hide(); FrmMain main = new FrmMain(); main.Show(); this.Hide(); }
然後,電影記錄管理表單也稍作修改, 添加一個 返回主介面 按鈕.
返回主介面name: btnBack
代碼如下
private void btnBack_Click(object sender, EventArgs e){ //返回主介面 FrmMain main = new FrmMain(); main.Show(); this.Close();}
再增加一個直接 退出系統 按鈕, name:btnExit.
代碼如下:
//直接退出系統private void btnExit_Click(object sender, EventArgs e){ //直接退出系統 Application.Exit();}
之後 我們開始設計密碼修改表單(如)
表單name: FrmPwdChange
文字框 使用者名稱name:txtUsername 舊密碼name:txtOldPwd 新密碼name:txtNewPwd 再次輸入新密碼name:txtNewPwdConfirm
按鈕 修改name:btnOK 返回name:btnBack
表單建立完成我們運行看下.
當使用者成功登入系統的以後,我們需要擷取成功登入後的使用者名稱,並將其傳入到密碼修改介面的使用者名稱文字框中,為此在登入表單類FrmLogin.cs中我們需要做一點修改
1.定義一個全域變數 Uid; 用於擷取登入成功的使用者名稱.
public static string Uid; (添加到如下代碼中)
//首先 設定 串連到設定檔群組建 App.config //當然 這裡的 ConfigurationManager 系統是預設不使用其命名空間的 因此需要解析string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString;//定義一個全域變數 Uid;//用於擷取登入成功後的使用者名稱public static string Uid;
2.在判斷登入成功後,擷取當前文字框中輸入的使用者名稱.
Uid = txtName.Text;
//如果 文字框中輸入的密碼 ==資料庫中的密碼 if (pwd == txtPwd.Text) { //擷取登陸成功後的使用者ID Uid = txtName.Text; //說明在該賬戶下 密碼正確, 系統登入成功 MessageBox.Show("系統登入成功,正在跳轉首頁面..."); //FrmManager manager = new FrmManager(); //manager.Show(); //this.Hide(); FrmMain main = new FrmMain(); main.Show(); this.Hide(); }
3.在密碼修改表單FrmPwdChange載入時候,自動擷取登入表單FrmLogin的Uid屬性,並賦給密碼修改表單FrmPwdChange的文字框txtUsername (代碼如下)
//擷取登入表單的使用者名稱private void FrmPwdChange_Load(object sender, EventArgs e){ //擷取登入表單登入成功後的公開變數 Uid string currentUser = FrmLogin.Uid; //將擷取的字串 currentUser 賦給txtUsername文字框 txtUsername.Text = currentUser;}
這樣,每當我們登入成功後,跳轉到密碼修改表單,使用者名稱文字框就會直接顯示我們當前登入的使用者名稱了.
運行看下, 我們使用admin1帳號登入.
來到密碼修改表單,此時,使用者名稱admin1 已經自動出現到了使用者名稱所在的文字框中.
接下來我們實施下密碼修改表單的完整代碼
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;using System.Configuration;/******************************************************* ** 作者: SoFlash - 部落格園 http://www.cnblogs.com/longwu ** 描述: FrmPwdChange.cs 密碼修改表單 用於管理員和普通使用者修改個人密碼 ******************************************************/namespace 電影記錄管理系統{ public partial class FrmPwdChange : Form { public FrmPwdChange() { InitializeComponent(); } //連接字串 擷取設定檔裡的串連路徑 static string connStr = ConfigurationManager.ConnectionStrings["str"].ConnectionString; //修改密碼 private void btnOK_Click(object sender, EventArgs e) { //使用Sql連線物件擷取連接字串 SqlConnection conn = new SqlConnection(connStr); //使用sql語句擷取目前使用者名下的密碼 string sql = "select MUserPwd from MovieAccount where MUserName ='" + txtUsername.Text + "'"; //使用SQLcommand指令來裝載SQL連接字串和conn連線物件 SqlCommand cmd = new SqlCommand(sql, conn); //開啟conn串連 conn.Open(); //使用sql資料讀取器來 擷取cmd指令中的讀到的資料 SqlDataReader sdr = cmd.ExecuteReader(); //如果sql資料讀取器 讀到了資料 if (sdr.Read()) { //將讀到的使用者名稱下的密碼賦給字串oldPwd string oldPwd = sdr.GetString(0).Trim(); //如果文字框中輸入的密碼等於從資料庫中讀到的字串oldPwd if (oldPwd == txtOldPwd.Text) { //如果新密碼為空白 if (txtNewPwd.Text.Trim()==""||txtNewPwdConfirm.Text.Trim()=="") { //彈出提示 MessageBox.Show("新密碼確認不可為空!"); return; } //繼續判斷 如果2次新密碼不相同 else if(txtNewPwd.Text.Trim() != txtNewPwdConfirm.Text.Trim()) { //彈出提示 2次新密碼不相同,請重新輸入 MessageBox.Show("2次輸入的新密碼不一樣,請重新輸入!"); //新密碼和再次證明密碼提示框都清空 txtNewPwd.Text = ""; txtNewPwdConfirm.Text = ""; return; } else { //如果2次新密碼相同,關閉SqlDataReader串連 sdr.Close(); //執行sql語句 string sqlUpdate = "update MovieAccount set MUserPwd ='" + txtNewPwdConfirm.Text + "' where MUserName ='" + txtUsername.Text + "'"; //new一個資料庫更新指令 SqlCommand cmdUp = new SqlCommand(sqlUpdate,conn); // 如果cmdUp擷取的行數為0 則說明系更新指令出現異常 if (cmdUp.ExecuteNonQuery() == 0) { //系統報錯 MessageBox.Show("未知錯誤!"); return; } else { //否則 更新成功 MessageBox.Show("恭喜你!密碼修改成功!"); } } } else { //彈出提示框 舊密碼不可為空或錯誤 MessageBox.Show("舊密碼錯誤或者不可為空"); //舊密碼,新密碼,新密碼驗證 同時清空 txtOldPwd.Text = ""; txtNewPwd.Text = ""; txtNewPwdConfirm.Text = ""; return; } } else { //如果沒讀到使用者名稱,提示使用者名稱不存在! MessageBox.Show("使用者名稱不存在,請重新輸入!"); //用使用者名稱,舊密碼,新密碼,新密碼驗證 都清空 txtUsername.Text = ""; txtOldPwd.Text = ""; txtNewPwd.Text = ""; txtNewPwdConfirm.Text = ""; return; } //關閉資料庫連接 conn.Close(); } //返回主表單 private void btnBack_Click(object sender, EventArgs e) { //new 一個主框體的對象 FrmMain main = new FrmMain(); main.Show(); this.Close(); } //擷取登入表單的使用者名稱 private void FrmPwdChange_Load(object sender, EventArgs e) { //擷取登入表單登入成功後的公開變數 Uid string currentUser = FrmLogin.Uid; //將擷取的字串 currentUser 賦給txtUsername文字框 txtUsername.Text = currentUser; } }}
效果測試:
首先使用admin1賬戶來登入系統 密碼為666666
當我們輸入錯誤的舊密碼時,系統彈出提示"舊密碼錯誤或者不可為空".
輸入正確的密碼,但新密碼和新密碼確認為空白,彈出提示"新密碼不可為空".
只在新密碼框中輸入密碼, 再次輸入新密碼框為空白,同樣彈出"新密碼不可為空".
輸入的新密碼和新密碼確認不一樣,彈出提示"2次新密碼不一樣".
當新密碼和新密碼確認相同的時候,點修改,彈出提示框"修改成功".
如果需要把密碼輸入框設定為不可見 用*號代替
可以通過 設定文字框的 PasswordChar屬性 在裡面添加*號 就行了
效果展示
這樣電影記錄管理系統的主介面和密碼修改介面就完成了,下一期我們來一起學習下如何記錄並查看使用者的曆史登入和退出情況(日誌查看).
附上原始碼
MovieRecordManagementSystem03.zip
相關推薦 [點此查看目錄]
- C#簡易電影記錄管理系統:開發一[使用者登入]
- C#簡易電影記錄管理系統:開發二[增刪改查]
- C#簡易電影記錄管理系統:開發四[日誌查看]
- C#簡易電影記錄管理系統:開發五[使用者註冊]
- C#簡易電影記錄管理系統:開發六[資料搜尋]
- C#簡易電影記錄管理系統:開發七[使用者分類]
- C#簡易電影記錄管理系統:開發八[資料備份]
- C#簡易電影記錄管理系統:開發九[資料恢複]
- C#簡易電影記錄管理系統:完結篇[許可權分配]