Tải bản đầy đủ (.pdf) (101 trang)

Xây dựng ứng dụng tìm đường đi bằng xe buýt tối ưu theo nhiều tiêu chí trên điện thoại windows phone 8

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.77 MB, 101 trang )


TRNG I HC M THÀNH PH H CHÍ MINH
KHOA CÔNG NGH THÔNG TIN








KHÓA LUN TT NGHIP



 tài:
XÂY DNG NG DNG
TÌM NG I BNG XE BUÝT TI U THEO NHIU
TIÊU CHÍ TRÊN IN THOI WINDOWS PHONE 8








- Ging viên hng dn:
Thc s H Quang Khi
- Sinh viên thc hin:
Lê Hu Tài MSSV: 1051012145







Thành
p
h H Chí Minh, thán
g
5 nm 2014
- i -
LI CM N
Trc tiên, em xin gi li tri ân đn quý Thy (Cô) khoa công ngh thông tin –
trng i hc M Thành ph H Chí Minh đã nhit tình ch dy, truyn đt kin thc
cng nh kinh nghim thc t cho em và các bn trong sut quá trình hc tp ti trng.
c bit, em xin gi li cm n sâu sc nht đn Thy Thc s H Quang Khi,
ngi đã ht s
c quan tâm và nhit tình hng dn em trong sut thi gian va qua đ
hoàn thành đ tài t đ án ngành đn khóa lun tt nghip. Bên cnh đó, em xin gi li
cm n chân thành đn Thy Tin s Phan t Phúc đã ch dy và chia s kinh nghim đ
em hoàn thành tính nng s dng bn đ offline cho đ tài.
Cui cùng, em xin gi li chúc sc khe và thành công đn quý Thy, Cô trng
i hc M thành ph
 H Chí Minh nói chung và quý Thy, Cô khoa công ngh thông tin
nói riêng, kính chúc quý Thy (Cô) tht nhiu sc khe và luôn gt hái đc nhiu thành
công trong công vic và trong cuc sng!.
Tp. HCM, tháng 5 nm 2014
Trân trng
Sinh viên Lê Hu Tài
- ii -

NHN XÉT CA GING VIÊN HNG DN































- iii -
MC LC

LI CM N i
NHN XÉT CA GING VIÊN HNG DN ii
DANH MC CÁC BNG vi
DANH MC HÌNH NH vii
DANH MC CÁC T VIT TT ix
LI M U x
CHNG 1: TNG QUAN 1
1.1 t vn đ 1
1.1.1 Thc trng giao thông hin nay 1
1.1.2 Các gii pháp công ngh hin có 1
1.1.3 Lý do chn đ tài 3
1.2 Mc tiêu đ tài 3
1.3 Phng pháp thc hin 3
CHNG 2: C S LÝ THUYT 4
2.1 Tng quan v lp trình Windows phone 8 4
2.1.1 Cài đt môi trng 4
2.1.2 B cc ca mt ng dng 4
2.1.3 Tìm hiu XAML trong lp trình Windows phone 5
2.1.4 Ngôn ng C# trong vic xây dng ng dng trên Windows phone 5
2.1.5 Tìm hiu LINQ To SQL 12
2.2 S dng GPS và A-GPS trên Windows phone 15
2.2.1 Tng quan v GPS 15
2.2.2 Tng quan v A-GPS 15
2.2.3 S dng GPS trên Windows phone 17
2.3 S dng Google maps trong ng dng Windows phone 8 20
2.3.1 Gii thiu control Maps trong Windows phone 8 20

2.3.2 So sánh Bing maps và Google maps 20
2.3.3 Chuyn đi Bing maps sang Google maps 22
- iv -


2.4 Lp trình client – server trên .NET 24
2.4.1 Tng quan v lp trình client – server 24
2.4.2 Xây dng Server h tr s dng bn đ offline 27
2.5 Tng quan v Web service 30
2.5.1 Gii thiu v Web service 30
2.5.2 Xây dng Web service 31
2.6 Google maps API Web services 32
2.6.1 Cú pháp s dng 32
2.6.2 X lý kt qu tr v 32
2.6.3 Google Direction API Service 34
2.6.4 Google Geocoding API Service 37
2.6.5 Google Reverse Geocoding API Service 38
2.6.6 Google Place Autocomplete API Service 39
2.6.7 Google Place API Nearby Search Service 41
2.6.8 Google Place API Radar Search Service 42
2.6.9 Google Place Details API Service 43
2.7 Áp dng công thc hình cu ca cosines (Spherical Law of Cosines) 44
2.7.1 Gii thiu 44
2.7.2 Vn dng 44
2.8 Xây dng phng thc gii mã ta đ
46
2.8.1 Tính cp bách ca vn đ 46
2.8.2 C s ca vic xây dng phng thc gii mã 46
2.8.3 Phng thc gii mã ta đ 50
CHNG 3: XÂY DNG NG DNG 54

3.1 Gii thiu ng dng 54
3.2 T chc c s d liu 55
3.2.1 D liu cc b (Local Database) 55
3.2.2 D liu t Google Maps API Web Services: 58
3.3 Hin thc ng dng 59
3.3.1 Giao din trang ch 59

- v -

3.3.2 Hin th danh sách tuyn xe lên trang tuyn xe 60
3.3.3 Hin th thông tin ca tuyn xe lên trang thông tin 61
3.3.4 Hin th danh sách trm dng theo tng tuyn 62
3.3.5 Hin th l trình xe buýt lên bn đ 64
3.3.6 nh v cá nhân 66
3.3.7 Chc nng tìm kim trm dng 67
3.3.8 Tìm đng đi bng xe buýt 73
3.3.9 Xây dng trang download bn đ 81
3.3.10 S dng pushpin trong ng dng 82
3.3.11 Xây dng màn hình ch tin trình thc hin 84
CHNG 4: KT LUN 85
4.1 Kt qu đt đc 85

4.2 Nhng hn ch 85
4.3 Hng phát trin 85
TÀI LIU THAM KHO 86
PH LC 87

