You are on page 1of 40

Case study - Quaûn lyù Container

1. Toå Container – Phoøng kho haøng


Phoøng kho haøng laø moät boä phaän thuoäc Caûng, chöùc naêng chính laø giao nhaän, kieåm ñeám haøng hoùa
ra vaøo Caûng vaø löu tröõ baûo quaûn haøng cho chuû haøng. Phoøng kho haøng ñöôïc toå chöùc goàm ba boä
phaän: boä phaän keá toaùn thoáng keâ, cuïm kho baõi vaøø toå container. Haøng hoùa cuûa chuû haøng goàm hai
loaïi: haøng rôøi vaø container. Nhieäm vuï cuûa phoøng kho haøng nhö sau:
• Keát toaùn giao nhaän haøng vôùi chuû taøu/chuû haøng: laäp caùc baùo caùo keát toaùn giao nhaän haøng;
xaùc nhaän haøng hoaù hö hoûng, ñoå vôû do taøu gaây neân (Outturn Report); baùo caùo kieåm nhaän
haøng vôùi taøu (Tally Report); caùc baùo caùo boác xeáp haøng vaø bieân baûn thöïc nhaäp.
• Laäp caùc baùo caùo thoáng keâ saûn löôïng: laäp caùc baùo caùo thoáng keâ saûn löôïng haøng hoùa thoâng
qua baùo caùo saûn löôïng haøng hoùa boác xeáp, baùo caùo saûn löôïng taøu, baùo caùo tình hình baûo
quaûn haøng hoùa, thoáng keâ soá taán ngaøy baûo quaûn haøng hoùa, baùo caùo thoáng keâ soá container
nhaäp xuaát, laäp soå theo doõi container.
• Quaûn lyù haøng rôøi cuûa caùc chuû haøng trong caùc kho, baõi.
• Quaûn lyù container.
Coù theå xem Phoøng kho haøng goàm hai boä phaän laø cuïm kho baõi vaø toå container. Boä phaän kho baõi
ñaûm traùch vieäc quaûn lyù haøng rôøi. Coøn toå container coù nhieäm vuï quaûn lyù container, cuï theå goàm caùc
coâng vieäc sau:
• Leân keá hoaïch giao nhaän veà thôøi gian, vò trí, nhaân söï, phöông tieän, kho baõi.
• Kieåm ñeám, laäp giaáy kieåm nhaän haøng vôùi taøu (Tally Report) vôùi ñaïi dieän taøu vaø ñaïi dieän
chuû haøng.
• Saép xeáp hôïp lyù container ñeå xeáp/dôõ nhanh vaø hieäu quaû nhaát.
• Baûo quaûn container.
• Laäp baùo caùo nhaäp/xuaát/toàn container.
• Laäp soå theo doõi container (soå caùi container).
• Toång hôïp soá lieäu, laäp baùo caùo thoáng keâ theo yeâu caàu cuûa phoøng.
Caùc thoâng tin yeâu caàu thöïc hieän dòch vuï giao nhaän vaø baûo quaûn haøng hoùa ñöôïc göûi töø Phoøng khai
thaùc (toå ñieàu ñoä vaø toå thöông vuï). Sau ñoù Phoøng kho haøng seõ caên cöù vaøo ñaây ñeå tröïc tieáp thöïc
hieän dòch vuï. Tieán ñoä giao nhaän haøng ñöôïc thoâng baùo thöôøng xuyeân cho toå ñieàu ñoä trong cuoäc
hoïp giao ban (haèng ngaøy) hay qua boä ñaøm.
Khi coù taøu caäp Caûng, Phoøng kho haøng seõ ñöôïc thoâng baùo ñeå xeáp dôõ haøng. Nhaân vieân Phoøng kho
haøng seõ trieån khai vieäc boác xeáp vaø tieán haønh kieåm nhaän haøng vôùi taøu. Keát quaû kieåm nhaän seõ
ñöôïc ghi vaøo caùc phieáu Tally report öùng vôùi ngöôøi kieåm vaø ca kieåm haøng. Taøu cuõng ñöôïc chia
laøm hai loaïi laø taøu chôû haøng rôøi vaø taøu chôû container. Moät taøu container thöôøng chæ chôû loaïi
container cuûa haõng taøu ñoù. Ngoaøi container coù haøng, taøu coøn coù theå coù caùc container roãng, chuùng
ñöôïc duøng ñeå cho möôïn xuaát haøng hoùa khaùc sau naøy. Vieäc kieåm nhaän container ñöôïc theå hieän
qua phieáu Tally container, phieáu naøy seõ ñöôïc chuyeån cho nhaân vieân nhaäp soá lieäu cuûa Phoøng kho
haøng ñeå löu tröõ vaø baùo caùo. Sau khi ñöôïc dôõ xuoáng caûng, caùc container coù haøng seõ ñöôïc giao cho

1
chuû haøng, hoaëc ñöôïc ñaïi lyù haøng hoùa ruùt ruoät taïi Caûng roài giao cho chuû haøng. Coøn caùc container
roãng ñöôïc ñöa vaøo baõi container roãng ñeå cho chuû haøng möôïn khi coù nhu caàu. Ruùt ruoät laø giai
ñoaïn laáy haøng hoùa beân trong container ra. Container coù theå ñöôïc chuû haøng töï ruùt ruoät taïi caûng,
hoaëc laø ñöôïc xuaát nguyeân cho chuû haøng. Moãi container coù theå chöùa haøng cuûa nhieàu chuû haøng
khaùc nhau, cuõng nhö moät chuû haøng coù theå coù nhieàu loaïi haøng trong caùc container khaùc nhau.
Thoâng tin veà caùc maët haøng cuûa chuû haøng ñöôïc theå hieän trong vaän ñôn (phieáu bill lading).
Ngoaøi löôïng container nhaäp töø taøu, Caûng cuõng coù theå nhaäp caùc container haøng töø caûng khaùc hoaëc
töø nhöõng baõi container khaùc, ta duøng töø “caûng khaùc” ñeå goïi chung cho nguoàn container naøy. Ñaây
laø caùc container nhôø göûi baõi ñeå chôø xuaát leân taøu. Neáu thieáu chuyeán taøu, Caûng cuõng coù theå xuaát
caùc container haøng sang caûng khaùc ñeå nhôø xuaát. Caùc container roãng ñöôïc xeáp taïi baõi container
roãng, ñöôïc duøng khi coù nhu caàu ñoùng haøng. Container roãng coù theå ñem xuaát cho caûng khaùc, nhaäp
töø caûng khaùc veà, hay cho chuû haøng möôïn ñoùng haøng. Thoâng tin nhaäp xuaát container ñöôïc theå hieän
qua phieáu nhaäp xuaát container.
Sau khi ñaõ coù caùc thoâng tin lieân quan ñeán container, nhaân vieân Phoøng kho haøng seõ tieán haønh laäp
baùo caùo nhaäp xuaát toàn container, baùo caùo thoáng keâ baûo quaûn theo yeâu caàu cuûa phoøng.
Nhaèm ñaûm baûo cho vieäc xeáp dôõ container ñöôïc nhanh vaø thuaän tieän, Caûng toå chöùc moät baõi
container roãng rieâng vaø moät baõi container haøng rieâng. ÔÛ baõi roãng, moãi container 20 feet seõ chieám
moät ñôn vò vò trí. Moät ñôn vò ví trí goàm moät soá daõy, moät soá haøng vaøø moät soá taàng xaùc ñònh. Chæ soá
daõy ñöôïc ñaùnh thöù töï töø traùi qua phaûi. Coøn chæ soá haøng ñöôïc ñaùnh thöù töï theo soá leû (1, 3, 5, 7, …),
töø treân xuoáng döôùi. Hai vò trí haøng leû lieân tieáp nhau seõ ñöôïc ñaùnh thöù töï laø moät soá chaün (ví duï 1, 3
= 2), töông öùng vôùi moät vò trí cho moät container 40 feet (baèng 2 container 20 feet). Vì vaäy
container 20 feet luoân coù chæ soá haøng laø soá leû, coøn container 40 feet luoân coù chæ soá haøng chaün vaø
chieám hai vò trí container 20 feet. Caùc container coù theå xeáp choàng leân nhau (töông öùng vôùi chæ soá
taàng cuûa moãi container). Moãi container taïi baõi ñeàu coù maõ soá vò trí coá ñònh trong baõi. Baõi container
coù haøng cuõng duøng quy taéc töông töï baõi container roãng. Tuy nhieân caùc daõy container khoâng lieân
tieáp nhau maø chia theo töøng caëp daõy ñeå chöøa loái ñi cho xe naâng. Caùc caëp daõy ñöôïc ñaùnh thöù töï
alphabet (A,B,C, …), daõy A traùi goïi laø A1 vaø daõy A phaûi keá beân goïi laø A2 v.v.... Sô ñoà baõi
container do nhaân vieân Phoøng kho haøng löu tröõ ø, caäp nhaät vaø toå chöùc. Ñôn vò vò trí cuûa moät
conatiner roãng goàm boä (haøng, daõy, taàng), coøn cuûa container coù haøng laø (daõy, haøng, taàng). Chaúng
haïn, (3, 5, 2) laø vò trí cuûa conatiner roãng 20 feet ôû haøng thöù hai, daõy thöù 5, ôû taàng thöù 2. (B2, 8, 1 )
laø vò trí cuûa conatiner 40 feet ôû haøng thöù tö, daõy thöù tö (B2), taàng thöù 1.
Toå container coù lieân heä chaët cheõ vôùi Phoøng khai khaùc, bao goàm nhaän thoâng tin, yeâu caàu vaøø cung
caáp thoâng tin. Ngoaøi ra toå container coøn trao ñoåi thoâng tin vôùi boä phaän keát toaùn thoáng keâ vaø lieân
heä tröïc tieáp vôùi ñoäi cô giôùi.

2. Moâ taû yeâu caàu


Töø bieåu ñoà use case moâ taû chöùc naêng cuûa toaøn boä heä thoáng caûng, trong ñoù coù moâ hình use case
cho Phoøng kho haøng, coäng vôùi thoâng tin moâ taû Phoøng kho haøng – Toå container trình baøy ôû treân, ta
coù theå hình dung ñöôïc chöùc naêng hoaït ñoäng cuûa boä phaän Toå container. Sau khi xem xeùt vaø kieán
nghò, chuùng ta caàn xaây döïng cho Phoøng kho haøng moät heä thoáng thoâng tin phuïc vuï cho coâng vieäc
cuûa Toå container. Yeâu caàu cuûa heä thoáng naøy nhö sau:

