a. To ng dng WinForm: Khi ng Microsoft Visual Studio 2005 T menu File chn New\Project
b. Thit k v lp trnh: Xy dng phn mm hng i tng GVHD: Trn Anh Dng
c. ng k v x l s kin cho Button Thot Ca s Properties, cho php thay i cc thuc tnh ca control Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Double click chut tri vo s kin cn x l Xy dng phn mm hng i tng GVHD: Trn Anh Dng d. ng k v x l cho s kin Button tnh o hm: private void bTinh_Click(object sender, EventArgs e) { if (heso_p.Text.Trim().Equals("") || somu_p.Text.Trim().Equals("")) { MessageBox.Show("Cha nhp d liu y .", "Thong bao loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } int a, b; //Chuyn i chui thnh s a = Int32.Parse(heso_p.Text.Trim()); b = Int32.Parse(somu_p.Text.Trim()); //Chuyn i s thnh chui heso_q.Text = Convert.ToString(a * b); somu_q.Text = Convert.ToString(b - 1); } e. Ch x l cc trng hp ngoi l (d liu nhp khng hp l) i. Trong trng hp ny s pht sinh li v dng chng trnh nu ngi dng nhp gi tr khng hp l (c th d liu nhp khng phi l s) ii. Khi phng thc Int32.Parse() s pht sinh ngoi l
Xy dng phn mm hng i tng GVHD: Trn Anh Dng iii. x l ngoi l trong C#, chng ta dng khi try { ... }catch(...) private void bTinh_Click(object sender, EventArgs e) { if (heso_p.Text.Trim().Equals("") || somu_p.Text.Trim().Equals("")) { MessageBox.Show("Cha nhp d liu y .", "Thong bao loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; } int a=0, b=0; try { //Chuyn i chui thnh s a = Int32.Parse(heso_p.Text.Trim()); b = Int32.Parse(somu_p.Text.Trim()); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), "Loi dinh dang so", MessageBoxButtons.OK, MessageBoxIcon.Stop); } //Chuyn i s thnh chui heso_q.Text = Convert.ToString(a * b); somu_q.Text = Convert.ToString(b - 1); } iv. ngn chn kh nng pht sinh li ??? Khng cho php nhp cc k t khng phi l k t s vo textbox Gii php ???
Xy dng phn mm hng i tng GVHD: Trn Anh Dng X l s kin nhp phm (KeyPress) private void heso_p_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < '0' || e.KeyChar >= '9')) e.Handled = true; } // Ch x l trng hp khi nhn cc phm xa, di chuyn f. Sinh vin t pht trin tip hon thin chng trnh trn Xy dng phn mm hng i tng GVHD: Trn Anh Dng HNG DN THC HNH TUN 2 Lp trnh ng dng WinForm vi C# (tt)
2. Vit chng trnh Gii phng trnh bc 2 c dng: ax 2 + bx + c = 0, vi a 0 a. To ng dng WinForm: Khi ng Microsoft Visual Studio 2005 to ng dng C# tng t nh bi tp 1 (hng dn ca tun 1) b. Thit k v lp trnh:
c. ng k v x l s kin cho Button Thot d. To lp TAM_THUC Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Ci t lp TAM_THUC: class TAM_THUC { private double a; //a<>0 private double b; private double c; public double HeSoA { get { return a; } set { a=value; } } public double HeSoB { get { return b; } set { b=value; } } public double HeSoC Click chut phi ln project BaiTap2 to class mi Xy dng phn mm hng i tng GVHD: Trn Anh Dng { get { return c; } set { c=value; } } public TAM_THUC() { } public bool NhapHeSo(string hesoa, string hesob, string hesoc) { try { if (hesoa.Trim().Length == 0) { MessageBox.Show("Cha nhp h s a", "Thong bao loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return false; } else if (hesob.Trim().Length == 0) { MessageBox.Show("Cha nhp h s b", "Thong bao loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return false; } else if (hesoc.Trim().Length == 0) { MessageBox.Show("Cha nhp h s c", "Thong bao loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return false; } a = Double.Parse(hesoa); b = Double.Parse(hesob); c = Double.Parse(hesoc); return true; } catch (Exception ex) { MessageBox.Show(ex.Message, "Loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return false; } } public NGHIEM GiaiPT() { NGHIEM cNghiem = new NGHIEM(); double delta; delta=b*b-4*a*c; if(delta<0) cNghiem.LoaiN = 0; else if(delta==0) { cNghiem.LoaiN = 1; cNghiem.x1 = -b/2*a; } else { cNghiem.LoaiN=2; class ny hiu hm MessageBox th u class phi : using System.Windows.Forms; Xy dng phn mm hng i tng GVHD: Trn Anh Dng cNghiem.x1 = -b - Math.Sqrt(delta)/2*a; cNghiem.x2 = -b + Math.Sqrt(delta)/2*a; } return cNghiem; } } e. To v ci t lp NGHIEM class NGHIEM { private double[] x = new double[2]; private int LoaiNghiem; public NGHIEM() { } public int LoaiN { get { return LoaiNghiem ; } set { LoaiNghiem=value; } } public double x1 { get { return x[0]; } set { x[0]=value; } } public double x2 { get { return x[1]; } set { x[1]=value; } } public void Xuat(TextBox txtNghiem) { if(LoaiNghiem==0) txtNghiem.Text="Phng trnh trn v nghim"; else if(LoaiNghiem==1) { txtNghiem.Text = "Phng trnh trn c nghim kp "; txtNghiem.Text += "x= " + x[0]; } else { txtNghiem.Text="Phng trnh trn c 2 nghim phn bit:"; txtNghiem.Text +=" x1 = " + x[0]; txtNghiem.Text +=" va x2 = " + x[1]; Phi c: using System.Windows.Forms; Xy dng phn mm hng i tng GVHD: Trn Anh Dng } } } f. ng k v x l cho s kin Button gii phng trnh: private void bGiai_Click(object sender, EventArgs e) { TAM_THUC tt = new TAM_THUC(); NGHIEM N;
tt.NhapHeSo(heso_a.Text.Trim(), heso_b.Text.Trim(), heso_c.Text.Trim()); N = tt.GiaiPT(); N.Xuat(txtNghiem); } g. X l li pht sinh khi ngi dng nhp d liu khng phi l s
h. ngn chn kh nng pht sinh li ??? Khng cho php nhp cc k t khng phi l k t s vo textbox Gii php ??? X l s kin nhp phm (KeyPress) i. Sinh vin t pht trin tip hon thin chng trnh trn Xy dng phn mm hng i tng GVHD: Trn Anh Dng HNG DN THC HNH TUN 3 Ch : ADO.NET
Phn 1: Cc thao tc kt ni ADO.NET s dng cu trc dng lnh vi namespace System.Data.
1. Thit k CSDL: a. M ng dng Microsoft Access b. Thit k CSDL, t tn QLHOCSINH.mdb:
HOCSINH STT Tn trng Kiu d liu Ghi ch 1 MaHS Text(10) PrimaryKey 2 TenHS Text(255) 3 NgaySinh Date/Time 4 DiaChi Text(255) 5 DTB Number 6 MaLop Text(10) ForeignKey (tham chiu n Lop(MaLop)
LOP STT Tn trng Kiu d liu Ghi ch 1 MaLop Text(10) PrimaryKey 2 TenLop Text(255) 3 SiSo Number
2. Thit k giao din: To project C# Window Application mi vi tn project l QLHS Thit k Form Nhp thng tin hc sinh nh mn hnh sau:
Xy dng phn mm hng i tng GVHD: Trn Anh Dng
To kt ni c s d liu bng dng lnh - thao tc trn c s d liu s dng ADO.NET ta cn c cc i tng sau: o Connection kt ni vi c s d liu.gm OleDbConnection v SqlConnection. o Command thc thi cc cu lnh truy vn, thc thi cc store procedure... bao gm OleDbCommand v SqlCommand o DataAdapter thc hin nh x d liu vo DataSet thng qua connection c bao gm OleDbDataAdapter v SqlDataAdapter. o DataSet cha d liu thu c hoc x l ly t c s d liu. DataSet l tp hp gm cc thnh phn DataTable (tng ng vi tng View trong c s d liu), DataColumn (tng ng vi Field trong CSDL) v DataRow (tng ng vi record trong CSDL).
- kt ni vi CSDL Access, ta s dng OleDb. Ta khai bo s dng namespace nh sau: using System.Data; using System.Data.OleDb;
- Ta khai bo cc bin cn s dng x l CSDL. private OleDbConnection connection; private OleDbDataAdapter adapter; private DataSet dataSet; private OleDbCommand command; Hm connect c s d liu - Ta vit hm connect c nhim v kt ni c s d liu nh sau:
private void connect(string file) { Xy dng phn mm hng i tng GVHD: Trn Anh Dng string connnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + file; connection = new OleDbConnection(connnectionString); }
- Trong s kin form load, ta gi hm connect khi to connection private void Form1_Load(object sender, EventArgs e) { connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb"); } Hm ly danh sch lp kt vi combobox private DataTable getDSLop() { adapter = new OleDbDataAdapter("select * from LOP", connection); dataSet = new DataSet();
adapter.Fill(dataSet);
return dataSet.Tables[0]; } - Trong s kin formLoad, ta gi hm ly danh sch lp v kt vo combobox private void Form1_Load(object sender, EventArgs e) { connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb"); //Load d liu vo comboBox Lp cboLop.DataSource = getDSLop(); // Column s c hin th cboLop.DisplayMember = "TenLop"; // Column s c gi gi tr cboLop.ValueMember = "MaLop"; } Ly thng tin t form vo cc bin - Khai bo cc bin sau: private string maHS, tenHS, diachi, malop; private double dtb; private DateTime ngaysinh;
command = new OleDbCommand(insertCommand, connection); command.ExecuteNonQuery(); connection.Close(); }
- Trong s kin Click ca btnLuu ta thc hin lu thng tin vo CSDL private void btnLuu_Click(object sender, EventArgs e) { getData(); insert(); MessageBox.Show("Cap nhat thanh cong", "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Information); }
Hm xa d liu khi CSDL - Tng t ta c hm xa d liu private void delete() { connection.Open(); string deleteCommand = "DELETE FROM HOCSINH WHERE MaHS = '"+maHS+"'"; command = new OleDbCommand(deleteCommand, connection); command.ExecuteNonQuery(); connection.Close(); }
- Trong s kin Click ca btnXoa ta thc hin xa thng tin t CSDL private void btnXoa_Click(object sender, EventArgs e) { getData(); delete(); MessageBox.Show("Xoa du lieu thanh cong", "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Information); }
3. Bi tp: a. Kim tra d liu nhp hp l: i. M hc sinh v tn hc sinh phi khc null ii. im trung bnh phi nhp gi tr s iii. b. Thc hin chc nng khi ngi dng nhp m HS c, chng trnh s hin th thng tin HS cho php ngi nhp sa i v lu li thng tin HS c sa.
c. ngn chn kh nng pht sinh li ??? Khng cho php nhp cc k t khng phi l k t s vo textbox im trung bnh Xy dng phn mm hng i tng GVHD: Trn Anh Dng Gii php ??? X l s kin nhp phm (KeyPress) cho textbox im trung bnh
d. Khi nhp d liu cho mt control xong, ngi dng mun chuyn qua contol tip theo nhp liu th phi nhn phm tab chuyn focus sang control k tip. Tuy nhin, i vi nhiu ngi dng, h li quen vi thao tc nhn phm Enter chuyn qua control tip theo Gii php??? Hng dn: x l s kin KeyPress ca control tng ng Khi ngi dng nhn mt phm, kim tra xem phm c phi l phm Enter khng? Nu l phm Enter th gi phm TAB
private void txtMaHS_KeyPress(object sender, KeyPressEventArgs e) { //Nu nhn phm enter if (e.KeyChar == 13) SendKeys.Send("{TAB}"); }
e. Sinh vin t pht trin tip hon thin chng trnh trn Xy dng phn mm hng i tng GVHD: Trn Anh Dng HNG DN THC HNH TUN 4 Ch : ADO.NET (tt)
Phn 1: Cc thao tc kt ni ADO.NET s dng cu trc dng lnh vi namespace System.Data (tt).
1. Thit k CSDL: a. S dng li CSDL ca tun trc (QLHOCSINH.mdb)
HOCSINH STT Tn trng Kiu d liu Ghi ch 1 MaHS Text(10) PrimaryKey 2 TenHS Text(255) 3 NgaySinh Date/Time 4 DiaChi Text(255) 5 DTB Number 6 MaLop Text(10) ForeignKey (tham chiu n Lop(MaLop)
LOP STT Tn trng Kiu d liu Ghi ch 1 MaLop Text(10) PrimaryKey 2 TenLop Text(255) 3 SiSo Number
2. S dng li ng dng c hng dn trong tun 3: Thit k li Form Nhp thng tin hc sinh nh mn hnh sau: Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Kt qu mn hnh khi chy:
DataGridView Xy dng phn mm hng i tng GVHD: Trn Anh Dng Vit hm load danh sch hc sinh vo DataGridView - Ta vit hm getDSHocSinh c nhim v tr v bng thng tin hc sinh nh sau: private DataTable getDSHocSinh() { adapter = new OleDbDataAdapter("Select h.MaHS, h.TenHS, h.NgaySinh, h.DiaChi, h.DiemTB, l.TenLop From HOCSINH h, LOP l Where h.MaLop=l.MaLop", connection); dataSet = new DataSet(); adapter.Fill(dataSet); return dataSet.Tables[0]; } - Trong s kin form load, ta gi hm getDSHocSinh v gn kt qu cho datasource ca DataGridView private void Form1_Load(object sender, EventArgs e) { connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");
//Load d liu vo comboBox Lp cboLop.DataSource = getDSLop();
// Column s c hin th cboLop.DisplayMember = "TenLop";
// Column s c gi gi tr cboLop.ValueMember = "MaLop";
//Load danh sch hc sinh ln li dgHocSinh.DataSource = getDSHocSinh();
hng dn trong tun 3 nh dng li hin th danh sch hc sinh Xy dng phn mm hng i tng GVHD: Trn Anh Dng Khi ngi dng chn mt row (chn 1 hc sinh) trn li hin th thng tin hc sinh va chn ln cc control trn form chnh sa v cp nht thng tin.
Vy gii php x l ???
Sinh vin cn phi Tm hiu cc s kin pht sinh trn li DataGridView
Trong trng hp ny chng ta x l s kin SelectionChanged:
Sinh vin phi x l Khi tin hnh lu thng tin ca mt hc sinh vo bng HOCSINH phi kim tra xem c tn ti hc sinh ny trong CSDL cha? - Nu cha c th insert (thm mi) - Nu tn ti th update (cp nht, sa)
Xy dng phn mm hng i tng GVHD: Trn Anh Dng Kh khn gp phi ca ngi dng: phi chp file HOCSINH.mdb vo ng v tr s dng trong chng trnh. Ngha l ng dn kt ni n CSDL c nh connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");
Nu trn my tnh khng tn ti ng dn ny s pht sinhh li v dng chng trnh.
Gii php khc phc tnh trng ny ???
Cho php ngi dng ch ra ng dn vt l lu tr CSDL (chn ng dn lu tr CSDL)
Bc 1: Add thm mt form mi (frmSelectPath) vo Project
Thit k giao din cho Form mi nh sau: Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Form frmSelectPath phi c chy u tin ???
Xy dng phn mm hng i tng GVHD: Trn Anh Dng Trong class Form1.cs khai bo bin sPathFilename nh sau:
//Khng cho php chn nhiu file openFileDialog1.Multiselect = false;
//Set caption cho dialog openFileDialog1.Title = "Chon CSDL";
//Set tn file mc nh openFileDialog1.FileName = "HOCSINH.mdb";
//Hin th hp thoi DialogResult dgResult = openFileDialog1.ShowDialog(); if (dgResult == DialogResult.OK) txtFile.Text = openFileDialog1.FileName; } Vit code cho s kin button Load:
- Trong s kin thot phi dng lnh: Application.Exit(); thot ng dng ( bi v this.Close() dng ng 1 form)
Sinh vin pht trin tip hon thin chng trnh
3. Bi tp: a. Kim tra cc rng buc v d liu b. Tm hiu cc s kin ca DataGridView c. Ci tin mn hnh giao din nhp thng tin hc sinh ngi dng thao tc tin li v tht nhanh chng i. Thit k li giao din cho php nhp danh sch hc sinh trc tip trn li (tng t nh nhp liu trn file Excel) ii. Tm hiu vic add mt s control vo cc ct trn DataGridView (V d: ct ngy sinh phi add control chn ngy thng nm, ct Lp phi add control ComboBox v load d liu vo comboBox cho php chn la trong khi nhp liu. iii. Xy dng phn mm hng i tng GVHD: Trn Anh Dng HNG DN THC HNH TUN 5 Ch : ADO.NET (tt)
Phn 2: Cc thao tc kt ni ADO.NET s dng cu trc dng lnh vi namespace System.Data. (Kt ni vi Database SQL Server)
1. Thit k CSDL SQL Server nh sau: a. To databse vi tn DBHOCSINH, thit k cc table sau:
HOCSINH STT Tn trng Kiu d liu Ghi ch 1 MaHS Nvarchar(20) PrimaryKey 2 TenHS Nvarchar(100) 3 NgaySinh Datetime 4 DiaChi Nvarchar(255) 5 DTB Real 6 MaLop Nvarchar(20) ForeignKey (tham chiu n Lop(MaLop)
LOP STT Tn trng Kiu d liu Ghi ch 1 MaLop Nvarchar(20) PrimaryKey 2 TenLop Nvarchar(100) 3 SiSo smallint
2. To project mi: Thit k li Form Kt ni CSDL SQL Server nh mn hnh sau: Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Source code lp frmConnection using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace QLHocSinh { public partial class frmConnection : Form { //Khai bo bin thnh phn public string sServerName = ""; public string sDatabaseName = ""; public string sUser = ""; public string sPass = "";
private bool KiemTraDLHopLe() { if (txtServerName.Text.Trim().Length == 0) Xy dng phn mm hng i tng GVHD: Trn Anh Dng { MessageBox.Show("Cha nhp tn my ch.", "Thong bao loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return false; } if (txtDBName.Text.Trim().Length == 0) { MessageBox.Show("Cha nhp tn CSDL.", "Thong bao loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return false; } return true; } private void cmdConnect_Click(object sender, EventArgs e) { if (!KiemTraDLHopLe()) return; sServerName = txtServerName.Text.Trim(); sDatabaseName = txtDBName.Text.Trim(); sUser = txtUser.Text.Trim(); sPass = txtPass.Text.Trim();
frmHocSinh frm = new frmHocSinh();
//Kim tra kt ni CSDL if (!frm.connect(sServerName, sDatabaseName, sUser, sPass)) { MessageBox.Show("Kt ni n my ch khng thnh cng.", "Thong bao loi", MessageBoxButtons.OK, MessageBoxIcon.Stop); return; }
MessageBox.Show("Kt ni n my ch thnh cng.", "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Information);
frm.Show(); this.Hide(); } } }
Xy dng phn mm hng i tng GVHD: Trn Anh Dng Thit k form nhp thng tin hc sinh nh sau:
Kt qu mn hnh khi chy:
DataGridView Xy dng phn mm hng i tng GVHD: Trn Anh Dng kt ni vi CSDL SQL Server dng namespace: using System.Data.SqlClient; Source code lp Mn hnh nhp thng tin hc sinh: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient;
namespace QLHocSinh { public partial class frmHocSinh : Form { private SqlConnection connection; private SqlDataAdapter adapter; private DataSet dataSet; private SqlCommand command;
Xy dng phn mm hng i tng GVHD: Trn Anh Dng if (rows.Count > 0) { DataGridViewRow row = rows[0]; txtMaHS.Text = row.Cells["MaHS"].Value.ToString(); txtTenHS.Text = row.Cells["TenHS"].Value.ToString(); if (row.Cells["NgaySinh"].Value.ToString().Length>0) dtNgaySinh.Value = DateTime.Parse(row.Cells["NgaySinh"].Value.ToString()); txtDiaChi.Text = row.Cells["DiaChi"].Value.ToString(); txtDiemTB.Text = row.Cells["DiemTB"].Value.ToString(); cboLop.Text = row.Cells["TenLop"].Value.ToString(); } }
private void btnNew_Click(object sender, EventArgs e) { txtMaHS.Text = ""; txtTenHS.Text = ""; txtDiaChi.Text = ""; txtDiemTB.Text = ""; } } } Xy dng phn mm hng i tng GVHD: Trn Anh Dng HNG DN THC HNH TUN 6 (Thit k v xy dng phn mm theo m hnh 2 tng x l)
1. Thit k CSDL: a. S dng li CSDL ca tun th 4 (QLHOCSINH.mdb)
HOCSINH STT Tn trng Kiu d liu Ghi ch 1 MaHS Text(10) PrimaryKey 2 TenHS Text(255) 3 NgaySinh Date/Time 4 DiaChi Text(255) 5 DTB Number 6 MaLop Text(10) ForeignKey (tham chiu n Lop(MaLop)
LOP STT Tn trng Kiu d liu Ghi ch 1 MaLop Text(10) PrimaryKey 2 TenLop Text(255) 3 SiSo Number
2. Phn tch, thit k chc nng ca phn mm theo m hnh 2 tng x l Da vo hng dn thit k theo m hnh hai tng trn lp l thuyt, sinh vin phi phn tch, thit k - Xc nh v m t pht tho cc lp i tng - Lp s lp mc phn tch - Lp s lp mc thit k - M t chi tit cc lp i tng - Lp s kin trc tng th ca phn mm - Lp s phi hp ca cc bin c 3. Ci t: a. To project QLHocSinh b. Ci t lp i tng XL_HOC_SINH Lp i tng thc hin x l trn tp hp cc hc sinh Xy dng phn mm hng i tng GVHD: Trn Anh Dng Add class XL_HOCSINH vo project nh sau:
Ci t class XL_HOC_SINH Click chut phi Chn class Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Xy dng phn mm hng i tng GVHD: Trn Anh Dng
c. Ci t lp i tng XL_LOP Lp i tng thc hin x l trn tp hp cc lp hc Update HocSinh Set Where Xy dng phn mm hng i tng GVHD: Trn Anh Dng
d. Thit k li Form Nhp thng tin hc sinh nh mn hnh sau:
Xy dng phn mm hng i tng GVHD: Trn Anh Dng Vit hm code x l cho form Nhp thng tin hc sinh - Khi bo bin thnh phn: private string maHS, tenHS, diachi, malop; private float dtb; private DateTime ngaysinh;
private XL_HOC_SINH Hoc_sinh = new XL_HOC_SINH(); private XL_LOP Lop = new XL_LOP(); - Ci t cho s kin Form_Load:
- Hm nh dng li:
Hm nh dng tiu v rng cc ct ca li Xy dng phn mm hng i tng GVHD: Trn Anh Dng - Ci t cho s kin lu hc sinh (thm mi 1 hc sinh)
- Hm ly thng tin hc sinh t cc control trn form
- Ci t cho s kin xa thng tin mt hc sinh
- Ci t cho s kin khi ngi dng chn mt row trn li cha danh sch hc sinh Xy dng phn mm hng i tng GVHD: Trn Anh Dng
- Ci t cho s kin khi ngi dng chn mt lp hc trn combobox lp
Sinh vin pht trin tip hon thin chng trnh
4. Bi tp: Ci t chng trnh trn theo m hnh 3 tng x l v nh gi u khuyt im Xy dng phn mm hng i tng GVHD: Trn Anh Dng HNG DN THC HNH TUN 7 (Thit k v xy dng phn mm theo m hnh 3 tng x l)
1. Mc ch: Lu tr d liu X l thng tin Giao din ngi dng
2. Thit k CSDL: a. S dng li CSDL ca tun th 6 (QLHOCSINH.mdb)
HOCSINH STT Tn trng Kiu d liu Ghi ch 1 MaHS Text(10) PrimaryKey 2 TenHS Text(255) 3 NgaySinh Date/Time 4 DiaChi Text(255) 5 DTB Number 6 MaLop Text(10) ForeignKey (tham chiu n Lop(MaLop)
LOP STT Tn trng Kiu d liu Ghi ch 1 MaLop Text(10) PrimaryKey 2 TenLop Text(255) 3 SiSo Number Xy dng phn mm hng i tng GVHD: Trn Anh Dng 3. Phn tch, thit k chc nng ca phn mm theo m hnh 3 tng x l Da vo hng dn thit k theo m hnh ba tng trn lp l thuyt, sinh vin phi phn tch, thit k - Xc nh v m t pht tho cc lp i tng - Lp s lp mc phn tch - Lp s lp mc thit k - M t chi tit cc lp i tng - Lp s kin trc tng th ca phn mm - Lp s phi hp ca cc bin c 4. Ci t: a. To project QLHocSinh b. M hnh 3 tng ca chng trnh:
c. To lp DataProvider qun l vic kt ni v truy vn c s d liu: Vic kt ni c s d liu c th c thc hin qua nhiu dng Provider khc nhau nh SqlClient, OleDb, Odbc Do , c th d dng thay i Provider khi h qun tr c s d liu thay i, ta cn thit lp mt lp DataProvider ring vi cc hm tng ng. Cc bc thc hin: - Chn Project -> Add Class: t tn cho class l DataProvider. - y ta kt ni vi c s d liu Microsoft Access nn ta s dng OleDb kt ni. Thm 2 dng lnh sau vo u file DataProvider.cs: Giao din C s d liu HocSinhCtl HocSinhData DataProvider HocSinhInfo Xy dng phn mm hng i tng GVHD: Trn Anh Dng using System.Data; using System.Data.OleDb;
Vi mi ln kt ni, ta s dng cng mt connectionString chung. Khai bo mt bin static v mt property lu gi connection string xuyn sut trong chng trnh.
protected static string _connectionString;
public static string ConnectionString { get { return _connectionString; } set { _connectionString = value; } }
ng thi ta cn khai bo cc bin thc hin thao tc trn c s d liu bao gm: protected OleDbConnection connection; protected OleDbDataAdapter adapter; protected OleDbCommand command;
Tng t nh bi trc, ta vit hm kt ni CSDL: public void connect() { connection = new OleDbConnection(_connectionString); }
V hm ngt kt ni CSDL:
public void disconnect() { connection.Close(); }
thc hin truy vn d liu vi cc cu truy vn d liu c sn, ta to hm truy vn executeQuery tr ra 1 DataReader
public IDataReader executeQuery(string sqlString) { command = new OleDbCommand(sqlString, connection); return command.ExecuteReader(); }
public void executeNonQuery(string sqlString) { command = new OleDbCommand(sqlString, connection); command.ExecuteNonQuery(); } Xy dng phn mm hng i tng GVHD: Trn Anh Dng
public object executeScalar(string sqlString) { command = new OleDbCommand(sqlString, connection); return command.ExecuteScalar(); } d. To lp HocSinhData (add class HocSinhData.cs) thc hin cc thao tc cp nht c s d liu vi d liu hc sinh tng ng Lp HocSinhData s chu trch nhim thc hin cp nht CSDL thng qua DataProvider c. Mi i tng HocSinhData s gi mt Data Provider thc hin truy xut CSDL using System.Data; using System.Data.OleDb;
namespace QLHocSinh { class DataProvider { protected static string _connectionString;
public static string ConnectionString { get { return _connectionString; } set { _connectionString = value; } }
public void connect() { connection = new OleDbConnection(_connectionString); }
public void disconnect() { connection.Close(); }
public IDataReader executeQuery(string sqlString) { command = new OleDbCommand(sqlString, connection); return command.ExecuteReader(); }
public void executeNonQuery(string sqlString) { command = new OleDbCommand(sqlString, connection); command.ExecuteNonQuery(); } Xy dng phn mm hng i tng GVHD: Trn Anh Dng
public object executeScalar(string sqlString) { command = new OleDbCommand(sqlString, connection); return command.ExecuteScalar(); }
} }
e. X l tnh ton: To lp HocSinhInfo cha cc thng tin ca mt hc sinh vi rng buc nghip v tng ng
Lp HocSinhInfo cha cc thng tin lu tr ca mt i tng hc sinh. Lp ny ch gm cc bin v thuc tnh (hot ng tng t nh mt struct). y chnh l lp truyn ti d liu gia tng giao din v tng x l tnh tan using System; namespace QLHocSinh { class HocSinhInfo { private string _maHS; private string _tenHS; private string _diachi; private DateTime _ngaysinh; private float _dtb; private string _maLop;
public string MaHS { get { return _maHS; } set { if (value == null) throw new Exception("Ma HS khong duoc rong"); _maHS = value; } }
public string TenHS { get { return _tenHS; } set { if (value == null) throw new Exception("Ten HS khong duoc rong"); _tenHS = value; } Xy dng phn mm hng i tng GVHD: Trn Anh Dng }
public string Diachi { get { return _diachi; } set { _diachi = value; } }
public DateTime Ngaysinh { get { return _ngaysinh; } set { _ngaysinh = value; } }
public float DTB { get { return _dtb; } set { if (value < 0 || value >10) throw new Exception("DTB phai >=0 va <=10"); _dtb = value; } }
public string MaLop { get { return _maLop; } set { _maLop = value; } } } }
Xy dng phn mm hng i tng GVHD: Trn Anh Dng f. To lp HocSinhCtl thc hin cc cng vic nghip v: Trong mi i tng HocSinhCtl gi cc i tng HocSinhInfo v HocSinhData. Thng qua i tng HocSinhInfo truyn nhn d liu vi HocSinhData thc hin tng tc vi tng c s d liu. using System; namespace QLHocSinh { class HocSinhCtl { private HocSinhInfo info = new HocSinhInfo(); private HocSinhData data = new HocSinhData();
public HocSinhInfo HocSinh { get { return info; } set { info = value; } }
Xy dng phn mm hng i tng GVHD: Trn Anh Dng g. Thit k li Form Nhp thng tin hc sinh nh mn hnh sau:
5. Bi tp: - Hon chnh tng giao din ca ng dng. (gi : trong tng giao din ch s dng cc lp HocSinhCtl, HocSinhInfo) - Vit cu trc lp LopInfo binding danh sch lp vo combobox. - Vit cc lp x l thm , xa, sa Lop -
Xy dng phn mm hng i tng GVHD: Trn Anh Dng HNG DN THC HNH TUN 8 (Hng dn Crystal Report To bo co)
1. S dng li CSDL dng trong tun thc hnh trc (tun 7) 2. To project QLHSReport a. To mi 1 report T project chn add new item
Sau chn Crystal report Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Chn Using the Report Wizard (To report bng Wizard) Chn OK, sau chn Create New Connection to kt ni mi n CSDL Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Chn Finish Sau chn bng d liu HOCSINH v bng LOP
Chn CSDL cn kt ni truy cp d liu Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Chn cc field hin th
Xy dng phn mm hng i tng GVHD: Trn Anh Dng Chn group by theo lp
Trong bc ny cho php chn field tnh tng (nu cn)
Xy dng phn mm hng i tng GVHD: Trn Anh Dng Chn Field Filter nu cn
Chn style report
Xy dng phn mm hng i tng GVHD: Trn Anh Dng
b. Chy v hin th report: Add mt Form mi c tn frmBaocao, trn form to mt CystalreportViewer Khi chng ta ko th CystalreportViewer vo form th s pht sinh i tng CystalreportViewer1 vi phm vi khai bo l private
Xy dng phn mm hng i tng GVHD: Trn Anh Dng form khc c th hiu c i tng CrystalreportViewer1 th phi khai bo vi phm vi l public
c. Gi hin th Report:
Xy dng phn mm hng i tng GVHD: Trn Anh Dng X l s kin khi ngi dng chn in danh sch hc sinh
d. Cc khi nim c bn ca report Cc section ca report Mt report bao gm 5 phn chnh:
- Report header: phn thng tin u tin ca report. Mt bo co report thng s gm nhiu trang, report header chnh l phn xut hin ch mt ln trang u tin ca ton report. V d nh bo co c tiu Bo co thu chi thng 12 nm 2001 th tiu s c t trong phn report header.
- Page header: phn hin th thng tin xut hin u mi trang ca report. V d nh mt bo co dng bng c nhiu ct nh: STT, Tn, a ch, ST th u mi trang cn lp li nhng tiu ct ngi c nhn bit d dng ngha mi ct. Khi cc tiu ct c t vo phn page header.
- Details: phn hin th thng tin chi tit ca report. Mt report thng bao gm nhiu mc vi vai tr nh nhau tng ng vi cc record ca database m report Xy dng phn mm hng i tng GVHD: Trn Anh Dng s dng. Phn details s lit k nhng record . V d bo co thu chi th cc mc thu chi s c lit k trong phn details.
- Report footer: phn hin th thng tin xut hin ch mt ln cui report. V d thng tin nh ngi lp bo co l ai, ti u, hm no s c t report footer.
- Page footer: phn thng tin xut hin cui mi trang. V d s trang c t page footer.
Field Explorer
Khi chn xong cc i tng database cho vo report, Crystal s hin ra ca s Field Explorer. Nu khng thy ca s Field Explorer, ta click vo button "Field View" trn thanh toolbar (hoc chn View \ Other Windows\ Document Outline trn menu)
Trong ca s s bao gm rt nhiu nhm cc trng: - Database fields: tt c cc trng d liu ca cc i tng database. Thng thng cc trng trong mc ny s c hin th trong phn detail ca report. - Formula fields: cc trng tnh ton ta nh ra. V d khi lm mt report bo co ha n bn hng, gi s database ch lu tr gi v s lng ca mt hng mua trong ha n m khng lu tr thnh tin, khi ta c th to mt Formula field thnh tin c tnh bng cng thc: Thnh tin = Gi * S lng. Khi ta c th to report vi ct thnh tin (mc d khng c lu trong database).
Xy dng phn mm hng i tng GVHD: Trn Anh Dng - Parameter fields: cc trng tham s cho report. V d t VB, ta gi report v truyn vo tn ngi bo co th tn s c hin th report footer. lm c iu ny ta to mt paramter field trong Crystal v khi gi report t VB hoc Delphi th truyn vo. Lu , khi chy report trong Crystal, nhng trng param s c hi gi tr, ta cn nhp vo ngay trong Crystal hin th tm thi.
- Special fields: cc trng t bit c sn ca Crystal nh s trang, trang th my, ngy hin ti Thng thng nhng trng ny s c hin th trong nhng phn header, footer.
Cc thao tc c bn - Hin th cc trng d liu ln report: hin th trng d liu, drag mt trng d liu t Field Explorer xung vng tng ng ca report. V d : drag mt trng t database field xung phn details ca report ri view, s thy d liu ca report c lit k ra.
- View ni dung ca report Nhn nt (Refresh F5) trn toolbar, ni dung report s hin th bn tab preview. T y tr i, ta c th chuyn qua li gia tab design v tab preview.
- Cc format Suppress v Suppress If Duplicated - Suppress : Hin th i tng hay khng. - Suppress If Duplicated : Khng hin th i tng khi c s trng lp Tips - Mun iu chnh dch chuyn cc control trong report cho tinh th nhp phm phi ln vng chnh ca report, b option Snap to grid i. - i vi Formula Field: Khi tnh ton th nhng field no c tham gia vo php ton th field trc ht phi c Insert vo Report.
- Group Dng group gom nhm report thnh tng phn. VD: Xut cc n t hng ta thng c nhu cu gom nhm thnh tng n t hng (bao gm cc chi tit) nh sau: n t hng 1 a. Chi tit 1 b. Chi tit 2 n t hng 2 a. Chi tit 1 b. Chi tit 2 c. Chi tit 3 1. Chn thm group - Chn nt c hnh trn toolbar pha di hoc menu Insert \ Group insert mt group mi. (group by) Xy dng phn mm hng i tng GVHD: Trn Anh Dng - Insert group dialog hin ra, cn chn tn trng group v th t sort. - Sau khi chn OK, report s b sung mt group mi vo gm c group header v group footer v c sn mt textbox hin th trng group trn group header.
2. Sa i group - Chn menu Report \ Change Group Expert sa i cc group nh th t lng nhau ca cc group, trng cn group ca cc group.
3. Delete group - Click phm phi vo Group header hoc Group footer l tri cng ca ca s design v chn Delete group. - Trang tr Dng Insert\Line to ng k dc hoc ngang Dng Insert\Picture chn hnh. VD nh logo ca cng ty
3. Bi tp: - Trn c s nhng kin thc c cung cp trong bi thc hnh trn, sinh vin tm hiu thm v Crystal report c th to nhng bo co phc tp