Yêu cầu:
- Nhãn quản lý nhân viên: Font Time New Roman, cỡ chữ 16, chữ hoa, in đậm, căn giữa Form, màu xanh.
- Nhãn mã nhân viên, họ tên, quê quán, hệ số lương, lương cơ bản: Font Time New Roman, cỡ chữ 14, màu đen.
- Các ô để nhập mã nhân viên, họ tên, quê quán, hệ số lương, lương cơ bản là các TextBox.
- Các điều khiển “Thêm” ,” Danh sách nhân viên”, “Nhân viên có lương cao nhất”, “Sắp xếp”, “Sửa”, “Xóa”, “Tìm kiếm”, “Thoát” là các Button.
- Điều khiển thông tin chi tiết nhân viên, danh sách nhân viên là GroupBox
- Điều khiển để hiển thị danh sách nhân viên là ListView.
2. Lập trình thực hiện các công việc sau:
Có thể bạn quan tâm!
- Kết Quả Chạy Chương Trình Quản Lý Lương Nhân Viên
- Thực hành kỹ thuật lập trình - 22
- Kết Quả Thiết Kế Form Quản Lý Giáo Viên
- Kết Quả Chạy Chương Trình Quản Lý Lương Nhân Viên
- Thực hành kỹ thuật lập trình - 26
- Kết Quả Chạy Chương Trình Sinh Viên Khoa Cơ Khí
Xem toàn bộ 312 trang tài liệu này.
- Khai báo cấu trúc nhân viên gồm các thuộc tính: Họ tên, quê quán, hệ số lương, lương cơ bản. Các phương thức: hàm tạo có đối, phương thức hiển thị, tính lương.
- Danh sách nhân viên được lưu trong tệp “Nhanvien.data”;
- Khi Load Form: Các textbox vô hiệu hóa.
- Khi người dùng kích vào nút “Thêm”:
+ Đọc dữ liệu trong tệp “Nhanvien.data”.
+ Kiểm tra nếu thuộc tính Text của nút là “Thêm” thì: Các textbox sáng lên cho phép hoạt động, con trỏ đặt tại textbox mã nhân viên, đồng thời thuộc tính Text của nút thành “Lưu”.
+ Nếu thuộc tính Text của nút là “Lưu” thì:
Kiểm tra xem người dùng đã nhập đủ thông tin của một nhân viên chưa? Nếu chưa thì hiển thị hộp thoại thông báo và yêu cầu nhập đủ, thuộc tính Text của nút vẫn là “Lưu”. Ngược lại kiểm tra xem dữ liệu nhập vào có hợp lệ hay không (hệ số lương và lương cơ bản phải là số). Nếu dữ liệu nhập vào không hợp lệ thì hiện lên hộp thoại thông báo và cho phép nhập lại, thuộc tính Text của nút vẫn là “Lưu”.
Nếu dữ liệu nhập vào đủ và hợp lệ thì thực hiện kiểm tra xem mã nhân viên mới có trong danh sách hay chưa? Nếu mã đã có trong danh sách nhân viên thì thông báo trùng mã cho phép nhập lại mã. Ngược lại thì thực hiện thêm mã nhân viên vào danh sách, ghi dữ liệu vào tệp “Nhanvien.data”, thuộc tính Text của nút đổi thành “Thêm”, reset lại các textbox và vô hiệu hóa các textbox này.
- Khi người dùng kích vào nút “Danh sách nhân viên”: thực hiện đọc danh sách nhân viên trong tệp “Nhanvien.data” và hiển thị ra ListView nhân viên.
- Khi người dùng kích vào nút “Nhân viên có lương cao nhất”: đọc tệp “ Nhanvien.data”, tìm những nhân viên có lương cao nhất và đưa ra ListView
- Khi người dùng kích vào nút “Sắp xếp”: đọc tệp “ Nhanvien.data”, thực hiện sắp xếp danh sách nhân viên theo lương giảm dần, hiển thị danh sách sau khi sắp xếp ra ListView.
- Khi người dùng kích vào nút “Sửa”:
+ Đọc tệp “ Nhanvien.data”.
+ Kiểm tra xem người dùng đã chọn nhân viên cần xóa trên ListView chưa? Nếu chưa thì hiển thị hộp thoại thông báo. Ngược lại hiển thị thông tin chi tiết của nhân viên được chọn lên các textbox tương ứng.
+ Nếu thuộc tính text của nút là “Sửa ”: các textbox sáng lên cho phép hoạt động, text nhập mã sinh viên vô hiệu hóa và thiết lập lại thuộc tính text của nút này là “Cập nhật”.
+ Nếu thuộc tính text của nút là “Cập nhật”: Kiểm tra xem dữ liệu nhập vào có hợp lệ không (hệ số lương và lương cơ bản phải là số). Nếu dữ liệu không hợp lệ thì hiện lên hộp thoại thông báo và cho phép nhập lại, thuộc tính text của nút vẫn là “Cập nhật”. Nếu dữ liệu nhập vào hợp lệ thì thực hiện cập nhật lại thông tin của nhân viên sau khi sửa, hiển thị lại dữ liệu sau khi sửa lên ListView và thiết lập lại thuộc tính text của nút thành “Sửa”, vô hiệu hóa và reset lại các textbox .
- Khi người dùng kích vào nút “Xóa”:
+ Đọc tệp “ Nhanvien.data
+ Kiểm tra xem người dùng đã chọn nhân viên cần xóa trên ListView chưa? Nếu chưa thì hiển thị hộp thoại thông báo. Ngược lại hiển thị thông tin chi tiết của nhân viên được chọn lên các textbox tương ứng.
+ Hiện lên hộp thoại có hai lựa chọn Yes/No để hỏi người dùng có muốn xóa nhân viên đang chọn trên ListView hay không? Nếu chọn Yes thì thực hiện xóa nhân viên đó ra khỏi danh sách và cập nhật lại danh sách sau khi xóa lên ListView, reset lại các textbox. Nếu người dùng chọn No thì không xóa nhân viên đó.
- Khi người dùng kích vào nút “Tìm kiếm”: Hiện lên hộp thoại cho phép người dùng nhập vào mã nhân viên cần tìm kiếm, kết quả tìm kiếm hiển thị lên ListView nhân viên, nếu không có thì hiện lên hộp thoại thông báo tìm kiếm không thành công.
- Khi người dùng kích vào nút “Thoát”: thực hiện kết thúc chương trình.
Hướng dẫn thực hiện
1. Thiết kế Form như yêu cầu đề bài
2. Phân tích yêu cầu
Theo yêu cầu của bài toán thì phải có một Form chứa:
- Các đối tượng có nội dung “quản lý lương nhân viên”, “Mã nhân viên”, ”Họ tên”, ”Quê quán”, “Hệ số lương”, “Lương cơ bản” là các Label.
- Đối tượng ô nhập mã nhân viên, họ tên, quê quán, hệ số lương, lương cơ bản là các Textbox.
- Điều khiển để hiển thị danh sách nhân viên là ListView được đặt trong một GroupBox thông tin chi tiết nhân viên.
- Đối tượng thông tin chi tiết nhân viên, danh sách nhân viên là các GroupBox.
- Các nút “Thêm”, ”Danh sách nhân viên”, “Nhân viên có lương cao nhất”, “Sắp xếp”, ”Sửa”, “Xóa”, “Tìm kiếm”, ”Thoát” là các Button.
3. Hướng dẫn thực hiện
Thiết kế Form theo mẫu và gắn các điều khiển
- Để tạo điểu khiển quản lý lương nhân viên theo yêu cầu cần thực hiện:
+ Kéo điều khiển Label từ cửa sổ Toolbox
+ Kích phải chuột vào Label chọn Properties và thiết lập các thuộc tính cho Label như sau:
Text: QUẢN LÝ LƯƠNG NHÂN VIÊN
Font: Time New Roman Size: 16
Font style: Bold ForeColor: Blue
Thực hiện tương tự với các nhãn họ tên, mã nhân viên, quê quán, hệ số lương, lương cơ bản.
- Để tạo một GroupBox thông tin chi tiết nhân viên theo yêu cầu cần thực hiện:
+ Kéo điều khiển GroupBox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào GroupBox chọn Properties và thiết lập các thuộc tính cho GroupBox như sau:
Text: Thông tin chi tiết nhân viên Font: Time New Roman
Size: 14 ForeColor: Black
Thực hiện tương tự với GroupBox nhập thông tin nhân viên.
- Để tạo điều khiển nhập mã nhân viên theo yêu cầu cần thực hiện:
+ Kéo điểu khiển Textbox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào Textbox/Properties và thiết lập thuộc tính Name:
txt_manv.
Thực hiện tương tự với các điều khiển nhập họ tên, quê quán, hệ số lương, lương cơ bản.
tính:
- Để tạo điều khiển “Thêm” theo yêu cầu cần thực hiện:
+ Kéo điều khiển Button từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào Button chọn Properties và thiết lập các thuộc tính Name: bt_them.
Thực hiện tương tự với điều khiển ”Danh sách nhân viên”, “Nhân viên có lương cao nhất”, “Sắp xếp”, “Sửa”, “Xóa”, “Tìm kiếm”, “Thoát”.
- Để tạo điều khiển liệt kê danh sách nhân viên theo yêu cầu cần thực hiện:
+ Kéo điều khiển ListView từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào ListView chọn Properties và thiết lập các thuộc
Name: listview_nhanvien
Columns/ kích chuột vào Collection/ kích Add 6 lần và thiết lập
thuộc tính Text cho các cột tương ứng lần lượt là mã nhân viên, họ tên, quê quán, hệ số lương, lương cơ bản, lương.
View: Detail GridLine: true
Kết quả thiết kế Form
Hình 2. 19. Kết quả thiết kế Form quản lý lương nhân viên
Viết mã lệnh thực hiện các công việc
- Viết mã lệnh khai báo cấu trúc nhân viên
public struct NV
{
string _manv; string _hoten; string _quequan; double _hesoluong; double _luongcb;
public string manv
{
get { return _manv; } set { _manv = value; }
}
public string hoten
{
get { return _hoten; } set { _hoten = value; }
}
public string quequan
{
get { return _quequan; } set { _quequan = value; }
}
public double hesoluong
{
get { return _hesoluong; } set { _hesoluong = value; }
}
public double luongcb
{
get { return _luongcb; } set { _luongcb = value; }
}
public NV(string ma,string ho, string qq, double hsl, double lgcb)
{
_manv = ma;
_hoten = ho;
_quequan = qq;
_hesoluong = hsl;
_luongcb = lgcb;
}
public ListViewItem hienthi()
{
ListViewItem item = new ListViewItem(); item.Text = _manv; item.SubItems.Add(_hoten); item.SubItems.Add(_quequan); item.SubItems.Add(_hesoluong.ToString()); item.SubItems.Add(_luongcb.ToString()); return item;
}
public double Tinhluong()
{
return _hesoluong * _luongcb;
}
- Viết mã lệnh cho hàm ghi thông tin một nhân viên vào tệp
public void GhiDuLieu(BinaryWriter writer)
{
writer.Write(_manv); writer.Write(_hoten); writer.Write(_quequan); writer.Write(_hesoluong); writer.Write(_luongcb);
}
- Viết mã lệnh cho hàm đọc một phần tử của tệp
public NV DocDulieu(BinaryReader read)
{
NV X = new NV ();
try
{
X.manv = read.ReadString(); X.hoten = read.ReadString(); X.quequan = read.ReadString();
}
catch (IOException)
{
Console.WriteLine("Lỗi đọc tệp");
}
X.hesoluong = read.ReadDouble(); X.luongcb = read.ReadDouble(); return X;
}
}
- Viết mã lệnh khai báo mảng cấu trúc và biến nguyên n
NV[] A = new NV[100]; int n = 0;
- Viết mã lệnh cho hàm mở tệp để đọc dữ liệu
void Motep_doc(ref NV[] A, ref int n)
{
FileStream fs = new FileStream(@"C:Nhanvien.data", FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fs); n = reader.ReadInt32(); int cs = 0;
for (int i = 0; i < n; i++)
{
A[cs] = A[cs].DocDulieu(reader); cs++;
}
reader.Close(); fs.Close();
}
- Viết mã lệnh cho hàm mở tệp để ghi
void Motep_ghi(NV[] A, int n)
{
FileStream fs = new FileStream(@"C:Nhanvien.data", FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs); bw.Write(n);
try
{
for (int i = 0; i < n; i++) A[i].GhiDuLieu(bw);
}
catch (IOException ex)
{
Console.WriteLine("Loi" + ex);
}
bw.Close();
fs.Close();
}
- Viết mã lệnh cho hàm vô hiệu hóa các nút
void vohieuhoa1(bool gt)
{
bt_hienthi.Enabled = gt; bt_luongMax.Enabled = gt; bt_sapxep.Enabled = gt; bt_sua.Enabled = gt; bt_timkiem.Enabled = gt; bt_xoa.Enabled = gt;
}
- Viết mã lệnh cho hàm vô hiệu hóa các textbox
void vohieuhoa2(bool gt)
{
txt_maNV.Enabled = gt; txt_hoten.Enabled = gt; txt_hsl.Enabled = gt; txt_luongCB.Enabled = gt; txt_quequan.Enabled = gt;
}
- Viết mã lệnh cho sự kiện Load Form
private void Form1_Load(object sender, EventArgs e)
{
vohieuhoa2(false); txt_maNV.Focus();
}
- Viết mã lệnh cho hàm reset các textbox
void reset()
{
txt_maNV.ResetText(); txt_hoten.ResetText(); txt_hsl.ResetText(); txt_luongCB.ResetText(); txt_quequan.ResetText();
}
- Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào
bool kiemtra_du_lieu()
{
if (kiemtra(txt_maNV.Text) || kiemtra(txt_hoten.Text) || kiemtra(txt_quequan.Text) || kiemtra(txt_luongCB.Text)||kiemtra(txt_hsl.Text)) return false;
double x;
if (!double.TryParse(txt_hsl.Text, out x) || x <= 0) return false;
if (!double.TryParse(txt_luongCB.Text, out x) || x <= 0) return false; return true;
}
- Viết mã lệnh cho hàm kiểm tra chuỗi rỗng
bool kiemtra(string s)
{
if (string.IsNullOrWhiteSpace(s)) return true; else return false;
}
- Viết mã lệnh cho sự kiện kích chuột vào nút thêm
private void bt_them_Click(object sender, EventArgs e)
{
Motep_doc(ref A, ref n);
if (string.Compare(bt_them.Text, "Thêm") == 0)
{ vohieuhoa2(true); txt_maNV.Focus(); bt_them.Text = "Lưu"; vohieuhoa1(true);
}
else if (kiemtra_du_lieu())
{ int i;
NV X = new NV(txt_maNV.Text, txt_hoten.Text, txt_quequan.Text, double.Parse(txt_hsl.Text), double.Parse(txt_luongCB.Text));
for (i = 0; i < n; i++)
if (A[i].manv == txt_maNV.Text) { MessageBox.Show("Trùng mã nhân viên", "Thông báo"); txt_maNV.Focus(); break; }
if (i == n) { A[n] = X; n++; reset(); bt_them.Text = "Thêm"; vohieuhoa2(false); }
Motep_ghi(A, n); Motep_doc(ref A, ref n); Dua_DL_listview(A, n);
}
else { MessageBox.Show("Dữ liệu nhập vào không hợp lệ", "Thông báo lỗi"); bt_them.Text = "Lưu"; }
}