Nội dung:

Một phần của tài liệu ĐỒ ÁN LẬP TRÌNH DI ĐỘNG ANDROID (Trang 28 - 55)

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) {

Một phần của tài liệu ĐỒ ÁN LẬP TRÌNH DI ĐỘNG ANDROID (Trang 28 - 55)

Tải bản đầy đủ (DOCX)

(55 trang)
w