1. 程式人生 > >C#窗體 登入實名註冊密碼找回

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