Tải bản đầy đủ - 0 (trang)
2 CHƯƠNG TRÌNH THÊM, SỬA, XÓA DANH SÁCH ĐẦU VÀO

2 CHƯƠNG TRÌNH THÊM, SỬA, XÓA DANH SÁCH ĐẦU VÀO

Tải bản đầy đủ - 0trang

B2.2.1: Chuyển mã giáo viên, tên giáo viên thành chuỗi thường và kiểm tra với từ khóa.

B2.2.2: Nếu đúng mã giáo viên hoặc tên giáo viên đúng, lưu vị trí của bộ dữ liệu vào kq.

B2.2: Hiển thị dữ liệu ra bảng.

Cài đặt:

public void jbSearch_ActionPerformed(ActionEvent evt) {

Object key;

int STT = 1;

key = jtfSearch.getText();

key = key.toString().toLowerCase();

kq = new ArrayList();

if (isRoom == true) {

// Tìm trong danh sách phòng

for (int i = 0; i < soP; i++) {

if (dsP.get(i)[0].toString().toLowerCase().equals(key)) {

kq.add(i);

}

}

ViewTabel(headerP, dsP);

} else {

// Tìm trong danh sách giáo viên

for (int i = 0; i < soGV; i++) {

if (dsGV.get(i)[0].toString().toLowerCase().equals(key)

|| dsGV.get(i)[1].toString().toLowerCase().equals(key))

kq.add(i);

ViewTabel(headerGV, dsGV);

}

}



}



2.2.3 Sửa dữ liệu

Sau khi tìm kiếm trong danh sách, ta có thể sửa phần tử được chọn đang hiển thị trong bảng.

Thuật tốn:

B1: Tìm kiếm trong danh sách.

B2: Lấy vị trí hàng trong bảng được chọn (hàng được sửa đổi).

B3: Đưa xác nhận muốn sửa dữ liệu hay không.

B5: Kiểm tra số cột có dữ liệu đúng trong hàng.

B6: Nếu tất cả các cột đều đúng dữ liệu thì:

B6.1: Tìm vị trí tương ứng của bộ dữ liệu trong file và trong danh sách lưu từ danh sách ghi vị

trí kq thơng qua vị trí hàng trong bảng được chọn.

B6.2: Cập nhật dữ liệu.

Cài đặt:

public void jbEdit_ActionPerformed(ActionEvent evt) {

WorkbookSettings ws;

Workbook wb;

WritableWorkbook wwbCopy;



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 31



Báo cáo thực hành lập trình mạng



2014



WritableSheet wsPhong, wsGiaoVien;

int rowSelect, col;

rowSelect = jtData.getSelectedRow();

int dialogResult = JOptionPane.showConfirmDialog(this,

"Bạn có muốn sửa dòng này?", "Cảnh báo",

JOptionPane.YES_NO_OPTION);

if (dialogResult == JOptionPane.YES_NO_OPTION) {

// Chuẩn bị cho sửa đổi file

ws = new WorkbookSettings();

ws.setEncoding("CP1252");

try {

if (isRoom == true) {

col = KiemTra_BoDuLieu_Phong(rowSelect);

if (col != headerP.length - 1) {

JOptionPane.showMessageDialog(null,

"Dữ liệu sửa đổi bị lỗi!");

return;

} else {

wb = Workbook.getWorkbook(file, ws);

wwbCopy = Workbook.createWorkbook(file, wb);

wsPhong = wwbCopy.getSheet(0);

for (int i = 1; i < headerP.length; i++) {

Label label = new Label(i - 1,

kq.get(rowSelect) + 1, jtData.getValueAt(

rowSelect, i).toString());

wsPhong.addCell(label);

dsP.get(kq.get(rowSelect))[i - 1] = jtData

.getValueAt(rowSelect, i).toString();

}

wwbCopy.write();



wwbCopy.close();



wb.close();



JOptionPane.showMessageDialog(null

,"Đã sửa thành công!");

jbReset.doClick();

}

} else {

col = KiemTra_BoDuLieu_GiaoVien(rowSelect);

if (col != headerGV.length - 1) {

JOptionPane.showMessageDialog(null,

"Dữ liệu sửa đổi bị lỗi!");

return;

} else {

wb = Workbook.getWorkbook(file, ws);

wwbCopy = Workbook.createWorkbook(file, wb);

wsGiaoVien = wwbCopy.getSheet(1);

for (int i = 1; i < headerGV.length; i++) {

Label label = new Label(i - 1,

kq.get(rowSelect) + 1, jtData.getValueAt(

rowSelect, i).toString());

wsGiaoVien.addCell(label);

dsGV.get(kq.get(rowSelect))[i - 1] =

jtData.getValueAt(rowSelect, i).toString();

}

wwbCopy.write(); wwbCopy.close(); wb.close();



Page 32



JOptionPane.showMessageDialog(null,

"Đã sửa thành công!");



}

}

} catch (Exception e) {

JOptionPane.showMessageDialog(null, "Lỗi!");

}

}



}



