You are on page 1of 61

Xy dng phn mm hng i tng GVHD: Trn Anh Dng

HNG DN THC HNH TUN 1


Lp trnh ng dng WinForm vi C#

1. Vit chng trnh tnh o hm n thc: P(x) = ax
n

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;

- Hm ly thng tin:
private void getData()
{
maHS = txtMaHS.Text;
tenHS = txtTenHS.Text;
ngaysinh = dtpNgaySinh.Value;
diachi = txtDiaChi.Text;
malop = (string)cmbLop.SelectedValue;
dtb = Double.Parse(txtDiemTB.Text);
}
Hm thm d liu vo CSDL

private void insert()
{
connection.Open();
string insertCommand = "INSERT INTO HOCSINH VALUES('" +
maHS + "', '" +
Xy dng phn mm hng i tng GVHD: Trn Anh Dng
tenHS + "', '" +
ngaysinh.ToShortDateString() + "', '" +
diachi + "', " +
dtb + ", '" +
malop + "')";

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();

//nh dng li
DinhDangLuoi();
}
Hm DinhDangLuoi nh sau:
private void DinhDangLuoi()
{
dgHocSinh.ReadOnly = true;
dgHocSinh.Columns[0].HeaderText = "M HS";
dgHocSinh.Columns[0].Width = 70;
dgHocSinh.Columns[1].HeaderText = "Tn HS";
dgHocSinh.Columns[1].Width = 150;
dgHocSinh.Columns[2].HeaderText = "Ngy sinh";
dgHocSinh.Columns[2].Width = 90;
dgHocSinh.Columns[3].HeaderText = "a ch";
dgHocSinh.Columns[3].Width = 200;
dgHocSinh.Columns[4].HeaderText = "im TB";
dgHocSinh.Columns[4].Width = 80;
dgHocSinh.Columns[5].HeaderText = "Lp";
dgHocSinh.Columns[5].Width = 80;
}

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:


private void dgHocSinh_SelectionChanged(object sender, EventArgs e)
{
DataGridViewSelectedRowCollection rows = dgHocSinh.SelectedRows;

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();
}
}

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:

public static string sPathFilename = "";

Vit code cho s kin khi ngi dng chn File :