2
a. Theo doõi nhaäp-xuaát-toàn kho container theo
• Maõ soá container
• Soá bill lading
• Taøu vaän chuyeån ñeán vaø ñi
• Ngaøy caäp caûng
• Soá löôïng container
• Troïng löôïng container
• Loaïi container (20”, 40”)
• Kieåu container (laïnh, khoâng laïnh)
• Tình traïng container (roãng, chöùa haøng)
• Vò trí cuûa container (baõi-vò trí trong baõi)
b. Taïo soå caùi container ñeå theo doõi quaù trình xuaát nhaäp cuûa töøng container theo:
• Ngaøy ruùt ruoät taïi caûng.
• Ngaøy giao nguyeân container khoûi caûng.
• Ngaøy traû/gôûi voû roãng nhaäp caûng.
• Ngaøy xuaát roãng khoûi caûng.
• Ngaøy xuaát ñaõ ñoùng haøng taïi caûng.
c. Laäp baùo caùo thoáng keâ ñònh kyø veà baûo quaûn haøng hoùa.
d. Cung caáp thoâng tin cho heä quaûn lyù keát toaùn vaø thoáng keâ saûn löôïng, heä quaûn lyù doanh thu.
e. Ñeå thuaän tieän cho vieäc môû roäng heä thoáng sau naøy, heä thoáng naøy caàn coù khaû naêng chaïy ñöôïc
treân nhieàu loaïi heä ñieàu haønh cuõng nhö nhieàu loaïi maùy tính khaùc nhau.

Goïi teân heä thoáng naøy laø Heä quaûn lyù container (HQLC), coâng vieäc phaân tích vaø thieát keá HQLC
ñöôïc thöïc hieän vôùi söï hoã trôï bôûiø Rational Rose. Ñeå thuaän tieän cho vieäc theo doõi quaù trình thieát keá
treân Rational Rose, caùc hình aûnh minh hoïa seõ ñöôïc daãn chöùng trong quaù trình phaân tích vaø thieát
keá.

3. Phaân tích
Phaân tích yeâu caàu
Tìm taùc nhaân
HQLC ñöôïc söû duïng bôûi nhaân vieân keát toaùn thoáng keâ container. Ngöôøi naøy coù nhieäm vuï nhaäp soá
lieäu thoâng tin tally container vaø thoâng tin nhaäp xuaát container vaøo heä thoáng. Khi hoaït ñoäng, heä
thoáng coøn laáy veà moät soá thoâng tin chung, ñöôïc cung caáp bôûi caùc heä quaûn lyù khaùc (nhö thoâng tin
chuyeán taøu, bill lading, …). Keát quaû thöïc hieän cuûa heä thoáng coù theå ñöôïc in ra cho nhaân vieân keát
toaùn thoáng keâ container hay chuyeån cho caùc heä quaûn lyù khaùc söû duïng.
Nhö vaäy, coù theå thaáy caùc taùc nhaân tham gia vaøo heä quaûn lyù container bao goàm:
• Nhaân vieân keát toaùn thoáng keâ container (NV to container)
• Heä quaûn lyù keát toaùn vaø thoáng keâ saûn löôïng (HQL Ket toan)
• Heä quaûn lyù doanh thu (HQL Doanh thu)

3
• Heä quaûn lyù trôï giuùp ñieàu ñoä (HQL Dieudo)
Treân Rational Rose, hình 1 taïo ra caùc taùc nhaân trong Use Case View

Tìm Use case


ÖÙng vôùi töøng taùc nhaân neâu treân, laàn löôït tìm ñöôïc caùc use case cuûa heä thoáng:

NV to container:
• Nhaäp döõ lieäu töø phieáu nhaäp tally vaøo heä thoáng.
• Nhaäp döõ lieäu töø phieáu nhaäp xuaát container vaøo heä thoáng.
• Yeâu caàu heä thoáng in baùo caùo nhaäp-xuaát-toàn container.
• Yeâu caàu heä thoáng in baùo caùo thoáng keâ-baûo quaûn container.
• Laäp soå caùi container.
• Thay ñoåi, saép xeáp caùc container treân baûn ñoà vò trí baõi.
HQL Ket toan:
• Cung caáp thoâng tin cho heä quaûn lyù container ñeå laäp baùo caùo nhaäp xuaát, thoáng keâ baûo quaûn
vaø soå theo doõi container.
• Laáy moät soá thoâng tin töø heä quaûn lyù container.

Hình 1.
HQL Doanh thu:
• Laáy moät soá thoâng tin töø heä quaûn lyù container.
HQL Dieu do:
• Cung caáp thoâng tin cho heä quaûn lyù container ñeå laäp baùo caùo thoáng keâ baûo quaûn container.
Töø ñoù xaùc ñònh ñöôïc caùc use case trong heä quaûn lyù container bao goàm:
• Nhap Tally report (giaáy kieåm nhaän haøng vôùi taøu)
• Nhap phieu N/X (nhaäp phieáu nhaäp xuaát)
• Thay doi/in so do Cont (thay ñoåi, in sô ñoà container)
• Bao cao N/X/T kho (baùo caùo nhaäp, xuaát, toàn kho)
• Bao cao TK/Bao quan (baùo caùo thoáng keâ, baûo quaûn)
• Lap so theo doi Cont (laäp sô ñoà theo doõi container)
Treân Rational Rose, hình 2 taïo caùc use case trong Use Case View:

4
Hình 2.

Ta coù bieåu ñoà use case cho heä quaûn lyù container nhö Hình 3:

Lap so theo doi Cont


Nhap Tally report
HQL Doanh thu

Nhap phieu N/X

NV to container
HQL Ket toan
BC N/X/T kho

Thay doi / in so do Cont


HQL Dieu do
BC TK/bao quan

Hình 3.

5
Phaân tích lónh vöïc
Giai ñoaïn naøy xaùc ñònh caùc lôùp chuû yeáu cuûa heä thoáng (domain class). Döïa vaøo phaàn moâ taû heä
thoáng vaø caùc use case, heä quaûn lyù container ñöôïc phaùc thaûo bao goàm caùc lôùp chính sau:
• Tally: bieåu dieãn lôùp caùc ñoái töôïng thoâng tin lieân quan ñeán vieäc kieåm nhaän.
• ChitietTally: bieåu dieãn lôùp caùc container nhaäp/xuaát theo moät tally.
• NXCH: bieåu dieãn caùc ñoái töôïng thoâng tin nhaäp/xuaát container.
• ChitietNXCH: bieåu dieãn lôùp caùc container nhaäp xuaát theo moät phieáu nhaäp xuaát
container.
• TonContainer: lôùp caùc ñoái töôïng container toàn treân baõi.
• BaiCont: lôùp caùc baõi chöùa container.
• Vitribai: bieåu dieãn caùc vò trí ñaët container trong moät baõi container.
• HTX: hôïp taùc xaõ xeáp dôõ haøng cho container.
Theo sô ñoà use case, heä quaûn lyù container coøn töông caùc vôùi ba heä thoáng khaùc, ñoù laø heä quaûn lyù
doanh thu, heä quaûn lyù keát toaùn vaø thoáng keâ saûn löôïng vaøø heä quaûn lyù trôï giuùp quaûn lyù ñieàu ñoä. Heä
quaûn lyù container yeâu caàu laáy thoâng tin töø caùc lôùp cuûa caùc heä naøy. Chuùng bao goàm caùc lôùp sau:
Heä quaûn lyù keát toaùn vaø thoáng keâ saûn löôïng:
• BillLading: lôùp caùc thoâng tin vaän ñôn (bill lading) cuûa taøu.
• Khachhang: lôùp caùc khaùch haøng (chuû haøng container).
• Container: lôùp container.
Heä trôï giuùp quaûn lyù ñieàu ñoä:
• Tau: lôùp taøu.
• ChuyenTau: lôùp caùc chuyeán taøu caäp caûng cuûa moät con taøu.
Caùc moâ hình ñöôïc taïo ra trong giai ñoaïn naøy goàm bieåu ñoà lôùp, bieåu ñoà traïng thaùi vaøø bieåu ñoà trình
töï thöïc hieän.

Bieåu ñoà lôùp


Bieåu ñoà caùc lôùp cuûa heä thoáng ñöôïc phaùc thaûo theo Hình 4, 5:

6
Hình 4.

<<Entity>> <<Entity>>
1 1..* BL gom <<Entity>>
Khachhang BL cua BillLading 1 1..*
Container
(f rom CacHeNgoai) (f rom CacHeNgoai)
(f rom CacHeNgoai)
1
NX hang
1..* 1 1
1
<<Entity>>
Boc xep container
ChitietNXCH 0..* Thuoc chuyen
1 1..*
NX hang cua <<Entity>>
1..* <<Entity>>
Chuyentau
ChitietTally
(f rom CacHeNgoai)
Co chi tiet

1..* Ton container


1
1..*
0..* 1 Cua chuyen
<<Entity>> Tally gom
1
NXCH
<<Entity>>
1
Tau 1..*
1..* (f rom CacHeNgoai)
<<Entity>>
<<Entity>>
HT X
NX tai Tally
(f rom CacHeNgoai)
0..* 1

0..*
1
<<Entity>> 1..* <<Entity>> Ton o <<Entity>>
1 Thuoc bai
BaiCont Vitribai TonContainer
1 0..*

Hình 5.

7
Caùc lôùp treân ñeàu coù stereotype laø <<Entity>>, coù nghóa laø chuùng ñöôïc löu tröõ ôû daïng toàn taïi coá
ñònh (persistent) trong heä thoáng. Caùc lôùp naøy ñöôïc phaân phoái ra hai goùi sau: business
object vaø cacHeNgoai. Goùi business object chöùa caùc lôùp cho nhöõng ñoái töôïng lónh vöïc
beân trong heä quaûn lyù container, bao goàm Tally, ChitietTally, NXCH, ChitietNXCH,
TonConatiner, BaiCont, Vitribai, HTX. Goùi cacHeNgoai duøng ñeå chöùa caùc lôùp cho
nhöõng ñoái töôïng töø caùc heä khaùc nhö heä quaûn lyù keát toaùn vaø thoáng keâ saûn löôïng, heä trôï giuùp quaûn
lyù ñieàu ñoä. Goùi cacHeNgoai goàm caùc lôùp sau: Tau, ChuyenTau, BillLading,
Khachhang, Container.
Sau ñaây moâ taû moät soá thuoäc tính cô baûn cuûa caùc lôùp treân:

Tally:
• stl: String : Soá tally.
• ngaytl: Date : Ngaøy tally.
• loaitl: Boolean : Loaïi tally: true = nhaäp; false = xuaát.
• ptgn: String : Kí hieäu phöông thöùc giao nhaän.
• cagio1: DateTime : Giôø baét ñaàu ca.
• cagio2: DateTime : Giôø keát thuùc ca.
• nguoibien: String : Teân ngöôøi laäp tally.
ChitietTally:
• ngaynhap: Date : Ngaøy nhaäp kho.
• sln: Currency : Soá löôïng container nhaäp.
• slx: Currency : Soá löôïng container xuaát.
• tln: Currency : Troïng löôïng container nhaäp.
• tlx: Currency : Troïng löôïng container xuaát.
NXCH:
• lct: String : Loaïi phieáu nhaäp hay xuaát.
• sct: Integer : Soá chöùng töø (soá phieáu nhaäp xuaát).
• ngay: Date : Ngaøy laäp chöùng töø.
• lxkso: String : Soá leänh xuaát kho.
• lxkngay: String : Soá leänh xuaát kho.
ChitietNXCH:
• sln: Currency : Soá löôïng container nhaäp.
• slx: Currency : Soá löôïng container xuaát.
• tln: Currency : Troïng löôïng container nhaäp.
• tlx: Currency : Troïng löôïng container xuaát.
TonContainer:
• ngaynhap: Date : Ngaøy nhaäp kho.
• cttrang: Boolean : Tình traïng container: true = coù haøng; false = roãng.