2.2.4 Xóa dữ liệu

Sau khi tìm kiếm trong danh sách, ta có thể xóa phần tử được chọn đang hiển thị trong bảng.

Thuật tốn:

B1: Tìm kiếm trong danh sách.

B2: Lấy vị trí hàng trong bảng được chọn (dữ liệu cần xóa).

B3: Đưa xác nhận muốn xóa dữ liệu hay khơng.

B4: Tìm vị trí tương ứng của bộ dữ liệu trong file và trong danh sách lưu từ danh sách ghi vị trí kq

thơng qua vị trí hàng trong bảng được chọn.

B5: Xóa dữ liệu.

Cài đặt:

public void jbDel_ActionPerformed(ActionEvent evt) {

WorkbookSettings ws;

Workbook wb;

WritableWorkbook wwbCopy;

WritableSheet wsPhong, wsGiaoVien;

int STT = 1;

int rowSelect;

rowSelect = jtData.getSelectedRow();

int dialogResult = JOptionPane.showConfirmDialog(this,

"Bạn có muốn xóa dòng này?", "Cảnh báo",

JOptionPane.YES_NO_OPTION);

if (dialogResult == JOptionPane.YES_NO_OPTION) {

// Chuẩn bị cho sửa đổi file

ws = new WorkbookSettings();

ws.setEncoding("CP1252");

try {

wb = Workbook.getWorkbook(file, ws);

wwbCopy = Workbook.createWorkbook(file, wb);

wsPhong = wwbCopy.getSheet(0);

wsGiaoVien = wwbCopy.getSheet(1);

if (isRoom == true) {

// Xóa hàng trong file

wsPhong.removeRow(kq.get(rowSelect) + 1);

// Xóa hàng trong danh sách lưu

dsP.remove(kq.get(rowSelect));

// Xóa hàng trong bảng hiển thị

kq.remove(rowSelect);

ViewTabel(headerP, dsP);



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 33



Báo cáo thực hành lập trình mạng



2014



// Cập nhật lại số lượng

soP--;

// Ghi vào file và đóng

try {

wwbCopy.write();

wwbCopy.close();

wb.close();

} catch (IOException e) {

} catch (WriteException e) {}

} else {

// Xóa hàng trong file

wsGiaoVien.removeRow(kq.get(rowSelect) + 1);

// Xóa hàng trong danh sách lưu

dsGV.remove(kq.get(rowSelect));

// Xóa hàng trong bảng hiển thị

kq.remove(rowSelect);

ViewTabel(headerGV, dsGV);

// Cập nhật lại số lượng

soGV--;

// Ghi vào file và đóng

try {

wwbCopy.write();

wwbCopy.close();

wb.close();

} catch (IOException e) {

} catch (WriteException e) {}



}

} catch (BiffException | IOException e1) {}



}

}



2.2.5 Thêm dữ liệu

Dữ liệu được thêm trực tiếp vào bảng

Thuật tốn:

B1: Kiểm tra tính đúng đắn của các dữ liệu nhập vào.

B2: Mở file để ghi.

B2: Duyệt tất cả các hàng trong bảng.

B2.1: Kiểm tra số cột có dữ liệu đúng trong hàng.

B2.2: Nếu tất cả các cột đều đúng:

B2.2.1: Ghi dữ liệu của hàng đó vào hàng cuối cùng của file và danh sách lưu.

B2.2.2: Tăng biến số lượng lên 1.

Cài đặt:

public void jbCreate_ActionPerformed(ActionEvent evt) {

WorkbookSettings ws;

Workbook wb;

WritableWorkbook wwbCopy;

WritableSheet wsPhong, wsGiaoVien;

int i, j, row, col;

int dialogResult = JOptionPane.showConfirmDialog(this,

"Bạn có muốn thêm dữ liệu vào danh sách?", "Xác nhận",

JOptionPane.YES_NO_OPTION);



Page 34



if (dialogResult == JOptionPane.YES_NO_OPTION) {

ws = new WorkbookSettings();

ws.setEncoding("CP1252");

try {

if (isRoom == true) {

if (!KiemTra_DuLieuVao_Phong()) {

JOptionPane.showMessageDialog(null,

"Dữ liệu nhập vào lỗi!");

} else {

wb = Workbook.getWorkbook(file, ws);

wwbCopy = Workbook.createWorkbook(file, wb);

wsPhong = wwbCopy.getSheet(0);

for (i = 0; i < jtData.getRowCount(); i++) {

row = wsPhong.getRows();

col = KiemTra_BoDuLieu_Phong(i);

if (col == headerP.length - 1) {

dsP.add(new Object[headerP.length - 1]);

soP++;

for (j = 1; j < headerP.length; j++) {

Label label = new Label(j - 1, row, jtData.getValueAt(i,

j).toString());

wsPhong.addCell(label);

dsP.get(soP-1)[j-1] = jtData.getValueAt(i,j).toString();

}

}

}

wwbCopy.write();

wwbCopy.close(); wb.close();

JOptionPane.showMessageDialog(null,

"Đã thêm thành công!");

}

} else {

if (!KiemTra_DuLieuVao_GiaoVien()) {

JOptionPane.showMessageDialog(null,

"Dữ liệu nhập vào lỗi!");

} else {

wb = Workbook.getWorkbook(file, ws);

wwbCopy = Workbook.createWorkbook(file, wb);

wsGiaoVien = wwbCopy.getSheet(1);

for (i = 0; i < jtData.getRowCount(); i++) {

row = wsGiaoVien.getRows();

col = KiemTra_BoDuLieu_GiaoVien(i);

if (col == headerGV.length - 1) {

dsGV.add(new Object[headerGV.length - 1]);

soGV++;

for (j = 1; j < headerGV.length; j++) {

Label label = new Label(j - 1, row, jtData

.getValueAt(i, j).toString());

wsGiaoVien.addCell(label);

dsGV.get(soGV - 1)[j - 1] = jtData

.getValueAt(i, j).toString();

}

}



}

wwbCopy.write();

wwbCopy.close();

JOptionPane.showMessageDialog(null,

"Đã thêm thành công!");

}



}



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 35



wb.close();



Báo cáo thực hành lập trình mạng



2014



} catch (WriteException e) {

JOptionPane.showMessageDialog(null, "Lỗi!");

} catch (BiffException e) {

JOptionPane.showMessageDialog(null, "Lỗi!");

} catch (IOException e) {

JOptionPane.showMessageDialog(null, "Lỗi!");

}

}



}



2.2.6 Kiểm tra dữ liệu

Dữ liệu nhập vào bảng để được thêm vào file hoặc các bộ dữ liệu được sửa đổi để cập nhật. Tất

cả đều cần phải kiểm tra tính đúng đắn của dữ liệu trước khi lưu.

Thuật toán kiểm tra dữ liệu trong bảng:

B1: row = 0. Duyệt từng hàng trong bảng.

B1.1: Với mỗi hàng, kiểm tra có bao nhiêu cột đúng dữ liệu.

B1.2: Nếu tất cả số cột đều đúng dữ liệu thì row++;

B1.3: Ngược lại. Nếu số cột đúng dữ liệu > 0 thì trả về false.

B2: Nếu row == 0: trả về false;

B3: Ngược lại, trả về true;

Cài đặt:

public boolean KiemTra_DuLieuVao_Phong() {

int row = 0, col;



}



