intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài tập ôn thi C Sharp

Chia sẻ: Thanh Nguyen | Ngày: | Loại File: DOC | Số trang:32

129
lượt xem
46
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Xây dựng lớp Queue (không dùng Queue của collection) dùng chứa đối tượng bất kỳ bằng mảng List hoặc ArrayList: - Hàm tạo, hàm tạo sao chép: khởi tạo Queue

Chủ đề:
Lưu

Nội dung Text: Bài tập ôn thi C Sharp

  1. BÀI TẬP ÔN CHUYÊN ĐỀ CSHARP ---o0o--- I. NGÔN NGỮ LẬP TRÌNH CSHARP: Bài 1. Xây dựng lớp Queue (không dùng Queue của collection) dùng chứa đối tượng bất kỳ bằng mảng List hoặc ArrayList: - Hàm tạo, hàm tạo sao chép: khởi tạo Queue - Xây dựng các phương thức sau: Phương thức Ý nghĩa Thêm 1 phần tử vào đầu Queue Enqueue Lấy 1 phần tử ở cuối ra khỏi Queue Dequeue Lấy 1 phần tử ở đầu Queue PeakFront Lấy 1 phần tử ở cuối Queue PeakRear Kiểm tra Queue rỗng IsEmpt y Hỗ trợ Queue sao cho có thể dùng lệnh for-each để duyệt toàn bộ Queue (kế thừ từ giao diện IEnumerable) class CQueue : IEnumerable { // khởi tạo danh sách kiểu đối tượng T List q = new List(); // constructor mặc định public CQueue(){ } // constructor sao chép public CQueue(CQueue a) { q = a.q; } // Thêm 1 phần tử vào đầu Queue public void Enqueue(T a) { q.Insert(0, a); } // Lấy 1 phần tử ở cuối ra khỏi Queue public T Dequeue() { T tmp = q[q.Count - 1]; q.RemoveAt(q.Count - 1); return tmp; } // Lấy 1 phần tử ở đầu Queue public T PeakFront() { return q[0]; } // Lấy 1 phần tử ở cuối Queue public T PeakRear() { return q[q.Count - 1]; } // Kiểm tra Queue rỗng public bool IsEmpty() { if (q.Count == 0) return true; return false; } #region IEnumerable Members public IEnumerator GetEnumerator() { //throw new NotImplementedException(); foreach (T tmp in q) { yield return tmp; // return mà không thoát khỏi for, vẫn làm hết for } }
  2. #endregion #region IEnumerable Members System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { //throw new NotImplementedException(); return GetEnumerator(); } #endregion } class Program { static void Main(string[] args) { CQueue q = new CQueue(); Console.WriteLine(q.IsEmpty()); q.Enqueue(4); q.Enqueue(2); q.Enqueue(4); q.Enqueue(5); Console.WriteLine(q.IsEmpty()); foreach (int i in q) { Console.WriteLine(i); } Console.WriteLine("-----------------------------"); CQueue q1 = new CQueue(); Console.WriteLine(q1.IsEmpty()); q1.Enqueue("a"); q1.Enqueue("z"); q1.Enqueue("t"); q1.Enqueue("b"); Console.WriteLine(q1.IsEmpty()); foreach (String i in q1) { Console.WriteLine(i); } } } :Bài 3. Cho lớp HocSinh và LopHoc có khai báo như sau } class SinhVien { class LopHoc private string maSo; { private string hoTen; private string maLop; private string tenKhoa; private DateTime ngaySinh; private List dsSinhVien; private LopHoc lopHoc; … … } Giả sử có hàm Main được cài đặt như sau: static void Main(string []args) {
  3. LopHoc lop1 = new LopHoc(“TM0101”,”CNTT”); LopHoc lop2 = new LopHoc(“MV0101”,”CNTT”); lop1.themSinhVien(new SinhVien(“001”,”Nguyễn Văn A”,1989,2,18)); lop1.themSinhVien(new SinhVien(“002”,”Trần Thị B”,1989,5,2)); SinhVien sv = lop1.timSinhVien(“002”); if(sv!=null) sv.chuyenLop(lop2); Console.WriteLine(“Hiển thị thông tin lớp {0}:”, lop1.MaLop); Console.WriteLine(“{0}”, lop1); Console.WriteLine(“Hiển thị thông tin lớp {0}:”, lop2.MaLop); Console.WriteLine(“{0}”, lop2); } Kết quả xuất ra trong màn hình Console: (giả sử năm hiện tại của hệ thống là 2011) Hãy cài đặt thêm để thỏa mãn hàm Main được khai báo như trên. public class SinhVien { // khai bao cac bien thanh vien private string maSo; private string hoTen; private DateTime ngaySinh; private LopHoc lopHoc; // constructor co tham so public SinhVien(string ma, string hoten, int nam, int thang, int ngay) { this.maSo = ma; this.hoTen = hoten; this.ngaySinh = new DateTime(nam, thang, ngay); } public string MaSo // property cho maSo { get { return maSo; } set { maSo = value; } } public string HoTen // property cho HoTen { get { return hoTen; } set { hoTen = value; } } public DateTime NgaySinh // property cho NgaySinh { get { return ngaySinh; } set { ngaySinh = value; } } public LopHoc LopHoc // property cho lopHoc {
  4. get { return lopHoc; } set { lopHoc = value; } } public void chuyenLop(LopHoc lh) // chuyen 1 sv tu lop nay qua lop khac { lh.themSinhVien(this); } } public class LopHoc { // khai bao bien thanh vien private string maLop; private string tenKhoa; private List dsSinhVien = new List(); // khoi tao constructor public LopHoc() { maLop = null; tenKhoa = null; } // constructor sao chep public LopHoc(string malop, string tenkhoa) { this.maLop = malop; this.tenKhoa = tenkhoa; } public string MaLop // property malop { get { return maLop; } set { maLop = value; } } public string TenKhoa // property ma lop { get { return tenKhoa; } set { tenKhoa = value; } } public void themSinhVien(SinhVien sv) // them 1 sv { dsSinhVien.Add(sv); } public SinhVien timSinhVien(string maso) // tim sv { foreach (SinhVien sv in dsSinhVien) { if (sv.MaSo == maso) { SinhVien tmp = sv; // tao bien tam dsSinhVien.Remove(sv); return tmp; } } return null; // tim khong thay tra ve gia tri null } public override string ToString() // xuat ra man hinh theo y muon cua minh {
  5. string tmp = "Ma Lop: " + this.MaLop + " Thuoc khoa: " + this.TenKhoa + " Co: " + this.dsSinhVien.Count + " sinh vien \n"; int i = 1; foreach (SinhVien sv in dsSinhVien) { tmp = tmp + i + ". " + sv.MaSo + " " + sv.HoTen + " "+ sv.NgaySinh.ToString("dd/mm/yyyy") + " Tuoi: " + (DateTime.Today.Year - sv.NgaySinh.Year) + "\n"; i++; } return tmp; } } static void Main(string[] args) { LopHoc lop1 = new LopHoc("TM0101", "CNTT"); LopHoc lop2 = new LopHoc("MV0101", "CNTT"); lop1.themSinhVien(new SinhVien("001", "Nguyen Van A", 1989, 2, 18)); lop1.themSinhVien(new SinhVien("002", "Tran Thi B", 1989, 5, 2)); SinhVien sv = lop1.timSinhVien("002"); if (sv != null) sv.chuyenLop(lop2); Console.WriteLine("Hien thi thong tin lop {0}:", lop1.MaLop); Console.WriteLine("{0}", lop1); Console.WriteLine("Hien thi thong tin lop {0}:", lop2.MaLop); Console.WriteLine("{0}", lop2); } II. WINDOWS FORM : Bài 1: Cho chương trình Đặt báo được mô tả như hình 1, chứa biểu mẫu frmDatBao
  6. Hình 1. Giao diện biểu mẫu frmDatBao Cho bảng mô tả các điều khiển trên frmDatBao Tên điều khiển Kiểu điều khiển Mô tả STT Tên khách hàng đặt báo 1 txtKhachHang TextBox Điện thoại khách hàng 2 txtDienThoai TextBox Địa chỉ nhận báo 3 txtDiaChiNhan TextBox Danh sách các báo lựa chọn đặt 4 cboLoaiBao ComboBox Giá báo tương ứng 5 txtDonGia TextBox Số kỳ đặt báo 6 txtSoKy TextBox Ngày bắt đầu nhận báo 7 datNgayBatDau DateTimePicker Danh sách báo chọn đặt 8 lvDanhSach ListView Tổng tiền các báo chọn đặt 9 txtTongTien TextBox Chức năng đặt báo 10 btnDatBao Button Chức năng bỏ chọn đặt báo 11 btnBoChon Button Thoát chương trình 12 btnThoat Button Biết bảng các phương thức xử lý sự kiện cho điều khiển trên frmDatBao: Đối tượng Sự kiện Phương thức xử lý STT 1 txtKhachHang Validating txtKhachHang_Validating 2 txtDiaChiNhan Validating txtDiaChiNhan_Validating 3 txtDienThoai Validating txtDienThoai_Validating 4 txtSoKy Validating txtSoKy_Validating 5 frmDatBao Load frmDatBao_Load 6 cboLoaiBao SelectedIndexChanged cboLoaiBao_SelectedIndexChanged 7 btnDatBao Click btnDatBao_Click 8 btnBoChon Click btnBoChon_Click 9 btnThoat Click btnThoat_Click
  7. 10 frmDatBao FormClosing frmDatBao_FormClosing * Khai báo lớp loại báo để phục vụ cho việc load cboLoaiBao: public class LoaiBao { string tenBao; int giaTien; // constructor mac dinh public LoaiBao() { tenBao = null; giaTien = 0; } // constructor co tham so public LoaiBao(string ten, int gia) { this.tenBao = ten; this.giaTien = gia; } // lay property cho 2 thuoc tinh la tenBao va giaTien public string TenBao { get { return tenBao; } set { tenBao = value; } } public int GiaTien { get { return giaTien; } set { giaTien = value; } } // override ToString de xuat ra theo y muon cua nguoi dung public override string ToString() { return string.Format("{0}", TenBao); } } a) Khi frmDatBao vừa mới hiển thị: • Khởi tạo giá trị cho cboLoaiBao chứa tên các báo với thông tin cho bên dưới: + Tuổi trẻ ngày 2700 Đ / kỳ + Làm bạn với máy tính 5400 Đ / kỳ + PC Word (A) 12000 Đ / kỳ • Số kỳ mặc định là 1, ngày bắt đầu là ngày hiện tại của hệ thống, tổng tiền là 0. private void Form1_Load(object sender, EventArgs e) { // dua du lieu vao cboLoaibao cboLoaiBao.Items.Add(new LoaiBao("Tuoi tre ngay", 2700)); cboLoaiBao.Items.Add(new LoaiBao("Lam ban voi may tinh", 5400)); cboLoaiBao.Items.Add(new LoaiBao("PC Word (A)", 12000)); txtSoKy.Text = "1"; // khoi tao txtSoKy la 1 txtTongTien.Text = "0"; // khoi tao txtTongTien la 0 } b) Khi chọn loại báo, hiển thị thông tin đơn giá tương ứng. private void cboLoaiBao_SelectedIndexChanged(object sender, EventArgs e) { LoaiBao lb = (LoaiBao)cboLoaiBao.SelectedItem; // chon bao // khi chon loai bao thi hien thi gia tien tuong ung txtDonGia.Text = string.Format("{0} D", lb.GiaTien.ToString()); }
  8. c) Thực hiện kiểm tra dữ liệu cho txtKhachHang, txtDiaChiNhan, txtDienThoai, txtSoKy theo mô tả sau: • Tên khách hàng không được để trống. • Địa chỉ khách hàng không được để trống. • Số điện thoại không có ký tự khác ngoài ký số. • Số kỳ là số nguyên dương. private void txtKhachHang_Validating(object sender, CancelEventArgs e) { if (txtKhachHang.Text.Trim() == "") MessageBox.Show("Ten khach hang khong duoc de trong"); } private void txtDienThoai_Validating(object sender, CancelEventArgs e) { try { if (txtDienThoai.Text.Trim() == "") MessageBox.Show("So dien thoai khong duoc de trong"); else { int x = int.Parse(txtDienThoai.Text); // ep ve kieu so } } catch (Exception) { MessageBox.Show("So dien thoai phai la ki tu so"); } } private void txtDiaChiNhan_Validating(object sender, CancelEventArgs e) { if (txtDiaChiNhan.Text.Trim() == "") MessageBox.Show("Dia chi khach hang khong duoc de trong"); } private void txtSoKy_Validating(object sender, CancelEventArgs e) { try { int x = int.Parse(txtSoKy.Text); // ep ve kieu so if (x < 0) MessageBox.Show("So ky phai la so nguyen duong"); } catch (Exception) { MessageBox.Show("So ky phai la ki tu so"); } } Cách 2: dùng regular expression // đối với dạng textbox không được để trống thì: if (string.IsNullOrEmpty(txtKhachHang.Text)) VD: private void txtKhachHang_Validating(object sender, CancelEventArgs e) { if (string.IsNullOrEmpty(txtKhachHang.Text)) MessageBox.Show("Ten khach hang khong duoc de trong"); } // đối với dạng số nhập vào fải >=0 thì dùng cách sau. VD: private void txtSoKi_Validating(object sender, CancelEventArgs e) {
  9. int Int; if (!int.TryParse(txtSoKi.Text, out Int)) MessageBox.Show("So ky phai la so nguyen"); if (Int < 0) MessageBox.Show("So ky phai la so nguyen duong"); } // đối với dạng so sánh số đt thì có nhìu cách làm: VD1: phải nhập đủ 10 số (đtdđ) private void txtDienThoai_Validating(object sender, CancelEventArgs e) { Regex phoneExp = new Regex(@"^((\(\d{3}\) ?)|(\d{3}))?\d{3}\d{4}$"); if (phoneExp.Match(txtDienThoai.Text).Success == false) { MessageBox.Show("Ban da nhap sai so dien thoai, hay nhap lai!"); } } VD2: không đc để trống và nhập số private void txtDienThoai_Validating(object sender, CancelEventArgs e) { // ========== cach 1 ========== if (!Regex.IsMatch(txtDienThoai.Text, @"^[0-9]")) { e.Cancel = true; MessageBox.Show("Điện thoại không được để trống và chỉ được nhập số!!", "Thông báo lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); } // ========== cach 2 ========== //int n = 0; //if(!int.TryParse(txtDienThoai.Text, out n)) //{ // e.Cancel = true; MessageBox.Show("Điện thoại chỉ được nhập số!!", "Thông báo lỗi", // MessageBoxButtons.OK, MessageBoxIcon.Error); //} } d) Khi nhấn vào nút Đặt báo: • Lấy thông tin đặt báo thêm vào lvDanhSach (Thành tiền = Đơn giá * Số kỳ). • Cập nhật lại tổng tiền. private int TinhTien() { int s = 0; for(int i=0; i
  10. string[] s = txtDonGia.Text.Split(' '); // gan phan tu s[0] la gia tien dua vao chuoi gia string gia = s[0]; // gan phan tu s[1] la don vi tien (' D') dua vao chuoi don vi string donvi = s[1]; // cong thuc tinh thanh tien trong lvDanhSach int Tien = int.Parse(txtSoKy.Text) * int.Parse(gia); // dua thong tin vao lvDanhSach ListViewItem item = new ListViewItem(); item.Text = cboLoaiBao.Text; item.SubItems.Add(txtDonGia.Text); item.SubItems.Add(txtSoKy.Text); item.SubItems.Add(datNgayBatDau.Text); item.SubItems.Add(Tien.ToString()+ " D"); lvDanhSach.Items.Add(item); // cap nhat lai txtTongTien txtTongTien.Text = string.Format("{0} D", TinhTien().ToString()); } e) Khi nhấn vào nút Bỏ chọn: • Hiển thị xác nhận người dùng muốn xóa. Nếu đồng ý, xóa thông tin đặt báo đang chọn trong lvDanhSach. • Cập nhật lại tổng tiền private void btnBoChon_Click(object sender, EventArgs e) { if (lvDanhSach.Items.Count == 0) // if trong lvDanhSach k con gi MessageBox.Show("Khong con gi de xoa"); else if (lvDanhSach.SelectedIndices.Count == 0) // chua chon gi trong lvDanhSach MessageBox.Show("Chua chon sao xoa"); else { // xuat thong bao co muon xoa k DialogResult xoa = MessageBox.Show("Ban co muon xoa khong?", "Thong bao", MessageBoxButtons.YesNo); if(xoa == DialogResult.Yes) { int a = lvDanhSach.SelectedIndices.Count-1; for(int i=a; i>=0; i--) { lvDanhSach.Items.RemoveAt(lvDanhSach.SelectedIndices[i]); } // cap nhat lai txtTongTien txtTongTien.Text = string.Format("{0} D", TinhTien().ToString()); } } } f) Khi nhấn nút Thoát hay đóng chương trình: hiển thị xác nhận người dùng muốn đóng chương trình. Nếu đồng ý, thực hiện đóng biểu mẫu frmDatBao private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("Ban co muon thoat khong?", "Thong bao", MessageBoxButtons.YesNo) == DialogResult.Yes) e.Cancel = false; else e.Cancel = true; } private void btnThoat_Click(object sender, EventArgs e) { this.Close(); }
  11. III. ADO.NET Bài 1. Cho cơ sở dữ liệu có tên BanHangDB, trong đó có chứa bảng dữ liệu HoaDon và ChiTietHoaDon được mô tả: Bảng HoaDon Tên trường Kiểu dữ liệu Mô tả Mã hóa đơn (khóa chính) char(10) MaHD KhachHang nvarchar(100) Tên khách hàng Địa chỉ liên lạc LienLac nvarchar(255) Ngày lập hóa đơn NgayLap datetime Bảng ChiTietHoaDon Tên trường Kiểu dữ liệu Mô tả Mã hóa đơn char(10) MaHD Tên mặt hàng nvarchar(100) MatHang Đơn giá DonGia money Số lượng SoLuong int Anh (chị) hãy thực hiện viết đoạn mã theo yêu cầu sau: Kết nối tới cơ sở dữ liệu BanHangDB, giả sử Server là SQLEXPRESS, chạy tại máy cục a. bộ. Giả sử có ComboBox cboMaHD, đưa dữ liệu MaHD trong bảng HoaDon vào cboMaHD. b. Giả sử có thêm TextBox txtLienLac, txtKhachHang, DateTimePicker NgayLap, hiển thị dữ c. liệu tương ứng với Mã hóa đơn chọn trong cboMaHD. d. Giả sử có thêm DataGridView dgBanHang, đưa dữ liệu trong bảng ChiTietHoaDon tương ứng với Mã hóa đơn chọn trong cboMaHD vào dgBanHang (có thêm cột Thành tiền = Số lượng * Đơn giá). * Khai báo: using System.Data.SqlClient; private SqlConnection m_cnn = null; private SqlDataAdapter m_da_hd = null; private DataSet m_ds = null; private string sql = "select * from HoaDon"; private string sql1 = "select MatHang, MaHD, SoLuong, DonGia, SoLuong*DonGia as ThanhTien from ChiTietHoaDon"; a) private void KetNoiCSDL() { // viec ket noi CSDL luon tao loi nen phai try catch try { // tao chuoi ket noi string cnnStr = @"Data Source =.\SQLEXPRESS; Init Catalog = BanHangDB; Integrated Security=True; // tao cau noi m_cnn = new SqlConnection(cnnStr); // mo ket noi m_cnn.Open(); // kiem tra ket noi if (m_cnn.State == ConnectionState.Open) MessageBox.Show("Ket noi thanh cong"); } catch(Exception ee) {
  12. if (m_cnn.State == ConnectionState.Closed) MessageBox.Show("Ket noi that bai"); else MessageBox.Show(ee.Message); } } b) private DataTable load_HD() { // khoi tao data set m_ds = new DataSet(); // khoi tao data adapter m_da_hd = new SqlDataAdapter(sql, m_cnn); // do du lieu vao data set m_da_hd.Fill(m_ds, "HoaDon"); // luu lai / tra ve data set bang Hoa don return m_ds.Tables["HoaDon"]; } private void btn_load_Click(object sender, EventArgs e) { KetNoiCSDL(); // goi ham ket noi csdl da viet o tren DataTable m_dt = load_HD(); // lay ra bang Hoa don va do vao cboMaHD cboMaHD.DataSource = m_dt; // chon hien thi du lieu truong MaHD cboMaHD.DisplayMember = "MaHD"; } c) private DataTable load_HD() { // khoi tao data set de tao noi chua du lieu m_ds = new DataSet(); // khoi tao data adapter m_da_hd = new SqlDataAdapter(sql, m_cnn); // do du lieu vao data set m_da_hd.Fill(m_ds, "HoaDon"); // databinding du lieu vao cac textbox, datetimepicker con lai tuong ung txtKhachHang.DataBindings.Clear(); txtKhachHang.DataBindings.Add("nvarchar", m_ds.Tables["HoaDon"], "KhachHang"); txtLienLac.DataBindings.Clear(); txtLienLac.DataBindings.Add("nvarchar", m_ds.Tables["HoaDon"], "LienLac"); dtpNgayLap.DataBindings.Clear(); dtpNgayLap.DataBindings.Add("Value", m_ds.Tables["HoaDon"], "NgayLap"); // luu lai / tra ve data set bang Hoa don return m_ds.Tables["HoaDon"]; } d) private DataTable load_CTHD() { m_ds = new DataSet(); m_da_hd = new SqlDataAdapter(sql1, m_cnn); m_da_hd.Fill(m_ds); return m_ds.Tables[0]; } private void btn_load_Click(object sender, EventArgs e) { KetNoiCSDL(); // goi ham ket noi csdl da viet o tren
  13. DataTable m_dt = load_HD(); // lay ra bang Hoa don va do vao cboMaHD cboMaHD.DataSource = m_dt; // chon hien thi du lieu truong MaHD cboMaHD.DisplayMember = "MaHD"; // phai lay cac cot trong dgBanHang phai trung voi cot trong CSDL clmMatHang.DataPropertyName = "MatHang"; clmMaHD.DataPropertyName = "MaHD"; clmDonGia.DataPropertyName = "DonGia"; clmSoLuong.DataPropertyName = "SoLuong"; // load bang CTHD do vao dgBanHang dgBanHang.DataSource = load_CTHD(); } private DataTable load_CTHD(string s) // load_CTHD co truyen tham so { // khoi tao data set lam noi chua du lieu m_ds = new DataSet(); // khoi tao data adapter m_da_hd = new SqlDataAdapter("select MatHang, MaHD, SoLuong, DonGia, SoLuong*DonGia as ThanhTien from ChiTietHoaDon where MaHD = '"+s+ "'", m_cnn); // do du lieu vao data set m_da_hd.Fill(m_ds); return m_ds.Tables[0]; } private void cboMaHD_SelectedIndexChanged(object sender, EventArgs e) { // hien thi dgBanHang tuong ung voi cboMaHD da duoc chon dgBanHang.DataSource = load_CTHD(cboMaHD.Text); } Bài 2. Giả sử có các lớp lưu trữ dữ liệu về quản lý nhân khẩu: Tên lớp Tên thuộc tính (Property) Ý nghĩa Mã hộ khẩu public string MaHoKhau { get; set; } Mã chủ hộ, tham chiếu nhân khẩu public string ChuHo { get; set; } HoKhau Địa chỉ hộ khẩu public string DiaChi { get; set; } Chứng minh nhân dân public string MaNK { get; set; } Tên nhân khẩu public string TenNK { get; set; } public DateTime NgaySinh { get; set; } Ngày sinh Nam (true), Nữ (false) NhanKhau public bool GioiTinh {get;set;} “Thường trú”, “Tạm trú” public string LoaiCuTru {get;set;} Chứng minh nhân dân public string CMND {get;set} Hộ khẩu thường trú public string MaHoKhau { get; set; } Danh sách hộ khẩu public List ListHK{ get; set; } DataContext Danh sách nhân khẩu public List ListNK{ get; set; } a. Viết phương thức đọc dữ liệu trong DataContext: public static DataContext DocDuLieu(); để nạp dữ liệu trong cơ sở dữ liệu NhanKhauDB, giả sử Server là SQLEXPRESS, chạy tại máy cục bộ với lược đồ dữ liệu: HoKhau (MaHoKhau, ChuHo, DiaChi) NhanKhau (MaNK, TenNK, NgaySinh, GioiTinh, LoaiCuTru, CMND, MaHoKhau) FrmQLNK dùng để cho biết thông tin của Nhân khẩu tại địa phương có giao diện sau:
  14. Các điều khiển chính của FrmQLNK: STT Tên đối tượng Kiểu đối tượng 1 FrmQLNK Form 2 txtMaHoKhau TextBox 3 txtDiaChi TextBox 4 txtTenChuHo TextBox 5 txtMaNhanKhau TextBox 6 txtHoTenNK TextBox 7 txtNgaySinh TextBox 8 rdoNam RadioButton 9 rdoNu RadioButton 10 cboCuTru ComboBox 11 txtCMND TextBox 12 lvHoKhau ListView 13 lvNhanKhau ListView 14 cboLocDuLieu ComboBox 15 txtLocDuLieu TextBox 16 btnLocDuLieu Button 17 btnDocDuLieu Button 18 btnThoat Button Trong FrmQLNK đã định nghĩa biến sau: Kiểu Tên biến Thuộc tính truy cập Ý nghĩa Lưu dữ liệu DataContext m_data Private Khai báo: class HoKhau { // khai bao cac bien private string maHoKhau;
  15. private string diaChi; private string chuHo; // thiet lap property cho cac thuoc tinh cua cac bien public string MaHoKhau { get { return maHoKhau; } set { maHoKhau = value; } } public string ChuHo { get { return chuHo; } set { chuHo = value; } } public string DiaChi { get { return diaChi; } set { diaChi = value; } } } class NhanKhau { // khai bao cac bien private string maNhanKhau; private string tenNhanKhau; private DateTime ngaySinh; private bool gioiTinh; private string loaiCuTru; private string cMND; private string maHoKhau; // thiet lap property cho cac thuoc tinh cua cac bien public string MaNhanKhau { get { return maNhanKhau; } set { maNhanKhau = value; } } public string TenNhanKhau { get { return tenNhanKhau; } set { tenNhanKhau = value; } } public DateTime NgaySinh { get { return ngaySinh; } set { ngaySinh = value; } } public bool GioiTinh { get { return gioiTinh; } set { gioiTinh = value; } } public string LoaiCuTru { get { return loaiCuTru; } set { loaiCuTru = value; } } public string CMND { get { return cMND; } set { cMND = value; } }
  16. public string MaHoKhau { get { return maHoKhau; } set { maHoKhau = value; } } } class DataContext { // khai bao cac bien private List listHoKhau; private List listNhanKhau; // thiet lap property cho cac thuoc tinh cua cac bien public List ListHoKhau { get { return listHoKhau; } set { listHoKhau = value; } } public List ListNhanKhau { get { return listNhanKhau; } set { listNhanKhau = value; } } } a) Khi nhấn nút “Đọc dữ liệu”, hiển thị hộp thoại chọn tập tin. Sau khi chọn tập tin dữ liệu (có cấu trúc nêu trong phần trên), đưa dữ liệu hộ khẩu vào Danh sách hộ khẩu public static DataContext DocDuLieu() { // tao chuoi ket noi string cnn_Str = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath; // tao cau noi OleDbConnection m_cnn = new OleDbConnection(cnn_Str); // mo ket noi m_cnn.Open(); // kiem tra ket noi if (m_cnn.State == ConnectionState.Open) MessageBox.Show("Ket noi thanh cong"); // khoi tao cac doi tuong DataContext datacontext_tmp = new DataContext(); List hk_tmp = new List(); List nk_tmp = new List(); string query = "SELECT * FROM HoKhau"; OleDbCommand cmd = new OleDbCommand(query, m_cnn); OleDbDataReader dr = cmd.ExecuteReader(); while (dr.Read()) // trong khi con doc duoc { // tao bien tam de luu HoKhau hokhau_tmp = new HoKhau(); // lay du lieu dua vao tung cot, khi lay ve phai ep kieu tuong ung hokhau_tmp.MaHoKhau = (string)dr["MaHoKhau"]; hokhau_tmp.ChuHo = (string)dr["ChuHo"]; hokhau_tmp.DiaChi = (string)dr["DiaChi"]; // dua du lieu vao list hk_tmp hk_tmp.Add(hokhau_tmp); } query = "SELECT * FROM NhanKhau"; cmd = new OleDbCommand(query, m_cnn);
  17. dr = cmd.ExecuteReader(); while (dr.Read()) // trong khi con doc duoc { // tao bien tam List nk_tmp NhanKhau nhankhau_tmp = new NhanKhau(); // lay du lieu dua vao tung cot, khi lay ve phai ep kieu tuong ung nhankhau_tmp.MaNhanKhau = (string)dr["MaNhanKhau"]; nhankhau_tmp.TenNhanKhau = (string)dr["TenNhanKhau"]; nhankhau_tmp.NgaySinh = (DateTime)dr["NgaySinh"]; nhankhau_tmp.LoaiCuTru = (string)dr["LoaiCuTru"]; nhankhau_tmp.CMND = (string)dr["CMND"]; nhankhau_tmp.MaHoKhau = (string)dr["MaHoKhau"]; nhankhau_tmp.GioiTinh = (bool)dr["GioiTinh"]; // dua du lieu vao List nk_tmp nk_tmp.Add(nhankhau_tmp); } // luu du lieu lai vao datacontext tuong ung voi ho khau va nhan khau datacontext_tmp.ListHoKhau = hk_tmp; datacontext_tmp.ListNhanKhau = nk_tmp; // co dr.read() thi phai co dr.close dr.Close(); // dong m_cnn m_cnn.Close(); // tra ve datacontext_tmp return datacontext_tmp; } } private void btnDocDuLieu_Click(object sender, EventArgs e) { // tao OpenFileDialog OpenFileDialog open = new OpenFileDialog(); open.Title = "Chon du lieu"; // mo hop thoai open.ShowDialog(); filepath = open.FileName; // goi ham doc du lieu m_data = DataContext.DocDuLieu(); List hk_tmp = m_data.ListHoKhau; // duyet cac phan tu trong ho khau foreach (HoKhau hokhau in hk_tmp) { // tao ListViewItem ListViewItem item = new ListViewItem(); item.Text = hokhau.MaHoKhau; item.SubItems.Add(hokhau.ChuHo); item.SubItems.Add(hokhau.DiaChi); // dua du lieu vao listview lvHoKhau.Items.Add(item); } } b) Khi chọn một hộ khẩu trong danh sách hộ khẩu, hiển thị danh sách các nhân khẩu trong hộ khẩu đó, và thông tin hộ khẩu private void lvHoKhau_SelectedIndexChanged(object sender, EventArgs e) { int index = lvHoKhau.SelectedIndices.Count; if (index > 1)
  18. { MessageBox.Show("Chi chon 1 dong thoi ban!", "Thong bao"); return; } try { index = lvHoKhau.SelectedIndices[index - 1]; } catch { return; } lvNhanKhau.Items.Clear(); List hk_tmp = m_data.ListHoKhau; // duyet cac phan tu trong ho khau foreach (HoKhau hk in hk_tmp) { if (hk.MaHoKhau == lvHoKhau.Items[index].Text) { txtMaHoKhau.Text = hk.MaHoKhau; txtTenChuHo.Text = hk.ChuHo; txtDiaChi.Text = hk.DiaChi; } } List nk_tmp = m_data.ListNhanKhau; foreach (NhanKhau nk in nk_tmp) { if (nk.MaHoKhau == txtMaHoKhau.Text) { ListViewItem item = new ListViewItem(); item.Text = nk.CMND; item.SubItems.Add(nk.TenNhanKhau); item.SubItems.Add(nk.NgaySinh.ToString().Substring(0, 10)); lvNhanKhau.Items.Add(item); } } } c) Khi chọn một nhân khẩu trong danh sách nhân khẩu, hiển thị thông tin nhân khẩu private void lvNhanKhau_SelectedIndexChanged(object sender, EventArgs e) { int index = lvNhanKhau.SelectedIndices.Count; if (index > 1) { MessageBox.Show("Chi chon 1 dong thoi ban!", "Thong bao"); return; } try { index = lvNhanKhau.SelectedIndices[index - 1]; } catch { return; } List nk_tmp = m_data.ListNhanKhau; foreach (NhanKhau nk in nk_tmp)
  19. { if (nk.CMND == lvNhanKhau.Items[index].Text) { txtMaNhanKhau.Text = nk.MaNhanKhau; txtHoTen.Text = nk.TenNhanKhau; txtCMND.Text = nk.CMND; datNgaySinh.Text = nk.NgaySinh.ToString(); cboCuTru.Text = nk.LoaiCuTru; bool gioitinh = nk.GioiTinh; if (gioitinh) rdoNam.Checked = true; else rdoNu.Checked = true; } } } d) Khi nhấn nút “Lọc dữ liệu”, chỉ hiển thị các hộ khẩu thỏa mãn điều kiện lọc trong danh sách hộ khẩuvà hiển thị danh sách nhân khẩu của hộ khẩu đầu tiên. Biết cboLocDuLieu chứa giá trị: “Địa chỉ” (lọc các hộ khẩu có địa chỉ chứa chuỗi trong txtLocDuLieu), “CMND” (lọc cá c hộ khẩu có nhân khẩu mà CMND có chứa chuỗi trong txtLocDuLieu), “Họ tên” (lọc các hộ khẩu có nhân khẩu mà Họ tên có chứa chuỗi trong txtLocDuLieu) private void btnLocDuLieu_Click(object sender, EventArgs e) { int index = cboLocDuLieu.SelectedIndex; List nk_tmp = m_data.ListNhanKhau; bool Xoa = true; switch (index) { case 0: for (int i = lvHoKhau.Items.Count - 1; i >= 0; i--) { int n = lvHoKhau.Items[i].SubItems[2].Text.IndexOf(txtLocDuLieu.Text); if (n < 0) { lvHoKhau.Items.RemoveAt(i); } } lvNhanKhau.Items.Clear(); if (lvHoKhau.Items.Count == 0) break; foreach (NhanKhau nk in nk_tmp) { if (nk.MaHoKhau == lvHoKhau.Items[0].Text) { ListViewItem item = new ListViewItem(); item.Text = nk.CMND; item.SubItems.Add(nk.TenNhanKhau); item.SubItems.Add(nk.NgaySinh.ToString().Substring(0, 10)); lvNhanKhau.Items.Add(item); } } break; case 1: for (int i = lvHoKhau.Items.Count - 1; i >= 0; i--) { foreach (NhanKhau nk in nk_tmp) { if (nk.MaHoKhau == lvHoKhau.Items[i].Text) {
  20. int n = nk.CMND.ToString().IndexOf(txtLocDuLieu.Text); if (n >= 0) Xoa = false; } } if (Xoa) lvHoKhau.Items.RemoveAt(i); Xoa = true; } lvNhanKhau.Items.Clear(); if (lvHoKhau.Items.Count == 0) break; foreach (NhanKhau nk in nk_tmp) { if (nk.MaHoKhau == lvHoKhau.Items[0].Text) { ListViewItem item = new ListViewItem(); item.Text = nk.CMND; item.SubItems.Add(nk.TenNhanKhau); item.SubItems.Add(nk.NgaySinh.ToString().Substring(0, 10)); lvNhanKhau.Items.Add(item); } } break; case 2: for (int i = lvHoKhau.Items.Count - 1; i >= 0; i--) { foreach (NhanKhau nk in nk_tmp) { if (nk.MaHoKhau == lvHoKhau.Items[i].Text) { int n = nk.TenNhanKhau.ToString().IndexOf(txtLocDuLieu.Text); if (n >= 0) Xoa = false; } } if (Xoa) lvHoKhau.Items.RemoveAt(i); Xoa = true; } lvNhanKhau.Items.Clear(); if (lvHoKhau.Items.Count == 0) break; foreach (NhanKhau nk in nk_tmp) { if (nk.MaHoKhau == lvHoKhau.Items[0].Text) { ListViewItem item = new ListViewItem(); item.Text = nk.CMND; item.SubItems.Add(nk.TenNhanKhau); item.SubItems.Add(nk.NgaySinh.ToString().Substring(0, 10)); lvNhanKhau.Items.Add(item); } } break; } }
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2