01/10/2018, 17:17
Hỏi về cách update thông tin nhân viên
Chào mọi người, Mình đang tìm hiểu về lập trình Java và làm bài tập với nội dung như sau:
- Tạo 1 lớp Nhân Viên gồm: Mã NV, Tên NV, Lương cơ bản
- Tạo thêm 1 lớp Nhân viên tiếp thị kế thừa từ lớp Nhân Viên: có thêm Tỷ lệ hoa hồng, Doanh số
- Tạo thêm 1 lớp Nhân viên văn phòng kế thừa từ lớp Nhân Viên: ko thêm gì
- Tạo thêm 1 lớp Trường phòng kế thừa từ lớp Nhân Viên: có thêm Lương Trách nhiệm.
Yêu cầu là Nhập danh sách, Xuất DS, Tìm NV theo mã, Xóa NV theo mã, Cập nhật NV theo mã.
Mình đã làm dc phần Nhập, Xuất, Tìm, Xóa. Nhưng phần Cập nhật thì mình nghĩ không ra cách làm sao để cập nhật. vì mỗi loại nhân viên thì các nội dung cập nhật lại khác nhau và trong thông tin nhân viên lại không có Loại nhân viên để phân biệt.
Đây là code của mình:
- Class Nhân Viên:
/**
*
* @author Administrator
*/
abstract public class NhanVien {
private String maNhanVien; // Khai bao ma NV
private String tenNhanVien; //Khai bao ten NV
private double luongNhanVien; // Khai bao luong NV
//Seter & getter Ma Nhan Vien
public void setMaNV(String maNhanVien) {
this.maNhanVien = maNhanVien;
}
public String getMaNV() {
return this.maNhanVien;
}
//Seter & getter Tên Nhan Vien
public void setTenNV(String tenNhanVien) {
this.tenNhanVien = tenNhanVien;
}
public String getTenNV() {
return this.tenNhanVien;
}
//Seter & getter lương Nhan Vien
public void setLuongNV(double luongNhanVien) {
this.luongNhanVien = luongNhanVien;
}
public double getLuongNV() {
return this.luongNhanVien;
}
//Khai bao abstract ham Tinh tong luong
abstract public double tongLuong();
//Khai bao ham tinh thue thu nhap
public double thueThuNhap() {
if (tongLuong() < 9000000) {
return 0;
} else if (tongLuong() >= 9000000 && tongLuong() < 15000000) {
return tongLuong() * 0.1;
} else {
return tongLuong() * 0.12;
}
}
//Ham xuat thong tin
public void xuatThongTin() {
System.out.println("Ma Nhan Vien: " + maNhanVien);
System.out.println("Ten Nhan Vien: " + tenNhanVien);
System.out.println("Tong thu nhap: " + tongLuong());
System.out.println("Thue thu nhap: " + thueThuNhap());
}
}
- Class Nhân Viên Văn Phòng
/**
*
* @author Administrator
*/
public class NVVanPhong extends NhanVien {
@Override
public double tongLuong() {
return super.getLuongNV();
}
}
3. Class Nhân Viên Tiếp Thị
/**
*
* @author Administrator
*/
public class NVTiepThi extends NhanVien {
private double tyLeHoaHong;
private double doanhSo;
//Getter & setter ty le hoa hong
public void setTyLeHoaHong(double tyLeHoaHong) {
this.tyLeHoaHong = tyLeHoaHong;
}
public double getTyLeHoaHong() {
return this.tyLeHoaHong;
}
//Getter & setter doanh so
public void setDoanhSo(double doanhSo) {
this.doanhSo = doanhSo;
}
public double getDoanhSo() {
return this.doanhSo;
}
@Override
public double tongLuong() {
return super.getLuongNV() + (tyLeHoaHong * doanhSo);
}
}
- Class Trưởng Phòng
/**
*
* @author Administrator
*/
public class NVTruongPhong extends NhanVien {
private double luongTrachNhiem; // Khai bao luong trach nhiem cua truong phong
//Getter & setter luong trach nhiem
public void setLuongTrachNhiem(double luongTrachNhiem) {
this.luongTrachNhiem = luongTrachNhiem;
}
public double getLuongTrachNhiem() {
return this.luongTrachNhiem;
}
@Override
public double tongLuong() {
return super.getLuongNV() + luongTrachNhiem;
}
}
- Main class:
/**
*
* @author Administrator
*/
import java.util.Scanner;
import java.util.ArrayList;
public class RongViet {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in);
ArrayList<NhanVien> arr = new ArrayList<NhanVien>();
do {
System.out.println("+-------------CHON CHUC NANG THEO DANH SACH-------------+");
System.out.println("| 1. Nhap danh sach nhan vien tu ban phim |");
System.out.println("| 2. Xuat danh sach nhan vien tu ban phim |");
System.out.println("| 3. Tim va hien thi nhan vien theo ma nhap tu ban phim |");
System.out.println("| 4. Xoa nhan vien theo ma nhap tu ban phim |");
System.out.println("| 5. Cap nhan thong tin NV theo ma nhap tu ban phim |");
System.out.println("| 6. Tim cac NV theo khoang luong nhap tu ban phim |");
System.out.println("| 7. Sap xep nhan vien theo ho va ten |");
System.out.println("| 8. Sap xep nhan vien theo thu nhap |");
System.out.println("| 9. Xuat 5 nhan vien co thu nhap cao nhat |");
System.out.println("| 0. Thoat chuong trinh |");
System.out.println("+-------------------------------------------------------+");
System.out.println("Vui long chon chuc nang: ");
int chucNang = Integer.parseInt(sc.nextLine());
switch (chucNang) {
case 1:
nhapDSNV(arr);
break;
case 2:
xuatDSNV(arr);
break;
case 3:
hienThiNV(arr);
break;
case 4:
xoaNV(arr);
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
case 0:
System.exit(0);
default:
System.out.println("Ban nhap sai lua chon. Vui long nhap lai!");
}
} while (true);
}
//1. Nhap danh sach nhan vien tu ban phim
public static void nhapDSNV(ArrayList<NhanVien> arr) {
//NhanVien nv;
Scanner sc = new Scanner(System.in);
System.out.println("Chon loai nhan vien ban muon nhap thong tin (1. NV Van phong, 2. NV Tiep thi, 3. Truong phong): ");
int loaiNV = Integer.parseInt(sc.nextLine());
if (loaiNV == 1) {
NVVanPhong nv1 = new NVVanPhong();
System.out.println("Nhap Ma NV: ");
nv1.setMaNV(sc.nextLine());
System.out.println("Nhap Ten NV: ");
nv1.setTenNV(sc.nextLine());
System.out.println("Nhap Luong: ");
nv1.setLuongNV(sc.nextDouble());
arr.add(nv1);
} else if (loaiNV == 2) {
NVTiepThi nv2 = new NVTiepThi();
System.out.println("Nhap Ma NV: ");
nv2.setMaNV(sc.nextLine());
System.out.println("Nhap Ten NV: ");
nv2.setTenNV(sc.nextLine());
System.out.println("Nhap Luong NV: ");
nv2.setLuongNV(sc.nextDouble());
System.out.println("Nhap Ty Le Hoa Hong: ");
nv2.setTyLeHoaHong(sc.nextDouble());
System.out.println("Nhap DS ban ra: ");
nv2.setDoanhSo(sc.nextDouble());
arr.add(nv2);
} else if (loaiNV == 3) {
NVTruongPhong nv3 = new NVTruongPhong();
System.out.println("Nhap Ma NV: ");
nv3.setMaNV(sc.nextLine());
System.out.println("Nhap Ten NV: ");
nv3.setTenNV(sc.nextLine());
System.out.println("Nhap Luong NV: ");
nv3.setLuongNV(sc.nextDouble());
System.out.println("Nhap Luong Trach Nhiem: ");
nv3.setLuongTrachNhiem(sc.nextDouble());
arr.add(nv3);
} else {
System.out.println("Ban da nhap sai lua chon!");
}
}
//2. Xuat danh sach nhan vien tu ban phim
public static void xuatDSNV(ArrayList<NhanVien> arr) {
for (NhanVien nv : arr) {
System.out.println("NV " + (arr.indexOf(nv) + 1));
nv.xuatThongTin();
}
}
//3. Tim va hien thi nhan vien theo ma nhap tu ban phim
public static void hienThiNV(ArrayList<NhanVien> arr) {
Scanner sc = new Scanner(System.in);
System.out.println("Nhap Ma Nhan vien muon tim: ");
String nhapMNV = sc.nextLine();
int check = 0;
System.out.println("Thong tin Nhan vien can tim: ");
for (NhanVien sv : arr) {
if (sv.getMaNV().equals(nhapMNV)) {
sv.xuatThongTin();
check++;
}
}
if (check == 0) {
System.out.println("Ma nhan vien nhap vao khong ton tai!");
}
}
//4. Xoa nhan vien theo ma nhap tu ban phim
public static void xoaNV(ArrayList<NhanVien> arr) {
Scanner sc = new Scanner(System.in);
System.out.println("Nhap Ma Nhan vien can xoa: ");
String nhapMNV = sc.nextLine();
int check = 0;
for (NhanVien sv : arr) {
if (sv.getMaNV().equals(nhapMNV)) {
arr.remove(sv);
System.out.println("Da xoa nhan vien " + nhapMNV);
check++;
}
}
if (check == 0) {
System.out.println("Ma NV nhap vao khong ton tai!");
}
}
//5. Cap nhat thong tin NV theo ma nhap tu ban phim
public static void capNhatNV(ArrayList<NhanVien> arr) {
Scanner sc = new Scanner(System.in);
System.out.println("Nhap Ma Nhan vien can cap nhat: ");
String nhapMNV = sc.nextLine();
int check = 0;
for (NhanVien sv : arr) {
if(sv.getMaNV().equals(nhapMNV)){
}
}
}
//6. Tim cac NV theo khoang luong nhap tu ban phim
//7. Sap xep nhan vien theo ho va ten
//8. Sap xep nhan vien theo thu nhap
//9. Xuat 5 nhan vien co thu nhap cao nhat
}
Mọi người giúp mình ý tưởng nhé! Cảm ơn mọi người!
Bài liên quan
Tuy là các loại
NhanVien
khác nhau nhưng cũng đều là kế thừa từ ClassNhanVien
thôi nên vẫn có mấy đặc điểm chung: Mã, Tên, Lương ==> Vậy nên trong ClassNhanVien
thì thêm các setter để cập nhật thôi Còn từng loại nhân viên có thêm gì khác thì lại viết setter riêng biệt cho các Class đó thôiP/s: Lần sau bạn đăng code lên nhớ Markdown và format lại cho mọi người dễ nhìn nhé
Cảm ơn bạn. Nhưng vấn đề là tôi khai báo 1 ArrayList và tất cả các nhân viên tôi đều nhét vào đó. Giờ khi tôi tìm ra 1 mã nhân viên nhưng làm sao để biết được là Nhân viên đó là Tiếp thị, Văn phòng, hay Trưởng phòng để dùng Setter.
Bạn có thể lấy tên của Class đó nhê
https://stackoverflow.com/questions/6271417/java-get-the-current-class-name
Mình sử dụng nhưng nó cũng ko check được bạn ạ!
Thanks bạn. Mình làm được rồi. khi gọi getClass().getName thì nó lấy cả tên package.
Ok Mình muốn đưa ra một vài nhận xét, nhỡ đâu lại giúp bạn tăng tiểm
HashMap
để chứa các nhân viên nhé, dùng ID làkey
, còn NhanVien làvaule
nhévoid update()
trong từng Class nhé khi mà lấy đượcNhanVien
tương ứng thì chỉ cần gọivoid update()
của nó thôi. Đỡ phảigetName()
.if else
như vậy mà hãy dùngswitch case
nhaMình đang tự học dựa vào 1 số bài tập yêu cầu thôi bạn. Bài yêu cầu dùng ArrayList, còn HashMap thì mình chưa tìm hiểu. Cảm ơn bạn rất nhiều!!!
Sẵn đây cho mình hỏi. Mình dùng ArrayList như vậy có đúng hay không và nếu mình duyệt qua từng phần tử của ArrayList thì làm sao để mình lấy được các biến của từng phần tử tương ứng.