private void btnOK_Click(object sender, EventArgs e)
{
//Filter file
openFileDialog1.Filter = "File (*.mdb)|*.mdb";

//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:


private void btnLoad_Click(object sender, EventArgs e)
{
Form1.sPathFilename = txtFile.Text;
Form1 frm = new Form1();
this.Hide();
frm.ShowDialog();
}

Xy dng phn mm hng i tng GVHD: Trn Anh Dng
Nh vy, trong Form1 chng ta sa li nh sau:

- Trong s kin Form1_Load thay dng lnh

connect("E:/DH_HUFLIT/XDPMHDT/DeCuong_HuongDan_ThucHanh/HocSinh.mdb");

Bng dng lnh sau:

connect(sPathFilename);

- 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 = "";

public frmConnection()
{
InitializeComponent();
}

private void frmConnection_Load(object sender, EventArgs e)
{
txtServerName.Focus();
}

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

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;

private string maHS, tenHS, diachi, malop;
private float dtb;
private DateTime ngaysinh;

public frmHocSinh()
{
InitializeComponent();
}

public bool connect(string sServerName, string sDBName,
string sUser, string sPass)
{
string connnectionString = "server=" + sServerName +
"; database=" +
sDBName + "; user id=" + sUser + "; password=" + sPass;
connection = new SqlConnection(connnectionString);

try
{
connection.Open();
connection.Close();

return true;
}
catch
{
return false;
}
}

private DataTable getDSLop()
{
adapter = new SqlDataAdapter("select * from LOP", connection);
dataSet = new DataSet();
adapter.Fill(dataSet);
return dataSet.Tables[0];
}

private DataTable getDSHocSinh()
{
Xy dng phn mm hng i tng GVHD: Trn Anh Dng
adapter = new SqlDataAdapter("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];
}

private void DinhDangLuoi()
{
dgHocSinh.ReadOnly = true;
dgHocSinh.Columns[0].HeaderText = "M HS";
dgHocSinh.Columns[0].Width = 70;
dgHocSinh.Columns[1].HeaderText = "Tn HS";
dgHocSinh.Columns[1].Width = 150;
dgHocSinh.Columns[2].HeaderText = "Ngy sinh";
dgHocSinh.Columns[2].Width = 90;
dgHocSinh.Columns[3].HeaderText = "a ch";
dgHocSinh.Columns[3].Width = 200;
dgHocSinh.Columns[4].HeaderText = "im TB";
dgHocSinh.Columns[4].Width = 80;
dgHocSinh.Columns[5].HeaderText = "Lp";
dgHocSinh.Columns[5].Width = 80;
}

private void Form1_Load(object sender, EventArgs e)
{
//Load d liu vo comboBox Lp
DataTable dtLop = getDSLop();
cboLop.DataSource = dtLop;

//Chn item u tin trong table
cboLop.SelectedIndex = 0;

// Column s c hin th
cboLop.DisplayMember = dtLop.Columns[1].ColumnName;

// Column s c gi gi tr
cboLop.ValueMember = dtLop.Columns[0].ColumnName;

//Load danh sch hc sinh ln li
dgHocSinh.DataSource = getDSHocSinh();

//nh dng li
DinhDangLuoi();
}

private void getData()
{
maHS = txtMaHS.Text;
tenHS = txtTenHS.Text;
ngaysinh = dtNgaySinh.Value;
diachi = txtDiaChi.Text;
malop = (string)cboLop.SelectedValue;
dtb = float.Parse(txtDiemTB.Text);
}

private void insert()
{
connection.Open();
string insertCommand = "INSERT INTO HOCSINH VALUES('" +
maHS + "', '" +
Xy dng phn mm hng i tng GVHD: Trn Anh Dng
tenHS + "', '" +
ngaysinh.ToShortDateString() + "', '" +
diachi + "', " +
dtb + ", '" +
malop + "')";

command = new SqlCommand(insertCommand, connection);
command.ExecuteNonQuery();
connection.Close();
}

private void delete()
{
connection.Open();
string deleteCommand = "DELETE FROM HOCSINH WHERE MaHS = '" +
maHS + "'";
command = new SqlCommand(deleteCommand, connection);
command.ExecuteNonQuery();
connection.Close();
}

private void btnXoa_Click(object sender, EventArgs e)
{
getData();
delete();
MessageBox.Show("Xoa du lieu thanh cong", "Thong bao",
MessageBoxButtons.OK, MessageBoxIcon.Information);

//Load lai danh sach hoc sinh len luoi
dgHocSinh.DataSource = getDSHocSinh();

//Xoa du lieu tren cac textbox
txtMaHS.Text = "";
btnNew_Click(sender, e);
}

private void btnThoat_Click(object sender, EventArgs e)
{
Application.Exit();
}

private void btnLuu_Click(object sender, EventArgs e)
{
getData();
insert();
MessageBox.Show("Cap nhat thanh cong", "Thong bao",
MessageBoxButtons.OK, MessageBoxIcon.Information);

//Load lai danh sach hoc sinh len luoi
dgHocSinh.DataSource = getDSHocSinh();
}

private void txtMaHS_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
SendKeys.Send("{TAB}");
}

private void dgHocSinh_SelectionChanged(object sender, EventArgs e)
{
DataGridViewSelectedRowCollection rows = dgHocSinh.SelectedRows;

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;

protected OleDbConnection connection;
protected OleDbDataAdapter adapter;
protected OleDbCommand command;

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;
}
}

public void insert()
{
data.insert(info.MaHS, info.TenHS, info.Ngaysinh,
info.Diachi, info.DTB, info.MaLop);
}

public void delete()
{
data.delete(info.MaHS);
}

public void update()
{
data.update(info.MaHS, info.TenHS, info.Ngaysinh,
info.Diachi, info.DTB, info.MaLop);
}
}
}

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

You might also like