-
20-08-2011, 08:19 AM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Hướng dẫn tạo Form Đăng Ký và Đăng Nhập - part 1
Part 1 chủ yếu trình bày về cách INSERT data vào database và kiểm tra điều kiện để Log In vào 1 Form khác.
Form Đăng Ký
Form Đăng Nhập
Form Chính
Cấu trúc Form:
+ Trang Đăng Nhập: Form1.cs
+ Trang Đăng Ký : DangKy.cs
+ Trang Chính: MainForm.cs
Các class sử dụng:
+ AccessData.cs
+ KiemTraDangNhap.cs
+ Ngay.cs
1. Tạo CSDL - Sử dụng MSSQL
+ CSDL tên : DEMO_DANGKY_DANGNHAP
+ Table tên: USER_INFO
+ Các columns: để cho đơn giản. Tôi cho tất cả các thuộc tính đều là kiển NVARCHAR(50)
- USERNAME (TextBox)
- PASSWORD (TextBox)
- CPASSWORD (TextBox)
- EMAIL (TextBox)
- ADDRESS (TextBox)
- GENDER (RadioButton)
- BIRTHDAY (ComboBox)
- OCCUPATION (TextBox)
+ Các thuộc tính trên tương ứng với FORM DANGKY. Xem tham khảo ở file đính kèm.
+ Tạo database:
+ Sau khi tạo CSDL xong. Ta add nó vào Server Explorer:
2. Các class
+ AccessData.cs :
Mã:using System.Data;using System.Data.SqlClient; class AccessData { public SqlConnection GetConnection() { return new SqlConnection("Data Source=DUNG-PC;Initial Catalog=DEMO_DANGKY_DANGNHAP;Integrated Security=True"); } public void ExcuteNonQuery(string sql) { SqlConnection conn = GetConnection(); SqlCommand cmd = new SqlCommand(sql, conn); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); cmd.Dispose(); } public SqlDataReader ExecuteReader(string sql) { SqlConnection conn = GetConnection(); conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader reader = cmd.ExecuteReader(); return reader; } }
+ KiemTraDangNhap.cs : Kiểm tra xem username và password có hợp lệ hay ko.
Mã:using System.Data;using System.Data.SqlClient; class KiemTraDangNhap { public int CheckLogin(string username, string password) { AccessData acc = new AccessData(); SqlDataReader reader = acc.ExecuteReader("SELECT USERNAME, PASSWORD FROM USER_INFO"); while(reader.Read()) { if (reader[0].ToString() == username && reader[1].ToString() == password) { // reader[0] tương ứng cho textbox Username // reader[1] tương ứng cho textbox Password return 1; } } return 0; } }
Mã:using System.Windows.Forms; class Ngay { public int KiemTraNhuan(ComboBox cbYear) { int year = Convert.ToInt32(cbYear.SelectedItem); if (year % 4 == 0 && year % 100 != 0) return 1; if (year % 400 == 0) return 1; return 0; } public int NgayMax(ComboBox cbDate, ComboBox cbMonth, ComboBox cbYear) { int day = Convert.ToInt32(cbDate.SelectedItem); int month = Convert.ToInt32(cbMonth.SelectedItem); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; // Các tháng có 31 ngày break; case 4: case 6: case 9: case 11: return 30; // Các tháng có 30 ngày break; case 2: { if (KiemTraNhuan(cbYear) == 1) return 29; // Nếu là năm Nhuận => Tháng 2 : 29 ngày return 28; // Ngược lại => Tháng 2: 28 ngày } default: return 0; } } public int KiemTraHopLe(ComboBox cbDate, ComboBox cbMonth, ComboBox cbYear) { int month = Convert.ToInt32(cbMonth.SelectedItem); int day = Convert.ToInt32(cbDate.SelectedItem); if (month >= 1 && month <= 12) { if (day >= 1 && day <= NgayMax(cbDate, cbMonth, cbYear)) // Nếu ngày từ 1 đến cái ngày lớn nhất trong tháng đó return 1; return 0; } return 0; } }
3. Các Form
+ DangKy.cs
- Thứ 1 : Ta sẽ đặt giá trị cho cái ComboBox Ngày Tháng Năm
- Thứ 2 : Bắt sự kiện cho cái nút SignUp => INSERT data vào database
Mã:public partial class DangKy : Form { AccessData acc; public DangKy() { InitializeComponent(); for (int i = 1; i <= 31; i++) { this.cbDate.Items.Add(i.ToString()); // Lấy giá trị cho ComboBox Ngày : 1 - 31 ngày } for (int i = 0; i <= 12; i++) { this.cbMonth.Items.Add(i.ToString()); // Lấy giá trị cho ComboBox Tháng : 1 - 12 tháng } int curYear = DateTime.Now.Year; // Lấy ra năm hiện tại for (int i = curYear; i >= 1900; i--) { this.cbYear.Items.Add(i.ToString()); // Lấy giá trị cho ComboBox Năm: 1900 - Năm hiên tại } } // Bắt sự kiện cho button SignUp => Insert data vào database private void btnSignUp_Click(object sender, EventArgs e) { Ngay n = new Ngay(); // Tạo đối tượng Ngày => Kiểm tra tính hợp lệ của ngày if (n.KiemTraHopLe(cbDate, cbMonth, cbYear) == 1) { acc = new AccessData(); string gender = ""; // Tạo biến gender => Để chứa giá trị Male hoặc Female string birth = ""; // Tạo biến birth => Để chứa ngày tháng năm sinh (12/12/1900) if (this.rdMale.Checked == true) { gender = "Male"; // Nếu RadioButton Male được check => Lưu Male vào gender } else { if (this.rdFemale.Checked == true) { gender = "Female"; // Nếu RadioButton Female được check => Lưu Female vào gender } } // Lấy ngày tháng năm từ ComboBox và lưu vào cho biến birth birth = cbDate.SelectedItem.ToString() + "/" + cbMonth.SelectedItem.ToString() + "/" + cbYear.SelectedItem.ToString(); // string sql = "INSERT INTO USER_INFO VALUES('" + txtUsername.Text + "', '" + txtPassword.Text + "', '" + txtCPassword.Text + "', '" + txtEmail.Text + "', '" + txtAddress.Text + "', '" + gender + "', '" + birth + "','" + txtOccupation.Text + "')"; // Query Insert data acc.ExcuteNonQuery(sql); // Thực thi Query MessageBox.Show("Đăng Ký Thành Công", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information); // Nếu đang ký thành công => Sẽ có thông báo Thành Công và đồng thời các TextBox sẽ mất giá trị do ClearTextBox(). ClearTextBox(); } else { // Nếu ngày tháng ko hợp lê thì nó sẽ hiển thị lại bằng các tên bên dưới. cbDate.Text = "Date:"; cbMonth.Text = "Month:"; cbYear.Text = "Year:"; } } private void ClearTextBox() { txtUsername.Clear(); txtPassword.Clear(); txtCPassword.Clear(); txtAddress.Clear(); txtEmail.Clear(); cbDate.Text = "Day:"; cbMonth.Text = "Month:"; cbYear.Text = "Year:"; txtOccupation.Clear(); } }
- Thứ 1: Bắt sự kiện button SignIn : Kiểm tra data nhập từ 2 TextBox (Username , Password) với data trong database. Nếu trùng thì load qua MainForm.cs. Ko trùng thì hiện THÔNG BÁO
- Thứ 2: Bắt sự kiện button SignUp : Load Form DangKy.cs
Mã:public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnSignUp_Click(object sender, EventArgs e) { DangKy dk = new DangKy(); dk.ShowDialog(); } private void btnSignIn_Click(object sender, EventArgs e) { KiemTraDangNhap dn = new KiemTraDangNhap(); MainForm frm = new MainForm(); if (dn.CheckLogin(txtUsername.Text, txtPassword.Text) == 1) // Kiểm tra data từ TextBox và data trong database { this.Hide(); // Form Đăng Nhập sẽ ẩn đi => MainForm sẽ load lên frm.ShowDialog(); } else { lblThongBao.Text = "Sai Password hoac Username. Check lai lan nua !!!"; txtUsername.Clear(); txtPassword.Clear(); } } }
FILE DEMO: File demo + File back up database(.bak)
NOTE:
Muốn sử dụng được cái file Demo. Mấy bro nhớ vào MSSQL Restore cái file DEMO_DANGKY_DANGNHAP.bak (file CSDL của mình).View more random threads:
- CMShareable - Library dành cho .NET
- [TUT] Tính giá trị biểu thức bằng kí pháp nghịch đảo balan
- Cách nào để tạo Crystal report từ 2-3 table trong database và filter by parameter ?
- Sắp xếp ListView theo cột bất kỳ trong lập trình C#
- Bài tập lập trình C# căn bản
- Tìm hiểu cơ chế và sử dụng từ khóa “yield” trong C#
- Viết mã lệnh C# theo chuẩn (Coding Standar)
- địa ๑ chỉ ✦ ip ✤ có ❣ thật ❉ sự ✚ ảnh ۩ hưởng ۩ tới ❦ thứ ✪ hạng ✦ website ❥ ?
- Hướng dẫn viết chương trình liên tục thông báo lên màn hình
- Ẩn Process trong Taskmanager với lập trình C#
-
26-08-2011, 02:48 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Part 2: Update data.
Form Update data giống với Form DangKy. Chỉ khác button.
Đầu tiên muốn xem thông tin của profile thì ta phải có data. Làm cách nào để lấy cho chính xác. Ta phải truyền data từ các Form với nhau.
Ví dụ: Tôi muốn lấy ra 1 profile của 1 thành viên nào đó, thì tôi sử dụng query Select
Select * From USER_INFO Where USERNAME = 'USERNAME TỪ FORM DANG NHAP' (Điều kiện lấy data từ database)
Vậy ta sẽ tiến hành truyền data từ Form DangNhap sang các Form.
Form Profile
Mã:public partial class Profile : Form { Form1 frm1 = null; public Profile(Form1 f) // Truyền data từ Form DangNhap sang Form Profile { this.frm1 = f; InitializeComponent(); for (int i = 1; i <= 31; i++) { this.cbDate.Items.Add(i.ToString()); } for (int i = 0; i <= 12; i++) { this.cbMonth.Items.Add(i.ToString()); } int curYear = DateTime.Now.Year; for (int i = curYear; i >= 1900; i--) { this.cbYear.Items.Add(i.ToString()); } } private void Profile_Load(object sender, EventArgs e) { AccessData acc = new AccessData(); string frmUsername = frm1.TxtUsername.Text; // Lấy data từ database ra để hiển thị trên từng TextBox của FOrm Profile SqlDataReader reader = acc.ExecuteReader("SELECT * FROM USER_INFO WHERE USERNAME = '" + frmUsername + "'"); while (reader.Read()) { txtUsername.Text = reader[0].ToString(); txtPassword.Text = reader[1].ToString(); txtCPassword.Text = reader[2].ToString(); txtEmail.Text = reader[3].ToString(); txtAddress.Text = reader[4].ToString(); txtOccupation.Text = reader[7].ToString(); // if (reader[5].ToString() == "Male") { rdMale.Checked = true; } else { if (reader[5].ToString() == "Female") { rdFemale.Checked = true; } } // string birth = reader[6].ToString(); // Lấy ra ngày/thángăm string[] arrBirth = birth.Split('/'); // Lấy từ phần tử ra. cbDate.Text = arrBirth[0]; cbMonth.Text = arrBirth[1]; cbYear.Text = arrBirth[2]; } reader.Close(); } private void btnUpdate_Click(object sender, EventArgs e) { try { Ngay n = new Ngay(); if (n.KiemTraHopLe(cbDate, cbMonth, cbYear) == 1) { AccessData acc = new AccessData(); string username = frm1.TxtUsername.Text; string gender = ""; if (this.rdMale.Checked == true) { gender = "Male"; } else { if (this.rdFemale.Checked == true) { gender = "Female"; } } string birth = ""; birth = cbDate.SelectedItem.ToString() + "/" + cbMonth.SelectedItem.ToString() + "/" + cbYear.SelectedItem.ToString(); // Câu truy vấn Update data xuống database string sql = "UPDATE USER_INFO SET PASSWORD = '" + txtPassword.Text + "', CPASSWORD = '" + txtCPassword.Text + "', EMAIL = '" + txtEmail.Text + "', ADDRESS = '" + txtAddress.Text + "', GENDER = '" + gender + "', BIRTHDAY = '" + birth + "', OCCUPATION = '" + txtOccupation.Text + "' WHERE USERNAME = '" + username + "'"; acc.ExcuteNonQuery(sql); MessageBox.Show("Update Successfully !!!"); this.Refresh(); } else { cbDate.Text = "Date:"; cbMonth.Text = "Month:"; cbYear.Text = "Year:"; } } catch (Exception) { MessageBox.Show("Error !!!"); } } }
Form1.cs
Mã:private void btnSignIn_Click(object sender, EventArgs e) { KiemTraDangNhap dn = new KiemTraDangNhap(); MainForm frm = new MainForm(this); //Chỉnh sửa ở tham số đầu vào if (dn.CheckLogin(txtUsername.Text, txtPassword.Text) == 1) { this.Hide(); frm.ShowDialog(); } else { lblThongBao.Text = "Sai Password hoac Username. Check lai lan nua !!!"; txtUsername.Clear(); txtPassword.Clear(); } }
Thêm button ViewProfile
Mã:public partial class MainForm : Form { Form1 f; public MainForm(Form1 f) // Truyền data từ Form DangNhap(Form1.cs) sang MainForm { //f = new Form1(); this.f = f; InitializeComponent(); } private void btnView_Click(object sender, EventArgs e) // Bắt sự kiện Button ViewProfile { Profile pf = new Profile(this.f); pf.Show(); } private void MainForm_Load(object sender, EventArgs e) { string p1 = f.TxtUsername.Text; lblThongBao.Text = p1 + " Dang nhap thanh cong"; } }
-
26-08-2011, 02:54 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Còn về phần kiểm tra điều kiện của các TextBox sao cho hợp lệ(Password phải có mấy kí tự, email phải là dạng chuẩn vd: example@something.com, Confirm Pass phải giống Password).
Mấy bro tự tìm hiểu nhá. Good Luck !!![IMG]images/smilies/biggrin.png[/IMG] [IMG]images/smilies/tongue.png[/IMG]
-
26-08-2011, 04:43 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Đang ở
- 89 Tam Trinh - Hoàng Mai - Hà Nội
- Bài viết
- 0
Đăng nhập và đăng ký mình không nghỉ nó quá dài đến vậy!!![IMG]images/smilies/applause.gif[/IMG][IMG]images/smilies/17.gif[/IMG]
Chúc các bạn thành công![IMG]images/smilies/clap_grin.gif[/IMG][IMG]images/smilies/biggrin.png[/IMG]
-
26-08-2011, 05:07 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Kiến thức mình còn hạn chế. Nên cách làm của mình có lẽ dài dòng. [IMG]images/smilies/tongue.png[/IMG]
Mong mấy bác cùng đóng góp thêm cho tut này. Để mọi người cùng học hỏi. Thanks [IMG]images/smilies/biggrin.png[/IMG]
-
22-02-2012, 03:05 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi nndung179
-
06-03-2012, 01:01 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
bạn ơi giờ ko cần kiểm tra ngày tháng năm như vậy đâu, mình thì dùng như thế này. nếu muốn người ta nhập theo định dạng gì thì viết 1 string chứa biểu thức Reg cho nó. rồi dùng Regex.IsMatch(reg,input) là xong
rồi else
try{ DateTime dt=Convert.ToDateTime(input);}catch{}
là ok mà
Cách này mình mất khoảng 6 dòng[IMG]images/smilies/biggrin.png[/IMG]
-
07-03-2012, 08:12 AM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi nndung179
Mình có bảng NHANVIEN(TenDN,matkhau,quyen)
-
07-03-2012, 08:45 AM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cách đơn giản nhất là như thế này.
VD:
CSDL NhanVien(manv(int), hoten(nvarchar), tinhtrang(int), capdo(int))
capdo: Có 2 thuộc tính
1: Quản lý
2: Nhân viên
Trong chương trình sẽ có 1 form chức năng của QuanLy và NhanVien.
1. NhanVien ko dc quyen sử dụng chức năng của QuanLy
2. QuanLy thì được xài hết chức năng NhanVien + QuanLy
=> Mỗi lần đăng nhập. Form sẽ gửi Username xuống database kiểm tra xem username có cấp độ nào.
+ Nếu là 1: Hiện toàn bộ Control trên Form
+ Nếu là 2: Visible = false cho các control ko phải của NhanVien
-
07-03-2012, 10:06 AM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi nndung179
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...