Nếu bạn chán học lập trình nói chung và ngôn ngữ C nói riêng do lười đọc tài liệu tham khảo, xem các video, không có nhiều thời gian học, không tổng hợp được các kiến thức thì đây là tài liệu có ích cho bạn.
Trang 1KIẾN THỨC C# CƠ BẢN THÔNG QUA ỨNG DỤNG THỰC TẾ DÀNH CHO
NGƯỜI LƯỜI HỌC – PHẦN I CHƯA CÓ CƠ SỞ DỮ LIỆU.
I Giới thiệu.
- Nếu bạn chán học lập trình nói chung và ngôn ngữ C# nói riêng do lười đọc tài liệu tham khảo, xem các video, không có nhiều thời gian học, không tổng hợp được các kiến thức thì đây là tài liệu có ích cho bạn.
- Bạn không nên tải Project lớn về tham khảo trong khi kiến thức chưa hiểu sâu Tài liệu này tổng hợp kiến thức cơ bản được chia nhỏ ra thành các giai đoạn kiến thức quan trọng cho bạn dễ học và dễ nắm bắt Từ những ứng dụng ví dụ trong tài liệu này bạn có thể code các ứng dụng khác tương tự.
- Rất mong được sự góp ý: huynhdanghaiau1989@gmail.com
II Ứng dụng không có cơ sở dữ liệu
1 Lập trình console: Ứng dụng tra cứu từ điển.
Tổng hợp các kiến thức cơ bản sau: Biến, kiểu dữ liệu, ghi chú, cấu trúc lặp,
cấu trúc điều kiện, các hàm cơ bản, các hàm xử lý chuổi, mảng, xử lí biệt lệ try-catch.
a Mô tả ứng dụng: Nhập từ mới, tra cứu nghĩa của từ, sửa từ và xóa từ.
b Thực hành code ứng dụng:
Bước 1: Viết chương trình chính
static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8; //Để xuất tiếng việt trong dos
while (true) //Vòng lặp luôn luôn đúng
{
menu(); //gọi hàm Menu
Console.WriteLine("Bạn có muốn thoát hay không?(y/n)");
string s = Console.ReadLine(); //Nhận giá trị nhập từ bàn phím
if (s == "y") //Nếu nhập y thì break thoát khỏi vòng lặp lập tức
break; // Nếu các bạn nhập khác chữ y thì chương trình sẽ
} //quay lại menu chính và tiếp tục
Console.WriteLine("Bye -Bye"); //thoát khỏi vòng lặp sẽ hiện từ Bye -Bye
Console.ReadLine(); //Chờ ấn phím bất kì chương trình sẽ thoát ra
}
Bước 2: Viết hàm menu()
private static void menu()
{
Console.WriteLine("1 Tạo từ mới");//WriteLine xuất giá trị xong xuống hàng
Console.WriteLine("2 Sửa từ");
Console.WriteLine("3 Tra cứu từ");
Console.WriteLine("4 Xóa từ");
Console.WriteLine("Bạn chọn chức năng nào:");
Try //Try catch để xử lí biệt lệ nếu chương trình có lỗi cụ thể ở
{ // sẽ không bị thoát ra mà vẫn tiếp tục, ví dụ: bạn nhập vào
// kdjakdkdjf và Enter thì chương trình báo lỗi và tiếp tục
int cn = int.Parse(Console.ReadLine()); //Nhận giá trị nhập từ bàn phím
switch (cn) //sau đó ép thành kiển int dùng
Trang 2{ // dùng int.Parse.
case 1: //Nếu nhập là 1 sẽ vào hàm tạo từ mới
TaoTuMoi();
break;
case 2: //Nếu nhập là 2 sẽ vào hàm sửa từ
SuaTu();
break;
case 3: //Nếu nhập là 3 sẽ vào hàm tra cứu
TraCuu();
break;
case 4: //Nếu nhập là 4 sẽ vào hàm xóa từ
XoaTu();
break;
default: // trường hợp không phải nhập: 1, 2, 3, 4
Console.WriteLine("Bạn chọn không đúng"); //sẽ thông báo
break; // ra khỏi vòng lặp
}
}
catch(Exception ex) //Thông báo lỗi nếu bạn nhập tào lao
{ // bạn thử nhập kdfdjaj để kiểm tra nhé
Console.WriteLine("Lỗi !",ex.Message);
}
}
2 Lập trình console - Sử dụng thư viện trong C#.
2.1 Thư viện toán học:
static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8; //Hiển thị tiếng việt trong Dos
Console.Write("Mời bạn nhập vào số a: "); //Hiện thông báo mời bạn nhập int a = int.Parse(Console.ReadLine()); //Nhận giá trị từ bàn phím.
Console.WriteLine("Căn bậc 2 của {0} = {1}",a, Math.Sqrt(a));
// {0} là bạn sử dụng kết quả a chèn vào vị trí số {0} {1} bạn sử dụng hàm
Math.Sqrt(a) chèn vào vị trí số {1}, bạn chạy lên để hiểu rỏ thêm nhé.
Console.ReadLine(); //Bấm phím bất kì chương trình sẽ thoát ra.
}
2.2 Thư viện Random:
static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8;
Random rd = new Random();
int x = rd.Next(101); //muốn xuất đến 100 thì ghi 101 trừ đi 1 đơn vị, giả sử bạn muốn xuất từ 1 đến 10 thì ghi 11
Console.WriteLine("Máy xuất số ngẫu nhiên là: {0}", x);
}
2.3 Thư viện DateTime:
static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("Mời bạn nhập vào năm sinh: ");
string s = Console.ReadLine(); //Nhận giá trị ngày, tháng, năm từ bàn phím
DateTime brithday = DateTime.Parse(s); //chuyển kiểu chuổi về kiểu Datetime và gán cho giá trị cho biến birthday
Console.WriteLine("Bạn sinh ngày: " + brithday.Day); //Xuất ngày
Console.WriteLine("Bạn sinh tháng: " +brithday.Month); //Xuất tháng
Console.WriteLine("Bạn sinh năm: " +brithday.Year); //Xuất năm
Trang 3Console.ReadLine();
}
3 Lập trình Windows Form hướng đối tượng: Ứng dụng quản lý sản phẩm.
3.1 Thiết kế giao diện
- Gồm 2 giao diện và tên các nút lệnh như sau: Phần màu đỏ là tên
Button: btnQuanLyDanhMuc
Button: btnXoa
Button: btnThoat
Button: btnLuu
TextBox: txtHanDung
TextBox: txtXuatXu
TextBox: txtDonGia
TextBox: txtTenSP
TextBox: txtMaSp
TextBox: cboDanhMuc
ListBox: lstSanPham
Button: btnThoat
Button: btnXoa
Button: btnLuu
TextBox: txtTenDanhMuc
TextBox: txtMaDanhMuc
ListBox: lstDanhMuc
Trang 43.2 Tạo lớp sản phẩm
public class SanPham
{
public string MaSP { get; set; }
public string tenSP { get; set; }
public double DonGia { get; set; }
public string XuatXu { get; set; }
public DateTime HanDung { get; set; }
public DanhMuc nhom { get; set; } //sản phầm phải biết nó thuộc danh mục nào
public override string ToString() //Phương thức ToString để xuất thông tin trong lớp
{
return this.tenSP;
}
}
3.3 Tạo lớp danh mục
public class DanhMuc
{
private Dictionary<string, SanPham> dsSp = new Dictionary<string, SanPham>();
//Tạo 1 mảng Dictionary để lưu danh sách sản phẩm
// Có 2 đối số cần lưu ý: String là mã, khóa trong mảng (key), SanPham là thông của sản phẩm có mã là String
public string MaDM { get; set; }
public string TenDM { get; set; }
public void ThemSanPham(SanPham sp)
{
if (this.dsSp.ContainsKey(sp.MaSP) == false)
// Hàm này kiểm tra khi thêm vào có bị trung mã đã có trong mảng từ trước không dung ContainKey để kiểm tra
{
this.dsSp.Add(sp.MaSP, sp); //chỉ add danh sách sản phẩm vào thôi chứ chưa có trả thông tin sản phẩm vừa add về nhóm danh mục nào
sp.nhom = this; //Ứng với 1 sản phầm nó phải biết nó thuộc nhóm nào
}
}
public Dictionary<string,SanPham> Sanphams //Trả về 1 danh sách sản phẩm {
get { return this.dsSp; }
Trang 5set { this.dsSp = value; }
}
public override string ToString() //xuất tên danh mục
{
return this.TenDM; //để lúc gọi hàm HienThiDanhMucLenListBox() chỉ hiện tên thôi, hàm này ở trong frmDanhMuc
}
}
3.4 Viết lệnh cho Button của From frmDanhMuc
public partial class frmDanhMuc : Form
{
public static bool CoThayDoi = false; //Tạo một biến CoThayDoi = false
public frmDanhMuc() //Mặc định
{
InitializeComponent();
}
private void btnLuu_Click(object sender, EventArgs e)
{
DanhMuc dm = new DanhMuc(); // tạo lớp dm mới
dm.MaDM = txtMaDanhMuc.Text; //gán MaDM=kết quả nhập trong ô txtDanhMuc dm.TenDM = txtTenDanhMuc.Text; //gán TenDM=kq nhập trong ô txtTenDanhMuc frmSanPham.danhSachDM.Add(dm); //danh sách dm này sử dụng cho 2 màn hình HienThiDanhMucLenListBox(); //gọi hàm hiển thị lên listbox
txtMaDanhMuc.Text = "";
txtTenDanhMuc.Text = "";
txtMaDanhMuc.Focus();
CoThayDoi = true; //Nếu có xóa thì gán CoThayDoi=true
}
void HienThiDanhMucLenListBox() //tạo hàm hiển thị danh mục lên listbox
{
lstDanhMuc.Items.Clear();
foreach(DanhMuc dm in frmSanPham.danhSachDM)
{
lstDanhMuc.Items.Add(dm);
}
}
Trang 6private void lstDanhMuc_SelectedIndexChanged(object sender, EventArgs e)
{
if (lstDanhMuc.SelectedIndex != -1) //khác -1 thì nó được chọn
{
DanhMuc dm = lstDanhMuc.SelectedItem as DanhMuc; //kiểm tra
txtMaDanhMuc.Text = dm.MaDM; //Hiển thị thông tin ngược lại lên ô text trong frmDanhMuc nếu chọn list danh mục vừa tạo
txtTenDanhMuc.Text = dm.TenDM;
}
}
private void btnXoa_Click(object sender, EventArgs e)
{
if (lstDanhMuc.SelectedIndex != -1) //Khi được chọn
{
DanhMuc dm = lstDanhMuc.SelectedItem as DanhMuc;
lstDanhMuc.Items.Remove(dm); //Xóa danh mục
CoThayDoi = true; //Nếu có xóa thì gán CoThayDoi=true
}
}
private void btnThoat_Click(object sender, EventArgs e)
{
//Ở đây có thể để lệnh Close() tuy nhiên nó ko đảm bảo được yêu cầu dùng lệnh if
(frmDM.ShowDialog() == DialogResult.OK) trong frmSanPham, khi hộp thoại danh mục hiện lên phải có thao tác mới ứng với lệnh DialogResult.Ok
if (CoThayDoi == true)
DialogResult = DialogResult.OK; //Có thay đổi thì trả về Ok để bên frmSanPham hứng lấy
else
DialogResult = DialogResult.Cancel; //Không thay đổi thì đóng chương chình }
private void frmDanhMuc_Load(object sender, EventArgs e)
{
HienThiDanhMucLenListBox(); //Tạo sự kiện frm load khi mở hộp thoại danh mục lên thì nó sẽ lấy dữ liệu của combobox bên frmsanpham mới thêm vào truyền qua
Trang 7}
}
3.5 Viết lệnh cho Button của From frmSanPham
public partial class frmSanPham : Form
{
public static List<DanhMuc> danhSachDM = new List<DanhMuc>(); //Tạo danh sách danh mục bên frmSanPham sau đó đẩy qua bên frmDanhmuc cho nó sử dụng chung List<SanPham> danhSachSP = new List<SanPham>();
public frmSanPham()
{
InitializeComponent();
}
private void groupBox2_Enter(object sender, EventArgs e)
{
}
private void btnLuu_Click(object sender, EventArgs e)
{
if (cboDanhMuc.SelectedIndex == -1) //=-1 là chưa được chọn
{
MessageBox.Show("Chưa chọn danh mục");
return;
}
DanhMuc dm = cboDanhMuc.SelectedItem as DanhMuc; //Lấy được đối tượng danh mục ra từ list combobox
SanPham sp = new SanPham();
sp.MaSP = txtMaSP.Text;
sp.tenSP = txtTenSP.Text;
sp.DonGia = double.Parse(txtDonGia.Text); //Chuyển thành kiểu double
sp.XuatXu = txtXuatXu.Text;
sp.HanDung = dtpHanDung.Value; //Kiểu datetime thì dùng value
dm.ThemSanPham(sp); //đẩy sản phẩm này vào danh mục
danhSachSP.Add(sp);
HienThiSanPhamLenGiaoDienListbox();
XoaTrangChiTietSanPham();
Trang 8
}
void XoaTrangChiTietSanPham() //Tạo hàm nếu bấm nút lưu rùi thì sẽ xóa thông tin cũ, lần nhập sau đỡ mất thời gian
{
txtMaSP.Text = "";
txtTenSP.Text = "";
txtDonGia.Text = "";
txtXuatXu.Text = "";
txtMaSP.Focus(); //xóa xong chuyển con trỏ chuột vào ô text mã sản phẩm
}
void HienThiSanPhamLenGiaoDienListbox()
{
lstSanPham.Items.Clear(); //xóa dữ liệu cũ
foreach (SanPham sp in danhSachSP)
lstSanPham.Items.Add(sp);
}
private void btnQuanLyDanhMuc_Click(object sender, EventArgs e)
{
frmDanhMuc frmDM = new frmDanhMuc();
frmDanhMuc.CoThayDoi = false; //Mở frmDanhMuc là biến CoThayDoi mặc định = 0
if (frmDM.ShowDialog() == DialogResult.OK)
{
HienThiDanhMucLenComboBox(); //Tạo hàm để hiển thị danh mục lên combobox trong frmSanPham
}
}
private void HienThiDanhMucLenComboBox()
{
cboDanhMuc.Items.Clear();
foreach (DanhMuc dm in danhSachDM)
cboDanhMuc.Items.Add(dm); //thêm tất cả danh mục vào danh sách danh mục }
private void btnXoa_Click(object sender, EventArgs e)
{
if (lstSanPham.SelectedIndex == -1) //Chưa chọn sản phẩm trong list sp
{
Trang 9MessageBox.Show("Chưa chọn sản phẩm");
return;
}
SanPham sp = lstSanPham.SelectedItem as SanPham;
DialogResult ret = MessageBox.Show(
"Muốn xóa ["+sp.tenSP+"]",
"Hỏi xóa",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question); //hàm này hiển thị thông báo có icon mặc định của c#
if (ret == DialogResult.Yes)
{
danhSachSP.Remove(sp);
HienThiSanPhamLenGiaoDienListbox();
XoaTrangChiTietSanPham();
}
}
private void btnThoat_Click(object sender, EventArgs e)
{
DialogResult ret = MessageBox.Show("Bạn có muốn thoát hay không?",
"Hỏi thoát", MessageBoxButtons.YesNo,
MessageBoxIcon.Question); //Hiện thông báo muốn thoát hay không?
if (ret == DialogResult.Yes) //Nếu chọn yes thì thoát
{
Close();
}
}
private void lstSanPham_SelectedIndexChanged(object sender, EventArgs e)
{
if (lstSanPham.SelectedIndex == -1) // chưa được chọn
return; //Không làm gì cả
SanPham sp = lstSanPham.SelectedItem as SanPham;
//lấy danh sách sản phầm ra
cboDanhMuc.Text = sp.nhom.TenDM;
txtMaSP.Text = sp.MaSP;
txtTenSP.Text = sp.tenSP;
Trang 10txtDonGia.Text = sp.DonGia+"";//chuyển doube thành chuổi vì cộng khoảng trống ký
tự “”
txtXuatXu.Text = sp.XuatXu;
dtpHanDung.Value = sp.HanDung;
}
}
HẾT PHẦN 1