MỤC LỤC
MỤC LỤC HÌNH ẢNH 4
MỤC LỤC CÁC BẢNG 5
LỜI MỞ ĐẦU 6
CHƯƠNG I : TỔNG QUAN VỀ ĐỀ TÀI 7
1.1. GIỚI THIỆU CHUNG 7
1.2. HƯỚNG NGHIÊN CỨU 7
1.2.1. Lý Do Chọn Đề Tài 7
1.2.2. Mục Đích Đề Tài 7
1.3. TỔNG KẾT CHƯƠNG I 7
CHƯƠNG II: CƠ SỞ LÝ THUYẾT 8
2.1. CÁC NỀN TẢNG 8
2.1.1. Windows Mobile 8
2.1.2. iPhone 8
2.1.3 Android 8
2.1.4. Blackberry 8
2.2. GIỚI THIỆU VỀ J2ME 9
2.2.1. Lịch Sử 9
2.2.2. Lý do chọn J2ME 9
2.2.3. Kiến trúc của J2ME 9
2.2.4. Các Thành Phần Trong J2ME 10
2.2.4.1. Định Nghĩa Về Configuration 10
2.2.4.2. Định Nghĩa Về Profile 11
2.3. LẬP TRÌNH BLACKBERRY 12
2.2.1. Giới Thiệu Chung 12
2.2.2. Môi Trường Lập Trình Trên Blackberry 12
2.2.2.1. Blackberry JDE 12
2.2.2.2. Eclipse Plug-in 13
2.2.3. Lập Trình Ứng Dụng Trên BlackBerry 13
2.2.3.1. Làm Việc Với Các UIComponent 13
2.2.3.2. Làm Việc Với Data Trên BlackBerry 15
2.2.3.3. Làm việc với Ksoap 17
2.2.4. Tạo ứng dụng cho BlackBerry 17
2.2.4.1. Bắt đầu một ứng dụng 17
2.2.4.2. Tạo một ứng dụng 17
2.2.4.3. Gọi thread event 18
2.2.4.4. Processing Event 18
2.2.4.5 Thoát ứng dụng 18
2.2.4.6. Tạo ứng dụng mẫu 18
2.4. TỔNG KẾT CHƯƠNG II 33
CHƯƠNG III: ỨNG DỤNG MÔ PHỎNG 34
3.1. GIỚI THIỆU VỀ ỨNG DỤNG BPROJECT MANAGE 34
3.2. CÁC CHỨC NĂNG CHÍNH VÀ MÃ LỆNH 34
3.2.1. Quản lý công việc 34
3.2.2. Quản lý các vấn đề trong quá trình làm dự án 53
3.2.3. Quản lý thành viên 55
3.2.4. Quản lý tiến độ dự án 57
3.2.5. Quản lý nhiều dự án 66
3.3. CÁC LỚP TƯƠNG TÁC VỚI WEBSERVICE 66
3.3.1. Lớp quản lý dự án 66
3.3.2. Lớp quản lý công việc 72
3.3.3. Lớp quản lý những vấn đề trong thời gian làm dự án 81
3.3.4. Lớp quản lý thành viên 88
3.4. TỔNG KẾT CHƯƠNG III 95
TÀI LIỆU THAM KHẢO 96
MỤC LỤC HÌNH ẢNH
Figure 1 – Lịch sử J2ME 10
Figure 2 - Kiến trúc J2ME 10
Figure 3 - CDC và CLDC 12
Figure 4 - So Sánh CDC và CLDC 12
Figure 5 - Kiến trúc profile 13
Figure 6 - Ứng dụng mẫu 19
Figure 7 - Nếu sử dụng Eclipse plug-in 21
Figure 8 - Nếu sử dụng BlackBerry JDE 21
Figure 9 – Sau khi thêm một đối tương Bitmap vào màn hình 22
Figure 10 – Màn hình ứng dụng sau khi thêm các thành phần giao diện 25
Figure 11 – Màn hình ứng dụng khi đã sắp xếp các nút 28
Figure 12 – Màn hình mô tả sự kiện nhấn nút Clear 29
Figure 13 – Màn hình khi chưa nhấn nút Clear 30
Figure 14 – Màn hình sau khi nhấn nút Clear 30
Figure 15 – Màn hình lúc nhấn nút Login mà trường Username và Password còn trống 32
Figure 16 – Màn hình lúc nhấn nút Login mà trường Username và Password đã có dữ liệu 33
Figure 17 – Màn hình quản lý công việc 36
Figure 18 – Màn hình quản lý các vấn đề của dự án trong quá trình làm 56
Figure 19 – Màn hình biểu diễn danh sách thành viên 58
Figure 20 – Màn hình biểu diễn tiến độ của dự án 59
96 trang |
Chia sẻ: lethao | Lượt xem: 1940 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đề tài Quản lý dự án trên blackbery, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
g chờ hay thất bại để hiển thị ảnh để biểu diễn trạng thái đó.
Figure 17 – Màn hình quản lý công việc
ØLớp thực hiện chức năng thêm mới một công việc:
public class AddNewTask extends MainScreen implements FieldChangeListener,
FocusChangeListener {
private EditField taskName;
private EditField description;
private EditField comment;
private ObjectChoiceField status;
private ObjectChoiceField memberChoiceField;
private ObjectChoiceField priority;
private DateField dateBegin;
private DateField dateEnd;
private ButtonField back;
private ButtonField add;
private ButtonField reset;
private String[] priority_ = new String[] { "High", "Normal", "Low" };
private String[] status_ = new String[] { "Inprogress", "Finish",
"Waiting", "Fail" };
private TaskManagement tm;
private Member[] listMembers;
private String[] listMemberName;
private MemberManagement mm;
private Vector vt = new Vector();
private boolean checked = false;
public AddNewTask() {
setTitle("New task of project :" + ListProjectScreen.project_name);
boolean check_connect = false;
for (int i = 0; i < CustomDialogLogin.RECONNECT_TIME_LIST;
i++)
try {
mm = new MemberManagement();
vt = mm.ListMember(ListProjectScreen.project_id, "");
check_connect = true;
break;
} catch (Exception e) {
System.out.println(e.toString());
}
if (!check_connect) {
throw new RuntimeException(
"Web Service Connection Error! Can not load Add Task
Screen.");
}
listMembers = new Member[vt.size()];
listMemberName = new String[vt.size() + 1];
listMemberName[0] = "Choice Member";
for (int i = 0; i < vt.size(); i++) {
listMembers[i] = (Member) vt.elementAt(i);
listMemberName[i + 1] = listMembers[i].getMember_name();
}
taskName = new EditField("Task: ", "", 30,EditField.FILTER_DEFAULT);
priority = new ObjectChoiceField("Priority :", priority_);
dateBegin = new DateField("Date Begin: ",System.currentTimeMillis(),
DateField.DATE);
dateEnd = new DateField("Date End: ", System.currentTimeMillis(),
DateField.DATE);
status = new ObjectChoiceField("Status: ", status_);
memberChoiceField = new ObjectChoiceField("Member : ", listMemberName);
description = new EditField("Description: ", "", 10000,
EditField.FILTER_DEFAULT);
comment = new EditField("Comment: ", "", 10000,
EditField.FILTER_DEFAULT);
VerticalFieldManager fieldManager = new VerticalFieldManager
(FIELD_VCENTER);
taskName.setPadding(3, 0, 3, 0);
priority.setPadding(0, 0, 3, 0);
dateBegin.setPadding(0, 0, 3, 0);
dateEnd.setPadding(0, 0, 3, 0);
status.setPadding(0, 0, 3, 0);
memberChoiceField.setPadding(0, 0, 3, 0);
description.setPadding(0, 0, 3, 0);
comment.setPadding(0, 0, 0, 0);
fieldManager.add(taskName);
fieldManager.add(priority);
fieldManager.add(dateBegin);
fieldManager.add(dateEnd);
fieldManager.add(status);
fieldManager.add(memberChoiceField);
fieldManager.add(description);
fieldManager.add(comment);
fieldManager.setPadding(0, 10, 0, 10);
add(fieldManager);
add(new SeparatorField());
HorizontalFieldManager buttonManager = new HorizontalFieldManager(
FIELD_HCENTER);
back = new ButtonField("Back", ButtonField.CONSUME_CLICK);
add = new ButtonField("Add", ButtonField.CONSUME_CLICK);
reset = new ButtonField("Reset", ButtonField.CONSUME_CLICK);
buttonManager.add(back);
buttonManager.add(add);
buttonManager.add(reset);
add(buttonManager);
dateBegin.setFocusListener(this);
dateEnd.setFocusListener(this);
taskName.setFocusListener(this);
priority.setFocusListener(this);
status.setFocusListener(this);
memberChoiceField.setFocusListener(this);
description.setFocusListener(this);
comment.setFocusListener(this);
dateBegin.setChangeListener(this);
dateEnd.setChangeListener(this);
back.setChangeListener(this);
reset.setChangeListener(this);
add.setChangeListener(this);
}
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
menu.add(new MenuItem("Back", 10, 10) {
public void run() {
back();
}
});
menu.add(new MenuItem("Add", 10, 10) {
public void run() {
add();
}
});
menu.add(new MenuItem("Reset", 10, 10) {
public void run() {
reset();
}
});
}
private void back() {
boolean check = false;
String message = "";
for (int i = 0; i < CustomDialogLogin.RECONNECT_TIME_LIST; i++)
try {
ListTaskScreen listTaskScreen = new ListTaskScreen();
UiApplication.getUiApplication().popScreen(getScreen());
UiApplication.getUiApplication().pushScreen(listTaskScreen);
check = true;
break;
} catch (RuntimeException e) {
System.out.println(e.toString());
message = e.getMessage();
}
if (!check) {
Dialog.inform(message);
}
}
protected boolean keyChar(char character, int status, int time) {
if (Characters.ESCAPE == character) {
back();
return true;
}
return super.keyChar(character, status, time);
}
protected void add() {
if (taskName.getText().equals("")|| description.getText().equals("")
|| comment.getText().equals("")) {
Dialog.inform("Please fill all required fields !");
} else {
int confirm = Dialog.ask(Dialog.D_YES_NO,
"Do you want to save the project issue?");
if (confirm == Dialog.YES) {
int duration = ProccessMethods.dateSubtract(dateEnd, dateBegin);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String datebeg = format.formatLocal(dateBegin.getDate());
String dateend = format.formatLocal(dateEnd.getDate());
int index = memberChoiceField.getSelectedIndex();
int member_id = -1;
if (index != -1 && index != 0)
member_id = listMembers[index - 1].getMember_id();
boolean check_connect = false;
String message = "";
for (int i = 0; i < CustomDialogLogin.RECONNECT_TIME_SIMPLE; i++)
try {
tm = new TaskManagement();
boolean addCheck = tm.AddTask(taskName.getText(),
description.getText(), duration, datebeg.toString(),
dateend.toString(),comment.getText(), ListProjectScreen.project_id, member_id, priority.getSelectedIndex() + 1, status.getSelectedIndex() + 1);
if (addCheck) {
Dialog.inform("save data success.!");
boolean checkLoadListTaskScr = false;
String message1 = "";
for (int j = 0; j <
CustomDialogLogin.RECONNECT_TIME_LIST; j++)
try {
ListTaskScreen listTaskScreen = new ListTaskScreen(); UiApplication.getUiApplication().popScreen(getScreen()); UiApplication.getUiApplication().pushScreen(listTaskScreen); checkLoadListTaskScr = true; break;
} catch (RuntimeException e) { System.out.println(e.toString());
message1 = e.getMessage();
}
if (!checkLoadListTaskScr) {
Dialog.inform(message1);
}
} else
Dialog.inform("Error");
check_connect = true;
break;
} catch (Exception e) {
System.out.println(e.toString());
message = e.getMessage();
}
if (!check_connect) {
Dialog.inform(message);
}
}
}
}
protected void reset() {
taskName.setText("");
description.setText("");
comment.setText("");
dateBegin.setDate(System.currentTimeMillis());
dateEnd.setDate(System.currentTimeMillis());
status.setSelectedIndex(0);
priority.setSelectedIndex(0);
memberChoiceField.setSelectedIndex(0);
}
public void focusChanged(Field field, int context) {
if ((field != dateBegin) && (field != dateEnd) && !checked)
if (ProccessMethods.dateCompare(dateBegin, dateEnd) == 1) {
Dialog dialog = new Dialog(Dialog.D_OK,
"Start Date can not be larger End Date", 0, null,0);
dialog.show();
checked = true;
dateBegin.setFocus();
}
if ((field == dateBegin) || (field == dateEnd))
checked = false;
}
public void fieldChanged(Field field, int context) {
if (field == back) {
back();
} else if (field == reset) {
reset();
} else if (field == add) {
add();
} else if (field == dateBegin) {
if (ProccessMethods.dateCompare(dateBegin,
ListProjectScreen.startDateProject) == -1) {
SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
String datebeg = format.formatLocal(ListProjectScreen.startDateProject .getDate());
Dialog.inform("Start Date can not be smaller Start Date of project (" + datebeg + ")"); dateBegin.setDate(ListProjectScreen.startDateProject.getDate()); } else if (ProccessMethods.dateCompare(dateBegin,
ListProjectScreen.endDateProject) == 1) {
SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
String dateend = format.
formatLocal(ListProjectScreen.endDateProject.getDate());
Dialog.inform("Start Date can not be larger End Date of project (" + dateend + ")");
dateBegin.setDate(ListProjectScreen.startDateProject.getDate());
}
} else if (field == dateEnd) {
if (ProccessMethods.dateCompare(dateEnd,
ListProjectScreen.endDateProject) == 1) {
SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy"); String dateend = format
.formatLocal(ListProjectScreen.endDateProject.getDate());
Dialog.inform("End Date can not be larger End Date of project ("
+ dateend + ")");
dateEnd.setDate(ListProjectScreen.endDateProject.getDate());
} else if (ProccessMethods.dateCompare(dateEnd,
ListProjectScreen.startDateProject) == -1) {
SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
String datebeg = format.formatLocal(ListProjectScreen.startDateProject .getDate()); Dialog.inform("End Date can not be smaller Start Date of project (" + datebeg + ")");
dateEnd.setDate(ListProjectScreen.endDateProject.getDate());
}
}
}
}
ØPhương thức thực hiện chức năng xóa một công việc:
protected void Delete() {
if (task_id != -1) {
int confirm = Dialog.ask(Dialog.D_YES_NO, "Are you sure?");
if (confirm == Dialog.YES) {
boolean check_connect = false;
String message = "";
for (int i = 0; i < CustomDialogLogin.RECONNECT_TIME_SIMPLE; i++)
try {
tm = new TaskManagement();
boolean check = tm.DelTask(task_id);
if (check)
Dialog.inform("Successfully Deleted");
else {
Dialog.inform("Error");
}
check_connect = true;
break;
} catch (Exception e) {
System.out.println(e.toString());
message = e.getMessage();
}
if (!check_connect) {
Dialog.inform(message);
} else {
task_id = -1;
boolean check = false;
message = "";
for (int i = 0; i < CustomDialogLogin.RECONNECT_TIME_LIST; i++)
try {
ListTaskScreen listTaskScreen = new ListTaskScreen(); UiApplication.getUiApplication().popScreen(getScreen()); UiApplication.getUiApplication().pushScreen(listTaskScreen);
check = true;
break;
} catch (RuntimeException e) {
System.out.println(e.toString());
message = e.getMessage();
}
if (!check) {
Dialog.inform(message);
}
}
}
} else {
Dialog.inform("Please choice task");
}
}
ØLớp thực hiện chức năng lấy thông tin và cập nhật thông tin của một công việc:
public class TaskInfoScreen extends MainScreen implements FieldChangeListener,
FocusChangeListener {
private EditField taskName;
private EditField duration;
private EditField description;
private EditField comment;
private ObjectChoiceField status;
private ObjectChoiceField memberChoiceField;
private ObjectChoiceField priority;
private DateField dateBegin;
private DateField dateEnd;
private ButtonField back;
private ButtonField update;
private ButtonField reset;
private String[] priority_ = new String[] { "High", "Normal", "Low" };
private String[] status_ = new String[] { "Inprogress", "Finish","Waiting", "Fail" };
private TaskManagement tm;
private Task tsk;
private Member[] listMembers;
private String[] listMemberName;
private int member_index = 0;
private MemberManagement mm;
private boolean changed = false;
private boolean clickBack = false;
private boolean checked = false;
private Vector vt = new Vector();
public TaskInfoScreen() {
setTitle("Task " + ListTaskScreen.task_name + " of "
+ ListProjectScreen.project_name);
tm = new TaskManagement();
tsk = tm.TaskInfo(ListTaskScreen.task_id);
boolean check_connect = false;
for (int i = 0; i < CustomDialogLogin.RECONNECT_TIME_LIST; i++)
try {
mm = new MemberManagement();
vt = mm.ListMember(ListProjectScreen.project_id, "");
check_connect = true;
break;
} catch (Exception e) {
System.out.println(e.toString());
}
if (!check_connect) {
throw new RuntimeException(
"Web Service Connection Error! Can not load Task Information Screen.");
}
listMembers = new Member[vt.size()];
listMemberName = new String[vt.size() + 1];
listMemberName[0] = "Choice Member";
for (int i = 0; i < vt.size(); i++) {
listMembers[i] = (Member) vt.elementAt(i);
listMemberName[i + 1] = listMembers[i].getMember_name();
if (listMembers[i].getMember_id() == tsk.getMember_id())
member_index = i + 1;
}
taskName = new EditField("Task: ", tsk.getTask_name(), 30,
EditField.FILTER_DEFAULT);
priority = new ObjectChoiceField("Priority :", priority_);
priority.setSelectedIndex(tsk.getPriority_id() - 1);
duration = new EditField("Duration: ", tsk.getDuration() + "", 10,
EditField.READONLY);
status = new ObjectChoiceField("Status: ", status_);
status.setSelectedIndex(tsk.getStatus_id() - 1);
description = new EditField("Description: ", tsk.getDescription(),
10000, EditField.FILTER_DEFAULT);
comment = new EditField("Comment: ", tsk.getComment(), 10000,
EditField.FILTER_DEFAULT);
memberChoiceField = new ObjectChoiceField("Member : ", listMemberName);
memberChoiceField.setSelectedIndex(member_index);
dateBegin = new DateField("Date Begin: ", System.currentTimeMillis(),
DateField.DATE);
String strDate = tsk.getBegin_date();
strDate = ProccessMethods.strDateConvert(strDate);
Date dateConvert = new Date(HttpDateParser.parse(strDate));
dateBegin.setDate(dateConvert);
dateEnd = new DateField("Date End: ", System.currentTimeMillis(),
DateField.DATE);
strDate = tsk.getEnd_date();
strDate = ProccessMethods.strDateConvert(strDate);
dateConvert = new Date(HttpDateParser.parse(strDate));
dateEnd.setDate(dateConvert);
VerticalFieldManager fieldManager = new VerticalFieldManager(
FIELD_VCENTER);
fieldManager.add(taskName);
fieldManager.add(priority);
fieldManager.add(dateBegin);
fieldManager.add(dateEnd);
fieldManager.add(duration);
fieldManager.add(status);
fieldManager.add(memberChoiceField);
fieldManager.add(description);
fieldManager.add(comment);
fieldManager.setPadding(0, 10, 0, 10);
add(fieldManager);
add(new SeparatorField());
HorizontalFieldManager buttonManager = new HorizontalFieldManager(
FIELD_HCENTER);
VerticalFieldManager vertical = new VerticalFieldManager();
back = new ButtonField("Back", ButtonField.CONSUME_CLICK);
update = new ButtonField("Update", ButtonField.CONSUME_CLICK);
reset = new ButtonField("Reset", ButtonField.CONSUME_CLICK);
buttonManager.add(back);
buttonManager.add(update);
buttonManager.add(reset);
vertical.add(buttonManager);
add(vertical);
back.setChangeListener(this);
reset.setChangeListener(this);
update.setChangeListener(this);
dateBegin.setFocusListener(this);
dateEnd.setFocusListener(this);
taskName.setFocusListener(this);
duration.setFocusListener(this);
priority.setFocusListener(this);
status.setFocusListener(this);
memberChoiceField.setFocusListener(this);
description.setFocusListener(this);
comment.setFocusListener(this);
taskName.setChangeListener(this);
description.setChangeListener(this);
comment.setChangeListener(this);
status.setChangeListener(this);
memberChoiceField.setChangeListener(this);
priority.setChangeListener(this);
dateBegin.setChangeListener(this);
dateEnd.setChangeListener(this);
}
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
menu.add(new MenuItem("Back", 10, 10) {
public void run() {
back();
}
});
menu.add(new MenuItem("Update", 10, 10) {
public void run() {
update();
}
});
menu.add(new MenuItem("Reset", 10, 10) {
public void run() {
reset();
}
});
}
public void select(Field field) {
UiApplication.getUiApplication().popScreen(getScreen());
TaskManageScreen taskManageScreen = new TaskManageScreen();
UiApplication.getUiApplication().pushScreen(taskManageScreen);
}
private void ExitApplication() {
int response = Dialog.ask(Dialog.D_YES_NO,"Are you sure you want exit?");
if (response != -1)
System.exit(0);
}
public void LoadScreen() {
int count = 0;
if (keyword == null)
keyword = "";
try {
for (int i = 0; i < vt.size(); i++) {
tasks[i] = (Task) (vt.elementAt(i));
String strObjectName = tasks[i].getTask_name();
int intStatus = tasks[i].getStatus_id();
String temp = ProccessMethods.StandardString(keyword);
temp = temp.toLowerCase();
strObjectName = ProccessMethods.StandardString(strObjectName);
strObjectName = strObjectName.toLowerCase();
if (strObjectName.indexOf(temp) == 0&& ((status_id == 0) || (status_id
== intStatus))) {
LoadButton(i, count);
count++;
}
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
public void LoadButton(int index, int count) {
int status = tasks[index].getStatus_id();
if (status == 1) {
_leftIcon = Bitmap.getBitmapResource("InProgress.png");
} else if (status == 2) {
_leftIcon = Bitmap.getBitmapResource("Finish_Icon.png");
} else if (status == 3) {
_leftIcon = Bitmap.getBitmapResource("Waiting.png");
} else {
_leftIcon = Bitmap.getBitmapResource("Fail.png");
}
show_task = new StyleButtonField(_leftIcon,tasks[index].getTask_name(),
_caret, 0);
tkVector.addElement(show_task);
((StyleButtonField) tkVector.elementAt(count)).task_id = tasks[index]
.getTask_id();
((StyleButtonField) tkVector.elementAt(count)).task_name = tasks[index]
.getTask_name();
show_task.setChangeListener(this);
show_task.setFocusListener(this);
buttonSet.add(show_task);
}
}
3.2.2. Quản lý các vấn đề trong quá trình làm dự án
Quản lý các vấn đề, các sự cố xảy ra trong quá trình làm dự án là quản lý danh sách các vấn đề đã xảy ra, từ chức này người quản lý có thể biết được dự án có bao nhiêu vấn đề cần giải quyêt, chưa giải quyết, mức độ ưu tiên của vấn đề, các vấn đề được giao cho ai xử lý để từ đó có những hành động kịp thời để khắc phục những sự cố.
Sau đây là đoạn mã thực hiện những công việc trên:
public void LoadListIssue(int index, int count) {
int status = project_issues[index].getStatus_id();
if (status == 1) {
_leftIcon =
Bitmap.getBitmapResource(MessageResource.ICON_WAITING);
} else if (status == 2) {
_leftIcon =
Bitmap.getBitmapResource(MessageResource.ICON_WORKING);
} else if (status == 3) {
_leftIcon =
Bitmap.getBitmapResource(MessageResource.ICON_FINISHED);
} else {
_leftIcon =
Bitmap.getBitmapResource(MessageResource.ICON_FAILED);
}
show_project_issue = new StyleButtonField(_leftIcon,
project_issues[index].getProject_issue_name(), _caret, 0);
piVector.addElement(show_project_issue);
((StyleButtonField)piVector.elementAt(count)).project_issue_id =
project_issues[index].getProject_issue_id();
((StyleButtonField)piVector.elementAt(count)).project_issue_name =
project_issues[index].getProject_issue_name();
show_project_issue.setChangeListener(this);
show_project_issue.setFocusListener(this);
buttonSet.add(show_project_issue);
}
Figure 18 – Màn hình quản lý các vấn đề của dự án trong quá trình làm
Trong chức năng này cũng có những chức năng như thêm mới, xóa, cập nhật thông tin. Những lớp và phương thức thực hiện những chức năng này tương tự với chức năng quản lý công việc.
3.2.3. Quản lý thành viên
Quản lý thành viên là quản lý những thành viên đang làm trong dự án, các thông tin về thành viên do minh quản lý sẽ nằm trong chức năng này. Đoạn mã thực hiện việc lấy danh sách thành viên như sau:
public void LoadListMember(int index, int count) {
_leftIcon =
Bitmap.getBitmapResource(MessageResource.ICON_MEMBER);
show_member = new StyleButtonField(_leftIcon, members[index] .getMember_name(), _caret, 0);
mbVector.addElement (show_member);
((StyleButtonField)mbVector.elementAt(count)).member_id=
members[index].getMember_id();
((StyleButtonField)mbVector.elementAt(count)).member_name=
members[index].getMember_name();
show_member.setChangeListener(this);
show_member.setFocusListener(this);
buttonSet.add(show_member);
}
Figure 19 – Màn hình biểu diễn danh sách thành viên
Tương tự như hai chức năng quản lý công việc và quản lý vấn đề trong quá trình làm dự án thì chức năng quản lý thành viên cũng có những chức năng thêm mới, xóa, cập nhật thông tin. Các lớp và phương thức thực hiện những chức năng này tương tư như chức năng quản lý công việc.
3.2.4. Quản lý tiến độ dự án
Quản lý tiến độ dự án là một chức năng đặc biệt của ứng dụng này. Ứng dụng dựa vào số lượng công việc và tỉ lệ đã làm, chưa làm của các công việc để tính ra tiến độ thật của dự án. Đồng thời dựa vào kế hoạch ban đầu do người quản lý đặt ra để tính ra tiến độ của dự án dự theo bản kế hoạch đó và sau đó sẽ tổng hợp và vẽ một biểu đồ. Chức năng này có thể cho người quản lý biết được dự án của mình có đi đúng tiến độ hay không, nếu không thì nhanh hay chậm so với kế hoạch ban đầu.
Biểu đồ biểu diễn tiến độ của dự án sẽ tương tự như sau:
Figure 20 – Màn hình biểu diễn tiến độ của dự án
Lớp thực hiện việc vẽ biểu đồ:
public class DrawChart extends Field implements DrawStyle {
Graphics grap;
private int fieldWidth;
private int fieldHeight;
int numberOfproject;
int numberOftask;
String[] Dvi = new String[] { "Week", "Month", "Year" };
String DV;
private ProjectManagement pm;
private TaskManagement tm;
private Project proj;
public DrawChart() {
fieldHeight = Display.getHeight();
fieldWidth = Display.getWidth();
}
protected void layout(int width, int height) {
setExtent(getPreferredWidth(), getPreferredHeight());
}
public int getPreferredWidth() {
return fieldWidth;
}
public int getPreferredHeight() {
return fieldHeight;
}
protected void paint(Graphics grap) {
pm = new ProjectManagement();
proj = new Project();
proj = pm.ProjectInfo(ListProjectScreen.project_id);
numberOfproject = proj.getDuration();
numberOftask = 100;
int numberX;
int du;
int k = 0;
numberX = numberOfproject / 7;
du = numberOfproject % 7;
DV = "Week";
int a = 40;
if (numberX == 24) {
a += 10;
} else if (numberX < 24) {
if (du == 0) {
a = a + 240 / numberX;
} else {
a = a + 240 / (numberX + 1);
}
} else {
numberX = numberOfproject / 30;
du = numberOfproject % 30;
if (numberX == 24) {
DV = "Month";
a += 10;
} else if (numberX < 24) {
DV = "Month";
if (du == 0) {
a = a + 240 / (numberX);
} else {
a = a + 240 / (numberX + 1);
}
} else {
numberX = numberOfproject / 90;
du = numberOfproject % 90;
if (numberX == 24) {
a += 10;
} else if (numberX < 24) {
if (du == 0) {
a = a + 240 / (numberX);
} else {
a = a + 240 / (numberX + 1);
}
}
}
}
int dux = 0;
if (du == 0) {
k = numberOfproject / numberX;
} else {
k = numberOfproject / (numberX + 1);
dux = numberOfproject % (numberX + 1);
}
grap.setColor(Color.BLACK);
grap.fillRect(40, 20, (int) 2.5, 200);
int y = 20;
grap.setColor(Color.DARKGRAY);
grap.setFont(Font.getDefault().derive(Font.BOLD, 12, Font.PLAIN));
String[] textY = { "10", "20", "30", "40", "50", "60", "70", "80",
"90", "100" };
for (int i = 0; i < 10; i++) {
if (i == 0) {
grap.drawText(textY[9], 15, y);
} else {
grap.drawText(textY[9 - i], 20, y);
}
y = y + 20;
}
// Draw Table
String[] text = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
"21", "22", "23", "24" };
int x = 43;
grap.setFont(Font.getDefault().derive(Font.BOLD, 9, Font.PLAIN));
if (du == 0) {
for (int i = 0; i < numberX; i++) {
grap.setColor(Color.GREENYELLOW);
grap.drawLine(a, 220, a, 20);
grap.setColor(Color.DARKGRAY);
grap.drawText(text[i], x, 220);
x = x + 240 / (numberX);
a = a + 240 / (numberX);
}
// Draw DeadLine
grap.setColor(Color.CHOCOLATE);
grap.drawLine(a - 240 / (numberX), 220, a - 240 / (numberX), 20);
// Draw axis Table x
grap.setColor(Color.BLACK);
grap.fillRect(40, 220, (a - 240 / (numberX)) - 40, (int) 2.5);
// Draw axis Table Y
grap.setColor(Color.GREENYELLOW);
int b = 20;
for (int i = 0; i < 10; i++) {
grap.drawLine(40, b, (a - 240 / (numberX)), b);
b = b + 20;
}
} else {
int rowEnd = (dux * (240 / (numberX + 1))) / k;
for (int i = 0; i < numberX + 1; i++) {
grap.setColor(Color.GREENYELLOW);
grap.drawLine(a, 220, a, 20);
grap.setColor(Color.DARKGRAY);
grap.drawText(text[i], x, 220);
x = x + 240 / (numberX + 1);
a = a + 240 / (numberX + 1);
}
// Draw DeadLine
grap.setColor(Color.CHOCOLATE);
grap.drawLine(a + rowEnd - (240 / (numberX + 1)) * 2, 220, a
+ rowEnd - (240 / (numberX + 1)) * 2, 20);
// draw axis Table X
grap.setColor(Color.BLACK);
grap.fillRect(40, 220, (a - 240 / (numberX + 1)) - 40, (int) 2.5);
Các file đính kèm theo tài liệu này:
- Quản lý dự án trên blackbery.doc