8
• sl: Currency = 1 : Soá löôïng container.
• tl: Currency : Troïng löôïng container.
BaiCont:
• mskho: String : Maõ soá kho container.
• loaibai: Boolean : Loaïi baõi container: true =b aõi container coù haøng; false =
baõi container roãng.
Vitribai:
• msvitri: String : Maõ soá vò trí container trong baõi container.
Tau:
• matau: String : Maõ taøu.
Chuyentau:
• ngaycap: Date : Ngaøy giôø taøu caäp caûng.
Billlading:
• bl: String : Soá Bill lading.
• nguoigoi: String : Ngöôøi göûi haøng.
Khachhang:
• mskh: String : Maõ soá khaùch haøng.
• tenkh: String : Hoï teân khaùch haøng.
• nhomkh: String : Nhoùm khaùch haøng: chuû haøng; chuû taøu; ngöôøi baùn.
Container:
• cn: String : Maõ soá container.
• sn: String : Soá seal (kyù maõ hieäu haøng hoùa).
• ckieu: String : Kieåu container.
• cloai: Integer : Loaïi container: 0 = 20 feet; 1 = 40 feet.
• cttrang: Boolean : Tình traïng container: true = coù haøng; false = roãng.
• sl: Currency =1 : Soá löôïng container (luoân baèng 1).
• tl: Currency : Troïng löôïng container: Cont roãng 20” =7 taán; cont roãng 40”
=14 taán.
HTX:
• mshtx: String : Maõ soá hôïp taùc xaõ.
• tenhtx: String : Teân hôïp taùc xaõ.

9
Hình 6.

Chuù thích:
Maõ soá loaïi phieáu nhaäp hay xuaát container ñöôïc quy öôùc nhö sau:
XFK Xuaát nguyeân giao haøng
XEM Xuaát roãng cho möôïn
XFR Xuaát nguyeân ruùt ruoät
XFC Xuaát nguyeân qua caûng khaùc
XEC Xuaát roãng qua caûng khaùc
XED Xuaát roãng ñoùng haøng taïi caûng
NFK Nhaäp nguyeân cuûa khaùch chôø xuaát
NFC Nhaäp nguyeân tôùi caûng khaùc chôø xuaát
NEM Nhaäp roãng do khaùch traû
NEC Nhaäp roãng tôùi caûng khaùc
NER Nhaäp roãng sau khi ruùt ruoät taïi caûng
XT Xuaát leân taøu (tally)
NFD Nhaäp nguyeân sau khi ñoùng haøng taïi caûng
XFX Xuaát nguyeân traû laïi haøng chôø xuaát
Hình 6 laø phaàn ñaëc taû thuoäc tính vaø haønh vi cho lôùp NXCH treân Rose:

Bieåu ñoà traïng thaùi


Quaù trình xuaát nhaäp container dieãn ra theo moät soá giai ñoaïn. ÔÛ giai ñoaïn nhaäp, container ñöôïc
nhaäp töø taøu coù theå laø roãng hoaëc chöùa haøng. Giai ñoaïn hai, sau khi xeáp dôõ, container coù haøng seõ
ñem göûi baõi, coøn container roãng ñöôïc xeáp vaøo baõi roãng. Sau ñoù khaùch haøng coù theå töï ruùt ruoät
container hay ruùt ruoät taïi caûng. Container roãng ñöôïc chuyeån cho caûng khaùc ñeå ñoùng haøng. Khi
caàn ñoùng haøng container, khaùch haøng coù theå möôïn container roãng cuûa caûng (cuõng coù theå möôïn
container roãng töø caûng khaùc) ñeå töï ñoùng haøng, hoaëc nhôø caûng ñoùng haøng giuøm. Sau khi ñoùng
haøng, container seõ ñöôïc chuyeån sang baõi container chôø xuaát. Taïi ñaây chuùng seõ ñöôïc xeáp leân taøu.
Neáu khoâng coù chuyeán taøu ñi hoaëc khoâng ñuû taøu, nhöõng container naøy coù theå ñöôïc chuyeån sang

10
caûng khaùc ñeå nhôø xuaát. Quaù trình xuaát nhaäp neâu treân ñöôïc minh hoïa qua moät bieåu ñoà traïng thaùi
nhö Hình 7. Ñaây laø bieåu ñoà bieåu dieãn caùc traïng thaùi vaø nhöõng söï kieän thay ñoåi ñeán traïng thaùi cuûa
ñoái töôïng Container.

Full-Nhap-Tau Empty -Ton-Cangkhac Empty -Nhap-Tau Full-Ton-Cangkhac

do hang

Full-Ton-Bainhap

xuat nguy en nhap rong nhap rong

Full-Xuat-CH rut ruot

tra rong

xep hang
Empty -Ton-Bairong

chu hang muon rong

Empty -Xuat-CH
dong hang tai cang

chuy en cang
chu hang dong hang
Full-Ton-Baixuat

Empty -Xuat-Cangkhac xep hang

Full-Xuat-Tau
Full-Xuat-Cangkhac

Hình 7.

Caùc traïng thaùi cuûa ñoái töôïng Container goàm coù:


• Empty-Nhap-Tau: container roãng, ñöôïc nhaäp töø taøu.
• Full-Nhap-Tau: container coù haøng, ñöôïc nhaäp töø taøu.
• Empty-Ton-Cangkhac: container roãng, ñöôïc chuyeån ñeán töø caûng khaùc.
• Full-Ton-Cangkhac: container coù haøng, ñöôïc chuyeån nhôø töø caûng khaùc chôø xuaát.
• Full-Ton-Bainhap: container coù haøng, naèm ôû baõi nhaäp container.
• Empty-Ton-Bairong: container roãng, naèm ôû baõi container roãng.
• Full-Xuat-CH: container coù haøng ñöôïc xuaát nguyeân cho chuû haøng.
• Empty-Xuat-CH: container roãng, cho chuû haøng möôïn.

11
• Empty-Xuat-Cangkhac: container roãng ñöôïc chuyeån qua caûng khaùc.
• Full-Ton-Baixuat: container coù haøng, ñang ôû baõi xuaát.
• Full-Xuat-Cangkhac: container coù haøng, ñöôïc chuyeån sang caûng khaùc.
• Full-Xuat-Tau: container coù haøng, ñöôïc xuaát leân taøu.

Bieåu ñoà trình töï thöïc hieän


Sau khi xaùc ñònh ñöôïc caùc lôùp chuû yeáu cuûa heä thoáng, chuùng ta phaùc thaûo ñöôïc moâ hình tónh cuûa
heä thoáng caàn xaây döïng thoâng qua bieåu ñoà lôùp. Böôùc keá tieáp laø xaây döïng moâ hình ñoäng cuûa heä
thoáng, töùc laø moâ taû söï töông taùc giöõa caùc ñoái töôïng cuûa caùc lôùp naøy. ÔÛ ñaây ta duøng bieåu ñoà trình
töï thöïc hieän. Bieåu ñoà trình töï thöïc hieän bieåu dieãn töông taùc giöõa caùc ñoái töôïng tham gia trong moät
use case. Baèng caùch xem xeùt laàn löôït töøng use case cuûa heä thoáng, chuùng ta xaây döïng caùc bieåu ñoà
trình töï thöïc hieän töông öùng.

Hình 8.

a) Nhap Tally report: Use case naøy moâ taû vieäc nhaäp soá lieäu tally container döïa theo phieáu tally
report.
• Nhaân vieân toå container ñaêng nhaäp (login) vaøo heä thoáng.
• Neáu ñaêng nhaäp thaønh coâng, ngöôøi ñoù yeâu caàu ñöôïc nhaäp phieáu tally container.
• Nhaân vieân toå container nhaäp vaøo caùc thoâng tin chung cuûa tally: soá tally, ngaøy nhaäp, maõ
taøu, ngaøy caäp caûng, maõ caàu caûng, loaïi haøng (nhaäp hay xuaát), soá maùng, phöông thöùc giao
nhaän, ngaøy giôø baét ñaàu vaø keát thuùc ca laøm vieäc, hoï teân ngöôøi bieân, teân hôïp taùc xaõ xeáp dôõ.
• Sau ñoù nhaäp tieáp caùc thoâng tin chi tieát cho töøng container: soá container, soá bill lading, kyù
maõ hieäu container, kieåu vaø loaïi container (20” hay 40”), tình traïng (roãng hay coù haøng),
troïng löôïng, teân haøng theo manifest, maõ soá baõi vaø vò trí container trong baõi.
• Neáu thoâng tin nhaäp vaøo khoâng hôïp leä, heä thoáng seõ kieåm tra vaø yeâu caàu nhaäp laïi.

12
Giao dieän cho phaàn nhaäp thoâng tin Tally nhö Hình 8. Bieåu ñoà trình töï thöïc hieän cho use case
Nhap Tally report ñöôïc bieåu dieãn trong Hình 9.

: NV to container : MainWindow : TallyFrame : Tally : ChitietTally : Container

Loggin()
Verify()

NhapTally()
TallyFrame()
Display()

EnterTally_Phanchung()
EnterTally_Chitiet()
CreateTallyInfo()

CreateCTTally()
CreateContInfo()

Hình 9.
b) Nhap phieu N/X:
• Nhaân vieân toå container ñaêng nhaäp vaøo heä thoáng.
• Neáu ñaêng nhaäp thaønh coâng, ngöôøi ñoù yeâu caàu ñöôïc nhaäp phieáu tally container.
• Nhaân vieân toå container nhaäp vaøo caùc thoâng tin chung cuûa phieáu nhaäp xuaát container: Loaïi
chöùng töø, soá phieáu nhaäp/xuaát, ngaøy laäp chöùng töø, soá leänh xuaát kho, ngaøy thöïc hieän leänh
xuaát kho. Nhaäp thoâng tin ngöôøi ñaïi dieän: hoï teân, soá CMND, ngaøy caáp, nôi caáp CMND.
• Sau ñoù nhaäp tieáp caùc thoâng tin chi tieát cho töøng container: Soá container, ngaøy taøu caäp beán,
soá bill lading, kyù maõ hieäu container, kieåu vaø loaïi container (20” hay 40”), tình traïng (roãng
hay coù haøng), troïng löôïng, maõ soá baõi vaø vò trí container trong baõi, soá löôïng nhaäp/xuaát,
troïng löôïng nhaäp/xuaát.
• Neáu thoâng tin nhaäp vaøo khoâng hôïp leä, heä thoáng seõ kieåm tra vaø yeâu caàu nhaäp laïi.

Bieåu ñoà trình töï thöïc hieän cho use case Nhap phieu N/X ñöôïc bieåu dieãn trong Hình 10.
c) BC N/X/T kho:
• Nhaân vieân toå container login vaøo heä thoáng.