- vi -

DANH MC CÁC BNG

Bng 2.1: Bng mô t mt s kiu d liu đã đc xây dng sn 7
Bng 2.2: Bng tóm tt các thuc tính truy cp ca mt lp trong C# 11
Bng 2.3: Bng so sánh A-GPS và GPS trên mt s lnh vc 16
Bng 2.4: Bng so sánh GeoCoordinateWatcher class và Geolocator class 17
Bng 3.1: Bng TUYENXE 56
Bng 3.2: Bng TRAMDUNG 57
Bng 3.3: Bng LUOT 57
Bng 3.4: Bng LOTRINH
57
Bng 3.5: Bng các thuc tính ca pushpin 82
- vii -

DANH MC HÌNH NH
Hình 2.1: Mô hình hot đng ca LINQ To SQL 12
Hình 2.2: Cách thc hot đng ca A-GPS 16
Hình 2.3: So sánh Bing maps vi Google maps 21
Hình 2.4: Mô hình chung ca mt ng dng client – server có kt ni (TCP) 25
Hình 2.5: Mô hình hot đng ca server h tr s dng bn đ offline 28
Hình 2.6: Cu trúc ca mt bn tin yêu cu HTTP 28
Hình 2.7: Cu trúc ca mt bn tin tr li HTTP 29
Hình 2.8: Danh mc trng thái trong thông đip server gi client 29
Hình 2.9: Kin trúc Web service 30
Hình 2.10: Minh ha chc nng AutoComplete 39
Hình 2.11: Lc đ xây d
ng phng thc v hình tròn t mt đim và bán kính 45
Hình 2.12: Lc đ 11 bc mã hóa thành phn points 47
Hình 2.13: S đ 11 bc gii mã ta đ 51
Hình 2.14: Lc đ xây dng phng thc gii mã ta đ. 52
Hình 3.1: S đ chc nng ca ng dng 54
Hình 3.2: S đ liên kt c s d liu ca ng dng 55

Hình 3.3: Mô hình client – server ca ng dng 58
Hình 3.4: Giao din trang ch
 trc và sau khi chn tuyn xe 59
Hình 3.5: Giao din trang tuyn xe 60
Hình 3.6: S đ phân tích chc nng trang tuyn xe
60
Hình 3.7: S đ phân tích chc nng hin th thông tin tuyn xe 61
Hình 3.8: Giao din trang thông tin trc và sau khi chn tuyn xe 61
Hình 3.9: S đ phân tích chc nng hin th trm dng theo tuyn xe 62
Hình 3.10: Giao din trang trm dng 62
- viii -
Hình 3.11: Giao din hin th danh sách trm dng lên bn đ 63
Hình 3.12: S đ phân tích chc nng hin th l trình lên bn đ 64
Hình 3.13: S đ xây dng hàm v l trình ca tuyn xe buýt lên bn đ 64
Hình 3.14: Giao din hin th l trình di chuyn ca tuyn xe lên bn đ 65
Hình 3.15: Giao din hin th v trí ngi dùng lên bn đ 66
Hình 3.16: S đ phân tích chc nng tìm kim trm dng theo mã trm 67
Hình 3.17: Giao din chc nng tìm kim trm dng theo mã trm 68
Hình 3.18: S đ phân tích chc nng tìm kim trm dng t mt đim và bán kính 69
Hình 3.19: S đ phân tích chc nng nhp đa ch ti hp tìm kim 70
Hình 3.20: Xác đnh v trí tìm trm dng 71
Hình 3.21: Giao din hin th kt qu tìm trm dng 72
Hình 3.22: S
 đ phân tích chc nng tìm đng đi bng xe buýt 74
Hình 3.23: Xác đnh đim bt đu và kt thúc bng cách nhp đa ch trc tip 75
Hình 3.24: La chn đim bt đu hay kt thúc trên bn đ 76
Hình 3.25: Giao din trang download bn đ 81
Hình 3.26: Các pushpin đc s dng trong ng dng 82
Hình 3.27: Giao din màn hình ch tin trình thc thi 84
- ix -


DANH MC CÁC T VIT TT
A-GPS Assisted - Global Positioning System
API Application Programming Interface
BTS Base Transceiver Station
CSDL C s d liu
GPS Global Positioning System
HTTP HyperText Transfer Protocol
IEEE Institute of Electrical and Electronics Engineers
IP Internet Protocol
LINQ Language Integrated Query
PDA Personal Digital Assistant
SDK Software Development Kit
SOAP Simple Object Access Protocol
SQL Structure Query Language
TCP Transmission Control Protocol
UDP User Datagram Protocol
XAML Extensible Application Markup Language
XML Extensible Markup Language

- x -

LI M U
Hin nay, nhu cu đi li bng xe buýt ca ngi dân ngày càng tng cao kéo theo
đó là nhu cn tìm các tuyn xe buýt, trm dng, đng đi cng tng lên đáng k. Tuy
nhiên, vi mt bn đ lu thông xe buýt bng giy nh hin nay, vic tìm kim mt tuyn
xe buýt gây rt nhiu khó khn cho ngi dân trong vic đi li, đc bit là đi vi hc
sinh, sinh viên, ngi dân mi đn thành ph. Còn đ
i vi ngi dân đã “quen” vi vic
s dng dch v xe buýt thì nhu cu cn tìm mt l trình theo ý mình nh thi gian đi

