C#窗體 登入實名註冊密碼找回
編寫窗體:
功能要求:
1,登陸(通過賬號和密碼登陸)
2,實名註冊(要求驗證18位身份證號,注意驗證時只需要驗證前17位是整數,最後一位是整數或者大寫X就行)
註冊項有:賬號,密碼,身份證號
3,密碼找回(通過註冊時的賬號和身份證號找回)
P.S. 這個寫起來可能會有點費時,前期還是給你們一個星期,一個星期之後不要求交成品,但是要給我彙報一下情況,你寫了多少,並且把半成品發給我
我在根據情況看看是不是要延期,如果寫完了最好哦。
介面大概是這樣的(那個裝飾啥的是我自己嘗試做的,你們把功能實現就行,不要求裝飾)
一,主介面
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 暑假作業2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void colorchange(object sender, MouseEventArgs e)//這個和下面的方法叫做事件,這個是滑鼠經過按鈕是的事件, { button1.BackColor = Color.CadetBlue;//button1的背景顏色變成cadetbiue; } private void leavechange(object sender, EventArgs e)//滑鼠離開是的事件 { button1.BackColor = Color.SkyBlue;//背景顏色變成skyblue; } private void button1_Click(object sender, EventArgs e)//按鈕點選事件 { string uid = UID.Text; string pwd = PWD.Text; if (uid=="")//要先檢測使用者是否輸入了使用者名稱和密碼 { MessageBox.Show("請輸入使用者名稱!"); } else if(pwd=="") { MessageBox.Show("請輸入密碼!"); } else { string Sqlstr = "server=.;database=User;uid=sa;pwd=*****"資料庫連線字串server是資料庫伺服器名稱(.)表示本機,連線其他伺服器的時候改成伺服器地址即可,database是資料庫名,uid是登入名,pwd是登陸密碼,這種是連線資料庫是採用SQL server登陸驗證的方法,還有一種是“server=.;database=myschool;integrated security=SSPI”,這種是連線資料庫是採用window身份驗證方式。 SqlConnection conn = new SqlConnection(Sqlstr);//SQL Connection連結資料庫的關鍵字,具體參考這個:https://blog.csdn.net/rex1129/article/details/78611396 conn.Open(); SqlDataAdapter findid = new SqlDataAdapter("select*from [user] where [IDnum]='" + uid + "'", conn);//SqlDataAdapter是 DataSet和 SQL Server之間的橋接器,用於檢索和儲存資料,參考部落格:https://blog.csdn.net/nicholaseenzhu/article/details/70417407 DataSet FindId = new DataSet();//可以把DataSet當成記憶體中的資料庫,DataSet是不依賴於資料庫的獨立資料集合。所謂獨立,就是說,即使斷開資料鏈路,或者關閉資料庫,DataSet依然是可用的,參考部落格:https://blog.csdn.net/andrewniu/article/details/53065522 findid.Fill(FindId);//將findid的資料填充到FindId conn.Close(); if(FindId.Tables[0].Rows.Count==0)//檢測查詢到的資料數量,如果結果為0,則沒有查到匹配資料項 { MessageBox.Show("使用者名稱不存在!"); } else { if (pwd == (FindId.Tables[0].Rows[0][1].ToString()))//在資料表中第2列儲存的是密碼,則匹配輸入密碼,與資料中的密碼是否一致,一致則登陸成功 MessageBox.Show("登陸成功!"); else MessageBox.Show("密碼錯誤!"); } } } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)//窗體跳轉 { register R = new register();//例項化對應的窗體物件 R.Show();//顯示該窗體 this.Hide();//this表示這個類(在這裡是指本窗體),隱藏窗體 } private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { FindPwd F = new FindPwd(); F.Show(); this.Hide(); } private void changecolor(object sender, MouseEventArgs e) { close.BackColor = Color.Red; } private void colorback(object sender, EventArgs e) { close.BackColor = Color.Transparent; } private void close_Click(object sender, EventArgs e) { Application.Exit(); } } }
二,實名註冊
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 暑假作業2 { public partial class register : Form { public register() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string idc = IDC.Text; string idn = IDN.Text; string pwd = PWD.Text; if(idn=="") { Console.WriteLine("請輸入賬號!"); } else if(pwd=="") { Console.WriteLine("請輸入密碼!"); } else if(idc=="") { Console.WriteLine("請輸入身份證號"); } else { bool P = true;//用來限制if和finally中語句的執行 try {//身份證號前17位都是數字,但最後一位可以是數字或者大寫X,所以最後一位要單獨檢測 string num9 = idc.Substring(0, 9);//擷取字串,(0,9)的意思是從第0個字元開始,共擷取9個數據,參考:https://www.cnblogs.com/sun1512/p/6108893.html int n9 = int.Parse(num9);//因為前17位都是數字,所以可以把前17位轉換成int型來判斷,如果前17位不都是數字,那麼在轉換時就會出錯,所以用了try catch,並且int的範圍是 -2,147,483,648 到 2,147,483,647,17位超出了範圍,所以還要在拆分,我拆成了9個和8個兩組。 int n17 = int.Parse(idc.Substring(9, 8)); } catch(Exception)//如果try中出現錯誤,則會執行catch中的內容,也就是當前17位中不只是數字時,執行catch { MessageBox.Show("身份證不合法!"); P = false; } if (P == true) { try { string num18 = idc.Substring(idc.Length - 1);//擷取第18位 int n18 = int.Parse(num18);//轉換成int型,如果是字母則進入catch } catch(Exception) { string num18 = idc.Substring(idc.Length - 1); if(num18!="X")//判斷是不是“X”,如果不是則不合法,把P置為假 { MessageBox.Show("身份證不合法!"); P = false; } } finally//finally中的內容不管try catch 哪一個執行完都要執行finally { if(P==true) { string Sqlstr = "server=.;database=User;uid=sa;pwd=******"; SqlConnection conn = new SqlConnection(Sqlstr); conn.Open(); SqlDataAdapter findid = new SqlDataAdapter("select*from [user] where [IDnum]='" + idn + "'", conn); DataSet FindId = new DataSet(); findid.Fill(FindId); conn.Close(); if(FindId.Tables[0].Rows.Count!=0) { MessageBox.Show("使用者已存在!"); } else { try { string str = "insert into [user](IDnum,pwd,userID)values('" + idn + "','" + pwd + "','" + idc + "')"; SqlCommand sqlcmd = new SqlCommand(str, conn);//sqlcommand類表示要對 SQL Server資料庫執行的一個 Transact-SQL 語句或儲存過程。參考:https://blog.csdn.net/luochuan/article/details/9220415 conn.Open(); sqlcmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("註冊成功!"); } catch(Exception) { MessageBox.Show("註冊失敗!"); } } } } } } } private void button2_Click(object sender, EventArgs e) { Form1 F = new Form1(); F.Show(); this.Close(); } private void colorchange(object sender, MouseEventArgs e) { button3.BackColor = Color.Red; } private void colorback(object sender, EventArgs e) { button3.BackColor = Color.Transparent; } private void button3_Click(object sender, EventArgs e) { Application.Exit(); } } }
三,密碼找回
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 暑假作業2 { public partial class FindPwd : Form { public FindPwd() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) {//先查詢使用者,之後核對身份證號,若一致則輸出密碼 string userid = UID.Text; string idc = IDC.Text; string Sqlstr = "server=.;database=User;uid=sa;pwd=******"; SqlConnection conn = new SqlConnection(Sqlstr); conn.Open(); SqlDataAdapter findid = new SqlDataAdapter("select*from [user] where [IDnum]='" + userid + "'", conn); DataSet FindId = new DataSet(); findid.Fill(FindId); conn.Close(); if(FindId.Tables[0].Rows.Count==0) { MessageBox.Show("使用者不存在!"); } else { if(idc!=FindId.Tables[0].Rows[0][2].ToString()) { MessageBox.Show("身份證號錯誤!"); } else { PWD.Text = FindId.Tables[0].Rows[0][1].ToString(); } } } private void button2_Click(object sender, EventArgs e) { Form1 F = new Form1(); F.Show(); this.Close(); } private void colorchange(object sender, MouseEventArgs e) { button3.BackColor = Color.Red; } private void colorback(object sender, EventArgs e) { button3.BackColor = Color.Transparent; } private void button3_Click(object sender, EventArgs e) { Application.Exit(); } } }
四,參考部落格:
(1)SQL Connection連結資料庫的關鍵字,具體參考這個:https://blog.csdn.net/rex1129/article/details/78611396
(2)SqlDataAdapter是 DataSet和 SQL Server之間的橋接器,用於檢索和儲存資料,參考部落格:https://blog.csdn.net/nicholaseenzhu/article/details/70417407
(3)可以把DataSet當成記憶體中的資料庫,DataSet是不依賴於資料庫的獨立資料集合。所謂獨立,就是說,即使斷開資料鏈路,或者關閉資料庫,DataSet依然是可用的,參考部落格:https://blog.csdn.net/andrewniu/article/details/53065522
(4)擷取字串,(0,9)的意思是從第0個字元開始,共擷取9個數據,參考:https://www.cnblogs.com/sun1512/p/6108893.html
(5)sqlcommand類表示要對 SQL Server資料庫執行的一個 Transact-SQL 語句或儲存過程。參考:https://blog.csdn.net/luochuan/article/details/9220415