III. Người sử dụng:
1. Quản lý: tạo tài khoản các nhân viên, lập lịch theo tuần cho nhân viên theo
dõi và thực hiện theo. Quản trị hệ thống người dùng.
2. Nhân viên: sử dụng để xem lịch làm việc của mình và các đồng nghiệp,
thay đổi mật khẩu người dùng.
IV. Mô tả chức năng:1. Xem lịch ngày tháng: 1. Xem lịch ngày tháng: a. Giao diện:
b. Mô tả chức năng:
Chức năng này thể hiện như 1 tờ lịch tháng, và khi người dùng vào chương trình thì sẽ hiện thị lên ngày tháng hiện tại của hệ thống, từ đây người dùng có thể click vào bất kỳ 1 ngày nào để biết lịch làm việc của ngày đó.
c. Cách thức thực hiện: Danh sách các control: > 01 - 2012 < S F T W T M S 7 6 5 4 3 2 1 14 13 12 11 10 9 8 21 20 19 18 17 16 15 28 27 26 25 24 23 22 4 3 2 1 31 30 29 QUẢN TRỊ THOÁT THÊM
Tên Loại Công dụng
btnBack Button Thực hiện lệnh xem tháng phía trước. btnCurrent Button Hiển thị tháng, năm hiện tại.
btnNext Button Hiển thị lệnh xem tháng phía sau. btnSunday Button Hiển thị S
btnMonday Button Hiển thị M btnTuesday Button Hiển thị T btnWednesday Button Hiển thị W btnThurday Button Hiển thị T btnFriday Button Hiển thị F btnSaturday Button Hiển thị S
gvwCurMonth Gridview Hiển thị các ngày trong tháng mnuAdd Menu Thêm công việc vào lịch mnuSetting Menu Mở form quản trị hệ thống mnuExit Menu Thoát khỏi chương trình
Danh sách xử lý:
Tên Công dụng - Cách thiết kế
btnBack_Click Thực hiện các câu lệnh lấy ngày tháng phía trước ngày tháng hiện tại rồi hiển thị cả tháng vào GridView
btnCurrent_Click Hiển thị control để chọn tháng và năm, sau đó trả giá trị text lại cho chính nó hiển thị.
btnNext_Click Thực hiện các câu lệnh lấy ngày tháng phía sau ngày tháng hiện tại rồi hiển thị cả tháng vào GridView
gvwCurMonth Đây là một GridView tháng mà mỗi item của nó là một Button, Để hiện thị tháng đúng theo mục đích ta phải lấy ngày chủ nhật đầu tiên trước ngày 1 của mỗi tháng hiển thị lên vị trí đầu tiên của GridView sau đó chạy hết tháng và hiển thị các ngày còn lại, sau đó chạy tiếp đến ngày thứ 7 đầu tiên sau ngày 30,31 của mỗi tháng hiển thị để hiển thị các nút còn dư phía sau nếu như ngày cuối cùng của tháng hiển thị không đúng vào ngày thứ 7.
Ngoài ra còn thực hiện sự kiện click lên các Button trong tháng để hiển thị ra form chi tiết công việc theo ngày, tùy vào người dùng nhấn vào Button nào.
mnuAdd_Click Viết lệnh tạo ra các menu và xử lý sự kiện Click Mở form thêm nếu tài khoản đăng nhập là Admin mnuSetting_Clic
k
Viết lệnh tạo ra các menu và xử lý sự kiện Click Mở form quản trị nếu tài khoản đăng nhập là Admin mnuExit_Click Viết lệnh tạo ra các menu và xử lý sự kiện Click
Liên hệ đến phần đã được học:
- Sử dụng đối tượng Calendar lấy ngày tháng trong hệ thống. - Sử dụng các View Control
- Tạo GridView với mỗi Item là 1 control, Viết các lớp cần thiết và tạo Adapter sử dụng cho GridView này.
- Cách thức xử lý sự kiện click. - Sử dụng các lệnh về menu.
- Quản lý hiển thị các Activity khi nhấn các nút thuộc menu.
2. Xem nội dung công việc của một ngày:a. Giao diện: a. Giao diện:
b. Mô tả chức năng:
Chức năng này thể hiện như 1 danh sách các công việc theo ngày, mỗi một đoạn là thể hiện 1 công việc cụ thể trong ngày đó. Khi người dùng thuộc tài khoản admin nhấn chuột vào một đoạn nào đó thì sẽ vào phần chỉnh sửa.
c. Cách thức thực hiện:
Danh sách các control:
Thứ 2 - 02.01.2012
7h30 - 8h30: Đi công tác sở (Anh Hiền, Chị Mai).
8h30-11h30: Góp ý xây dựng nhà (Anh Sơn, Chị Thu).
13h00 - 15h30: Xây dựng trường sa (Anh Hiền, Chị Mai).
15h00-17h00: Họp báo về xây dựng (Anh Sơn, Chị Thu).
Tên Loại Công dụng
tvHeader TextView Hiển thị thứ ngày tháng đang chọn
lstContent ListView Hiển thị danh sách các công việc trong ngày tháng đang chọn
mnuBack Menu Quay lại màn hình trước đó mnuAdd Menu Thêm mới một sự kiện công việc
Danh sách xử lý:
Tên Công dụng - Cách thiết kế
tvHeader Hiển thị ngày tháng hiện đang chọn từ form xem lịch
lstContent - Sử dụng ListView, mà mỗi item là 1 TextView hiển thị dữ liệu lấy từ cơ sở dữ liệu và hiền thị theo định dạng (Ngày giờ - Ngày Giờ: Nội dung công việc (Danh sách người thực hiện)).
- Ngoài ra còn sử lý sự kiện Click khi người dùng Admin nhấn vào từng dòng dữ liệu của ListView nhằm mục đích hiển thị form chỉnh sửa thông tin.
mnuBack_Click Xử lý đóng màn hình hiện tại và trả lại màn hình lúc trước mnudd_Click Xử lý mở màn hình thêm dữ liệu công việc
Liên hệ đến phần đã được học:
- Sử dụng đến hệ thống lưu trữ cơ sở dữ liệu.
- Sử dụng các đối tượng View: TextView, ListView
- Tạo ViewGroup giống như ListView để xử lý cập nhật vào CSDL. -Sử dụng đối tượng Menu, Xử lý sự kiện click trên menu.
- Quản lý hiển thị Activity.
3. Thêm mới, Chỉnh sửa một công việc:a. Giao diện: a. Giao diện:
Ngày tháng Từ thời gian Nội dung công việc Những người thực hiện
Từ thời gian HỦY
LƯU XÓA
b. Mô tả chức năng:
Chức năng này thể hiện các thông tin của công việc lên các EditText và người dùng admin có thể chỉnh sửa, hoặc khi thêm mới người dùng admin điền các thông tin tương ứng lên các EditText.
c. Cách thức thực hiện:
Danh sách các control:
Tên Loại Công dụng
lblID TextView Lưu trữ ID của công việc hiện tại dùng cho việc xử lý, control này không hiển thị.
txtDate EditText Hiển thị và chỉnh sửa ngày tháng. txtFromTime EditText Hiển thị và chỉnh sửa thời gian từ txtToTime EditText Hiển thị và chỉnh sửa thời gian đến txtContent EditText Hiển thị và chỉnh sửa nội dung công việc txtAuthor EditText Hiển thị và chỉnh sửa những người thực hiện btnCancel Button Thực hiện lệnh hủy chỉnh sửa
btnDelete Button Thực hiện lệnh xóa công việc hiện tại btnSave Button Thực hiện lưu lại công việc đã chỉnh sửa
Danh sách xử lý:
Tên Công dụng - Cách thiết kế
giá trị ngày tháng vào.
txtFromTime_Click Hiển thị lên đối tượng chọn thời gian từ, cho người dùng chọn giá trị thời gian vào.
txtToTime_Click Hiển thị lên đối tượng chọn thời gian đến, cho người dùng chọn giá trị thời gian vào.
btnCancel_Click Xử lý đóng màn hình hiện tại.
btnDelete_Click Xử lý xóa công việc hiện tại trong CSDL và trả lại về màn hình trước.
btnSave_Click Xử lý lưu công việc hiện tại vào CSDL và trả lại về màn hình trước
Liên hệ đến phần đã được học:
- Xử lý các đối tượng Date, Time
- Xử lý trao đổi dữ liệu với hệ quản trị CSDL - Xử lý việc hiển thị các Activity.
4. Chức năng danh sách quản trị:a. Giao diện: a. Giao diện:
b. Mô tả chức năng:
ADMIN: QUẢN TRỊ HỆ THỐNG HIENNT: NGÔ THANH HIỀN KHAINQ: BÙI QUANG KHẢI LONGLV: LÊ VĂN LONG
LOCNT: NGUYỄN THÀNH LỘC MINHVC: MINH VŨ CHÍ MINH
THÊM TRỜ VỀ
Chức năng này thể hiện các thông tin của người dùng lên ListView, người quản trị có thể click vào từng người dùng và chỉnh sửa thông tin quản trị, người dùng bình thường có thể vào đây để thay đổi mật khẩu của mình.
c. Cách thức thực hiện:
Danh sách các control:
Tên Loại Công dụng
lstUserAccount ListView Hiển thị danh sách các tài khoản người dùng btnBack Button Đóng màn hình quản trị tài khoản
btnAdd Button Mở màn hình thêm tài khoản người dùng
Danh sách xử lý:
Tên Công dụng - Cách thiết kế
lstUserAccount Sử dụng ListView hiển thị CSDL của phần quản lý tài khoản người dùng, xử lý các sự kiện Click lên các item của ListView này để mở màn hình chỉnh sửa thông tin của người dùng. btnBack_Click Đóng màn hình hiện tại và trả lại màn hình trước đây. btnAdd_Click Mở màn hình thêm tài khoản người dùng
Liên hệ đến phần đã được học:
- Xử lý hiển thị CSDL lên ListView, sự kiện Click lên các item trong ListView và hiển thị màn hình chỉnh sửa.
- Xử lý sự kiện, mở đóng Activity
5. Chức năng chỉnh sửa danh sách quản trị:a. Giao diện: a. Giao diện:
HIENNT *************
NGÔ THANH HIỀN Nhân viên khu vực 2
HỦY LƯU XÓA
*************
b. Mô tả chức năng:
Chức năng này hiển thị các thông tin người dùng đang chỉnh sửa hoặc hiển thị thêm mới người dùng.
c. Cách thức thực hiện:
Danh sách các control:
Tên Loại Công dụng
txtName ListView Hiển thị, chỉnh sửa tài khoản người dùng hiện tại. txtName_ID Button Đóng màn hình quản trị tài khoản
txtPass EditText Cho người dùng nhập mật khẩu
txtRePass EditText Cho người dùng xác nhận lại mật khẩu
txtMemo EditText Cho người dùng nhập chú thích về tài khoản hiện tại btnCancel Button Hủy màn hình hiện tại và không lưu dữ liệu
btnDelete Button Xóa người dùng hiện tại và trả về màn hình ban đầu btnSave Button Lưu người dùng hiện tại và trả về màn hình ban đầu
Danh sách xử lý:
Tên Công dụng - Cách thiết kế
btnCancel_Click Xứ lý đóng màn hình hiện tại và không lưu dữ liệu btnDelete_Click Xử lý xóa tài khoản hiện tại và trả về màn hình trước đây btnSave_Click Xử lý lưu dữ liệu và trả về màn hình trước đây
Liên hệ đến phần đã được học:
- Xử lý hiển thị CSDL lên ListView, sự kiện Click lên các item trong ListView và hiển thị màn hình chỉnh sửa.
- Xử lý sự kiện đóng Activity
6. Chức năng đăng nhập hệ thống:a. Giao diện: a. Giao diện:
b. Mô tả chức năng:
Chức năng này dùng để xác nhận người dùng khi vào chương trình.
c. Cách thức thực hiện:
Danh sách các control:
Tên Loại Công dụng
txtUsername EditText Dùng để người dùng nhập tên tài khoản đăng nhập txtPassword EditText Dùng để người dùng nhập mật khẩu đăng nhập btnExit Button Thoát khỏi chương trình
btnLogin Button Đăng nhập vào chương trình
Danh sách xử lý:
Username Password
ĐĂNG NHẬP ĐÓNG
Tên Công dụng - Cách thiết kế
btnExit_Click Xứ lý đóng màn hình hiện tại.
btnLogin_Click Xử lý kiểm tra thông tin tài khoản và cho vào màn hình hiển thị lịch công việc theo tháng nếu tài khoản tồn tại trong CSDL
Liên hệ đến phần đã được học:
- Xử lý kết nối lấy CSDL và kiểm tra. - Xử lý sự kiện đóng, mở Activity. - Xử lý sự kiện đóng chương trình.
1. Xem nội dung công việc của một ngày:
a. Thiết kế Layout chính: Layout được tạo trực tiếp bằng java code và có cấu
trúc như sau:
LinearLayout linear;
TextView text1; // Chứa tiêu đề ngày tháng đang chọn
TextView text2; // Chứa thông tin lấy mỗi item từ CSDL không hiển thị lên màn hình
ListView list; // Chứa danh sách các thông tin công việc theo ngày đang hiển thị
b. Thiết kế Layout cho Item của ListView (item_congviec): tạo ra bằng
ngôn ngữ xml <?xml version="1.0" encoding="UTF-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/txtString" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="DataHere" />
c. Viết Code xử lý CSDL: (DBAdapter.java)
package www.google.com; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.util.Log;
public class DBAdapter {
public static final String TAG ="DBAdapter"; public static final String KEY_ID = "_id";
public static final String KEY_DATE = "date";
public static final String KEY_FROM_TIME = "from_time"; public static final String KEY_TO_TIME = "to_time"; public static final String KEY_CONTENT = "contents"; public static final String KEY_AUTHOR = "author"; private DatabaseHelper mDbHelper;
private SQLiteDatabase mDB;
private static final String DATABASE_CREATE = "create table works (_id integer primary key autoincrement, "
+ "date text not null," + "from_time text not null," + "to_time text not null," + "contents text not null," + "author text not null);";
private static final String DATABASE_NAME = "Database_WorkScheduled"; private static final String DATABASE_TABLE = "works";
private static final int DATABASE_VERSION = 2; private final Context mContext;
private static class DatabaseHelper extends SQLiteOpenHelper{ public DatabaseHelper(Context context, String name,
CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub }
@Override
public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL(DATABASE_CREATE); }
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub
Log.i(TAG, "Upgrading DB");
db.execSQL("DROP TABLE IF EXISTS works"); onCreate(db); } } public DBAdapter(Context ctx){ this.mContext = ctx; }
public DBAdapter open() {
mDbHelper = new DatabaseHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION);
mDB = mDbHelper.getWritableDatabase(); return this;
}
public void close(){
mDbHelper.close(); }
public long createWork(String date, String from_time, String to_time, String content, String author){ ContentValues inititalValues = new ContentValues();
inititalValues.put(KEY_DATE, date);
inititalValues.put(KEY_FROM_TIME, from_time); inititalValues.put(KEY_TO_TIME, to_time); inititalValues.put(KEY_CONTENT, content); inititalValues.put(KEY_AUTHOR, author);
return mDB.insert(DATABASE_TABLE, null, inititalValues); }
public long updateWork(long id, String date, String from_time, String to_time, String content, String author){
ContentValues inititalValues = new ContentValues(); inititalValues.put(KEY_DATE, date);
inititalValues.put(KEY_FROM_TIME, from_time); inititalValues.put(KEY_TO_TIME, to_time); inititalValues.put(KEY_CONTENT, content); inititalValues.put(KEY_AUTHOR, author);
return mDB.update(DATABASE_TABLE, inititalValues, "_id=" + id, null); }
public boolean deleteWork(long rowId) {
return mDB.delete(DATABASE_TABLE, KEY_ID + "=" + rowId, null) >0; }
public boolean deleteAll() {
return mDB.delete(DATABASE_TABLE, null , null) >0; }
public Cursor getAllUsers(){
return mDB.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_DATE, KEY_FROM_TIME, KEY_TO_TIME, KEY_CONTENT, KEY_AUTHOR}, null, null, null, null, null);
}
public Cursor select(int _id){
return mDB.rawQuery("SELECT * FROM works WHERE _id=" + _id, null); }
}
d. Code xử lý chuyển dữ liệu vào ListView (có lưu ID vào Tag để xử lý) d1. item_congviec.java
package www.google.com; import android.widget.TextView; public class item_congviec {
private TextView txtString;
public item_congviec(TextView txtString) {
this.txtString = txtString; }
public TextView getContent() {
return txtString; } } d2. item_congviec_group.java package www.google.com; import android.content.Context; import android.view.LayoutInflater; import android.widget.LinearLayout; import android.widget.TextView;
public class item_congviec_group extends LinearLayout {
public TextView txtString;
public item_congviec_group(Context context) {
super(context);
LayoutInflater li = (LayoutInflater)
this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); li.inflate(R.layout.item_congviec, this, true);
txtString = (TextView) findViewById(R.id.txtString); } } d3. item_congviec_adapter package www.google.com; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import android.widget.Toast;
public class item_congviec_adapter extends ArrayAdapter<item_congviec> { ArrayList<item_congviec> array; int resource; Context context; item_congviec_edit item_congviec; //
public item_congviec_adapter(Context context, int textViewResourceId, ArrayList<item_congviec> objects)
{
super(context, textViewResourceId, objects); this.context = context; resource = textViewResourceId; array = objects; } // @Override
public View getView(int position, View convertView, ViewGroup parent) {
if (v_item_congviec == null) {
v_item_congviec = new item_congviec_group(getContext()); }
final item_congviec mCongViec = array.get(position); if (mCongViec != null)
{
TextView txtString = ((item_congviec_group) v_item_congviec).txtString; /* // KHÔNG ĐƯỢC XÓA HÀM SAU ĐÂY
txtString.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Toast.makeText(v.getContext(), v.getTag().toString() , Toast.LENGTH_LONG).show();
try {
Intent myIntent = new Intent(v.getContext(), item_congviec_edit.class);
// KHAI BÁO BIẾN TRUYỀN DỮ LIỆU QUA FORM KHÁC Bundle bundle = new Bundle();
bundle.putString("_id",v.getTag().toString()); myIntent.putExtras(bundle);
v.getContext().startActivity(myIntent); }
catch (Exception ex) { Toast.makeText(getContext(), ex.toString(), Toast.LENGTH_LONG).show(); } } }); */ txtString.setText(mCongViec.getContent().getText()); txtString.setTag(mCongViec.getContent().getTag()); } return v_item_congviec; } }
e. Viết Code khởi động Activity: (dynamic_activity.java)
package www.google.com; import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast;
public class dynamic_activity extends Activity {
private static final int CONST_EXIT = Menu.FIRST; private static final int CONST_ADD = Menu.FIRST + 1; LinearLayout linear;
TextView text1; TextView text2; item_congviec item1; ListView list;
// KHAI BÁO BIẾN TRUYỀN DỮ LIỆU CHO item_congviec ArrayList<item_congviec> array;
item_congviec_adapter arrayAdapter;
// KHAI BÁO BIẾN SỬ DỤNG CHO DATABASE private DBAdapter mDB;
private Cursor mCursor;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // mDB = new DBAdapter(this); mDB.open(); try { //mDB.deleteAll(); }
catch (Exception ex) {
//Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show(); }
//mDB.createWork("22/11/2012", "21:20", "22:30", "ĐI CHƠI TRUNG THU", "HIỀN");
mCursor = mDB.getAllUsers(); mCursor.moveToFirst();
linear = new LinearLayout(this);
linear.setOrientation(LinearLayout.VERTICAL); int _ID = 0; int _DATE = 1; int _FROM_TIME = 2; int _TO_TIME = 3; int _CONTENT = 4; int _AUTHOR = 5; mCursor.moveToFirst();
//if (i==3) mCursor.moveToNext(); text1 = new TextView(this);
text1.setText("Thứ 2 - 01.01.2012!"); text1.setGravity(Gravity.RIGHT);
//
array = new ArrayList<item_congviec>();
arrayAdapter = new item_congviec_adapter(this,R.layout.item_congviec, array); while(!mCursor.isAfterLast())
{
text2 = new TextView(this);
text2.setTag(mCursor.getString(_ID).toString()); text2.setText( mCursor.getString(_DATE).toString() + " - " + mCursor.getString(_FROM_TIME).toString() + " :" + mCursor.getString(_TO_TIME).toString() + " - " + mCursor.getString(_CONTENT).toString() + " - (" + mCursor.getString(_AUTHOR).toString() + ")" );
item1 = new item_congviec(text2); array.add(item1);
//
mCursor.moveToNext();
//if (mCursor.isAfterLast()) break; //mCursor.moveToNext(); }
list = new ListView(this); list.setAdapter(arrayAdapter); //
list.setOnItemClickListener( new OnItemClickListener(){
public void onItemClick(AdapterView<?> adapter, View v, int position, long arg3) {