nhanh nht, ít tn chi phí nht, thi gian đi b ngn nht hoc s tuyn đi ít nht là mt
điu rt cn thit. Do đó, cn phi có mt tin ích h tr ngi dùng tìm đng đi bng xe
buýt theo nhiu tiêu chí giúp cho vic đ
i li ca ngi dân nhanh chóng và hiu qu hn.
Nhng nm gn đây, ngành đin thoi di đng phát trin vt bc. Smartphone ra
đi làm thay đi nhn thc ca con ngi v đin thoi di đng. Vi mt chic
smartphone nh, gn trong tay, ngi s dng có th làm mi điu mình thích, t các
chc nng c bn truyn thng nh nghe, g
i, nhn tin,…đn các chc nng nâng cao nh
lt web, xem phim, nghe nhc, đnh v GPS, xem bn đ trc tuyn,…Song, s lng
các phn mm h tr ngi dùng tìm đng đi bng xe buýt là rt ít và còn nhiu hn ch.
Xut phát t thc t đi li và các gii pháp công ngh hin có, em đã xây dng
ng dng tìm đng đi bng xe buýt ti u theo nhiu tiêu chí trên đin tho
i Windows
phone 8. ng dng là s kt hp gia d liu v các tuyn xe buýt, trm dng vi bn đ
Google maps và truy xut thông tin t các cng Google maps API Web services đ to
nên ng dng hoàn chnh kt hp vi giao din đp, giúp vic đi li ca ngi dùng tr
nên d dàng, nhanh chóng và hiu qu.
Khóa lun đc thc hin trong khong thi gian t tháng 3/2014 đn cui tháng
05/2014 và đc phát tri
n t đ án ngành. ây là kt qu nghiên cu trong sut quá trình
tìm kim, thu thp d liu v các tuyn xe, trm dng vi mc tiêu là xây dng mt ng
dng tìm đng đi bng xe buýt theo nhiu tiêu chí, bên cnh đó, ng dng cng phi có
chc nng cho phép ngi dùng tra cu thông tin, tìm kim trm dng, đnh v cá nhân,…
Báo cáo khóa lun tt nghip đc chia làm 4 phn chính:
CHNG 1: TNG QUAN
CHNG 2: C S LÝ THUYT
CHNG 3: XÂY DNG NG DNG
CHNG 4: KT LUN
Tuy đã rt c gng, tìm hiu, hc hi đ thc hin đ tài, song do kh nng vn

dng còn hn ch, thi gian thc hin không nhiu, lng kin thc tip thu còn hp nên
phn báo cáo và ng dng ca em còn nhiu thiu sót. Em xin ghi nhn tt c ý kin đ
óng
góp t quý Thy (Cô), các bn sinh viên,…đ ng dng ngày càng đc hoàn thin hn.
Trân trng
Sinh viên Lê Hu Tài

Trang 1

CHNG 1: TNG QUAN
1.1 t vn đ
1.1.1 Thc trng giao thông hin nay
Thành ph H Chí Minh cùng vi th đô Hà Ni và các thành ph ln chính là
đng lc đ phát trin c v kinh t, vn hóa, xã hi, thng mi, khoa hc, giáo dc,
v.v… cho đt nc. Tuy nhiên, h thng giao thông ti đây rt phc tp vi kt cu
đng xá chn cht, gây khó khn cho ngi dân trong vic đi li. Vn nn kt xe, tình
tr
ng ách tách giao thông xy ra thng xuyên vào gi cao đim gây bc xúc trong nhân
dân. Vn đ trên đòi hi cn phi có mt gii pháp đ gii quyt bài toán v giao thông.
Hng nm, các thành ph ln đón nhn hàng ngàn hc sinh, sinh viên, công nhân,
ngi dân t nhiu tnh, thành trong c nc v hc tp, sinh sng và làm vic. S lng
xe máy quá đông đc xem là mt trong nhng nguyên nhân gây nên tình trng kt xe ti
đây. Do đó, đ kéo gi
m tình trng ùn tc giao thông đòi hi cn có mt gii pháp hn ch
s lng xe gn máy trên đng nhng đng thi phi bo đm không nh hng đn
vic đi li ca ngi dân.
Nhng nm qua, thành ph tp trung vào vic hoàn thin và nâng cao cht lng
ca loi hình đi li bng phng tin xe buýt. Thc t hin nay, nhu cu đi l
i bng xe
buýt ca ngi dân ngày càng tng cao kéo theo đó là nhu cu tìm các tuyn xe, trm

dng, đng đi cng tng lên đáng k.
Tuy nhiên, bên cnh nhng mt đt đc, vn còn có nhiu hn ch khin phng
tin này cha tht s tr thành ngi bn đng hành ca nhân dân trong vic đi li hng
ngày. Thông tin v các tuyn xe, trm dng cha tht s đáp 
ng đc yêu cu đa dng,
mi lúc, mi ni ca ngi dùng. Mt bn đ xe buýt bng giy vi vô s các tuyn xe
gây khó khn cho ngi dân trong vic đi li nht là đi vi hc sinh, sinh viên, ngi
dân mi đn thành ph. Còn đi vi ngi dân đã “quen” vi vic s dng dch v xe
buýt thì nhu cu cn tìm mt l trình theo ý mình nh thi gian đi nhanh nht, ít t
n chi
phí nht, thi gian đi b ít nht hoc s tuyn đi ít nht là mt điu rt cn thit.
Thc trng trên đòi hi cn phi có mt gii pháp giúp ngi dân trong vic tìm
kim thông tin các tuyn xe, trm dng và tìm đng đi bng xe buýt theo nhiu tiêu chí
mt cách chính xác, nhanh chóng và hiu qu.
1.1.2 Các gii pháp công ngh hin có
Mc dù có nhiu phng pháp, cách thc đ h tr cho vic đi li, song không phi
phng pháp nào cng mang li hiu qu tt nht. Vic s dng bn đ giao thông bng
giy gây rt nhiu khó khn cho ngi dân nhng đôi khi li không chính xác. Trong khi
đó, nu s dng bn đ online trên các thit b nh máy tính bàn, laptop, máy tính
bng…nhng sn phm này mc dù cho hiu qu tt nhng li không phù hp khi giao
thông vì quá cng knh, l
i kém an toàn cho ngi s dng. Vn đ đt ra là cn phi có
Trang 2
mt thit b va gn, nh nhng phi có kh nng h tr bn đ, h tr vic tìm đng đi
nhanh chóng, hiu qu cho ngi s dng.
Nhng nm gn đây, ngành đin thoi di đng phát trin vt bc. Smartphone ra
đi làm thay đi nhn thc ca con ngi v đin thoi di đng. Vi mt chic
smartphone nh, gn trong tay, ngi s dng có th làm mi điu mình thích, t các
chc nng c bn, truyn thng nh nghe, gi, nhn tin,…đn các chc nng nâng cao
nh lt web, xem phim, nghe nhc, đnh v GPS, xem bn đ trc tuyn,… Smartphone