13
• Neáu login thaønh coâng, ngöôøi ñoù yeâu caàu heä thoáng taïo baùo caùo nhaäp xuaát toàn baõi container.
• Ñeå laäp baùo caùo nhaäp xuaát toàn, heä thoáng seõ yeâu caàu laáy thoâng tin töø caùc ñoái töôïng cuûa
NXCH, ChitietNXCH vaøø Container. Caùc thoâng tin naøy bao goàm: thoâng tin chuyeán taøu,
bill lading, loaïi container, soá löôïng vaø troïng löôïng container xuaát nhaäp trong moät khoaûng
thôøi gian xaùc ñònh (moät thaùng). Thoâng tin thaùng caàn baùo caùo do nhaân vieân toå container
nhaäp vaøo.
• Sau ñoù baûn baùo caùo seõ ñöôïc in ra maøn hình. Neáu nhaân vieân toå container coù yeâu caàu in,
baùo caùo seõ ñöôïc in ra maùy in.

: NV to container : MainWindow : NXContFrame : NXCH : ChitietNXCH : Container

Loggin()
Verify()

NhapNXCont()
NXContFrame()
Display()

EnterNXCont_

EnterNXCont_Chitiet()
CreateNXCH()

CreateCTNXCH()
CreateContInfo()

Hình 10.

Maãu baùo caùo container nhaäp xuaát toàn baõi nhö sau:
BAÙO CAÙO CONTAINER NHAÄP XUAÁT TOÀN BAÕI
Thaùng …/…

14
Loaïi Toàn ñaàu kyø Nhaäp trong kyø Xuaát trong kyø Toàn cuoái kyø
container
Soá Troïng Soá Troïng Soá Troïng Soá Troïng
löôïng löôïng löôïng löôïng löôïng löôïng löôïng löôïng

Coäng:

Bieåu ñoà trình töï thöïc hieän cho use case BC N/X/T kho ñöôïc bieåu dieãn trong Hình 11.

: MainWindow : BCNXTFrame : BaocaoNXT : NXCH : ChitietNXCH : Container


: NV to container

Loggin()
Verify()

BaocaoNXT()
BCNXTFrame()
Display()

Create()
GetNXCHInfo()

GetCTNXCHInfo()

GetContainerInfo()
Report()

ShowReport()

Print()

Hình 11.

d) BC TK/Bao quan:
• Nhaân vieân toå container login vaøo heä thoáng.
• Neáu login thaønh coâng, ngöôøi ñoù yeâu caàu heä thoáng taïo baùo caùo thoáng keâ/baûo quaûn
container.
• Ñeå laäp baùo caùo thoáng keâ/baûo quaûn container gôûi baõi, heä thoáng seõ yeâu caàu laáy thoâng tin töø
caùc ñoái töôïng cuûa Tally, ChitietTally, NXCH, ChitietNXCH, Tau, Chuyentau,

15
BillLading vaø Container. Caùc thoâng tin naøy bao goàm: thoâng tin chuyeán taøu, bill
lading, loaïi container, soá löôïng vaø troïng löôïng container xuaát nhaäp trong moät khoaûng thôøi
gian xaùc ñònh (moät thaùng). Thoâng tin thaùng caàn baùo caùo do nhaân vieân toå container nhaäp
vaøo.
• Sau ñoù baûn baùo caùo seõ ñöôïc in ra maøn hình. Neáu nhaân vieân toå container coù yeâu caàu in,
baùo caùo seõ ñöôïc in ra maùy in.
Maãu baùo caùo container gôûi toàn baõi nhö sau:

BAÙO CAÙO CONTAINER GÔÛI BAÕI


Thaùng …/…

Maõ taøu Ngaøy Bill Loaïi Toàn ñaàu kyø Nhaäp trong kyø Xuaát trong kyø Toàn cuoái kyø
caäp lading
Soá Troïng Soá Troïng Soá Troïng Soá Troïng
löôïng löôïng löôïng löôïng löôïng löôïng löôïng löôïng

_CANG
KHAC

Coäng:
Toång
coäng:

Bieåu ñoà trình töï thöïc hieän cho use case BC TK/Baoquan ñöôïc bieåu dieãn trong Hình 12
e) BC N/X/T kho:
• Nhaân vieân toå container login vaøo heä thoáng.
• Neáu login thaønh coâng, ngöôøi ñoù yeâu caàu heä thoáng taïo soå theo doõi container (soå caùi
container).
• Ñeå laäp soå theo doõi container, heä thoáng seõ yeâu caàu laáy thoâng tin töø caùc ñoái töôïng cuûa
NXCH, ChitietNXCH vaøø Container. Caùc thoâng tin naøy bao goàm: thoâng tin taøu nhaäp vaø
xuaát container, bill lading, loaïi container, soá seal, caùc thôøi ñieåm xuaát nhaäp cuûa moät
container.
• Sau ñoù baûn theo doõi container seõ ñöôïc in ra maøn hình. Nhaân vieân toå container coù theå in
baûn theo doõi naøy ra maùy in ñeå caäp nhaät soå caùi container.

16
: Main : BCTKBQFrame : Baocao : Tally : Chitiet : NXCH : Chitiet : : Bill : Tau : Container
: NV to container Window TKBQ Tally NXCH Chuyentau Lading

Loggin()
Verify()

BaocaoTKBQ()
BCTKBQFrame()
Display()

Create()
GetTallyInfo()

GetCTTallyInfo()

GetNXCHInfo()

GetCTNXCHInfo()
GetMaContainer()
GetChuyentauInfo()
GetMatau()
GetBillLadingInfo()
Report()

ShowReport()

Print()

Hình 12.
Maãu baùo caùo container gôûi toàn baõi nhö sau:

SOÅ THEO DOÕI CONTAINER


Taøu: Ngaøy caäp:

Vaän Soá Loaïi Soá Ngaøy ruùt Ngaøy Ngaøy Ngaøy Ngaøy xuaát Taøu Ngaøy Ghi
ñôn container Roãng Coù haøng seal ruoät taïi giao traû/gôûi voû xuaát roãng ñaõ ñoùng xuaát caäp chuù
soá Caûng nguyeân roãng nhaäp khoûi Caûng haøng taïi
20 40 20 40 khoûi Caûng Caûng Caûng

17
Bieåu ñoà trình töï thöïc hieän cho use case Thay doi / in so do Cont nhö Hình 13.

: Main : SocaiCont : Lapso : Tally : Chitiet : NXCH : Chitiet : : Bill : Tau :


: NV to container Window Frame Cont Tally NXCH Chuyentau Lading Container

Loggin()
Verify()

LapsocaiCont()
SocaiContFram e()
Display()

Create()
GetTallyInfo()

GetCTTallyInfo()

GetNXCHInfo()

GetCTNXCHInfo()
GetMaContainer()
GetChuyentauInfo()
GetMatau()
GetBillLadingInfo()
Report()

ShowReport()

Print()

Hình 13.

f) Thay doi / in so do Cont


• Nhaân vieân toå container login vaøo heä thoáng.
• Neáu login thaønh coâng, ngöôøi ñoù yeâu caàu xem vaø hieäu chænh sô ñoà saép xeáp container.
• Sau ñoù ngöôøi naøy caàn choïn baõi container naøo ñeå hieån thò: baõi container coù haøng hoaëc baõi
roãng. Heä thoáng seõ laáy thoâng tin töø caùc ñoái töôïng cuûa Vitribai, BaiCont vaøø
TonContainer ñeå hieån thò sô ñoà saép xeáp cuûa baõi container töông öùng.
• Nhaân vieân toå container coù theå thay ñoåi, saép xeáp laïi vò trí caùc container trong baõi. Sau ñoù
löu tröõ caùc thoâng tin môùi caäp nhaät naøy vaøo nhöõng ñoái töôïng töông öùng.
• Nhaân vieân toå container coù theå in ra sô ñoà container ñang hieån thò treân maøn hình.

Bieåu ñoà trình töï thöïc hieän cho use case Thay doi / in so do Cont nhö Hình 14.

18
: MainWindow : XepCont : XepContainer : BaiCont : Vitribai : TonContainer
: NV to container
Frame

Login()
Verify()

NhapsodoCont()
XepContFrame()
Display()

ChonbaiCont()
GetPlan()
GetListVitribai()

GetListTonCont()
GetContInfo()
Display()

ShowApproriateFrame()

Adjust()
Show()

Save()
UpdateNewInfo()
Update()

Update()

Update()

Print()

Hình 14.

Ñeå phaân bieät caùc lôùp giao dieän window, frame vôùi caùc lôùp lónh vöïc trong heä thoáng, caùc lôùp giao
dieän ñöôïc ñöa vaøo goùi user interface. Caùc lôùp lónh vöïc cuûa heä thoáng ñöôïc ñöa vaøo moät goùi
business object. Caùc lôùp bieåu dieãn heä thoáng beân ngoaøi ñöôïc gom vaøo goùi cacHeNgoai.

4. Thieát keá
Sau giai ñoaïn phaân tích neâu treân, moâ hình cô sôû cho heä thoáng ñaõ ñöôïc thieát laäp. Böôùc tieáp theo laø
giai ñoaïn thieát keá, ñaây laø giai ñoaïn xaây döïng heä thoáng thaønh moät giaûi phaùp thöïc thi. Moâ hình
phaân tích seõ ñöôïc thieát keá chi tieát vaø xem xeùt ñeán caùc vaán ñeà kyõ thuaät. Moät soá lôùp môùi coù theå

19
ñöôïc phaùt hieän vaø boå sung, caùc lôùp ñoùng vai troø giaûi quyeát veà maët kyõ thuaät nhö database,
user interface, … cuõng ñöôïc theâm vaøo.

Thieát keá kieán truùc


Böôùc naøy moâ taû kieán truùc möùc cao cuûa heä thoáng. Heä quaûn lyù container ñöôïc toå chöùc theo 5 goùi:
business object, cacHeNgoai, user interface, database, utility.

User Interface

CacHeNgoai

Utility

Business Object

Database

Hình 15.

