Luận văn Xây dựng hệ thống đặt vé xe khách chất lượng cao

Mc lc  
ChươngI: Gii thiu tng quan  
1. Lý do chn dtài…………………………………………….….3  
2. Mc Tiêu………………………………………….……………..3  
3. Đối tượng nghiên cu…………………………………….…….4  
4. Phm vi nghiên cu……………………………………….…....4  
5. Môi trường thc hin………………………………….……….4  
6. Gii thiu vJava và công nghJ2ME ……………………....5  
Gii thiu vJava……………………………………................5  
Gii thiu vJ2ME và lp trình J2ME…………………….....6  
6.1. Ti sao chn J2ME……………………………………….7  
6.2. Kiến trúc ca J2ME…………………………………….. 8  
6.3. Phát trin ng dng……………………………………..11  
6.4. Kim tra li và chy th………………………………...11  
6.5. Đóng gói ng dng…………………………….............. 12  
6.6. Trin khai ng dng vi tp tin JAR………………… 12  
6.7. Tp tin manifest.mf và tp tin JAD…………………....12  
6.8. Ti ưu mã và gim kích thước ng dng……………...13  
6.9. Nhng khó khăn…………………………………….…..14  
Chương II: Lp trình vi J2ME………………..…………….……16  
1. MIDlet và đối tượng Display…………………….…….….….16  
1.1 MIDlet – Vòng đời ca mt MIDlet…………….….….16  
1.2 Đối tượng Display………………………………………19  
1.3 Đối tượng Displayable…………………………….…....19  
2. Giao din người dùng cp cao………………………….……20  
1
2.1 Đối tượng Display, Displayable và Screen……………....20  
2.2 Thành phn Form và Items………………………….…...21  
2.3 Thành phn List, Textbox, Alert, và Ticker….................33  
3. Giao din người dùng câp thp……………………..………….39  
3.1 Các hàm API mc thp………………………….………..39  
3.2 Lp Canvas và kthut xđồ ha………….………...39  
3.3 Lp Graphics…………………………………….………..49  
Chương III: Hthng qun lý bn ghi………………………………64  
1. Lưu trcố định thông qua RecordStore………………...….64  
2. Các vn đề vi RMS……………………………………...…..67  
3. Các hàm API ca RMS…………………………….…….…..68  
4. Sp xếp bn ghi vi RecordComparator……………….…..73  
5. Tìm kiếm bn ghi vi RecordFilter………………..………..83  
6. Nhn biết thay đổi vi RecordListener…………………..…88  
Chương IV: Khung kết ni chung……………………………………93  
1. Cây phân cp Connection…………………………..………..93  
2. Kết ni HTTP…………………………………………….…..95  
3. Client Request và Server Response………………..…….....100  
Chương V: Tng kết………………………………………….……...104  
Tài liu tham kho …………………………………………………...105  
2
CHƯƠNG I: GII THIU TNG QUAN  
1. Lý do chn đề tài  
Công nghthông tin ngày nay có vai trò rt quan trng trong cuc sng hàng  
ngày ca chúng ta. Hin nay có rt nhiu công nghmi phát trin song song  
vi vic phát trin công nghthông tin như Bluetooth, Wireless, WAP,  
SOAP,… nhm giúp công nghthông tin ngày càng thân thiết vi người dùng  
hơn. Mt trong nhng công nghgóp phn không nhtrong vic kết ni con  
người vi thông tin cũng như con người vi con người là công nghdi  
động.Vi tc độ phát trin hin nay và nhng li ích to ln ca công nghdi  
động, có ththy nó có nh hưởng rt ln đến cuc sng ca con người. Không  
ging như trước đây nhng chiếc đin thoi chcó chc năng rt đơn gin là  
đàm thoi, đin thoi hin nay còn có thêm rt nhiu chc năng, ng dng khác  
như: email, truy cp Internet, video, nghe nhc, chơi game, … đồng thi vi nó  
là sphát trin vũ bão ca các dch vgia tăng trên đin thoi di động da trên  
công nghWAP và SOAP.  
Em chn đề tài là “Lp trình thiết bdi động trên J2ME” và viết mt số ứng  
dng đơn gin nhm khai thác các tính năng ca các thiết bdi động mà chyếu  
đin thoi di động. Qua đó em scgng nm bt và ng dng được tt các  
kthut lp trình trên thiết bdi động.  
2. Mc tiêu  
Khi thc hin đề tài này, mc tiêu mà em mong mun đạt được là:  
Hiu chi tiết vJ2ME và ng dng ca nó để lp trình trên các thiết bdi động.  
Nm được các kthut xlý form, âm thanh, hình nh, và lưu trtrên đin  
thoi di động  
ng dng các kết quả đạt được để xây dng chương trình đơn gin, có các tin  
ích phc vnhu cu ca người sdng đin thoi di động  
Áp dng thành công trên mt sdòng máy đin thoi di động htrJava ca  
các hãng như Nokia, Sony, Samsung,…  
3
3. Đối tượng nghiên cu  
Hiu chi tiết vJ2ME và ng dng ca nó để lp trình trên các thiết bdi động.  
Nm được các kthut xlý âm thanh, hình nh, và lưu trdliu trên thiết bị  
di động  
ng dng các kết quđược để xây dng mt ng dng thc tin trên thiết bị  
di động  
Tìm hiu các công nghnâng cao trên đin thoi di động như Bluetooth, WAP,  
SOAP. Tìm hiu vnguyên lý hot động ca các dch vgia tăng trên đin  
thoi di động.  
Nếu còn thi gian, tìm hiu vý tưởng lp trình phân tán trên thiết bdi động  
Đây là mt ý tưởng mi hu như chưa được áp dng cho thiết bdi động.  
4. Phm vi nghiên cu  
Nghiên cu chi tiết vcông nghJ2ME và các kthut lp trình trên điên thoi  
di động. ng dng các kết qunghiên cu được để xây dng mt ng dng  
trin khai trên đin thoi di động. Vì thi gian có hn cũng như khnăng tìm  
hiu còn nhiu hn chế nên em chtrình bày các kthut lp trình trên mt số  
dòng đin thoi phbin ca các hãng ln như Nokia, Samsung, Sony  
Ericssion. Em scgng khai thác các thế mnh vform, âm thanh, hình nh  
mà các nhà sn xut đã cung cp trên đin thoi di động ca h.  
Do không có đủ thiết bị để nghiên cu nên em chcó thtrình bày nhng kỹ  
thut lp trình trên đin thoi di động và các thiết bdi động khác nói chung. Do  
đó trong đề tài này, cm t“thiết bdi động” được hiu theo nghĩa là “đin  
thoi di động”.  
5. Môi trường thc hin  
Hệ điu hành Windows XP  
IDE: NetBeans 5.5, NetBeans Mobility Pack 5.5.1 ( đi kèm cWTK 2.5)  
JDK 1.6.02  
Sun Wireless Toolkit 2.2  
4
6. Gii thiu vJava và công nghJ2ME  
Gii thiu vJava  
Java là mt công nghệ được hãng Sun Microsystems xây dng tcui năm  
1990 vi cái tên Oak và hin nay đang phát trin vượt bc vi sự đóng góp ca  
hàng vn lp trình viên trên thế gii. Ban đầu, Oak được ksư James Gosling  
và các cng sxây dng vi mc đích lp trình cho các mt hàng đin dân dng  
vi mc tiêu nhgn và tương thích được vi nhiu loi thiết bphn cng  
khác nhau. Sau đó Oak được sdng trong nhiu dán như dán Xanh (Blue  
Project), dán Phim theo yêu cu (Video on demand Project). Sau mt chuyến  
du lch ti đảo Java ca Indonesia, nhóm phát trin Oak đã đổi tên Oak thành  
Java.  
Java mà tin thân là Oak được xây dng chyếu da trên bcông cphát  
trin (Java Development Kit - JDK) như là bthư vin chun trong đó chưa  
trình biên dch, trình thông dch, trình đóng gói, tài liu,… Đây chính là nn  
tng cho vic phát trin các ng dng Java. Hin nay, cng đồng Java trên thế  
gii mà đi đầu là hãng Sun Microsystems đã xây dng nhiu nhánh mi cho  
Java như: JavaMail (thư đin t), Java TAPI (vin thông), Java3D (đồ ha 3  
chiu), J2ME (ng dng cho thiết bdi động),…  
Hin nay Java có các phiên bn sau:  
J2SETM (Java 2 Platform, Standart Edition): Phiên bn chun gm bộ  
công cthông dng dùng để chy trên các máy PC hoc các mng máy tính  
nh.  
J2EETM (Java 2 Platform, Enterprise Edition): Phiên bn dành cho các  
máy chvi bnhln. Bao gm các kiến trúc nâng cao như Web, EJB,  
Transaction,… dùng để xây dng các ng dng có quy mô ln  
5
J2METM (Java 2 Platform, Micro Edition): Bao gm môi trường và thư  
vin Java dùng để phát trin các ng dng trên các thiết bcó bnhnhnhư  
đin thoi di động, PDA, các đồ gia dng,…  
Gii thiu vJ2ME và lp trình cho thiết bdi động  
J2ME được phát trin tkiến trúc JavaCard, EmbededJava và PersonalJava  
ca phiên bn Java 1.1. Đến dra đời ca phiên bn Java 2 thì Sun quyết định  
thay thế PersonalJava bng mt phiên bn mi có tên Java 2 Micro Edition, viết  
tt là J2ME. J2ME được sdng cho các thiết bnhgn vi dung lượng bộ  
nhbé và khnăng xlý thp.  
Mc tiêu ca Java là cho phép người lp trình viết các ng dng độc lp  
vi thiết bdi động, không cn quan tâm đến phn cng tht s. Để làm được  
như thế, J2ME được xây dng bng các tng khác nhau để che giu đi vic  
tương tác trc tiếp vi phn cng ca thiết b. Các tng cu J2ME được xây  
dng trên CLDC (Connected Limited Device Configuration):  
Tng dưới cùng là tng Phn cng thiết b- đây là tng vt lý bao gm  
phn cng ca thiết bdi động. Các tng bên trên tng Phn cng thiết blà các  
tng tru tượng, chúng cung câp cho lp trình viên nhiu giao din lp trình  
thân thin và ddàng hơn mà không cn quan tâm đến phn cng. Nói các khác  
chúng đóng vai trò trung gian giúp cho lp trình viên tương tác được vi phn  
6
cng mà không cn quan tâm đến các chi tiết thc sca phn cng ca thiết  
b.  
Tng Phn cng thiết b(Device Hardware Layer): đây là thiết bdi  
động tht svi bnhvà tc độ xlý cth. Các thiết bdi động khác nhau  
có thcó bvi xlý và các tp lnh rt khác nhau. Mc tiêu ca J2ME là cung  
cp cho lp trình viên khnăng giao tiếp ging nhau vi tt ccác loi thiết bị  
di động khác nhau.  
Tng máy o Java (Java Virtual Machine Layer): đây là tng đóng vai  
trò thông ngôn gia chương trình và thiết b. Nó sthông dch các mã bytecode  
(mã có được sau khi biên dch mã ngun chương trình) thành mã máy ca các  
thiết bdi động. Tng này bao gm KVM (K Virtual Machine) là bbiên dch  
mã bytecode thành mã máy. Nó cung cp mt schun hóa cho các thiết bdi  
động để ứng dng J2ME sau khi biên dch có thchy được trên bt kthiết bị  
di động nào htrKVM.  
Tng cu hình (Configuration Layer): Tng này cung cp các hàm API  
cơ bn là nhân ca J2ME. Lp trình viên có thsdng các lp và các phương  
thc ca các API này tuy nhiên nó không thc sphong phú bng tp API ca  
tng hin trng.  
Tng hin trng (Profile Layer): Tng này cung cp các hàm API hu  
dng hơn cho vic lp trình. Mc đích ca tng này xây dng nên lp cu hình  
và cung cp nhiu thư vin ng dng hơn.  
6.1 Lý do chn J2ME:  
Java ban đầu được thiết kế dành cho các máy vi tài nguyên bnhhn chế.  
Thtrường ca J2ME được mrng ra cho nhiu chng loi thiết bnhư:  
Các lai thcá nhân như Java Card  
Máy đin thoi di động  
Máy PDA (Personal Digital Assistant - thiết btrgiúp cá nhân)  
Các hp điu khin dành cho tivi, thiết bgii trí gia dng …  
7
6.2 Kiến trúc ca J2ME  
Phn này strình bày kiến trúc tng quát ca nn tng Java  
a) Gii thiu các thành phn trong nn tng J2ME: Định nghĩa vConfiguration  
(Cu hình): là đặc tảđịnh nghĩa mt môi trường phn mm cho mt dòng các thiết  
bịđược phân loi bi tp hp các đặc tính, ví dnhư:  
Kiu và slượng bnhớ  
Kiu và tc độ bvi xlý  
Kiu mng kết ni  
Do đây là đặc tnên các nhà sn xut thiết bnhư Samsung, Nokia …bt buc phi  
thc thi đầy đủ các đặc tdo Sun qui định để các lp trình viên có thda vào môi  
trường lp trình nht quán và thông qua snht quán này, các ng dng được to  
ra có thmang tính độc lp thiết bcao nht có th. Ví dnhư mt lp trình viên  
viết chương trình game cho đin thoi Samsung thì có thsa đổi chương trình ca  
mình mt cách ti thiu nht để có thchy trên đin thai Nokia.. Hin nay Sun  
đã đưa ra 2 dng Configuration:  
CLDC (Connected Limited Device Configuration-Cu hình thiết bkết ni gii  
hn): được thiết kếđể nhm vào thtrường các thiết bcp thp (low-end), các thiết  
bnày thông thường là máy đin thai di động và PDA vi khong 512 KB bnh.  
Vì tài nguyên bnhhn chế nên CLDC được gn vi Java không dây (Java  
8
Wireless ), dng như cho phép người sdng mua và ti vcác ng dng Java, ví  
dnhư là Midlet.  
CDC- Connected Device Configuration (Cu hình thiết bkết ni): CDC được  
đưa ra nhm đến các thiết bcó tính năng mnh hơn dòng thiết bthuc CLDC  
nhưng vn yếu hơn các hthng máy để bàn sdng J2SE. Nhng thiết bnày có  
nhiu bnhhơn (thông thường là trên 2Mb) và có bxlý mnh hơn. Các sn  
phm này có thkểđến như các máy PDA cp cao, đin thoi web, các thiết bgia  
dng trong gia đình …  
C2 dng Cu hình ktrên đều cha máy o Java (Java Virtual Machine) và  
tp hp các lp (class) Java cơ bn để cung cp mt môi trường cho các ng dng  
J2ME. Tuy nhiên, bn chú ý rng đối vi các thiết bcp thp, do hn chế vtài  
nguyên như bnhvà bxlý nên không thyêu cu máy o htrtt ccác tính  
năng như vi máy o ca J2SE, ví d, các thiết bthuc CLDC không có phn  
cng yêu cu các phép tính toán du phy động, nên máy o thuc CLDC không  
được yêu cu htrkiu float và double.  
Bng dưới là sso sánh các thông skthut ca CDC và CLDC  
9
CLDC  
CDC  
Ram  
>=32K, <=512K  
>=128k, <=512k  
>=256K  
>=512k  
Rom  
Ngun  
Lượng  
Network  
Năng Có GiI Hn (ngun Không  
gii  
pin)  
hn  
Chm  
Nhanh  
b) Định nghĩa vProfile:  
Profile mrng Configuration bng cách thêm vào các class để btrcác tính  
năng cho tng thiết bchuyên bit. C2 Configuration đều có nhng profile liên quan  
và tnhng profile này có thdùng các class ln nhau. Đến đây ta có thnhn thy do  
mi profile định nghĩa mt tp hp các class khác nhau, nên thường ta không thể  
chuyn mt ng dng Java viết cho mt profile này và chy trên mt máy htrmt  
profile khác. Cũng vi lý do đó, bn không thly mt ng dng viết trên J2SE hay  
J2EE và chy trên các máy htrJ2ME. Sau đây là các profile tiêu biu:  
Mobile Information Device Profile (MIDP): profile này sbsung các tính  
năng như htrkết ni, các thành phn htrgiao din người dùng … vào CLDC.  
Profile này được thiết kế chyếu để nhm vào đin thai di động vi đặc tính là màn  
hình hin thhn chế, dung lượng cha có hn. Do đó MIDP scung cp mt giao  
din người dùng đơn gin và các tính năng mng đơn gin da trên HTTP. Có thnói  
MIDP là profile ni tiếng nht bi vì nó là kiến thc cơ bn cho lp trình Java trên các  
máy di động (Wireless Java)  
PDA Profile: tương tMIDP, nhưng vi thtrường là các máy PDA vi màn  
hình và bnhln hơn  
Foundation Profile: cho phép mrng các tính năng ca CDC vi phn ln  
các thư vin ca bCore Java2 1.3 Ngoài ra còn có Personal Basis Profile, Personal  
Profile, RMI Profile, Game Profile.  
10  
6.3 Phát trin ng dng  
Biên dch  
Mã ngun chương trình có thể được biên dch bng các trình biên dch chun  
cu Java, chúng to ra các file .class. Ta có thbiên dch tcác trình son tho  
hoc biên dch trc tiếp tdòng lnh.  
6.4 Kim tra li và chy thử  
Chúng ta sdng các công cnhư WTK để kim tra li và chy thchương  
trình vì vic này nếu tiến hành trên thiết btht rt mt thi gian. Vic sdng  
các gilp giúp nhanh chóng phát hin các li. Ngoài ra nó còn giúp lp trình  
viên có nhng cái nhìn cm quan vchương trình ca mình.  
11  
6.5 Đóng gói  
Sau khi đã kim li và chy thchương trình, chúng ta tiến hành đóng gói ng  
dng để có thcài đặt trên các thiết btht. Vic đóng gói ng dng thc cht là  
nén các file .class vào trong mt file .jar, điu này giúp gim kích thước ng  
dng và đơn gin hóa khi cài đặt trên thiết btht. Chúng ta có thể đóng gói ng  
dng bng trình đóng gói ca JDK hoc trình đóng gói nm trong các IDE.  
Hoc mt cách rt thcông, chúng ta có thể đóng gói ng dng mt cách trc  
tiếp. Vic đóng gói trc tiếp thc cht cũng tiến hành li các công vic như các  
trình đóng gói nhưng chúng ta có thkim soát li tt hơn. Tuy vy vic này  
khá phc tp và dgây ra li nếu lp trình viên chưa thun thc  
6.6 Đóng gói và trin khai ng dng thành tp tin JAR  
Các lp đã được biên dch ca ng dng J2ME được đóng gói trong tp tin JAR  
cùng vi các tài nguyên khác như hành nh, âm thanh,… Tp tin JAR này chính  
là tp tin được cài vào thiết bdi động.  
Người sdng có thti tp tin JAR vào máy di động bng các cách sau:  
Kết ni đin thoi di động vi máy tính bng cáp truyn dliu: Vic  
này yêu cu người dùng phi có tp tin JAR tht svà phn mm truyn thông  
để ti ng dng vào đin thoi thông qua cáp dliu  
Cng hng ngoi: Yêu cu thiết bdi động và ngun chưa file JAR phi  
htrhng ngoi và người dùng có file JAR tht sự  
Sdng mng không dây: ti ng dng thông qua mng GPRS, người  
dùng chcn biết địa chURL ca tp tin JAR.  
6.7 Tp tin manifest.mf và tp tin JAD  
Tp tin manifest.mf và tp tin JAD mô tcác đặc đim ca ng dng. Tp tin  
manifest.mf nm bên trong tp tin JAR còn tp tin JAD nm ngoài tp tin JAR.  
Tp tin JAD giúp cho người dùng có thbiết được đặc đim ca ng dng trước  
12  
khi ti. Vic này giúp làm gim lãng phí tài nguyên và tin bc vì trên thc tế,  
mt ng dng J2ME nào đó chcó thchy trên mt smáy nht định.  
Tp tin manifest.mf có ni dung như sau:  
Manifest-Version: //Phiên bn tp tin manifest.mf  
MIDlet-Name:  
//Tên bMIDlet  
MIDlet-Version: //Phiên bn ca bMIDlet  
MIDlet-Vendor: //Nhà sn xut  
MIDlet-<n>:  
//Tên ca MIDlet chính  
//Phiên bn hin trng  
MicroEdition-Profile:  
MicroEdition-Configuration: //Phiên bn cu hình  
6.8 Ti ưu mã chương trình và gim kích thước ng dng  
Sau khi đóng gói chương trình thành tp tin JAR chúng ta thy rng các file dữ  
liu đã được nén li mt cách đáng k. Tuy nhiên ta có thgim kích thước file  
JAR này thêm mt ln na bng cách dùng mt công c. Công cnày thường  
bao gm các đặc tính sau:  
- Loi bcác class không dùng đến  
- Loi bcác hàm và biến không dùng đến  
- Đổi tên class, package, hàm và biến thành các tên đơn gin và ngn  
gn hơn  
- Thêm vào file class mt sđể chương trình khó bdch ngược hơn  
Ba đặc tính đầu dùng để gim kích thước các file .class trong khi đó đặc tính  
th3 và th4 dùng để bo vchương trình khó bdch ngược li thành mã  
ngun. Ngay ckhi bdch ngược li thành mã ngun thì chương trình cũng  
khó bị đọc hơn vì các tên lp, biến , hàm, package đã bthay đổi. Các công cụ  
thường được dùng để ti ưu mã chương trình là Jbuilder 9X, Retroguard,  
Jshrink.  
13  
6.9 Nhng khó khăn khi lp trình trên thiết bdi động  
Sdng công nghJ2ME cho vic lp trình trên thiết bdi động là mt vic  
không khó đối vi các lp trình viên. Tuy vy khi lp trình bng J2ME, lp trình  
viên sgp phi mt skhó khăn đạc trưng không thtránh khi:  
- Không htrphép tính du phy động (floating point):  
- Không htrbnp class (Class loader).  
- Không htrtkhóa finalize()  
- Phn ln các thư vin API cho Swing và AWT không thsdng được  
trong MIDP.  
- Không htrcác tính năng qun lý file và thư mc: Đây có thlàm bn  
ngc nhiên nhưng thc tế là các thiết bJ2ME không có htrcác thiết bị  
lưu trthông thường như ổ cng v.v. Tuy nhiên, điu đó không có nghĩa là  
bn phi mt đi mi dliu quan trng mi khi tt máy, Sun đã cung cp  
mt chc năng khác tương đương gi là Record Management system (RMS)  
để cung cp khnăng lưu trcho các thiết bnày.  
- Các thiết bdi động bgii hn vkích thước ng dng. Ví dnhư vi  
Series 40 ca Nokia, Samsung X100, V200,… có dung lượng lưu trrt hn  
chế. Sau đây là kích thước ti đa ca file JAR cài đặt trên mt sdòng đin  
thoi:  
Kích thước ti đa ca  
Loi đin thoi  
file JAR  
Nokia series 40  
Motorola T720  
Panasonic X60  
64 KB  
64KB  
80KB  
Sony Ericssion T610, 128KB  
T630  
Samsung X600  
100KB  
14  
Đó là mt skhó khăn mà các lp trình viên thường gp phi khi lp trình cho đin  
thoi di động. Trong gii hn ca đề tài này, em skhông đi cthvào vic gii  
quyết các khó khăn này mà schyếu đi vào vic khác phc thông qua mt skỹ  
thut khi tìm hiu vcác phn khác.  
15  
Chương II: LP TRÌNH VI J2ME  
1. MIDlet và đối tượng Display  
1.1 MIDlet – Vòng đời ca mt MIDlet  
Nếu người nào đã viết Applet thì chc hn thy hai cái tên này na ná nhau. Tht  
vy: MIDlet là viết tt ca “Mobile Information Device applet”,.Hu hết các  
ng dng mà ta thy trên đin thoi di động đều là MIDlet.  
Mt MIDlet kế tha tlp javax.microedition.midlet.MIDlet và thc thi ít nht  
các phương thc cơ bn sau: startApp(), pauseApp(), và destroyApp(). Trong  
mt ng dng ca bn gm có nhiu lp thì có thchcn mt lp kế tha  
MIDlet. Ta sẽ đi vào phân tích tng đon nhmt trong đon code hoàn chnh  
ca mt MIDlet.  
import javax.microedition.lcdui.*;  
import javax.microedition.midlet.*;  
public class test extends MIDlet implements CommandListener{  
private Form mainForm;  
public test(){  
mainForm = new Form("Lap trinh tren nen J2ME");  
mainForm.append(new StringItem(null,"Hello J2ME"));  
mainForm.addCommand(new Command("Exit",Command.EXIT,0));  
mainForm.setCommandListener(this);  
}
public void startApp(){  
Display.getDisplay(this).setCurrent(mainForm);  
}
public void pauseApp(){}  
public void destroyApp(boolean un){}  
public void commandAction(Command c, Displayable s){  
notifyDestroyed();  
16  
}
}
1) Phát biu import: dùng để np các lp cn thiết tthư vin ca CLDC và  
MIDP  
2) Dòng khai báo lp: mt lp(class) test có thể được gi tbt klp khác  
(public), kế tha (extends) tlp MIDlet (hay dhiu hơn là: lp test là mt  
MIDlet) và gi thc thi (implements) các phương thc ca mt interface có  
tên là CommandListener.  
3) Hàm to (Constructor):  
To ra mt form có title là “Lap trinh tren nen J2ME”  
Gn vào form va to mt chui là “Hello J2ME”  
To ra mt nút Exit trên form, tương tác ti nút 0, bn ththay 0 bng 1,2  
xem sao  
setCommandListener: Gn skin cho form  
Hàm to chỉ được gi mt ln khi MIDlet khi to ln đầu tiên, và chỉ được  
gi li khi đã thoát ra khi MIDlet, ri khi động li  
4) startApp():  
Phương thc startApp() được gi khi MIDlet được khi to, và mi khi  
MIDlet trvttrng thái tm dng (pause). Các biến toàn cc sẽ được  
khi to li trhàm to bi vì các biến đã được gii phóng trong hàm  
pauseApp(). Nếu không thì chúng skhông được khi to li bi ng dng.  
5) pauseApp():  
Phương thc pauseApp() được gi mi khi ng dng cn được tm dng (ví  
d, trong trường hp có cuc gi hoc tin nhn đến). Cách thích hp để sử  
dng pauseApp() là gii phóng tài nguyên và các biến để dành cho các chc  
năng khác trong đin thoi trong khi MIDlet được tm dng. Cn chú ý rng  
khi nhn cuc gi đến, hệ điu hành trên đin thoi di động có thdng  
17  
KVM thay vì dng MIDlet. Vic này do nhà sn xut thiết bquyết định sẽ  
chn cách nào.  
6) destroyApp(boolean un):  
Phương thc destroyApp() được gi khi thoát MIDlet. (ví dkhi nhn nút  
exit trong ng dng). Nó chỉ đơn thun là thoát MIDlet.. Phương thc  
destroyApp() chnhn mt tham sBoolean. Nếu tham snày là true,  
MIDlet được tt vô điu kin. Nếu tham slà false, MIDlet có thêm tùy  
chn tchi thoát bng cách ném ra mt ngoi lệ  
MIDletStateChangeException.  
Dưới đây là vòng đời ca mt MIDlet:  
Ngoi trcác phương thc ta đã quen là startApp(), pauseApp(), destroyApp()  
chúng ta thy có thêm 3 phương thc na, đó là: resumeRequest(), notifyPaused(),  
notifyDestroyed().  
Tsơ đồ khi trên, ta thy:  
18  
MIDlet đang ttrng thái PAUSED chuyn đến thc thi phương thc  
startApp() thông qua phương thc resumeRequest(): phương thc này yêu cu  
MIDlet chuyn vào chế độ hot động.  
MIDlet đang trng thái hot động chuyn đến thc thi phương thc  
pauseApp() thông qua phương thc notifyPaused(): phương thc này cho biết  
MIDlet tnguyn chuyn sang trng thái dng.  
MIDlet đang trng thái nào đó chuyn đến thc thi phương thc destroyApp()  
thông qua phương thc notifyDestroyed(): phương thc này cho biết MIDlet đã  
sn sàng để hy.  
Từ đó chúng ta có ththy 3 phương thc mi này đặt MIDlet vào trng thái trung  
gian gia các trng thái khác.  
1.2 Đối tượng Display  
Mi MIDlet có mt tham chiếu đến mt đối tượng Display. Đối tượng này cung  
cp các thông tin vmàn hình cũng như mt sphương thc cn cho vic hin thị  
các đối tượng khác trên màn hình. Có thxem Display là đối tượng có nhim vụ  
qun lý vic hienthca màn hình. Chc năng ca nó là quyết định danh sách các  
thành phn cn xut hin trên màn hình cũng như thi đim phù hp để hin thị  
chúng.  
1.3 Đối tượng Displayable  
Mc dù mi MIDlet chcó duy nht mt đối tượng Display nhưng nó li có thể  
có rt nhiu đối tượng Displayable. Điu đó có nghĩa là mt đối tượng Display có  
thhin thbao nhiêu đối tượng Displayable tùy ý. Đối tượng Displayable là đối  
tượng có thnhìn thy được mt cách trc quan trên màn hình. Bn thân MIDP có  
cha 2 lp con ca Displayable là Screen và Canvas:  
public abstract class Displayable  
public abstract class Canvas extends Displayable  
public abstract class Screen extends Displayable  
19  
2. Giao din người dùng cp cao  
2.1 Đối tượng Display, Displayable và Screens  
Mt ng dng MIDlet chcó 1 đối tượng thhin Display. Đối tượng này dùng để  
ly thông tin vềđối tượng trình bày, ví dmàu được htr, và bao gm các  
phương thc đểyêu cu các đối tượng được trình bày. Đối tượng Display cn thiết  
cho bqun lý vic trình bày trên thiết bịđiu khin thành phn nào sẽđược hin  
thlên trên thiết bMc dù chcó mt đối tượng Display ng vi mi MIDlet,  
nhưng nhiu đối tượng trong mt MIDlet có thểđược hin thra trên thiết bị  
nhưForms, TextBoxes, ChoiceGroups, .. Mt đối tượng Displayable là mt thành  
phn được hin thtrên mt thiết b. MIDP cha 2 lp con ca lp Displayable là  
Screen và Canvas. Hình dưới đây mô tmi quan htrên  
Mt đối tượng Screen không phi là mt cái gì đó hin ra trên thiết b, mà lp Screen  
này sẽđược tha kế bi các thành phn hin thịở mc cao, chính các thành phn này  
sẽđược hin thra trên màn hình. Hình dưới đây smô tmi quan hca lp Screen  
và các thành phn thhin mc cao.  
20  
Tóm li, phn này chgii thiu hthng phân cp đối tượng dùng để thhin giao  
din người dùng trong MIDP.  
2.2 Thành phn Form và Items  
Trong phn này sgii thiu các thành phn được hin thra trên mt Form. Mt  
Form chỉ đơn gin là mt khung cha các thành phn, mà mi thành phn được tha  
kế tlp Item. Chúng ta sxem qua các thành phn hin thtrên thiết b:  
DateField  
Gauge  
StringItem  
TextField  
ChoiceGroup  
Spacer  
CustomItem  
Image and ImageItem  
a) DateField  
21  
Thành phn DateField cung cp mt phương tin trc quan để thao tác đối tượng Date  
được định nghĩa trong java.util.Date. Khi to mt đối tượng DateField, bn cn chrõ  
là người dùng chcó thchnh sa ngày, chnh sa gihay đồng thi chai. Các  
phương thc dng ca lp DateField gm:  
DateField(String  
label,  
int  
mode)  
DateField(String label, int mode, TimeZone timeZone)  
Các mode tương ng ca lp DateField gm:  
DateField.DATE_TIME: cho phép thay đổi ngày giờ  
DateField.TIME: chcho phép thay đổi giờ  
DateField.DATE: chcho phép thay đổi ngày  
Ví d:  
private DateField dfAlarm; // To đổi tượng DateField cho thay đổi cngày và giờ  
dfAlarm = new DateField("Set Alarm Time", DateField.DATE_TIME);  
dfAlarm.setDate(new Date());  
Dưới đây là đon chương trình mu thnghim đổi tượng DateField  
import java.util.*;  
import javax.microedition.midlet.*;  
import javax.microedition.lcdui.*;  
import java.util.Timer;  
import java.util.TimerTask;  
public class DateFieldTest extends MIDlet implements ItemStateListener,  
CommandListener {  
private Display display;  
// Reference to display object  
private Form fmMain; // Main form  
private Command cmExit; // Exit MIDlet  
private DateField dfAlarm; // DateField component  
public DateFieldTest() {  
display = Display.getDisplay(this);  
// The main form  
fmMain = new Form("DateField Test");  
// DateField with todays date as a default  
dfAlarm = new DateField("Set Alarm Time", DateField.DATE_TIME);  
22  
dfAlarm.setDate(new Date());  
fmMain.addCommand(cmExit);  
fmMain.setCommandListener(this);  
fmMain.setItemStateListener(this);  
}
public void startApp () {  
display.setCurrent(fmMain);  
}
public void pauseApp() {}  
public void destroyApp(boolean unconditional) {}  
public void itemStateChanged(Item item) {  
System.out.println("Date field changed.");  
}
public void commandAction(Command c, Displayable s) {  
if (c == cmExit) {  
destroyApp(false); notifyDestroyed();  
}
}
}
b) Gauge  
Mt thành phn Gauge là mt kiu giao din thường được dùng để mô tmc độhoàn  
thành mt công vic. Có 2 loi Gauge là loi tương tác và loi không tương tác. Loi  
đầu cho phép người dùng có ththay đổi Gauge, loi 2 thì đòi hi người phát trin  
phi cp nht Gauge.  
Dưới đây là hàm dng ca lp Gauge:  
Gauge(String label, boolean interactive, int maxValue, int initialValue)  
Ví d:  
private Gauge gaVolume; // Điu chnh âm lượng  
gaVolume = new Gauge("Sound Level", true, 100, 4);  
Dưới đây là đon chương trình mu minh ha cách sdng lp Gauge  
import javax.microedition.midlet.*;  
import javax.microedition.lcdui.*;  
public class InteractiveGauge extends MIDlet implements CommandListener {  
private Display display; // Reference to display object  
private Form fmMain; // The main form  
23  
private Command cmExit; // Exit the form  
private Gauge gaVolume; // Volume adjustment  
public InteractiveGauge() {  
display = Display.getDisplay(this);  
// Create the gauge and exit command  
gaVolume = new Gauge("Sound Level", true, 50, 4);  
cmExit = new Command("Exit", Command.EXIT, 1);  
// Create form, add commands, listen for events  
fmMain = new Form("");  
fmMain.addCommand(cmExit);  
fmMain.append(gaVolume);  
fmMain.setCommandListener(this);  
}
// Called by application manager to start the MIDlet.  
public void startApp() {  
display.setCurrent(fmMain);  
}
public void pauseApp() {}  
public void destroyApp(boolean unconditional) {}  
public void commandAction(Command c, Displayable s) {  
if (c == cmExit) {  
destroyApp(false);  
notifyDestroyed();  
}
}
}
c) StringItem  
Mt thành phn StringItem được dùng để hin thmt nhãn hay chui văn bn. Người  
dùng không ththay đổi nhãn hay chui văn bn khi chương trình đang chy.  
StringItem không nhn ra skin Phương thc dng ca lp StringItem  
StringItem(String label, String text)  
Dưới đây là đon mã minh ha vic sdng đối tượng StringItem  
import javax.microedition.midlet.*;  
import javax.microedition.lcdui.*;  
24  
public class StringItemTest extends MIDlet implements CommandListener{  
private Display display; // Reference to Display object  
private Form fmMain; // Main form private  
StringItem siMsg; // StringItem  
private Command cmChange; // Change the label and message  
private Command cmExit; // Exit the MIDlet  
public StringItemTest() {  
display = Display.getDisplay(this);  
// Create text message and commands  
siMsg = new StringItem("Website: ", "www.IBM.com");  
cmChange = new Command("Change", Command.SCREEN, 1);  
cmExit = new Command("Exit", Command.EXIT, 1);  
// Create Form, add Command and StringItem, listen for events  
fmMain = new Form("StringItem Test");  
fmMain.addCommand(cmExit);  
fmMain.addCommand(cmChange);  
fmMain.append(siMsg);  
fmMain.setCommandListener(this);  
}
// Called by application manager to start the MIDlet.  
public void startApp() {  
display.setCurrent(fmMain);  
}
public void pauseApp() {}  
public void destroyApp(boolean unconditional) {}  
public void commandAction(Command c, Displayable s) {  
if (c == cmChange) {  
// Change label  
siMsg.setLabel("Section: ");  
// Change text  
siMsg.setText("developerWorks");  
// Remove the command  
fmMain.removeCommand(cmChange);  
}
else if (c == cmExit) {  
destroyApp(false);  
notifyDestroyed();  
}
25  
}
}
d) TextField  
Mt thành phn TextField thì tương tnhư bt kcác đối tượng nhp văn bn tiêu  
biu nào. Bn có thchỉ định mt nhãn, ský tti đa được phép nhp, và loi dliu  
được phép nhp. Ngoài ra TextField còn cho phép bn nhp vào mt khu vi các ký  
tnhp vào sẽ được che bi các ký tmt nạ  
Phương thc dng ca lp  
TextField TextField(String label, String text, int maxSize, int constraints)  
Thành phn th3 constraints là thành phn mà chúng ta quan tâm, vì nó là phương  
tin để xác định loi dliu nào được phép nhp vào TextField. MIDP định nghĩa các  
tham sràng buc sau cho thành phn TextField:  
ANY: cho phép nhp bt kký tnào  
EMAILADDR: chcho phép nhâp vào các địa chemail hp lệ  
NUMERIC: chcho phép nhp số  
PHONENUMBER: Chcho phép nhp sốđin thoi  
URL: Chcho phép nhp các ký thp lbên trong URL  
PASSWORD: che tt ccác ký tnhp vào  
Dưới đây là đon mã minh ha vic sdng thành phn TextField  
import javax.microedition.midlet.*;  
import javax.microedition.lcdui.*;  
public class TextFieldTest extends MIDlet implements CommandListener{  
private Display display; // Reference to Display object  
private Form fmMain; // Main form  
private Command cmTest; // Get contents of textfield  
private Command cmExit; // Command to exit the MIDlet  
private TextField tfText; // Textfield  
public TextFieldTest() {  
display = Display.getDisplay(this);  
// Create commands  
cmTest = new Command("Get Contents", Command.SCREEN, 1);  
26  
cmExit = new Command("Exit", Command.EXIT, 1);  
// Textfield for phone number  
tfText = new TextField("Phone:", "", 10, TextField.PHONENUMBER);  
// Create Form, add Commands and textfield, listen for events  
fmMain = new Form("Phone Number");  
fmMain.addCommand(cmExit);  
fmMain.addCommand(cmTest);  
fmMain.append(tfText);  
fmMain.setCommandListener(this);  
}
// Called by application manager to start the MIDlet.  
public void startApp() {  
display.setCurrent(fmMain);  
}
public void pauseApp() {}  
public void destroyApp(boolean unconditional) {}  
public void commandAction(Command c, Displayable s) {  
if (c == cmTest) {  
System.out.println("TextField contains: " + tfText.getString());  
}
else if (c == cmExit) {  
destroyApp(false);  
notifyDestroyed();  
}
}
}
Đon mã trên chmi áp dng mt ràng buc trên đối tượng TextField. Chúng ta có  
ththêm mt ràng buc th2 bng cách thay đon mã sau:  
tfText = new TextField("Phone:", "", 10, TextField.PHONENUMBER |  
TextField.PASSWORD);  
e) ChoiceGroup  
Thành phn ChoiceGroup cho phép người dùng chn tmt danh sách đầu vào đã  
được định nghĩa trước. ChoiceGroup có 2 loi:  
multi-selection(cho phép chn nhiu mc): nhóm này có liên quan đến các  
checkbox  
27  
exclusive-selection(chỉđược chn mt mc): nhóm này liên quan đến nhóm các  
radio button  
Dưới đây là đon mã minh ha cho vic sdng ChoiceGroup:  
import javax.microedition.midlet.*;  
import javax.microedition.lcdui.*;  
public class ChoiceGroupTest extends MIDlet implements ItemStateListener,  
CommandListener {  
private Display display; // Reference to display object  
private Form fmMain; // Main form  
private Command cmExit; // A Command to exit the MIDlet  
private Command cmView; // View the choice selected  
private int selectAllIndex; // Index of the "Select All" option  
private ChoiceGroup cgPrefs; // Choice Group of preferences  
private int choiceGroupIndex; // Index of choice group on form  
public ChoiceGroupTest() {  
display = Display.getDisplay(this);  
// Create a multiple choice group  
cgPrefs = new ChoiceGroup("Preferences", Choice.MULTIPLE);  
// Append options, with no associated images  
cgPrefs.append("Replace tabs with spaces", null);  
cgPrefs.append("Save bookmarks", null);  
cgPrefs.append("Detect file type", null);  
selectAllIndex = cgPrefs.append("Select All", null);  
cmExit = new Command("Exit", Command.EXIT, 1);  
cmView = new Command("View", Command.SCREEN,2);  
// Create Form, add components, listen for events  
fmMain = new Form("");  
choiceGroupIndex = fmMain.append(cgPrefs);  
fmMain.addCommand(cmExit);  
fmMain.addCommand(cmView);  
fmMain.setCommandListener(this);  
fmMain.setItemStateListener(this);  
}
public void startApp() {  
display.setCurrent(fmMain);  
}
public void pauseApp() {}  
public void destroyApp(boolean unconditional) {}  
28  
public void commandAction(Command c, Displayable s) {  
if (c == cmView) {  
boolean selected[] = new boolean[cgPrefs.size()];  
// Fill array indicating whether each element is checked  
cgPrefs.getSelectedFlags(selected);  
for (int i = 0; i < cgPrefs.size(); i++)  
System.out.println(cgPrefs.getString(i) + (selected[i] ? ":  
selected" : ": not selected"));  
}
else if (c == cmExit) {  
destroyApp(false); notifyDestroyed();  
}
}
public void itemStateChanged(Item item) {  
if (item == cgPrefs) {  
// Is "Select all" option checked ?  
if (cgPrefs.isSelected(selectAllIndex)) {  
// Set all checkboxes to true  
for (int i = 0; i < cgPrefs.size(); i++)  
cgPrefs.setSelectedIndex(i, true);  
// Remove the check by "Select All"  
cgPrefs.setSelectedIndex(selectAllIndex, false);  
}
}
}
}
f) Spacer  
Spacer là thành phn không nhìn thy, được dùng để định vtrí cho các đối  
tượng khác trên màn hình hin th. Chúng ta có thdùng Spacer để chrõ khong  
trng theo chiu dc và chiu ngang gia các thành phn, đơn gin bng cách chra  
chiu dài và chiu rng cho tng cái. Vì Spacer là thành phn không nhìn thy nên nó  
không có skin  
g) CustomItem  
29  
Thành phn CustomItem cho phép bn to ra nhng thành phn Item ca chính  
bn. Nhng thành phn này cũng ging như nhng Item khác là cũng có thểđược đặt  
vào trong Form và có thnhn biết và xlý skin  
CustomItem được vlên màn hình hin thbng phương thc paint(). Vì thế nó stùy  
thuc vào đon mã được bn hin thc bên trong phương thc paint(). Quá trình to ra  
mt đối tượng CustomItem cũng không khác các đối tượng có sn trên nn Java.  
Đon mã dưới đây minh ha sườn ca vic to ra mt đối tượng CustomItem  
public class NewItem extends CustomItem {  
public NewItem(String label) {  
super(label);  
...  
}
protected void paint(Graphics g, int width, int height) {  
...  
}
protected int getMinContentHeight() {  
...  
}
protected int getMinContentWidth() { ... }  
protected int getPrefContentHeight(int width) { ... }  
protected int getPrefContentWidth(int height) {  
...  
}
...  
}
h) Image and ImageItem  
Hai lp được dùng để hin thhình nh là: Image và ImageItem. Image được  
dùng để to ra mt đối tượng hình nh và githông tin như là chiu cao và chiu rng,  
và dù nh có biến đổi hay không.  
Lp ImageItem mô tmt tm nh sẽđược hin thnhư thế nào, ví dtm nh sẽ được  
đặt trung tâm, hay đặt vphía bên trái, hay bên trên ca màn hình.  
30  

Tải về để xem bản đầy đủ

pdf 105 trang yennguyen 04/07/2025 40
Bạn đang xem 30 trang mẫu của tài liệu "Luận văn Xây dựng hệ thống đặt vé xe khách chất lượng cao", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfluan_van_xay_dung_he_thong_dat_ve_xe_khach_chat_luong_cao.pdf