Code C#: Mô hình lập trình 3 lớp - 3 Tiers (Phần 3)

Code C#: Mô hình lập trình 3 lớp - 3 Tiers (Phần 3)
Trong bài viết Mô hình lập trình 3 lớp - 3 Tiers (Phần 2), các bạn đã xây dựng được các lớp căn bản phục vụ cho bảng benhnhan. Trong phần 3, các bạn sẽ xây dựng form giao diện và hoàn thiện mã nguồn cho các chức năng chính.
8. Giao diện trang quản lý thông tin bệnh nhân:
Form quản lý bệnh nhân
Hình 1. Thiết kế giao diện form quản lý bệnh nhân

9. Lớp frmBN.cs 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BusinessLogicLayer;
using Entities;

namespace PresentationLayer
{
    public partial class frmBN : Form
    {
        public frmBN()
        {
            InitializeComponent();
        }
        public static int ktShow = 0;

        private BacSyBLL bllBS;
        private BenhNhanBLL bllBN;
        private BindingSource bsBN;
        private BLL bll;
        private List<BenhNhanEntity> lst;

        private void frmBN_Load(object sender, EventArgs e)
        {
            try
            {
                bllBN = new BenhNhanBLL();
                bllBS = new BacSyBLL();
                bll = new BLL();
                bll.BuildTree(bllBS, trwBacSy);
                KhoaText(false);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }       

        private void basyTreeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            try
            {
                if (trwBacSy.SelectedNode.Level == 1)
                {
                    string maBS = e.Node.Tag.ToString();//mã số BS
                    updateDataGridView(maBS);
                    lblMaBS.Text = maBS;            
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        private void updateDataGridView(string maBS)
        {
            lst = bllBN.getBenhNhanOfBacSy(maBS);
            bsBN = new BindingSource();
            bsBN.DataSource = lst;
            dgBenhNhan.DataSource = bsBN;
        }
        private void bnDataGridView_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            try
            {
                BenhNhanEntity bn = (BenhNhanEntity)bsBN.Current;
                txtCMND.Text = bn.SoCMND;
                txtHoTen.Text = bn.TenBN;
                txtDiaChi.Text = bn.DiaChiBN;
            }
            catch (Exception)
            {
                throw;
            }
        } 
       
private string validateInputData()  {
            if (txtCMND.Text == "")
            {
                txtCMND.Focus();
                return "CMND không được để trống!";
            }
            if (txtDiaChi.Text == "")
            {
                txtDiaChi.Focus();
                return "Địa chỉ không được để trống!";
            }
            if (txtHoTen.Text == "")
            {
                txtHoTen.Focus();
                return "Họ tên không được để trống!";
            }
            return "OK";
        }

        private void btnLuu_Click(object sender, EventArgs e)  {  
            try
            {
                string tmp = validateInputData();
                if (tmp == "OK")
                {
                    BenhNhanEntity bs = new BenhNhanEntity(txtCMND.Text, txtHoTen.Text, txtDiaChi.Text, lblMaBS.Text);
                    bllBN.UpdateBenhNhan(bs);
                    btnLuu.Enabled = false;
                    btnThem.Text = "Thêm";
                    KhoaText(false);
                    MessageBox.Show("Thêm thành công!", "Chương trình QL Bệnh nhân", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    updateDataGridView(lblMaBS.Text);
                }
                else
                {
                    MessageBox.Show(tmp, "Chương trình QL Bệnh nhân", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (lblMaBS.Text == "Mã BS")
                MessageBox.Show("Chọn BN trước khi xoá", "Chương trình QL bệnh nhân.", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                if (MessageBox.Show("Bạn có muốn xoá hay không?", "Chương trình quản lý bệnh nhân", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    if (!bllBN.xoaBenhNhan(txtCMND.Text))
                        MessageBox.Show("Không thành công", "Chương trình QL Bệnh nhân", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    updateDataGridView(lblMaBS.Text);
                }
        }

        private void frmBN_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult ask;
            ask = MessageBox.Show("Bạn có muốn thoát khỏi chương trình không?", "Chương trình QL Bệnh nhân", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
            if (ask == DialogResult.No)
                e.Cancel = true;
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void KhoaText(bool k)
        {
            txtDiaChi.Enabled = k;
            txtHoTen.Enabled = k;
            txtCMND.Enabled = k;       
        }

        private void XoaText()
        {
            txtDiaChi.Text = "";
            txtHoTen.Text = "";
            txtCMND.Text = "";
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (lblMaBS.Text == "Mã BS")
                MessageBox.Show("Chọn BS trước khi nhấn thêm BN", "Chương trình QL bệnh nhân.", MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                if (btnThem.Text == "Thêm")
                {
                    btnLuu.Enabled = true;
                    btnThem.Text = "Huỷ";
                    XoaText();
                    KhoaText(true);
                    trwBacSy.Enabled = false;
                    dgBenhNhan.Enabled = false;
                }
                else
                {
                    btnLuu.Enabled = false;
                    btnThem.Text = "Thêm";
                    KhoaText(false);
                    trwBacSy.Enabled = true;
                    dgBenhNhan.Enabled = true;
                }
        }

        private void frmBN_Activated(object sender, EventArgs e)
        {
            if (ktShow == 1)
            {
                bll.BuildTree(bllBS, trwBacSy);
            }
        }

        private void btnXemTTBSDT_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Tự viết thêm cái form nữa, thêm phần xử lý trong BLL","Chương trình QL bệnh nhân.", MessageBoxButtons.OK,MessageBoxIcon.Information);
        }
  
        private void txtCMND_KeyPress(object sender, KeyPressEventArgs e)
        {          
            if ((Keys)e.KeyChar == Keys.Enter)
                txtDiaChi.Focus();
        }
}}
Tags: Visual Studio, Windows Form, 3 tiers, Mô hình 3 lớp
Xem chi tiết

Code C#: Mô hình lập trình 3 lớp - 3 Tiers (Phần 2)

Code C#: Mô hình lập trình 3 lớp - 3 Tiers (Phần 2)
Trong bài viết Mô hình lập trình 3 lớp - 3 Tiers (Phần 1), các bạn đã xây dựng được các lớp căn bản phục vụ cho bảng benhnhan. Trong phần 2, các bạn sẽ tìm hiểu các lớp ở tầng bên trên như Business và Presentation.
Mô hình lập trình 3 lớp
Hình 1. Mô hình lập trình 3 lớp
5. Lớp BenhNhanDAL.cs
using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.OleDb;
using System.Collections;
using Entities;

namespace DataAccessLayer
{
    public class BenhNhanDAL : DBConnection
    {
        private DataSet ds = null;
        private OleDbDataAdapter daBN;
       
        public BenhNhanDAL(): base()
        {
        }

        public DataSet getAllBenhNhan()
        {
            try
            {
                ds = new DataSet();
                daBN = new OleDbDataAdapter("select * from BenhNhan", con);
                daBN.Fill(ds, "BenhNhan");
            }
            catch (Exception)
            {
                throw;
            }
            return ds;
        }

        public BenhNhanEntity getDataByCMND(string soCMND)
        {
            BenhNhanEntity bn = null;
            try
            {
                string sql = "SELECT * FROM BenhNhan WHERE CMND='" + soCMND + "'";
                if (con.State != ConnectionState.Open)
                    con.Open();
                OleDbDataReader dr = new OleDbCommand(sql, con).ExecuteReader();
                if (dr.Read())
                {
                    bn = new BenhNhanEntity();
                    bn.SoCMND = dr["CMND"].ToString();
                    bn.TenBN = dr["TenBN"].ToString();
                    bn.DiaChiBN = dr["DiachiBN"].ToString();
                    bn.MaBS = dr["MaBS"].ToString();
                    dr.Close();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return bn;
        }

        public List<BenhNhanEntity> getBenhNhanOfBacSy(string MaBS)
        {
            List<BenhNhanEntity> lst = null;
            try
            {
                lst = new List<BenhNhanEntity>();
                string sql = "SELECT * FROM BenhNhan where MaBS='" + MaBS + "'";
                if (con.State != ConnectionState.Open)
                    con.Open();
                OleDbDataReader reader = new OleDbCommand(sql, con).ExecuteReader();
                while (reader.Read())
                {
                    BenhNhanEntity bn = new BenhNhanEntity();
                    bn.SoCMND = reader["CMND"].ToString();
                    bn.TenBN = reader["TenBN"].ToString();
                    bn.DiaChiBN = reader["DiaChiBN"].ToString();
                    bn.MaBS = reader["MaBS"].ToString();
                    lst.Add(bn);
                }
                reader.Close();
            }
            catch (Exception)
            {
                throw;
            }
            return lst;
        }

        public void updateBenhNhan()
        {
            OleDbCommandBuilder bd = new OleDbCommandBuilder(daBN);
            daBN.Update(ds, "BenhNhan");
        }

        public void updateBenhNhan(BenhNhanEntity bn)
        {
            try
            {
                getAllBenhNhan();
                DataTable dt = ds.Tables["BenhNhan"];
                DataRow dr = dt.NewRow();
                dr["CMND"] = bn.SoCMND;
                dr["TenBN"] = bn.TenBN;
                dr["DiaChiBN"] = bn.DiaChiBN;
                dr["MaBS"] = bn.MaBS;
                dt.Rows.Add(dr);
                updateBenhNhan();
            }
            catch (Exception)
            {
                throw;
            }

        }
        public bool xoaBenhNhan(string MaBN)
        {
            bool kq = false;
            try
            {
                kq = (new OleDbCommand("DELETE FROM BenhNhan WHERE CMND='" + MaBN + "'", con).ExecuteNonQuery() > 0 ? true : false);
            }
            catch (Exception)
            {

                throw;
            }
            return kq;
        }
    }
}
6. Lớp BenhNhanBLL.cs
using System;
using System.Collections.Generic;
using System.Text;
using DataAccessLayer;
using System.Data;
using Entities;

namespace BusinessLogicLayer
{
    public class BenhNhanBLL
    {
        private BenhNhanDAL dal;

        public BenhNhanBLL()
        {
            try
            {
                dal = new BenhNhanDAL();
            }
            catch (Exception)
            {
                throw;
            }
        }

        public DataSet getAllBenhNhan()
        {
            DataSet ds = null;
            try
            {
                ds = dal.getAllBenhNhan();
            }
            catch (Exception)
            {
                throw new Exception("Không thể lấy danh sách bệnh nhân.");
            }
            return ds;
        }

        public BenhNhanEntity getDataByCMND(string soCMND)
        {
            BenhNhanEntity bn = null;
            try
            {
                bn = dal.getDataByCMND(soCMND);
            }
            catch (Exception)
            {
                throw new Exception("Không tồn tại bệnh nhân có số CMND này.");
            }
            return bn;
        }

        public List<BenhNhanEntity> getBenhNhanOfBacSy(string msBSDT)
        {
            List<BenhNhanEntity> lst = null;
            try
            {
                lst = dal.getBenhNhanOfBacSy(msBSDT);
            }
            catch (Exception)
            {
                throw new Exception("không thể lấy danh sách Bệnh nhân của BSDT này.");
            }
            return lst;
        }

        public void updateBenhNhan()
        {
            try
            {
                dal.updateBenhNhan();
            }
            catch (Exception)
            {
                throw new Exception("Không thể cập nhật dữ liệu");
            }
        }

        public void UpdateBenhNhan(BenhNhanEntity bn)
        {
            try
            {
                BenhNhanEntity old = dal.getDataByCMND(bn.SoCMND);
                if (old != null)
                    throw new Exception("Bệnh nhân này đã tồn tại");
                dal.updateBenhNhan(bn);
            }
            catch (Exception)
            {

                throw;
            }
        }

        public bool xoaBenhNhan(string maBN)
        {
            bool x = false;
            try
            {
                x = dal.xoaBenhNhan(maBN);
            }
            catch (Exception)
            {
                throw;
            }
            return x;
        }
    }
}
7. Lớp BLL.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data;
using BusinessLogicLayer;

namespace BusinessLogicLayer

{
    public class BLL
    {
        public BLL()
        {
       
        }
        public void BuildTree(BacSyBLL bllBS, TreeView tv)
        {
            TreeNode node0, node1; // cho cấp 0, 1 của cây BS
            tv.Nodes.Clear();
            DataSet ds = bllBS.getAllBacSy();
            node0 = tv.Nodes.Add("DANH SÁCH CÁC BÁC SỸ");
            node0.ImageIndex = 0;
            foreach (DataRow dr1 in ds.Tables["BacSy"].Rows)
            {
                node1 = node0.Nodes.Add("Bác sỹ: " + dr1["TenBS"].ToString());
                node1.Tag = dr1["MaBS"].ToString();
                node1.ImageIndex = 1;

                node1.Nodes.Add("Địa chỉ: " + dr1["DiaChiBS"].ToString());
                node1.Nodes.Add("Điện thoại: " + dr1["DienThoaiBS"].ToString());
            }
            tv.ExpandAll();
        }
    }
}
Tags: Visual Studio, Windows Form, 3 tiers, Mô hình 3 lớp
Xem chi tiết