dn dn tr thành ngi bn đng hành ca con ngi trong xã hi hin nay. Do đó, vic
xây dng mt phn mm tìm đng
đi trên đin thoi là gii pháp ti u nht.
Ngành công nghip smartphone hin nay có nm nn tng h điu hành chính là:
Windows phone, Symbian, iOS, Android, webOS gn lin vi nhng “gã khng l” trong
ngành công ngh nh: Microsoft, Apple, Google,… Th trng phn mm phát trin trên
nn đin thoi di đng ngày càng phong phú và đa dng. Tuy nhiên, s lng các phn
mm h tr ngi dùng tìm đng đi bng xe buýt ti Vit Nam l
i rt khiêm tn, đn c
ch có mt vài phn mm nh: BusMap, BUSITUS,… Do đó, vic xây dng và phát trin
mt phn mm tìm đng đi bng xe buýt trên smartphone là mt điu rt cn thit.
Trong nm nn tng h điu hành trên, thì h điu hành Windows phone 7 ca tp
đoàn hàng đu th gii – Microsoft – mc dù là h điu hành ra đi sau cùng nhng li
có nh
ng tính nng thân thin hn vi ngi dùng. Vi Windows phone, Microsoft đã
phát trin giao din ngi dùng mi mang tên Metro – tích hp kh nng liên kt vi các
phn cng và phn mm ca hãng th ba mt cách d dàng. c bit, vi phiên bn
Windows phone 8 tung ra th trng vào ngày 29 tháng 10 nm 2012 đc xem là s k
tha và phát huy hn na so vi Windows phone 7.
Phiên bn Windows phone 8 đã thay th lõi kin trúc Windows CE trên Windows
phone 7 thành kernel ca
Windows NT vn đc thit k cho Windows 8, chính vì vy
làm cho ng dng d dàng kt ni (port) gia hai h điu hành. Ngoài ra, Windows phone
8 còn h tr CPU đa nhân, nhiu đ phân gii, tùy bin Start Screen, kèm phiên bn di
đng ca Internet Explorer 10, tích hp Nokia Maps, giao din thân thin hn. Vic lp
trình trên Windows phone nhìn chung là s dng ngôn ng C#, mt trong nhng ngôn
ng lp trình hin đi và ph bin nht hin nay, góp phn to thun li cho các nhà phát
trin. Bên cnh đó, các nhà phát trin có th to nên các ng dng sinh đng, hp dn
bng vic lp trình d
a trên hai công ngh là Silverlight và XNA.

Song, có mt thc t là, ngi dùng Windows phone 7 và 8 cho đn thi đim hin
ti vn không th truy cp Google maps t trình duyt Web trên đin thoi ca h. ây
đc xem là mt s “thit thòi” ca ngi dùng Windows phone so vi Android và iOS,
bi s cnh tranh trong kinh doanh gia hai “gã khng l” Microsoft và Google. Các
phn mm tìm đng đi bng xe buýt ti Vit Nam trên Windows phone 8 là rt ít, đn c
ch có m
t vài phn mm nh: BusMap,…Do đó, vic xây dng và phát trin mt ng
dng tìm đng đi bng xe buýt trên đin thoi Windows phone 8 là rt cn thit.
Trang 3
1.1.3 Lý do chn đ tài
Xut phát t yêu cu cp bách ca thc t đi li và các gii pháp công ngh hin có
chính là c s đ em xây dng mt ng dng tìm đng đi bng xe buýt trên smartphone
chy h điu hành Windows phone 8, ti u theo bn tiêu chí là thi gian đi nhanh nht, ít
tn chi phí nht, thi gian đi b ít nht và s tuyn đi ít nht.
1.2 Mc tiêu đ tài
Xây dng mt ng dng tìm đng đi bng xe buýt trên smartphone chy h điu
hành Windows phone 8 vi tính nng sau:
 S dng bn đ Google maps  hai ch đ là: online và offline.
 nh v GPS, giúp xác đnh v trí ngi dùng lên bn đ.
 Xem thông tin ca tng tuyn xe, danh sách tt c trm dng mà tuyn xe đi qua,
đng thi hin th l trình di chuyn ca tuyn xe lên bn đ Google maps.
 Tìm kim trm dng theo hai c ch: tìm trm dng theo mã trm và tìm trm
dng t mt v trí vi bán kính tìm kim đc ch đnh bi ngi dùng.
 Chc nng tìm đng vi nhiu tùy chn phong phú: hin th tt c kt qu tìm
đc hoc ti u theo bn tiêu chí là thi gian đi nhanh nht, tn chi phí ít nht,
thi gian đi b ít nht và s tuyn đi ít nht.
1.3 Phng pháp thc hin
ng dng đc phát trin trên môi trng Microsoft Visual Studio 2012 (đã cài b
Windows Phone Software Development Kit – b công c dùng đ phát trin ng dng
Windows phone). Bên cnh đó, giao din ca ng dng còn đc thit k bng phn mm

Microsoft Expression Blend to nên giao din đp, hp dn ngi s dng.
C s d liu ca ng dng tp trung vào vic qun lý thông tin, l trình di chuyn
ca các tuyn xe buýt t
i thành ph H Chí Minh, và đc xây dng trên môi trng
Microsoft SQL Server 2008 đm bo tính toàn vn và ràng buc cho d liu.
Ti thi đim thc thi, ng dng s truy xut thông tin t dch v Google maps
API Web services phc v cho thao tác tìm kim trm dng và tìm đng đi bng xe buýt
gia hai đim trên bn đ.
ng dng đã hin thc thành công vic chuyn đi bn đ Bing maps mc đnh
ca Windows phone bng bn đ Google maps to thun li hn cho ngi dùng trong
vic s dng bn đ online.
Bên cnh đó, vic lp trình mng bng socket trên môi trng .NET đã đc s
dng đ xây dng server chy trên localhost ca ng dng nhm hin thc tính nng s
dng bn đ offline.