• business object: Goùi chöùa caùc lôùp lónh vöïc cuûa heä thoáng, bao goàm caùc lôùp lónh vöïc
töø moâ hình phaân tích nhö: NXCH, ChitietNXCH, Tally, ChitietTally, BaiCont,
Vitribai, TonContainer. Boå sung theâm lôùp Nguoidaidien vaø caùc lôùp ñieàu khieån
nhö: BaocaoNXT, BaocaoTKBQ vaøø XepContainer. Taát caû caùc lôùp lónh vöïc ñeàu ñöôïc
hoå trôï khaû naêng löu tröõ beàn vöõng (persistent): chuùng ñeàu thöøa keá töø lôùp Persistent
trong goùi database.
• cacHeNgoai: Goùi naøy cuõng chöùa caùc lôùp lónh vöïc cuûa heä thoáng, tuy nhieân ñaây laø caùc lôùp
ñöôïc toå chöùc vaø löu tröõ bôûi caùc heä quaûn lyù khaùc, bao goàm: heä quaûn lyù keát toaùn, heä quaûn
lyù doanh thu vaøø heä quaûn lyù ñieàu ñoä. Caùc lôùp naøy cuõng thöøa keá lôùp Persistent.
• user interface: Chöùa caùc lôùp window, frame laøm giao dieän ñoà hoïa cho ngöôøi söû
duïng heä thoáng. Caùc lôùp naøy ñöôïc xaây döïng döïa treân goùi Java AWT. Ngöôøi söû duïng thöïc
hieän thao taùc laáy döõ lieäu vaø nhaäp döõ lieäu thoâng qua caùc giao dieän naøy, töø ñoù caùc lôùp user
interface seõ goïi caùc phöông thöùc cuûa caùc lôùp trong goùi business object ñeå laáy
vaø löu döõ lieäu. Caùc lôùp trong goùi naøy ñeàu coù stereotype laø <<GUI>>.
• database: Goùi cô sôû döõ lieäu chöùa moät lôùp Persistent, lôùp naøy coù nhieäm vuï cung caáp
dòch vuï löu tröõ cho taát caû caùc lôùp coù stereotype <<Entity>> (thuoäc goùi Business

20
Object vaø CacHeNgoai). Hình thöùc löu tröõ ñöôïc duøng treân heä thoáng naøy laø löu caùc ñoái
töôïng cuûa moät lôùp treân moät taäp tin ñôn.
• utility: Chöùa caùc dòch vuï ñöôïc söû duïng trong caùc goùi khaùc cuûa heä thoáng. Hieän thôøi goùi
naøy chæ coù moät lôùp laø ObjId. Moãi ñoái töôïng cuûa lôùp ObjId ñöôïc duøng ñeå ñaïi dieän cho
moät ñoái töôïng cuûa moät lôùp lónh vöïc trong heä thoáng. ObjId ñöôïc duøng ñeå caøi ñaët caùc quan
heä keát hôïp.
Kieán truùc toång quaùt cuûa heä quaûn lyù container nhö Hình 15:
Treân Rational Rose, caùc goùi naøy ñöôïc taïo nhö Hình 16:

Hình 16.

Thieát keá chi tieát


Giai ñoaïn naøy ñi saâu vaøo moâ taû chi tieát töøng goùi neâu treân cuûa heä thoáng. Hai goùi business
object vaø cacHeNgoai seõ ñöôïc chi tieát hoùa hôn, sau ñoù moâ taû caùc lôùp trong goùi user
interface, database vaøø utility.

Goùi database
Öùng duïng phaûi coù caùc ñoái töôïng ñöôïc löu tröõ ôû daïng thöôøng xuyeân, vì vaäy goùi database ñöôïc
taïo ra ñeå cung caáp dòch vuï naøy. Thöôøng öùng duïng ñaày ñuû seõ söû duïng cô sôû döõ lieäu thöông maïi,
goàm cô sôû döõ lieäu höôùng ñoái töôïng, hoaëc cô sôû döõ lieäu quan heä truyeàn thoáng vôùi moät taàng aùnh xaï
object-to-table. Ñeå ñaûm baûo tính khaû chuyeån cho öùng duïng (khoâng ñoøi hoûi phaàn meàm cuûa nhaø
phaùt trieån khaùc), ta seõ söû duïng giaûi phaùp ñôn giaûn hôn. Caùc ñoái töôïng ñöôïc löu tröõ trong taäp tin
bình thöôøng treân dóa. Chi tieát veà vieäc löu tröõ bò che ñoái vôùi öùng duïng, noù chæ goïi caùc haønh vi

21
chung nhö store(), update(), delete(), find(), … Söï caøi ñaët ñoái töôïng löu tröõ beàn
vöõng ñöôïc thöïc hieän bôûi lôùp Persistent.
Coù theå ñöôïc caûi tieán söï caøi ñaët cuûa lôùp Persistent. Khi moät ñoái töôïng ñöôïc caäp nhaät, maãu tin
hieän taïi ñöôïc ñaùnh daáu xoùa vaø phieân baûn môùi cuûa ñoái töôïng seõ ñöôïc theâm vaøo cuoái taäp tin. Lyù do
khoâng theå ghi ñeø leân maõu tin cuõ laø ñoái töôïng coù theå thay ñoåi chieàu daøi cuûa noù (trong tröôøng hôïp
ñoái töôïng coù chöùa moät vector chieàu daøi voâ haïn ñeå löu caùc keát hôïp moät-nhieàu hay nhieàu-nhieàu).
Ngoaøi ra, vieäc tìm kieám caùc ñoái töôïng cuõng ñöôïc thöïc hieän tuaàn töï baèng caùch tìm töø ñaàu taäp tin
ñeán cuoái taäp tin (boû qua maõu tin bò xoùa). Caùc caûi tieán ñôn giaûn coù theå laø saép xeáp laïi caùc ñoái töôïng
bò xoùa trong moät taäp tin vaø theâm vaøo moät taäp tin chæ muïcñeå toái öu vieäc tìm kieám caùc ñoái töôïng
trong taäp tin.
Giao tieáp cho lôùp Persistent coù theå ñöôïc ñònh nghóa sao cho coù theå deã daøng thay ñoåi söï caøi
ñaët phöông tieän löu tröõ (persistent storage). Moät vaøi giaûi phaùp laø löu caùc ñoái töôïng trong moät cô
sôû döõ lieäu quan heä hay höôùng ñoái töôïng, hoaëc löu tröõ chuùng söû duïng ñoái töôïng persistent
ñöôïc hoå trôï trong Java 1.1. Caùc giaûi phaùp naøy ñeàu coù theå ñöôïc caøi ñaët beân trong lôùp
Persistent cuûa thieát keá hieän thôøi.
Treân Rational Rose, lôùp Persistent ñöôïc moâ taû nhö Hình 17. Lôùp Persistent goàm hai
thuoäc tính thaønh vieân:
• objid: bieåu dieãn ñònh danh cho moãi ñoái töôïng cuûa lôùp thöøa keá töø lôùp Persistent.
• iter: laø moät thuoäc tính static duøng ñeå löu teân taäp tin chöùa döõ lieäu laø caùc ñoái töôïng cuûa
lôùp daãn xuaát töø lôùp Persistent.
Caùc phöông thöùc cuûa lôùp Persistent:
• getObjId: traû veà ñoái töôïng ñònh danh Object (seõ ñeà caäp döôùi ñaây) cuûa ñoái töôïng thuoäc
lôùp daãn xuaát.
• getObject: töø tham soá nhaäp laø moät ñoái töôïng ObjId, traû veà moät ñoái töôïng thaät söï.
• store: löu ñoái töôïng cuûa lôùp daãn xuaát vaøo taäp tin döõ lieäu veà lôùp ñoù (thuoäc tính iter).
• delete: xoùa ñoái töôïng khoûi taäp tin döõ lieäu naøy.
• update: caäp nhaät thoâng tin veà ñoái töôïng vaøo taäp tin döõ lieäu.
• iterate: phöông thöùc static, coù nhieäm vuï taïo ra caùc ñoái töôïng cuûa lôùp daãn xuaát döïa vaøo
thoâng tin taäp tin döõ lieäu veà lôùp ñoù. Neáu taäp tin chöa toàn taïi, noù seõ taïo ra moät taäp tin döõ lieäu
môùi coù teân cuûa lôùp daãn xuaát.
• read: phöông thöùc tröøu töôïng, ñöôïc caøi ñaët bôûi lôùp daãn xuaát. Duøng ñeå ñoïc thoâng tin ñoái
töôïng töø taäp tin döõ lieäu lôùp.
• write: phöông thöùc tröøu töôïng, ñöôïc caøi ñaët bôûi lôùp daãn xuaát. Duøng ñeå ghi thoâng tin ñoái
töôïng vaøo taäp tin döõ lieäu lôùp.
• clean: phöông thöùc clean duøng ñeå loaïi boû caùc ñoái töôïng (cuõng laø maõu tin) ñaõ bò ñaùnh daáu
xoùa treân taäp tin döõ lieäu lôùp.

22
Persistent
(from Database)
objid : Integer
$ iter : RandomAccessFile

Persistent()
getObjId() : ObjId
getObject(id : ObjId) : Persistent
store()
delete() : Boolean
update() : Boolean
iterate(classname : String, start : boolean) : Persistent
write(out : RandomAccessFile)
read(in : RandomAccessFile)
clean()

Hình 17.
Goùi utility
Moät nhaân toá quan troïng khaùc ñeå giaûi quyeát vieäc löu tröõ persistent laø lôùp ObjId, ñoái töôïng cuûa noù
duøng ñeå chæ ñeán baát kyø moät ñoái töôïng persistent naøo trong heä thoáng (baát chaáp ñoái töôïng ñoù
ñang naèm treân dóa hay ñaõ ñöôïc ñoïc vaøo öùng duïng). ObjId laø kyõ thuaät nhaän daïng ñoái töôïng, ñeå
tham khaûo ñeán moät ñoái töôïng trong moät öùng duïng. Baèng caùch söû duïng noù, moät object ID coù theå
ñöôïc chuyeån döôùi daïng tham soá cho moät phöông thöùc nhö Persistent.getObject(), sau ñoù
object ñöôïc laáy töø phöông tieän löu tröõ beàn vöõng (persistent storage) vaø traû veà. Thöôøng thì ñieàu
naøy khoâng ñöôïc thöïc hieän tröïc tieáp maø qua haønh vi getObject() trong moãi lôùp persistent,
ngoaøi ra caùc lôùp naøy coøn thöïc hieän caùc coâng vieäc kieåm tra vaø chuyeån ñoåi caàn thieát.

<<Entity>>
ObjId
(from Uti li ty)

classname : String
number : Integer

ObjId()
ObjId(name : String, num : Integer)
getName() : String
getId() : Integer
equals(obj : Object) : Boolean
write(out : RandomAccessFile)
read(in : RandomAccessFile)

Hình 18.

ObjId laø lôùp toång quaùt ñöôïc söû duïng bôûi taát caû caùc goùi trong heä thoáng (user interface,
business object vaøø database), vì theá ta taïo ra goùi utility chöùa lôùp ObjId naøy. Thaät
ra noù lieân quan vôùi goùi database hôn, nhöng neân ñaët noù nhö vaäy laø vì goùi user interface

23
khoâng neân phuï thuoäc tröïc tieáp vaøo goùi database, maø chæ neân phuï thuoäc vaøo goùi business
object.
Lôùp ObjId ñöôïc moâ taû nhö Hình 18.
Goàm caùc thuoäc tính sau:
• classname: löu teân lôùp maø ñoái töôïng cuûa ObjId ñang bieåu dieãn.
• number: soá danh ñònh cho moät ñoái töôïng thuoäc classname.
Caùc haønh vi cuûa lôùp ObjId:
• getName: traû veà teân lôùp maø ñoái töôïng cuûa ObjId ñang bieåu dieãn.
• getId: traû veà soá ID cuûa ñoái töôïng thuoäc classname.
• equals: so saùnh xem moät ñoái töôïng (ôû tham soá nhaäp) coù phaûi laø ñoái töôïng hieän taïi maø
ObjId ñang bieåu dieãn hay khoâng.
• read: laáy thoâng tin caùc ñoái töôïng ObjId töø moät taäp tin döõ lieäu naøo ñoù.
• write: löu thoâng tin caùc ñoái töôïng ObjId vaøo moät taäp tin döõ lieäu naøo ñoù.
Thoâng tin veà hai goùi Database vaø Utility ñöôïc bieåu dieãn treân browser cuûa Rational Rose
nhö Hình 19.

