Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
573 KB
Nội dung
BÀI TẬP ÔN CHUYÊN ĐỀ CSHARP o0o I. N G ÔN N G Ữ L Ậ P TRÌ N H CS H A R P : 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<T> 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 Enqueue Thêm 1 phần tử vào đầu Queue Dequeue Lấy 1 phần tử ở cuối ra khỏi Queue PeakFront Lấy 1 phần tử ở đầu Queue PeakRear Lấy 1 phần tử ở cuối Queue IsEmpty Kiểm tra Queue rỗng 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<T> : IEnumerable<T> { // khởi tạo danh sách kiểu đối tượng T List<T> q = new List<T>(); // constructor mặc định public CQueue(){ } // constructor sao chép public CQueue(CQueue<T> 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<T> Members public IEnumerator<T> 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 } } #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<int> q = new CQueue<int>(); 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<String> q1 = new CQueue<String>(); 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 { private string maSo; private string hoTen; private DateTime ngaySinh; private LopHoc lopHoc; … } class LopHoc { private string maLop; private string tenKhoa; private List<SinhVien> dsSinhVien; … } Giả sử có hàm Main được cài đặt như sau: static void Main(string []args) { 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 { 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<SinhVien> dsSinhVien = new List<SinhVien>(); // 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 { 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 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 STT Tên điều khiển Kiểu điều khiển Mô tả 1 txtKhachHang TextBox Tên khách hàng đặt báo 2 txtDienThoai TextBox Điện thoại khách hàng 3 txtDiaChiNhan TextBox Địa chỉ nhận báo 4 cboLoaiBao ComboBox Danh sách các báo lựa chọn đặt 5 txtDonGia TextBox Giá báo tương ứng 6 txtSoKy TextBox Số kỳ đặt báo 7 datNgayBatDau DateTimePicker Ngày bắt đầu nhận báo 8 lvDanhSach ListView Danh sách báo chọn đặt 9 txtTongTien TextBox Tổng tiền các báo chọn đặt 10 btnDatBao Button Chức năng đặt báo 11 btnBoChon Button Chức năng bỏ chọn đặt báo 12 btnThoat Button Thoát chương trình Biết bảng các phương thức xử lý sự kiện cho điều khiển trên frmDatBao: STT Đối tượng Sự kiện Phương thức xử lý 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 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()); } 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) { 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<lvDanhSach.Items.Count; i++) // duyet het lvDanhSach { // lay cot thu 4 la thanh tien ra string thanhtien = lvDanhSach.Items[i].SubItems[4].Text.ToString(); // cat chuoi thanhtien dua vao mang chuoi x va cat nhau boi dau ' ' string []x = thanhtien.Split(' '); // gan phan tu x[0] la giaTien vao chuoi tien string tien = x[0]; // cong don va ep kieu s = s + int.Parse(tien); } return s; // tra ve ket qua } private void btnDatBao_Click(object sender, EventArgs e) { // lay chuoi txtDonGia cat nhau boi ki tu ' ' dua vao mang chuoi s 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(); } [...]... đ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,... control: Sự kiện Control Phương th c xử lý Validating (2) txtMaKH_Validating Validating (3) txtHoTen_Validating Click (7) btnTim_Click Click (8) btnDongTK_Click Click Click Click (9) (16) (17) btnTaoKH_Click btnTao_Click btnThoat_Click C c Form c giao diện như sau: Form “FormTimThongTinKH”: Dùng biểu th c chính quy (Regular Expression) để kiểm tra: o txtMaKH: Ho c để trống ho c chỉ nhập tối đa 8... Form1_Load(object sender, EventArgs e) { // a.1/ khởi tạo c c giá trị cho cboTenPhim cboTenPhim.Items.Add("Để mai tính"); cboTenPhim.Items.Add("Bão táp sa m c" ); cboTenPhim.Items.Add( "C gái đi tìm tình yêu"); cboTenPhim.Items.Add("Cuốn sách c a Eli"); // a.2/ khởi tạo giờ chiếu cho cboGioChieu cboGioChieu.Items.Add("14h"); cboGioChieu.Items.Add("16h"); cboGioChieu.Items.Add("18h"); cboGioChieu.Items.Add("20h");... nối m_cnn.Close(); } d) Viết code c p nhật thông tin bảng máy tính : bổ sung c u hình cho IBM001 là “Intel Core i7” private void btnUpdate_Click(object sender, EventArgs e) { // mở kết nối m_cnn.Open(); // tạo c u update string sql = "Update tblMayTinh set CauHinh='Intel Core i7' where MaMay='IBM001'"; // đưa c u lệnh sql vào cmd cmd = new SqlCommand(sql, m_cnn); // th c thi c u lệnh sql cmd.ExecuteNonQuery();... 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... // th c thi c u lệnh sql cmd.ExecuteNonQuery(); // đóng kết nối m_cnn.Close(); } d) Viết code c p nhật thông tin bảng máy tính : bổ sung mô tả cho MS0001 là “Sách hướng dẫn lập trình c# từ c bản đến nâng cao” private void btnUpdate_Click(object sender, EventArgs e) { // mở kết nối m_cnn.Open(); // tạo c u update string sql = "Update tblMayTinh set Description='Sách hướng dẫn lập trình c# từ c bản... row.Cells["MaTK"].Value.ToString() + "'"; OleDbCommand command = new OleDbCommand(query, con); command.ExecuteNonQuery(); } row.Cells["TrangThai"].Value = false; con.Close(); } } public void ReceiveData(string MaKH, string HoTen, string CMND, string DiaChi) { txtMaKhachHang.Text = MaKH; txtHoTen.Text = HoTen; txtCMND.Text = CMND; txtDiaChi.Text = DiaChi; } private void btnTaoKhachHang_Click(object sender,... Khai báo: class HoKhau { // khai bao cac bien private string maHoKhau; Ý nghĩa Lưu dữ liệu 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;... dgvDSDatVe.DataSource = dtDSDatVe; } b) // viết sự kiện validating cho tên khách hàng không đư c để trống private void txtKhachHang_Validating_1(object sender, CancelEventArgs e) { if (txtKhachHang.Text.Trim() == "") MessageBox.Show("Tên khách hàng không đư c để trống"); } // viết sự kiện validating cho địa chỉ không đư c để trống private void txtDiaChi_Validating_1(object sender, CancelEventArgs e) { if (txtDiaChi.Text.Trim()... số o txtHoTen: Ho c để trống ho c chỉ nhập chữ hay khoảng trắng Khi người dùng click vào button “btnTim” thì chương trình sẽ tìm tất c c c tài khoản dựa trên tất c TextBox đã nhập Chú ý: o Nếu TextBox nào không nhập thì không tìm theo TextBox đó o Tìm kiếm theo dạng không chính x c Khi người dùng click vào button “btnDongTK” thì chương trình sẽ đổi trạng thái c a tài khoản (đã chọn trong “dgvTaiKhoan”) . 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. frmDatBao_Load 6 cboLoaiBao SelectedIndexChanged cboLoaiBao_SelectedIndexChanged 7 btnDatBao Click btnDatBao_Click 8 btnBoChon Click btnBoChon_Click 9 btnThoat Click btnThoat_Click 10 frmDatBao FormClosing. “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