Trang 4
CHNG 2: C S LÝ THUYT
2.1 Tng quan v lp trình Windows phone 8
2.1.1 Cài đt môi trng
Vic xây dng ng dng Windows phone 8 đc phát trin trên môi trng
Microsoft Visual Studio 2012 kèm theo b công c Windows phone SDK (Software
Development Kit) hoc Microsoft Visual Studio 2013 (đã tích hp Windows phone
SDK).
Giao din ng dng còn đc phát trin trên Microsoft Expression Blend.
C s d liu đc xây dng trên môi trng Microsoft SQL Server 2008.
2.1.2 B cc ca mt ng dng
 Xét v tng th, ng dng Windows phone 8 bao gm 2 phn:
o Các trang .xaml dùng đ thit k giao din ng dng.
o Trang code behind (.cs) dùng đ lp trình cho các chc nng ca ng dng.
 Xét v thành phn chính, mt ng dng Windows phone 8 bao gm:


.
o AppManifest.xml: file cu hình cho
ng dng trc khi xut ra file xap
(dùng đ cài đt trên đin thoi).
o AssemblyInfo.cs: mt file cu hình
khác ca ng dng, cha thông tin v
tên và version.
o WMAppManifest.xml: là mt file cu
hình khác cha thông tin v tên, icon,
trang mc đnh s bt đu ca ng
dng. ây cng là file đ ngi s
dng bt các ID phc v cho các lp.
o Th mc references: ch
a các th
vin cn thit cho vic s dng các
lp.
o App.xaml: file cu hình ca ng
dng. Khi ng dng khi chy thì file
App.xaml s đc “quét” trc đ
kim tra cu hình ca ng dng.
o App.xaml.cs: trang code-behind cha
các đon mã ca trang App.xaml.
Trang 5
o ApplicationIcon.png: hình nh đi din cho ng dng khi đc cài đt trên đin
thoi.
o Backgroung.png: nh nn ca ng dng trên màn hình chính ca đin thoi.
o MainPage.xaml: đây chính là trang mc đnh đ xây dng ng dng, ng dng
cng có th to thêm nhiu trang hn na tùy thuc vào mc đích s dng.
o MainPage.xaml.cs: đây là trang code-behind ca trang MainPage.xaml, là ni

x lý các ch
c nng, s kin ca trang MainPage.xaml.
o SplashScreenImage.png: nu ng dng phi mt thi gian đ load d liu thì
nh này s hin ra, nhng ch xut hin vào ln đu khi chy ng dng.
2.1.3 Tìm hiu XAML trong lp trình Windows phone
XAML là t vit tt ca Extensible Application Markup Language, là ngôn ng
đánh du dùng đ th hin các đi tng trong .NET, là mt bin th ca XML
(Extensible Markup Language). XAML cho phép ng
i dùng khi to các đi tng và
các thuc tính cho tng đi tng theo c ch m th/đóng th, đng thi còn cho phép t
chc các đi tng theo mô hình th bc.
Trong Windows phone, XAML đc s dng trong vic to lp giao din ngi
dùng. Có th nói, XAML giúp quy trình làm vic gia các cá nhân trong quá trình xây
dng và phát trin ng dng đc đn gin hn do kh nng “tách bit” phn thit k
giao di
n (designer) vi phn lp trình logic (coder) cho ng dng.
XAML cho phép ngi dùng thit k giao din ca ng dng Windows phone trên
c hai môi trng là Visual Studio và Expression Blend. Bên cnh đó, “sc mnh” ca
XAML còn th hin trong vic binding c s d liu vào mt thành phn (element) đc
ch đnh trong XAML.
2.1.4 Ngôn ng C# trong vic xây dng ng dng trên Windows phone
2.1.4.1. Gii thiu v C#
C# là ngôn ng lp trình hin đi đc xây dng da trên nn tng ca hai ngôn
ng lp trình mnh nht là C++ và Java. C# đc phát trin bi đi ng các k s ca
Microsoft trong đó tâm đim là Anders Hejlsberg và Scott Wiltamuth. Nhng đc tính ca
mt ngôn ng lp trình hin đi nh vic x lý ngoi l, thu gom b nh t đng, nhng
kiu d liu m rng và bo mt mã ngun…đu có trong C#.
C# ngôn ng
 lp trình đn gin, vi vic loi b mt vài s phc tp và ri rm
ca nhng ngôn ng lp trình trc đó nh Java và C++, bao gm vic loi b nhng

macro, nhng template, đa k tha, và lp c s o (virtual base class), do đó to thun
li hn cho các nhà phát trin ng dng bng C#. C# đn gin vì phát trin da trên nn
t
ng C/C++ nhng đc ci tin đ làm cho ngôn ng ngày càng d tip cn hn. Mt
trong nhng ci tin đó là loi b s d tha, hoc thêm nhng cú pháp mi. Chng hn
nh vic thay th ba toán t trong C++ là ::, . , và -> bng mt toán t duy nht là . (dot).
Trang 6
C# là ngôn ng lp trình hng đi tng. C# h tr tt c các đc tính ca mt
ngôn ng hng đi tng (Object-oriented language) bao gm s đóng gói
(encapsulation), s k tha (inheritance), và tính đa hình (polymorphism).
C# là ngôn ng mnh m nhng cng rt mm do. C# ch b gii hn bi kh
nng s dng ca ngi dùng. Hin nay, C# đc s dng cho nhiu d án khác nhau nh