Hình 19.

Goùi business object


Goùi Business Object trong moâ hình phaân tích chöùa khaù ñaày ñuû caùc lôùp vaø thuoäc tính cuûa
töøng lôùp. Ta seõ boå sung theâm caùc quan heä giöõa caùc lôùp vaø thieát laäp caùc haønh vi cho töøng lôùp.
Haønh vi chuû yeáu bao goàm caùc phöông thöùc laáy vaø löu döõ lieäu töø caùc thuoäc tính trong lôùp vaøø laáy
thoâng tin töø caùc lôùp coù quan heä keát hôïp vôùi noù. Caùc lôùp ñöôïc boå sung laø lôùp Nguoidaidien vaø
boán lôùp ñieàu khieån (control): BaocaoNXT, BaocaoTKBQ, XepContainer vaøø LapsoCont.

24
BL gom

1 1..*

<<Entity>> <<Entity>>
NX cua BL <<Entity>> NX hang
BillLading 1 Container
ChitietNXCH
(from CacHeNgoai) 0..* 1 (from CacHeNgoai)
1..* 0..*
BL cua 1..* <<Entity>>
1 1..* <<Entity>> Nguoidaidien 1
1 1
1 Khachhang
(from CacHeNgoai) Co chi tiet
Thuoc chuyen 1 1
Boc xep container
NX hang cua 1
0..* 1..*
<<Entity>>
Boc xep cua BL
0..* NXCH
1
1..*
1 Xep do tu 1..*
<<Entity>>
Chuyentau <<Entity>> Ton container
NX tai
(from CacHeNgoai) 1..* ChitietTally
<<Entity>>
1 HT X
1..* Cua chuyen 1..*
(from CacHeNgoai)
<<Entity>> 1 Tally gom 1
BaiCont 1 Kiem tai 1
1..*
<<Entity>>
1 0..1 Tally 0..*
Thuoc bai 1..*
<<Entity>>
Tau
(from CacHeNgoai) 1..* <<Entity>>
Vitribai 1
Ton o 0..*
0..*
Ton BL <<Entity>>
TonContainer
0..*

Hình 20.
Nhö vaäy goùi Business Object bao goàm caùc lôùp sau: NXCH, ChitietNXCH, Tally,
ChitietTally, TonContainer, BaiCont, Vitribai, Nguoidaidien,
XepContatainer, BaocaoNXT, BaocaoTKBQ. Caùc thuoäc tính cuûa caùc lôùp ñaõ ñöôïc moâ taû
trong phaàn phaân tích neâu treân. Lôùp môùi boå sung laø Nguoidaidien bao goàm caùc thuoäc tính sau:
• nddten: teân ngöôøi ñaïi dieän chuû haøng.
• nddcmso: soá chöùng minh nhaân daân cuûa ngöôøi ñaïi dieän.
• nddcmngay: ngaøy caáp CMND cuûa ngöôøi ñaïi dieän.
• nddcmnoicap: nôi caáp CMND cuûa ngöôøi ñaïi dieän.
Bieåu ñoà lôùp cuûa goùi Business Object nhö Hình 20.
Moái quan heä giöõa caùc lôùp (goàm association vaø aggregation) ñöôïc caøi ñaët baèng caùch boå sung caùc
thuoäc tính chæ ñeán lôùp maø noù lieân quan. Caùc thuoäc tính naøy coù kieåu laø ObjId. Moãi thuoäc tính coù
giaù trò laø moät ñoái töôïng ObjId, chæ ñeán moät ñoái töôïng cuûa lôùp maø noù coù quan heä. Tröôøng hôïp lôùp
hieän taïi coù quan heä vôùi nhieàu ñoái töôïng cuûa moät lôùp khaùc, thì kieåu cuûa thuoäc tính theå hieän quan
heä naøy seõ laø moät daõy caùc phaàn töû ObjId.

25
Haønh vi trong moãi lôùp noùi chung goàm coù: caùc phöông thöùc duøng ñeå ñaët giaù trò vaø löu giaù trò caùc
thuoäc tính thaønh vieân cuûa lôùp, caùc phöông thöùc ñeå laáy ñoái töôïng ObjId cuûa lôùp coù quan heä vôùi
noù vaøø hai phöông thöùc read, write duøng ñeå löu tröõ vaø laáy thoâng tin ñoái töôïng töø taäp tin döõ lieäu
lôùp.
Sau ñaây seõ moâ taû caáu truùc cuûa caùc lôùp trong goùi Business Object

Lôùp NXCH, Lôùp ChitietNXCH:

<<Entity>>
NXCH
(from Business Obj ect)
lct : String <<Entity>>
sct : Integer ChitietNXCH
ngay : Date (from Busi ness Obj ect)
lxkso : String sln : Currency
lxkngay : Date tln : Currency
baicont : ObjId slx : Currency
khachhang : ObjId tlx : Currency
chitietnxch : ObjId[] nxch : ObjId
ndd : ObjId container : ObjId
billlading : ObjId
NXCH()
write(out : RandomAccessFile) ChitietNXCH()
read(in : RandomAccessFile) read(in : RandomAccessFile)
getCTInfo(sct : Integer, ngay : Date) write(out : RandomAccessFile)
getLXK(lxkso : String, lxkngay : Date) : String getNhap()
getNDD(nddten, nddcmso, nddnoicap) : Nguoidaidien getXuat()
getBaicont() : BaiCont getNXCH()
getKhachhang() : Khachhang getContainer()
getCTNXCH() : ChitietNXCH getBilllading()
getLoaiCT() : String getMaContainer() : String

Lôùp Vitribai:
<<Entity>>
Vitribai
(from Business Object)
msvitri : String
baicont : ObjId
toncontainer : ObjId[]

Vitribai()
read(in : RandomAccessFile)
write(out : RandomAccessFile)

26
Lôùp Tally, Lôùp TonContainer:

<<Entity>>
Tally
(from Busi ness Obj ect)
sotl : String <<Entity>>
ngaytl : Date TonContainer
loaitl : Boolean (from Busi ness Obj ect)

ptgn : String ngaynhap : Date


cagio1 : DateTime billlading : ObjId
cagio2 : DateTime container : ObjId
nguoibien : String vitribai : ObjId
chitiettally : ObjId[] cttrang : Boolean
chuyentau : ObjId sl : Currency = 1
baicont : ObjId tl : Currency
htx : ObjId
TonContainer()
Tally() read(in : RandomAccessFile)
read(in : RandomAccessFile) write(out : RandomAccessFile)
write(out : RandomAccessFile) getTinhtrang() : Boolean
getTLInfo(sotl : String, ngaytl : Date) getSoluong() : Currency
getLoaiTL() : Boolean getTrongluong() : Currency
getCa(cagio1 : DateTime, cagio2 : DateTime) getNgaynhap() : Date
getNguoibien() : String setTinhtrang(cttrang : Boolean)
getMsHTX() : String getBilllading() : BillLading
getCTTL() : ChitietTally getContainer() : Container
getChuyentau() : Chuyentau getVitribai() : Vitribai
getBaicont() : BaiCont setVitribai(msvitri : String)

Lôùp ChitietTally, BaiCont:

<<Entity>>
ChitietTally
(from Busi ness Obj ect) <<Entity>>
ngaynhap : Date BaiCont
sln : Currency (from Busi ness Obj ect)
tln : Currency mskho : String
slx : Currency loaibai : Boolean
tlx : Currency vitribai : ObjId[]
tally : ObjId tally : ObjId[]
billlading : ObjId nxch : ObjId[]
container : ObjId
BaiCont()
ChitietTally()
read(in : RandomAccessFile)
read(in : RandomAccessFile)
write(out : RandomAccessFile) write(out : RandomAccessFile)
getNgaynhap() : Date getMskho() : String
getNhap(sln : Currency, tln : Currency) getTenkho() : String
getXuat(slx : Currency, tlx : Currency) getVitribai() : Vitribai
getTally() : Tally getTally() : Tally
getBilllading() : BillLading getNXCH() : NXCH
getContainer() : Container setMskho(mskho : String)

27
Lôùp Nguoidaidien:
<<Entity>>
Nguoidaidien
(from Busi ness Obj ect)
nddten : String
nddcmso : String
nddcmngay : Date
nddcmnoicap : String
nxch : ObjId[]

Nguoidaidien()
getCmnd(cmso : String, cmngay : Date, cmnoicap : String)
getTen() : String
getNxch() : NXCH
addNxch(nxch : NXCH)
write(out : RandomAccessFile)
read(in : RandomAccessFile)

Goùi cacHeNgoai
Cuõng nhö goùi Business Object, goùi CacHeNgoai ñaõ ñöôïc moâ taû khaù ñaày ñuû veà caùc lôùp vaø
nhöõng thuoäc tính cuûa chuùng trong moâ hình phaân tích. Ta boå sung theâm caùc quan heä giöõa caùc lôùp
vaø thieát laäp caùc haønh vi cho töøng lôùp. Haønh vi chuû yeáu bao goàm caùc phöông thöùc laáy vaø löu döõ
lieäu töø caùc thuoäc tính trong lôùp vaøø caùc phöông thöùc ñeå laáy thoâng tin töø caùc ñoái töôïng cuûa lôùp coù
quan heä keát hôïp vôùi noù.
Nhö vaäy goùi CacHeNgoai bao goàm caùc lôùp sau: Tau, Chuyentau, BillLading, HTX,
Khachhang, Container. Caùc thuoäc tính cuûa caùc lôùp naøy ñaõ ñöôïc moâ taû khaù ñaày ñuû trong phaàn
phaân tích neâu treân. Caùc lôùp cuûa hai goùi CacHeNgoai vaø Business Object coù lieân quan chaëc
cheõ vôùi nhau, vì vaäy ta söû duïng cuøng moät bieåu ñoà lôùp cho goùi Business Object vaø
CacHeNgoai. Moâ hình quan heä tónh giöõa caùc lôùp naøy ñöôïc bieåu dieãn treân bieåu ñoà lôùp cuûa goùi
Business Object ñaõ veõ ôû phaàn treân.
Moái quan heä giöõa caùc lôùp thuoäc goùi naøy (goàm association vaø aggregation) ñöôïc caøi ñaët töông töï
nhö caùc lôùp thuoäc goùi Business Object. Moãi lôùp ñöôïc boå sung theâm caùc thuoäc tính chæ ñeán
lôùp maø noù lieân quan. Caùc thuoäc tính naøy coù kieåu laø ObjId. Moãi thuoäc tính coù giaù trò laø moät ñoái
töôïng ObjId, chæ ñeán moät ñoái töôïng cuûa lôùp maø noù coù quan heä. Tröôøng hôïp lôùp hieän taïi coù quan
heä vôùi nhieàu ñoái töôïng cuûa moät lôùp khaùc, thì kieåu cuûa thuoäc tính theå hieän quan heä naøy laø moät daõy
caùc phaàn töû ObjId.
Haønh vi trong moãi lôùp noùi chung goàm coù: caùc phöông thöùc duøng ñeå ñaët giaù trò vaø löu giaù trò caùc
thuoäc tính thaønh vieân cuûa lôùp, caùc phöông thöùc ñeå laáy ñoái töôïng ObjId cuûa lôùp coù quan heä vôùi
noù vaøø hai phöông thöùc read, write duøng ñeå löu tröõ vaø laáy thoâng tin ñoái töôïng töø taäp tin döõ lieäu
lôùp.
Sau ñaây seõ moâ taû caáu truùc cuûa caùc lôùp trong goùi CacHeNgoai, söû duïng kí hieäu lôùp trong
Rational Rose:

28
Lôùp Taøu, Lôùp HTX:

<<Entity>>
Tau
(from CacHeNgoai )
<<Entity>>
HTX
matau : String (from CacHeNgoai )
chuyentau : ObjId[]
mshtx : String
Tau() tenhtx : String
getMatau() : String
setMatau(matau : String) HTX()
getChuyentau() : Chuyentau getMshtx() : String
write(out : RandomAccessFile) getTen() : String
read(in : RandomAccessFile) write(out : RandomAccessFile)
read(in : RandomAccessFile)

Lôùp Chuyentau, Lôùp Khachhang:

<<Entity>>
Chuyentau <<Entity>>
(from CacHeNgoai ) Khachhang
ngaycap : DateTime (from CacHeNgoai )
billlading : ObjId[] mskh : String
nxch : ObjId[] tenkh : String
tally : ObjId[] nhomkh : String
tau : ObjId billlading : ObjId
nxch : ObjId[]
Chuyentau()
getNgaycap() : DateTime Khachhang()
getTau() : Tau getMskh() : String
getBilllading() : BillLading getTenkh() : String
getNXCH() : NXCH getNhomkh() : String
getTally() : Tally getBilllading() : BillLading
write(out : RandomAccessFile) getNxch() : NXCH
read(in : RandomAccessFile) write(out : RandomAccessFile)
getMatau() : String read(in : RandomAccessFile)

29
Lôùp BillLading, Lôùp Container:

<<Entity>>
Container
(from CacHeNgoai )
cn : String
sn : String
ckieu : String
<<Entity>> cloai : Integer
BillLading cttrang : Boolean
(from CacHeNgoai ) sl : Currency = 1
bl : String tl : Currency
nguoigoi : String billlading : ObjId
chuyentau : ObjId chitietnxch : ObjId[]
khachhang : ObjId chitiettally : ObjId[]
toncontainer : ObjId[] toncontainer : ObjId[]
chitietnxch : ObjId[]
container : ObjId[] getSo() : String
chitiettally : ObjId[] getKihieuhang() : String
getKieu() : String
getBl() : String getLoai() : Integer
getNguoigoi() : String getTtrang() : Boolean
getChuyentau() : Chuyentau getTenhang() : String
getKhachhang() : Khachhang getSoluong() : Currency
getToncont() : TonContainer getTrongluong() : Currency
getCtnxch() : ChitietNXCH getToncont() : TonContainer
getCttl() : ChitietTally getCtnxch() : ChitietNXCH
getContainer() : Container getCttl() : ChitietTally
addContainer() getContainer() : Container
addTonCont() addTonCont()
removeTonCont() removeTonCont()
removeCtnxch() removeCtnxch()
removeCttl() removeCttl()
BillLading() addCtnxch()
addCtnxch() addCttl()
addCttl() getBilllading() : BillLading
removeCont() Container()
write(out : RandomAccessFile) write(out : RandomAccessFile)
read(in : RandomAccessFile) read(in : RandomAccessFile)

Goùi user interface


Goùi User Interface chöùa caùc lôùp giao dieän ñoà hoïa ngöôøi söû duïng. Caùc lôùp naøy ñeàu duøng
stereotype laø GUI (Graphic User Interface), chuùng döïa treân thö vieän Java AWT (Abstract Window
Toolkit) chuaån vaø coù theå thöïc thi treân moïi Java platform. Caùc lôùp trong thö vieän AWT khoâng caàn
bieåu dieãn trong moâ hình thieát keá. Thö vieän AWT coù caùc lôùp cho nhöõng loaïi window khaùc nhau
nhö frame, dialog, … vaø cho caùc loaïi thaønh phaàn giao tieáp ñoà hoïa khaùc nhö label, button, edit
field, list box, … Thö vieän AWT coøn thöïc hieän vieäc ñaùp öùng söï kieän (event) do ngöôøi söû duïng
phaùt ra nhö nhaán chuoät hay baám phím.

30
Giao dieän ngöôøi söû duïng trong heä quaûn lyù container ñöôïc ñöôïc xaây döïng treân cô sôû caùc use case
ñaõ moâ taû ôû phaàn treân. Noù ñöôïc chia thaønh caùc phaàn sau, moãi phaàn laø moät menu rieâng trong cöûa soå
menu chính:
• Tally Container: Window ñeå nhaäp soá lieäu töø giaáy tally (giaáy kieåm nhaän container).
• Xuaát nhaäp Container: Window ñeå nhaäp soá lieäu töø phieáu xuaát nhaäp container.
• Baùo caùo Container gôûi baõi: Window ñeå baùo caùo thoáng keâ baûo quaûn container.
• Baùo caùo Container nhaäp xuaát toàn baõi: Window ñeå baùo caùo nhaäp xuaát toàn container.
• Thao taùc baõi Container: Window veõ ra sô ñoà saép xeáp caùc container trong moät baõi
container xaùc ñònh vaø cho pheùp ngöôøi söû duïng thay ñoåi vò trí, theâm bôùt caùc container.
Caùc window ñöôïc veõ trong moâi tröôøng Symantec Visual Cafeù, trong ñoù caùc thaønh phaàn nhö button
vaø text field coù theå ñöôïc tröïc quan hoùa vaø keát hôïp vaøo moät window. Sau ñoù moâi tröôøng seõ sinh ra
maõ nguoàn caàn thieát ñeå taïo window nhö treân, bao goàm caû caùc thuoäc tính ñeå aùnh xaï caùc thaønh phaàn
naøy vaøo window. Ví duï nhö khi theâm moät nuùt nhaán OK vaøo moät window, moâi tröôøng seõ taïo ra
moät thuoäc tính okButton töông öùng thuoäc lôùp AWT Button beân trong lôùp window ñoù.
Goùi User Interface goàm 6 lôùp GUI: MainWindow, BCNXTFrame, BCTKBQFrame,
XepContFrame, TallyFrame, NXContFrame. Sau ñaây moâ taû caùc lôùp cöûa soå giao dieän neâu
treân:
Lôùp MainWindow: maøn hình giao dieän chính cuûa chöông trình.

<<GUI>>
MainWindow
(from User Interface)

Loggin()
MainWindow()
NhapTally_Action()
NhapNXT_Action()
NhapsodoCont_Action()
BaocaoNXT_Action()
BaocaoTKBQ_Action()
Khoaso_Action()
About_Action()
Help_Action()
Exit_Action()
Logout(argname)

Goàm caùc haønh vi chính:


• NhapTally_Action() : ñöôïc goïi khi ngöôøi söû duïng choïn menu Tally Container.
• NhapNXT_Action() : ñöôïc goïi khi ngöôøi söû duïng choïn menu Xuaát nhaäp
Container.
• NhapsodoCont_Action() : ñöôïc goïi khi ngöôøi söû duïng choïn menu Thao taùc baõi
Container
• BaocaoNXT_Action() : ñöôïc goïi khi ngöôøi söû duïng choïn menu Baùo caùo Container
nhaäp xuaát toàn baõi.

31
• BaocaoTKBQ_Action() : ñöôïc goïi khi ngöôøi söû duïng choïn menu Baùo caùo Container
göûi baõi.
• Khoaso_Action() : ñöôïc goïi khi ngöôøi söû duïng choïn menu Khoùa Soå.
Bieåu ñoà lôùp cuûa lôùp MainWindow: (khoâng moâ taû caùc thuoäc tính)

Lôùp TallyFrame:
Cöûa soå TallyContainer goàm caùc haønh vi chính:
• findButton_Clicked() : ñöôïc goïi khi nuùt Find bò baám, thöïc hieän chöùc naêng
tìm moät maõu tin trong phaàn chi tieát Tally.
• nextButton_Clicked() : chuyeån ñeán maõu tin keá tieáp.
• prevButton_Clicked() : chuyeån ñeán maõu tin tröôùc ñoù.
• deleteButton_Clicked() : xoùa moät maõu tin.
• okButton_Clicked() : keát thuùc vieäc nhaäp Tally.
• cancelButton_Clicked() : huûy vieäc nhaäp Tally.
• hangList_Selected() : choïn loaïi haøng töø danh saùch.
• printButton_Clicked() : in baûng tally container ra maùy in.

Giao dieän cuûa cöûa soå Tally Container (Hình 21)

Hình 21.
Moâ hình class cuûa lôùp TallyFrame: (khoâng moâ taû caùc thuoäc tính)

32
<<GUI>>
TallyFrame
(from User Interface)

TallyFrame()
findButton_Clicked()
nextButton_Clicked()
prevButton_Clicked()
homeButton_Clicked()
endButton_Clicked()
deleteButton_Clicked()
okButton_Clicked()
cancelButton_Clicked()
tauList_Selected()
hangList_Selected()
nguoibienList_Selected()
HTXList_Selected()
PTgnList_Selected()
printButton_Clicked()

Lôùp NXContFrame:
Cöûa soå Xuaát nhaäp Container goàm caùc haønh vi chính:
• findButton_Clicked() : ñöôïc goïi khi nuùt Find ñöôïc click, thöïc hieän chöùc naêng
tìm moät maõu tin trong phaàn chi tieát Container.
• nextButton_Clicked() : chuyeån ñeán maõu tin keá tieáp.
• prevButton_Clicked() : chuyeån ñeán maõu tin tröôùc ñoù.
• deleteButton_Clicked() : xoùa moät maõu tin.
• okButton_Clicked() : keát thuùc vieäc nhaäp xuaát container.
• cancelButton_Clicked() : huûy vieäc nhaäp xuaát container.
• printButton_Clicked() : in baûng xuaát nhaäp container ra maùy in.
Giao dieän cuûa cöûa soå Xuaát nhaäp Container (Hình 22):

Hình 22.

33
Moâ hình class cuûa lôùp NXContFrame: (khoâng moâ taû caùc thuoäc tính)

<<GUI>>
NXContFrame
(from User Interface)

nxch : NXCH
chitietnxch : ChitietNXCH

NXContFrame()
findButton_Clicked()
nextButton_Clicked()
prevButton_Clicked()
homeButton_Clicked()
endButton_Clicked()
deleteButton_Clicked()
okButton_Clicked()
cancelButton_Clicked()
loaiCTList_Selected()
xuatnhapList_Selected()
printButton_Clicked()

Lôùp BCNXTFrame:
Cöûa soå Baùo caùo Container nhaäp xuaát toàn baõi.

<<GUI>>
BCNXTFrame
(from User Interface)

BCNXTFrame()

Lôùp BCTKBQFrame:
Cöûa soå Baùo caùo Container göûi baõi.
<<GUI>>
BCTKBQFrame
(f rom User Interf ace)

BCTKBQFrame()