for (int i = 0; i < jtData.getRowCount(); i++) {

col = KiemTra_BoDuLieu_Phong(i);

if (col == headerP.length - 1) {

row++;

} else if (col > 0) {

return false;

}

}

if (row == 0)

return false;

return true;



public boolean KiemTra_DuLieuVao_GiaoVien() {

int row = 0, col;

for (int i = 0; i < jtData.getRowCount(); i++) {

col = KiemTra_BoDuLieu_GiaoVien(i);

if (col == headerGV.length - 1) {

row++;

} else if (col > 0) {

return false;

}

}

if (row == 0)

return false;

return true;

}



Page 36



// Kiểm tra dữ liệu thêm vào có đầy đủ ko?

public int KiemTra_BoDuLieu_GiaoVien(int row) {

int col = 0;

String DATE_FORMAT = "dd/MM/yyyy";

for (int i = 1; i < headerGV.length; i++) {

if (i == 3) { // Trường ngày sinh

try {

DateFormat df = new SimpleDateFormat(DATE_FORMAT);

df.setLenient(false);

df.parse(jtData.getValueAt(row, i).toString());

col++;

} catch (Exception e) {

}

} else {

try {

if (!jtData.getValueAt(row, i).toString().equals(""))

col++;

} catch (Exception e) {}

}

}

return col;

}

public int KiemTra_BoDuLieu_Phong(int row) {

int col = 0;

for (int i = 1; i < headerP.length; ++i) {

try {

if (!jtData.getValueAt(row, i).toString().equals(""))

col++;

} catch (Exception e) {}

}

return col;

}



2.3 TRUYỀN NHẬN DỮ LIỆU GIỮA CLIENT – SERVER

2.3.1 Bên Client

2.3.1.1 Truyền dữ liệu ban đầu

qua Server

Thuật toán:

B1: Truyền tên file qua Server. Chờ nhận phản hồi.

B2: Truyền kích thước file qua Server. Chờ nhận phản hồi.

B4: Mở luồng đọc file.

B3: Đọc file vào mảng 1024 byte cho đến khi hết:

B3.1: Gửi mảng cho Server. Chờ phản hồi.

B4: Đóng luồng đọc file.

B4: Gửi số giám thị coi thi qua Server. Chờ nhận phản hồi.

B5: Gửi số lần đã phân công qua Server. Chờ nhận phản hồi.

Cài đặt:

public void TransData() throws IOException {

long sizeFile;

fis = new FileInputStream(file);



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 37



Báo cáo thực hành lập trình mạng



2014



// Gửi tên file qua server

dos.writeUTF(file.getName());

dis.read();

Print_Debug("Tên file: " + file.getName());

// Gửi kích thước file

sizeFile = file.length();

dos.writeLong(sizeFile);

dis.read();

Print_Debug("Kích thước file: " + sizeFile);

int x;

x = fis.read(part);

// Gửi dữ liệu

while (x > -1) {

dos.write(part);

dis.read();

x = fis.read(part);

}

fis.close();

// Gửi số giám thị coi thi

dos.writeInt(soGiamThi_CoiThi);

dis.read();

Print_Debug("Gửi số lần đã phân cơng");

GuiSoLan();

// Hồn thành việc gửi

Print_Debug("Đã hồn thành việc gửi");

Print_Debug("----------------------------");

}

public void GuiSoLan() throws IOException {

RandomAccessFile rf;

try {



rf = new RandomAccessFile("số lần đã phân công.txt", "r");

soLanPhanCong = rf.readInt();

} catch (FileNotFoundException e) {

soLanPhanCong = 0;

} catch (IOException e) {

soLanPhanCong = 0;

}



}



Print_Debug("Số lần phân công: " + soLanPhanCong);

dos.writeInt(soLanPhanCong);

dis.read();



2.3.1.2 Nhận dữ liệu từ Server

Thuật toán:

B1: Nhận tên file. Gửi xác nhận.

B2: Tạo file với tên file đã nhận. Mở luồng ghi.



Page 38



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

2 CHƯƠNG TRÌNH THÊM, SỬA, XÓA DANH SÁCH ĐẦU VÀO

Tải bản đầy đủ ngay(0 tr)

×