là to ra ng dng x lý vn bn, ng dng đ ha, bn tính, hay thm chí nhng trình
biên dch cho các ngôn ng khác.
C# là ngôn ng ít t khóa, ch hn 80 t khóa và mi my kiu d liu. ó là mt
trong nhng lý do làm cho C# tr thành mt trong nhng ngôn ng đc s dng ph
bin nht hin nay.
Trong Windows phone, C# là ngôn ng lp trình chính, đóng vai trò ch đo trong
vic xây dng và phát tri
n ng dng.
2.1.4.2. Nn tng ngôn ng C#
2.1.4.2.1. Kiu d liu
Kiu d liu ca mt đi tng là mt tín hiu đ trình biên dch nhn bit kích
thc và kh nng ca đi tng đó (chng hn kiu int có kích thc là 4 byte hay mt
đi tng button có th v và phn ng khi nhn,…).
C# là mt ngôn ng mnh v kiu d liu. Kiu d liu trong C# đc phân chia
theo hai góc đ sau:
 Góc đ 1: kiu d liu đc phân làm hai tp hp đó là kiu d liu đã đc xây
dng sn (built – in) mà ngôn ng cung cp và kiu d liu do ngi lp trình t

đnh ngha (user – defined).
 Góc đ 2: kiu d liu bao gm kiu d liu giá tr (value) và kiu d liu tham
chiu (reference). Vi
c phân chi này da trên s khác nhau trong vic lu kiu d
liu giá tr và tham chiu trong b nh. i vi mt kiu d liu giá tr thì s đc
lu đúng kích thc tht trong b nh đã cp phát là stack. Trong khi đó thì đa ch
ca kiu d liu tham chiu thì đc lu trong stack nhng đi tng tht s thì
lu trong b nh heap. Vic l
u đi tng trong b nh heap rt có ích đi vi các
đi tng có kích thc ln.
Tt c các kiu d liu xây dng sn là kiu d liu giá tr ngoi tr các đi tng
và chui. Và tt c các kiu d liu do ngi dùng đnh ngha ngoi tr kiu d liu cu
trúc đu là kiu d liu tham chiu.
Trang 7
Bng 2.1: Bng mô t mt s kiu d liu đã đc xây dng sn
Kiu C# S byte Kiu .NET tng ng Mô t
byte 1 Byte
S nguyên dng không du t 0-
255
char 2 Char Kí t Unicode
bool 1 Boolean Giá tr logic (true/false)
sbyte 1 sbyte S nguyên có du (t -128 đn 127)
short 2 Int16
S nguyên có du giá tr t -32768
đn 32767.
ushort 2 Uint16 S nguyên không du t 0 – 65535
int 4 Int32
S nguyên có du t –2.147.483.647
đn 2.147.483.647
uint 4 Uint32

S nguyên không du t 0 –
4.294.967.295
float 4 Single
Kiu du chm đng, giá tr xp x t
3,4E-38 đn 3,4E+38, vi 7 ch s
có ngha.
double 8 Double
Kiu du chm đng có đ chính xác
gp đôi, giá tr xp x t 1,7E-308
đn 1,7E+308, vi 15, 16 ch s có
ngha.
decimal 8 Decimal
Có đ chính xác đn 28 con s, đc
dùng trong tính toán tài chính, kiu
này đòi hi phi có hu t “m” hay
“M” theo sau giá tr.
long 8 Int64
Kiu s nguyên có du có giá tr
trong khong :
-9.223.370.036.854.775.808 đn
9.223.372.036.854.775.807
ulong 8 Uint64
S nguyên không du t 0 đn
0xffffffffffffffff

Trang 8
2.1.4.2.2. Bin (variable)
Bin là đi lng đc dùng đ lu tr thông tin v các đi tng vi giá tr c
th, xác đnh ti mi thi đim trong chng trình. Giá tr ca bin có th đc thay đi
bng phép gán (=).

Trong C#, cú pháp đ khai báo bin có dng nh sau:
<tên kiu> <danh sách các bin>
Trong đó :
 <tên kiu> là mt kiu d liu hp l bt k trong C#.
 <danh sách các bin> là mt hay nhiu bin, đc phân cách bng du ‘,’.
Trong trng hp cn thit, có th khi to giá tr trc tip cho bin trong câu lnh
khai báo: <tên kiu> <tên bin> = <giá tr>;
2.1.4.2.3. Hng (constant)
Bn cht ca hng chính là bin nhng giá tr ca hng s không thay đi trong
sut thi gian tn ti ca nó.
Trong C#, khai báo hng thng đc đt trong phn khai báo toàn cc  đu
chng trình, ngay sau các khai báo tin x lý. Có hai cách đ khai báo hng:
 Dùng ch th tin x lý: #define <tên hng><chui thay th>
 Dùng t khóa const: const <tên kiu><tên hng> = <giá tr>;
2.1.4.2.4. Các cu trúc điu khin
Hu ht các thut toán đu có th cài đt bng 3 cu trúc c bn sau:
 Cu trúc tun t: các câu lnh đc thc hin theo th t t trên xung và t trái
sang phi.
 Cu trúc r nhánh và la chn: cu trúc này dùng đ “d đoán và đáp ng” tt c
các trng hp có th có ca thut toán, nhm đm bo tính đúng đn ca chng
trình.
 Cu trúc lp: lp vòng quá trình thc thi câu lnh. Khi s dng cu trúc lp, phi
đm bo tính dng cho vòng lp, tránh trng hp quá trình lp din ra vô tn,
không có đim dng.
Trong C#, cu trúc r nhánh đc hin thc thông qua câu lnh if …else… vi cú
pháp nh sau:
If (<điu kin>) <lnh 1>;
[else <lnh 2>;]
Trong đó:
 <điu kin> thng là mt biu thc logic.

Trang 9
 Phn else là không bt buc phi có. Trng hp câu lnh if không có phn
else đc gi là câu lnh if “thiu”.
 <lnh 1>, <lnh 2> có th là câu lnh đn, hoc câu lnh ghép, hoc câu lnh