Lôùp XepContFrame:
Cöûa soå Thao taùc baõi container goàm caùc haønh vi chính:
• baiList_Selected() : ñöôïc goïi khi choïn baõi container caàn thao taùc trong danh
saùch.
• closeButton_Clicked() : ñöôïc goïi khi nuùt Close ñöôïc click, ñoùng cöûa soå sô ñoà baõi
container.
• saveButton_Clicked() : löu laïi caùc thay ñoåi treân sô ñoà baõi container vaøo dóa.
• add20Button_Clicked() : theâm vaøo moät container 20 feet.
• add40Button_Clicked() : theâm vaøo moät container 40 feet.

34
• printButton_Clicked() : in sô ñoà baõi container ra maùy in.
Giao dieän cuûa cöûa soå Thao taùc baõi container (Hình 23):

Hình 23.
Moâ hình class cuûa lôùp XepContFrame: (khoâng moâ taû caùc thuoäc tính)

<<GUI>>
XepContFrame
(from User Interface)

XepContFrame()
baiList_Selected()
closeButton_Clicked()
saveButton_Clicked()
printButton_Clicked()
add20Button_Clicked()
add40ButtonClicked()
findButton_Clicked()
helpButton_Clicked()

Trong moâi tröôøng Symantec Visual Cafeù, coù theå deã daøng theâm vaøo trình xöû lyù söï kieän (event
handler) cho caùc loaïi söï kieän ñöôïc phaùt ra bôûi ngöôøi söû duïng nhö baám chuoät vaø choïn menu. Ñeå
ñònh nghóa moät trình xöû lyù söï kieän, choïn moät thaønh phaàn naøo ñoù (ví duï nhö okButton), roài choïn

35
moät söï kieän cho button ñoù (ví duï nhö söï kieän Click). Sau ñoù moâi tröôøng seõ sinh ra moät phöông
thöùc okButton_Clicked, phöông thöùc naøy ñöôïc goïi khi nuùt OK ñöôïc baám.
Giao dieän keát quaû bao goàm moät window chính, coù moät thanh menu. Töø ñoù coù theå tìm ñeán taát caû
caùc window khaùc cuûa heä thoáng.

5. Caøi ñaët
Ñaây laø giai ñoaïn laäp trình. Ñaàu tieân ta xaây döïng moâ hình caøi ñaët goàm caùc taäp tin chöông trình cuûa
heä thoáng (bieåu ñoà thaønh phaàn). Keá tieáp laø aùnh xaï caùc lôùp ñaõ xaây döïng trong moâ hình thieát keá vaøo
caùc module chöông trình naøy (caùc component). Sau ñoù söû duïng chöùc naêng Code Generation cuûa
Rational Rose ñeå sinh ra maõ nguoàn cô sôû cho caùc component ñöôïc caøi ñaët (taïo ra taäp tin source
code). Löu yù caùc taäp tin nguoàn naøy chæ ñònh nghóa caùc lôùp vaø nhöõng thuoäc tính, haønh vi cuûa chuùng,
ngöôøi laäp trình phaûi töï caøi ñaët noäi dung caùc haønh vi trong caùc lôùp töông öùng ñöôïc taïo.
Yeâu caàu heä thoáng phaûi chaïy ñöôïc treân nhieàu loaïi maùy vaø heä ñieàu haønh, vì vaäy ta choïn Java ñeå
caøi ñaët heä thoáng. Trong öùng duïng naøy, Java ñöôïc duøng nhö moät ngoân ngöõ laäp trình ña muïc tieâu.
Löu yù raèng heä thoáng khoâng ñöôïc caøi ñaët ôû daïng Java applet, bôûi vì Java applet khoâng ñöôïc truy
xuaát heä thoáng taäp tin treân client. Vieäc chuyeån töø caùc lôùp luaän lyù vaøo caùc thaønh phaàn maõ Java
cuõng deã daøng, do coù aùnh xaï moät-moät ñi töø moät lôùp vaøo moät taäp tin chöông trình Java (vaø moät aùnh
xaï moät-moät ñeán moät taäp tin Java thöïc thi .class). Java cuõng söû duïng teân taäp tin gioáng vôùi teân lôùp
chöùa trong taäp tin ñoù.
Hình sau minh hoïa bieåu ñoà thaønh phaàn cuûa heä thoáng caàn caøi ñaët (Hình 24):

CacHeNgoai
User Interface

Utility Business Object

Database Error Handling

Hình 24.
Treân Rational Rose, Hình 25 taïo caùc goùi trong phaàn Component:

36
Hình 25.

Moãi goùi neâu treân chöùa caùc thaønh phaàn (component) cuûa heä thoáng. Moãi lôùp trong moâ hình thieát keá
töông öùng vôùi moät component, moät component seõ sinh ra moät taäp tin nguoàn java töông öùng. Taäp
tin ñöôïc taïo ra seõ coù cuøng teân vôùi teân component (cuõng laø teân cuûa lôùp töông öùng) vôùi phaàn môû
roäng .java. Trong giai ñoaïn naøy, ta taïo ra vaø caøi ñaët lôùp chöông trình chính (lôùp chöùa haøm main).
Goïi teân lôùp naøy laø HQLCont (taäp tin töông öùng laø HQLCont.java), lôùp naøy coù nhieäm vuï taïo lôùp
cöûa soå giao dieän MainWindow trong phaàn thaân haøm main.

Noäi dung goùi Business Object:


NXCH ChitietNXCH Tally ChitietTally

TonContainer BaiCont Vitribai Nguoidaidien

37
Noäi dung goùi CacHeNgoai:
Tau Chuyentau BillLading

Khachhang Container HTX

Goùi Utility vaø goùi Database:


ObjId Persistent

Noäi dung goùi User Interface:


MainWindow BCNXTFrame BCTKBQFrame

XepContFrame TallyFrame NXContFrame

38
6. Trieån khai
Sau khi phaàn meàm heä quaûn lyù container ñaõ ñöôïc taïo vaø traûi qua giai ñoaïn kieåm tra. Böôùc cuoái
cuøng laø quaù trình caøi ñaët vaø trieån khai heä thoáng, töùc moâ taû kieán truùc phaàn cöùng cuûa heä thoáng vaø
ñònh vò caùc taäp tin chöông trình vaøo caùc thieát bò vaät lyù naøy. Ngoaøi ra quaù trình naøy coøn bao goàm
caû vieäc taøi lieäu hoùa taát caû caùc moâ hình cuûa heä thoáng.
Hình döôùi ñaây laø bieåu ñoà trieån khai (deployment diagram) bieåu dieãn kieán truùc vaät lyù cuûa heä
thoáng. Heä thoáng ñöôïc caøi ñaët treân maùy tính cuûa toå container phoøng kho haøng. Vì vaäy yeâu caàu caùc
maùy naøy phaûi coù hoå trôï Java. Cô sôû döõ lieäu cuûa heä thoáng ñöôïc xaây döïng theo kieán truùc
client/sever, caùc taäp tin döõ lieäu löu thoâng tin cuûa caùc ñoái töôïng ñöôïc ñaët treân moät maùy database
server taïi vaên phoøng caûng. Moãi maùy ôû toå container seõ truy xuaát döõ lieäu taïi server thoâng qua
ñöôøng ñieän thoaïi, vì vaäy caàn trang bò moät modem cho moãi maùy client vaø server. Database server
coøn laøm nhieäm vuï cung caáp dòch vuï truy caäp töø xa (remote access) cho caùc maùy ôû toå container.
Ngoaøi ra moãi maùy ôû toå container caàn coù moät maùy in ñeå phuïc vuï cho vieäc in baùo caùo.

To Container -
Bai hang Modem Modem
C1 Telephone line S1

- May server lam nhiem vu cung


HQLCont.class cap dich vu Remote Access
cho cac may o cac kho va
phong bao ve.
Database & Remote - Chuc nang thu hai la lam
Access Server Database server cho toan bo he
thong thong tin cua Cang. Luu
tru thong tin cua cac doi tuong
persistent.
- May nay duoc dat tai van
phong Cang. No duoc ket noi
voi tat ca cac may khac o van
phong Cang thong qua duong
truyen LAN.

To Container -
Bai rong Modem Modem
C2 Telephone line S2

HQLCont.class

Hình 26.

7. Toùm taét
Heä quaûn lyù container laø moät phaàn trong toaøn boä heä quaûn lyù Caûng. Noù ñaùp öùng yeâu caàu thöïc teá
cho boä phaän phoøng Kho haøng, giaûi quyeát ñöôïc moät phaàn khoái löôïng coâng vieäc ñeà ra trong moâ
hình yeâu caàu cuûa Caûng. Phoøng kho haøng coù hai heä con laø heä quaûn lyù container vaø heä quaûn lyù

39
haøng rôøi. Hai heä naøy khaù töông töï nhau, heä quaûn lyù container ñöôïc choïn laøm heä tieâu bieåu ñeå phaân
tích vaø thieát keá.
Cuõng nhö caùc heä con khaùc trong heä quaûn lyù Caûng, heä quaûn lyù container khoâng theå ñöôïc xaây döïng
ñoäc laäp. Noù söû duïng nhieàu thoâng tin töø caùc heä quaûn lyù khaùc. Do vaäy vieäc xaây döïng heä quaûn lyù
container phaûi ñaûm baûo tính thoáng nhaát vôùi caùc heä quaûn lyù khaùc treân cô sôû baùm saùt moâ hình yeâu
caàu cuûa heä thoáng Caûng.
Heä quaûn lyù container ñöôïc phaân tích vaø thieát keá theo höôùng ñoái töôïng vaø söû duïng UML laøm ngoân
ngöõ moâ hình hoùa. Toaøn boä moâ hình phaân tích thieát keá cuûa heä quaûn lyù container ñöôïc taïo ra vaø löu
tröõ baèng phaàn meàm Rational Rose 98. Ñaây laø moät CASE Tool hoå trôï UML khaù ñaày ñuû vaø coù tính
naêng sinh maõ chöông trình. Vôùi söï trôï giuùp cuûa Rational Rose, coâng vieäc phaân tích thieát keá trôû
neân nhanh choùng, deã daøng vaø hieäu quaû, giuùp naâng cao chaát löôïng coâng vieäc phaân tích thieát keá.
Heä quaûn lyù container ñöôïc xaây döïng nhö moät minh hoïa thöïc teá cho vieäc öùng duïng UML trong
phaân tích thieát keá heä thoáng thoâng tin quaûn lyù. Muïc ñích laø chöùng minh tính khaû thi vaø hieäu quaû
cuûa UML qua moät ví duï thöïc teá. Vì vaäy taøi lieäu naøy khoâng cung caáp ñuû chi tieát nhö moät taøi lieäu
phaân tích thieát keá ñaày ñuû (taøi lieäu hoaøn chænh thaät söï raát lôùn). Troïng taâm cuûa taøi lieäu naøy laø neâu
baät söï höõu duïng cuûa UML, nhö tính toång quaùt, uyeån chuyeån trong vieäc moâ hình hoùa. Töø ñoù giuùp
vieäc phaân tích thieát keá trôû neân nhanh choùng, thích hôïp vôùi nhieàu loaïi heä thoáng, deã baûo trì vaøø deã
môû roäng hôn.

40

You might also like