學(xué)習(xí)C#和Microsoft SQL Server以來,作為一個初學(xué)者的我,第一次有了一個較為完整的小案例的實(shí)現(xiàn),想通過這個案例的實(shí)現(xiàn)過程與各位前輩進(jìn)行交流,如有不足懇請各位前輩指正,希望我們共同進(jìn)步:
人事管理系統(tǒng)在網(wǎng)上有很多的源碼,卻很少有針對這些源碼進(jìn)行分析的案例,對于初學(xué)者在理解上確實(shí)有一定的困難,往往其中有很多細(xì)節(jié),可能困擾像我這樣的初學(xué)者很長時間。
一個人事管理系統(tǒng)首先有一個登陸使用的賬號和密碼組成的口令進(jìn)入系統(tǒng),相應(yīng)的應(yīng)該有一個數(shù)據(jù)存放的“容器”,這時候需要使用到數(shù)據(jù)庫來作為這個“數(shù)據(jù)倉庫”,對于數(shù)據(jù)庫的設(shè)計在以后的內(nèi)容中會進(jìn)行補(bǔ)充。
登陸界面,設(shè)計了一種最常見的類型,設(shè)計界面如下:
界面利用了TextBox控件接收用戶名和密碼,label控件用于顯示姓名,密碼的文字提示,兩個Button按鈕分別為LogIn和Cancel。
當(dāng)我們輸入用戶名和密碼之后需要將這個組合進(jìn)行驗(yàn)證,這時候我們就需要對數(shù)據(jù)庫進(jìn)行訪問,對于數(shù)據(jù)庫的訪問設(shè)計了一個MyMeans類,這個類放到DataClass文件夾下,這個將在后續(xù)進(jìn)行補(bǔ)充這個類的設(shè)計。
實(shí)例化MyMeans類的一個對象:
DataClass.MyMeans MyClass = new DataClass.MyMeans();當(dāng)運(yùn)行時,通過窗體的加載事件來對數(shù)據(jù)庫進(jìn)行連接,連接為一次一連接類型,這樣可以減少資源占用,提高效率。
PRivate void F_LogIn_Load(object sender, EventArgs e) { try { MyClass.con_open(); MyClass.con_close(); textName.Text = ""; textPass.Text = ""; } catch { MessageBox.Show("數(shù)據(jù)庫連接失敗!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); application.Exit(); } }當(dāng)窗體活動時,將焦點(diǎn)設(shè)置到用戶名TextBox:
private void F_LogIn_Activated(object sender, EventArgs e) { //當(dāng)處于活動窗體時,焦點(diǎn)在name的TextBox控件上 textName.Focus(); }實(shí)現(xiàn)的過程如下:通過兩個TextBox控件得到組合,當(dāng)點(diǎn)擊登陸按鈕時將會觸發(fā)這個按鈕的Click事件:
private void butLogIn_Click(object sender, EventArgs e) { if (textName.Text != "" & textPass.Text != "") { //獲取登陸表中的用戶名和密碼的組合 SqlDataReader temDataReader = MyClass.getCommand("select * from tb_Login where Name='" + textName.Text.Trim() + "' and Pass= '" + textPass.Text.Trim() + "'"); //read()得到的返回值bool型,利用這個特性 bool ifcom = temDataReader.Read(); if (ifcom) { //獲取登錄名 DataClass.MyMeans.LogIn_Name = textName.Text.Trim(); //獲取登陸的ID地址 DataClass.MyMeans.LogIn_ID = temDataReader.GetString(0); //斷開連接 DataClass.MyMeans.My_Con.Close(); //釋放占用的資源 DataClass.MyMeans.My_Con.Dispose(); //獲取對象的引用 DataClass.MyMeans.LogIn_n = (int)(this.Tag); //窗口關(guān)閉,進(jìn)入主界面 this.Close(); } else { MessageBox.Show("用戶名或密碼錯誤!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); //重新設(shè)置為空 textName.Text = ""; textPass.Text = ""; } //調(diào)用MyMeans類中定義的Close方法 MyClass.con_close(); } else MessageBox.Show("請將登錄信息添寫完整!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); }設(shè)計兩個TextBox窗體的KeyPress事件,當(dāng)輸入完畢后,按回車鍵跳到下一個控件:
private void textName_KeyPress(object sender, KeyPressEventArgs e) { //當(dāng)按下回車鍵時,焦點(diǎn)轉(zhuǎn)移到密碼textBox控件上 if (e.KeyChar == '/r') textPass.Focus(); } private void textPass_KeyPress(object sender, KeyPressEventArgs e) { //當(dāng)按下回車鍵時,焦點(diǎn)轉(zhuǎn)移到密碼LogIn按鈕 if (e.KeyChar == '/r') butLogIn.Focus(); }注:當(dāng)設(shè)計完畢后續(xù)的主窗體時,需要將啟動窗體設(shè)置為啟動窗體:
在Program.cs文件中修改 為 Application.Run(new F_Main());
假設(shè)F_Main()為主窗體。
新聞熱點(diǎn)
疑難解答