điu khin.
Ý ngha: nu <điu kin> tha (giá tr là true) thì thc hin <lnh 1>, ngc li thì
thc hin <lnh 2>. Nh vy, <lnh 1>, <lnh 2> đc thc hin thông qua giá tr
đúng/sai ca <điu kin>.
Câu lnh if…else… có th đc m rng thành câu lnh if… else… lng nhau, tuy
nhiên, v bn cht câu lnh if…else là không thay đi.
Trong C#, cu trúc la chn đc hin thc thông qua câu lnh switch…case…
vi cú pháp nh sau:
switch (<biu thc điu kin>)
{
Case <value 1>: [<lnh 1>; break; ]
Case <value 2>: [<lnh 2>; break; ]
…….
Case <value n>: [<lnh n>; break; ]
[default: <l
nh>; break; ]
}
Ý ngha: nu giá tr ca <biu thc điu kin> trùng vi value ca case nào thì câu
lnh ti case đó s đc thc thi cho đn khi gp lnh break thì kt thúc câu lnh
switch(…). Vic s dng câu lnh này, đòi hi cui mi case phi có lnh break nhm
đm bo tính đúng đn cho chng trình.
Vic s dng câu lnh switch(…) là mt trng hp bin th ca ca câu lnh
if…else… Mt câu lnh switch(…) dù phc tp đn đâu cng đu có th chuy
n đi
thành công sang câu lnh if…else… Nhng, mt câu lnh if…else… cha chc có th
chuyn đi thành công sang câu lnh switch(…). Nguyên nhân ca s khác bit đó là do

câu lnh switch(…) ch có th xét điu kin  mt biu thc nht đnh, sau đó so sánh giá
tr ca biu thc đó vi tng case c th. Trong khi đó, trong câu lnh if…else… biu
thc điu kin có th đc tùy bin (ch
ng hn câu lnh if ban đu xét điu kin A, nhng
câu lnh if sau có th xét điu kin B, v.v…).
Vic s dng câu lnh switch(…) hoc if…else… là tùy thuc vào tình hung s
dng. i vi trng hp ch xét điu kin trên mt biu thc và giá tr ca biu thc đó
có nhiu kt qu thì s la chn câu lnh switch(…) trong trng hp này là cn thit.
Trong C#, cu trúc lp đc hin thc thông qua 3 cu trúc sau:
 Cu trúc lp while(…) vi cú pháp:
while (<điu kin>) <lnh>;
Trong đó:
o <điu kin> là mt biu thc logic.
Trang 10
o <lnh> có th là lnh đn, khi lnh, hoc câu lnh điu khin. Trong đó, có
ít nht mt câu lnh trong <lnh> có tác dng làm thay đi vic đánh giá li
<điu kin> sau mi ln lp nhm đm báo tính dng cho vòng lp.
Ý ngha: khi nào điu kin còn tha thì còn thc hin <lnh>.
 Cu trúc lp for(…)
Cú pháp:
for ( [<phn khi to>] ; [<điu kin>] ; [<phn hiu chnh>] ) <lnh>;
Trong đó:
o <phn khi to> là mt hay nhiu biu thc gán (đc phân cách vi nhau
bi du ‘,’) có nhim v khi to giá tr ban đu cho các bin.
o <điu kin> thng là biu thc logic.
o <phn hiu chnh> là mt hay nhiu biu thc gán (đc phân cách bi
du ‘,’) có nhim v thay đi tr ca các bin  <phn khi to>.
o
<lnh> có th là câu lnh đn, khi lnh, hoc câu lnh điu khin.
Ý ngha: khi nào điu kin còn tha thì còn thc hin lnh.

Trong vòng lp for(…) thì phn khi to ch đc thc hin đúng mt ln, <phn hiu
chnh> có nhim v làm thay đi vic đánh giá li <điu kin> sau mi ln lp nhm đm
bo tính dng cho vòng lp. Vòng lp for( ; ; ) <lnh>; là vòng lp vô hn, không có đim
dng.
 Cu trúc lp do…while (…)
Cú pháp:
do{
<lnh>;
}while (<điu kin>);
Trong đó:
o <điu kin> thng là biu thc logic.
o <lnh> có th là câu lnh đn, khi lnh, hoc câu lnh điu khin. Trong
<lnh> phi có ít nht mt câu lnh làm thay đi vic đánh giá li điu kin sau
mi ln lp nhm đo bm tính dng cho vòng lp.
Ý ngha: thc hin <lnh> cho đn khi <điu kin> không còn tha.
Vic s dng ba cu trúc lp trên có nhng đim chung, đim riêng sau:
 im chung:
o u lp vòng thc thi mt s câu lnh tha điu kin.
o Trong các câu lnh thc thi  mi ln lp, phi có ít nht mt câu lnh làm thay
đi li vic đánh giá li điu kin lp nhm đm bo tính dng cho vòng lp.
Trang 11
o Cu trúc lp while (…) và for (…) có th đc chuyn đi cho nhau.
 im riêng:
o Phn <lnh> ca vòng lp do…while (…) luôn đc thc hin ít nht mt ln
do <điu kin> đc kim tra sau khi thc hin lnh.
o Phn <lnh> ca vòng lp while (…) và for (…) có th không đc thc hin
ln nào, do <điu kin> đc xét trc khi thc hin lnh.
2.1.4.2.5. C# và lp trình hng đi tng
Lp trình hng đi tng v bn cht là to ra các kiu d liu mi. Mi kiu d
liu đó đc đóng gói vi nhng thuc tính và phng thc riêng đc trng cho kiu d

liu đó.
Trong C#, vic xây dng các kiu d liu mi đc thc hin bng cách khai báo
và đnh ngha các lp (class). M
i th hin ca lp đc gi là mt đi tng.
Trong Windows phone, vic xây dng các class có ý ngha đc bit gn lin vi c
s d liu (CSDL) ca ng dng. Theo đó, mi bng (table) trong CSDL s ng vi mt
class trong C#. Các bin thành viên ca class chính là các ct (field) trong CSDL. Các
phng thc ca class là các hàm giao tip vi CSDL (chng hn nh phng thc ly
thông tin, cp nht thông tin,…).
Khi mt đi tng đc khi to thì phng thc thit lp ca đi tng đó s
đc gi đu tiên. Phng thc thit lp có th là phng thc không tham s, hoc có
tham s hoc c hai.
Trong vic xây dng các class thì thuc tính truy cp có ý ngha rt quan trng,
quyt đnh kh nng các phng thc ca lp cng nh các phng th
c ca lp khác có
th nhìn thy và s dng các bin thành viên hay nhng phng thc bên trong lp đó 
mc đ nào. Danh sách các thuc tính và gii hn truy cp đc th hin  bng sau:
Bng 2.2: Bng tóm tt các thuc tính truy cp ca mt lp trong C#
Thuc tính Gii hn truy cp
public
Không hn ch. Nhng thuc tính đc đánh du là public đc
dùng  bt kì phng thc nào ca lp bao gm c nhng lp
khác.
private
Thuc tính trong lp A đc đánh du là private thì ch nhng
phng thc ca A mi có quyn truy cp.
protected
Thuc tính trong lp A đc đánh du là protected thì ch có
nhng phng thc bên trong lp A và nhng phng thc dn
xut t lp A mi có quyn truy cp.

Trang 12
internal
Thuc tính trong lp A đc đánh du là internal thì có th đc
truy cp bi nhng phng thc ca bt c lp nào trong cùng
khi hp ng vi A.
protected internal
Thuc tính trong lp A đc đánh du là protected internal thì
đc truy cp bi các phng thc ca lp A, các phng thc
ca lp dn xut ca A, và bt c lp nào trong cùng khi hp
ng ca A.
2.1.5 Tìm hiu LINQ To SQL
LINQ là t vit tt ca Language Integrated Query, là ngôn ng tích hp truy vn,
ch có t phiên bn Visual Studio 2008 và .NET Framework 3.5 tr v sau.
LINQ To SQL là mt phn ca LINQ cho phép mô hình hóa c s d liu (CSDL)
thành các lp .NET, sau đó ngi dùng có th truy vn cng nh cp nht CSDL bng
ngôn ng LINQ. LINQ to SQL h tr đy đ transaction, view và các stored procedure
(SP). ng thi, cng cung cp mt cách d dàng đ thêm kh nng kim tra tính h
p l
ca d liu và các quy tc vào trong mô hình d liu.
So vi ADO.NET, LINQ cung cp mt cách tip cn mi, d hiu trong vic lp
trình vi CSDL. Vic s dng LINQ đc kt hp vi file DataContext. ây là file cha
mô hình t chc CSDL, có đc t vic ánh x CSDL.











Hình 2.1: Mô hình hot đng ca LINQ to SQL
Trong Windows Phone, LINQ to SQL đc s dng đ lp trình vi d li
u local
(SQL Database) ca ng dng.
Trang 13
2.1.5.1. Ly thông tin t CSDL:
Cú pháp đ ly thông tin t CSDL bng ngôn ng LINQ nh sau:
<DataContext name> db = new <DataContext name>();
var <tên bin 1> = from <nc danh> in db.<tên bng>
[where <điu kin>]
select <nc danh>; | select new { <nc danh>.<tên field>[,…]};

Trong đó: <tên bin 1> là danh sách các kt qu nhn đc t truy vn,
<DataContext name> là tên ca file DataContext.
2.1.5.2. Cp nht thông tin CSDL:
 cp nht CSDL, trc tiên ta ly thông tin ca đi tng cn cp nht, thit lp
li giá tr và ghi li vào CSDL thông qua hàm SubmitChanges().
<DataContext name> db = new <DataContext name>();
<tên bng><tên bin> = db.<tên bng>.Single(<điu kin>);
<tên bin>.<thuc tính cn thay đi> = <giá tr thay đi>;

[<tên bin>.<thuc tính cn thay đi> = <giá tr thay đi>;………….]
db.SubmitChanges();
Trong đó: điu kin là biu thc có dng: <nc danh>=><nc danh>.<tên thuc
tính><phép so sánh><giá tr so sánh>.
2.1.5.3. Thêm d liu vào CSDL
 thêm d liu vào CSDL, trc tiên ta to ra mt đi tng thuc mt lp
(table) ca CSDL. Sau đó, gán các thông tin cho đi tng, add đi tng vào lp và s

dng hàm SubmitChanges() đ lu vào CSDL.
<DataContext name> db = new <DataContext name>();
<TableName><tên đi tng> = new <TableName>();
<tên đi tng>.<tên thuc tính 1> = <giá tr 1>;
[<tên đi tng>.<tên thuc tính 2> = <giá tr 2>; ……… ]
db.<TableNames>.Add(<tên đi tng>);
db.SubmitChanges();
Trang 14
2.1.5.4. Xóa d liu ra khi CSDL
 xóa d liu ra khi CSDL, ta cn phi xác đnh các đi tng mun xóa, sau đó
remove đi tng ra khi lp cha nó, và dùng hàm SubmitChanges() đ lu vào CSDL.
<DataContext name> db = new <DataContext name>();
var <tên bin 1> = from <nc danh> in db.<TableName>
[where <điu kin>]
select <nc danh>;
db.<TableNames>.DeleteAllOnSubmit(<tên bin 1>); db.SubmitChanges();
Trng hp, ch có mt đi tng cn xóa, thì đi tng đó có th đc xác đnh
nh sau: <tên bng><tên đi t
ng> = db.<tên bng>.Single(<điu kin>);
2.1.5.5. Gi mt th tc
 gi mt th tc, ta thc hin nh sau:
<DataContext name> db = new <DataContext name>();
var <tên bin> = db.<Tên th tc>( [<tham s 1> [, <tham s 2> ……….]]);
Trong đó: tên bin cha kt qu có đc t th tc va gi.

×