Thiết kế hệ thống nhập điểm tự động

Tài liệu Thiết kế hệ thống nhập điểm tự động: ... Ebook Thiết kế hệ thống nhập điểm tự động

doc76 trang | Chia sẻ: huyen82 | Lượt xem: 1617 | Lượt tải: 0download
Tóm tắt tài liệu Thiết kế hệ thống nhập điểm tự động, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LÔØI TÖÏA Ngaøy nay, với söï phaùt trieån nhö vuõ baõo cuûa ngaønh coâng ngheä thoâng tin ñaõ vaø ñang ñöa con ngöôøi chuùng ta daàn tieán ñeán moät kyõ nguyeân môùi, kyõ nguyeân cuûa tin hoïc hoaù trong ñôøi soáng. Tin hoïc ñaõ len loõi vaøo moïi ngoùc ngaùch cuûa cuoäc soáng, ñöa con ngöôøi ñeán vôùi moät cuoäc soáng chaát löôïng hôn. Tin hoïc giuùp con ngöôøi laøm vieäc moät caùch hieäu quaû hôn, naêng suaát cao hôn, … vaø tieát kieäm ñöôïc nhieàu thôøi gian hôn ñeå taäp trung vaøo nhöõng coâng vieäc khaùc hoaëc caùc hoaït ñoäng khaùc (nhö vui chôi, giaûi trí). Muïc tieâu cuûa nhaø nöôùc ta laø tin hoïc hoaù caùc coâng vieäc vaên phoøng. Ñeå laøm ñöôïc ñieàu ñoù caùc nhaø khoa hoïc ñaõ coá gaéng nghieân cöùu ñeå taïo ra nhöõng chöông trình ñeå phuïc vuï cho coâng vieäc treân. Moät trong nhöõng coâng vieäc vaên phoøng ôû tröôøng hoïc laø vieäc nhaäp ñieåm thi cho hoïc sinh, sinh vieân vaøo cô sôû döõ lieäu cuûa tröôøng. Coâng vieäc nhaäp ñieåm vaøo maùy ñoøi hoûi söï taäp trung cao ñoä cuûa ngöôøi nhaäp vì neáu ngöôøi nhaäp nhaäp ñieåm sai thì seõ aûnh höôûng ñeán keát quaû hoïc taäp cuûa ngöôøi hoïc. Ñeå cho coâng vieäc treân hieäu quaû hôn thì ñoøi hoûi phaûi coù moät caùch nhaäp ñieåm töï ñoäng hôn. Ñeå tieáp caän vaø goùp phaàn ñaåy maïnh söï phaùt trieån cuûa ngaønh giaùo duïc ôû Vieät Nam, chuùng em xin trình baøy “Heä thoáng nhaäp ñieåm töï ñoäng”. Trong khuoân khoå thôøi gian cho pheùp ñeå laøm moät ñeà taøi toát nghieäp coù theå chuùng em chöa hoaøn taát ñaày ñuû chöùc naêng, tính linh hoaït vaø phoå bieán cuûa heä thoáng. Sau naøy neáu ñieàu kieän cho pheùp, ñeà taøi naøy coù theå phaùt trieån roäng hôn veà quy moâ vaø saâu hôn veà chaát löôïng ñeå chöông trình hoaït ñoäng sao cho hoaøn chænh vaø phuø hôïp vôùi thöïc teá hôn. Sinh vieân thöïc hieän Nguyeãn Vaên Thaønh NHAÄN XEÙT CUÛA GIAÛNG VIEÂN NHAÄN XEÙT CUÛA GIAÛNG VIEÂN MUÏC LUÏC Chöông 1: Toång quan veà xöû lyù aûnh 1.1. Môû ñaàu Ñònh daïng file aûnh bitmap (BMP) Ñònh daïng file aûnh JPEG Ñònh daïng file aûnh TIFF (Tag Image File Format) Ñònh daïng file aûnh GIF (Graphices Interchange Format) 1.2. Caùc pheùp bieán ñoåi trong ñoà hoïa hai chieàu 1.2.1. Caùc pheùp bieán ñoåi hình hoïc cô sôû 1.2.2. Moät soá tính chaát cuûa pheùp bieán ñoåi Affine 1.2.2.1. Pheùp bieán ñoåi Affine baûo toaøn ñöôøng thaúng 1.2.2.2. Tính song song cuûa caùc ñöôøng thaúng ñöôïc baûo toaøn 1.2.2.3. Tính tæ leä veà khoaûng caùch ñöôïc baûo toaøn 1.2.3. Moät soá pheùp bieán ñoåi khaùc 1.2.3.1. Pheùp ñoái xöùng 1.2.3.2. Pheùp bieán daïng Chöông 2: Nhaän daïng caùc chaám ñen 2.1. Xaùc ñònh hai moác cuûa file baûng ñieåm 2.1.1. Giaûi phaùp ñeå xaùc ñònh taâm cuûa moät moác 2.1.2. Xaây döïng giaûi thuaät 2.2. Xaùc ñònh caùc ñieåm trong file baûng ñieåm Chöông 3: Phaân tích baøi toaùn 3.1. Ñaët vaán ñeà 3.2. Giôùi haïn vaán ñeà vaø phaùt bieåu baøi toaùn 3.2.1. Giôùi haïn vaán ñeà 3.2.2. Phaùt bieåu baøi toaùn 3.3. Moâ taû döõ lieäu ñaàu vaøo, döõ lieäu ñaàu ra vaø xöû lyù döõ lieäu 3.3.1. Döõ lieäu ñaàu vaøo cuûa chöông trình 3.3.2. Döõ lieäu ñaàu ra cuûa chöông trình 3.3.3. Phaàn xöû lyù döõ lieäu 3.4. Giôùi thieäu sô löôïc veà tôø baûng ñieåm vaø file baûng ñieåm 3.4.1. Moâ taû tôø baûng ñieåm 3.4.1.1. Phaàn töïa 3.4.1.2. Phaàn thaân 3.4.1.3. Phaàn cuoái 3.4.2. Moâ taû file baûng ñieåm 3.5. Nhöõng vaán ñeà caàn giaûi quyeát 3.5.1. Nhöõng vaán ñeà caàn giaûi quyeát ñeå cho ra file ñieåm 3.5.2. Nhöõng vaán ñeà caàn giaûi quyeát ñeå nhaäp ñieåm vaøo cô sôû döõ lieäu Chöông 4: Thieát keá caùc baûng caàn thieát cho vieäc nhaäp ñieåm 4.1. Giôùi thieäu caùc heä quaûn trò cô sôû döõ lieäu 4.1.1. Heä quaûn trò cô sôû döõ lieäu Access 4.1.2. Heä quaûn trò cô sôû döõ lieäu SQL Server 4.1.2.1. Giôùi thieäu sô löôïc veà SQL Server 4.1.2.2. SQL Server 4.1.2.3. Chuyeån töø Microsoft Access sang SQL Server 4.1.2.3.1. Duøng Microsoft Access Upsizing Tools 4.1.2.3.2. Xuaát döõ lieäu sang SQL Server duøng baûng lieân keát 4.1.3. Heä quaûn trò cô sôû döõ lieäu Oracle 4.2. Xaây döïng caùc baûng 4.2.1. Moâ taû 4.2.2. Taïo baûng 4.2.3. Moâ hình quan nieäm döõ lieäu vaø moâ hình xöû lyù 4.3. Nhaäp döõ lieäu vaøo cô sôû döõ lieäu Chöông 5: Thöïc hieän vieäc nhaäp ñieåm vaøo cô sôû döõ lieäu 5.1. Giôùi thieäu veà moâi tröôøng phaùt trieån cuûa Visual Basic 6 vaø caùc ñieàu khieån cuûa noù 5.1.1. Giôùi thieäu veà Visual Basic 5.1.2. Giôùi thieäu caùc ñieàu khieån chính ñöôïc söû duïng trong chöông trình 5.1.2.1. Giôùi thieäu ñieàu khieån Textbox 5.1.2.2. Giôùi thieäu ñieàu khieån Command Button 5.1.2.3. Giôùi thieäu ñieàu khieån PictureBox 5.1.2.4. Giôùi thieäu veà Form trong Visual Basic 5.1.2.5. Giôùi thieäu ñieàu khieån DataCombo 5.1.2.6. Giôùi thieäu veà haøm Shell trong Visual Basic 5.1.2.7. Giôùi thieäu ñieàu khieån DataGrid 5.1.2.8. Giôùi thieäu ñieàu khieån ListView 5.1.2.9. Caùch truy xuaát file text tuaàn töï 5.2. Yeâu caàu 5.3. Xöû lyù 5.3.1. Chuaån bò file aûnh vaø caùc vaán ñeà lieân quan 5.3.2. Xöû lyù file aûnh ñeå cho ra file ñieåm 5.3.2.1. Sô ñoà xöû lyù file aûnh ra file ñieåm 5.3.2.2. Trình baøy vieäc xöû lyù file aûnh 5.3.3. Xöû lyù döõ lieäu treân cô sôû döõ lieäu ñeå nhaäp ñieåm 5.3.3.1. Sô ñoà cho vieäc xöû lyù döõ lieäu 5.3.3.2. Trình baøy caùch xöû lyù döõ lieäu 5.3.4. Nhaäp ñieåm vaøo cô sôû döõ lieäu 5.3.4.1. Sô ñoà moâ taû 5.3.4.2. Trình baøy caùch nhaäp ñieåm 5.3.5. Xem ñieåm sinh vieân trong cô sôû döõ lieäu 5.3.5.1. Sô ñoà moâ taû 5.3.5.2. Xem ñieåm 5.4. Giaûi thuaät 5.4.1. Ñaùnh soá thöù töï cuûa sinh vieân 5.4.2. Caäp nhaät ñieåm thi Chöông 6: Öu ñieåm, khuyeát ñieåm vaø höôùng phaùt trieån cuûa ñeà taøi 6.1. Öu ñieåm 6.2. Khuyeát ñieåm 6.3. Höôùng phaùt trieån cuûa ñeà taøi CHÖÔNG 1: TOÅNG QUAN VEÀ XÖÛ LYÙ AÛNH 1.1. MÔÛ ÑAÀU: Khaùi nieäm veà aûnh soá xuaát hieän töø naêm 1964. Chaúng bao laâu, moät nhaùnh môùi cuûa khoa hoïc goïi laø xöû lyù aûnh soá ra ñôøi. Keå töø ñoù, lieân tuïc phaùt trieån vaø taïo ra caùc kyõ thuaät quan troïng aûnh höôûng tröïc tieáp ñeán caùc lónh vöïc truyeàn thoâng, tivi, kyõ xaûo ñoà hoaï, .... Xöû lyù aûnh laø moät trong caùc vaán ñeà ngaøy nay ñöôïc theá giôùi quan taâm, nghieân cöùu vaø öùng duïng. ÔÛ Vieät Nam, vaán ñeà xöû lyù aûnh cuõng ñöôïc quan taâm vaø nghieân cöùu trong thôøi gian gaàn ñaây . AÛnh hai chieàu (aûnh 2D) ñöôïc bieåu dieãn bôûi ma traän hai chieàu. Moãi soá phaàn töû bieåu dieãn moät giaù trò möùc xaùm (hay maøu) cuûa moät ñieåm aûnh töông öùng. Neáu soá bít duøng ñeå löu giaù trò möùc xaùm (hay maøu) cuûa moät ñieåm aûnh laø 8 bít, thì soá möùc xaùm (hay maøu) cho pheùp laø 28 (hay 256) giaù trò möùc xaùm (hay maøu) coù theå. Caùc giaù trò möùc xaùm (hay maøu) naày thöôøng gaùn giaù trò nguyeân daõy töø 0 ñeán 255, vôùi 0 bieåu dieãn cho möùc cöôøng ñoä toái nhaát (hay maøu ñen) vaø 255 bieåu dieãn cho möùc cöôøng ñoä saùng nhaát (hay maøu traéng). Moãi phaàn töû trong ma traän ñöôïc goïi laø phaàn töû aûnh (a picture element).  Döôùi ñaây laø phaàn moâ taû caùc ñònh daïng cuûa aûnh ñoà hoïa thoâng duïng nhaát hieän nay: 1.1.1. Ñònh daïng file aûnh bitmap (BMP): Nhöõng file aûnh bitmap Windows ñöôïc löu tröõ trong moät ñònh daïng aûnh bitmap ñoäc laäp thieát bò (DIB: Device-Independent Bitmap) maø noù cho pheùp Windows hieån thò aûnh bitmap treân baát kyø thieát bò hieån thò naøo. Thuaät ngöõ “Device-Independent” coù nghóa raèng aûnh bitmap chæ roõ maøu ñieåm trong moät daïng ñoäc laäp cuûa phöông phaùp ñöôïc söû duïng bôûi moät maøn hình ñeå ñaïi dieän maøu. Phaàn môû roäng teân file maëc ñònh cuûa taäp tin DIB Windows laø .BMP. Caáu truùc file aûnh bitmap: Moãi file aûnh bitmap Windows bao goàm 4 phaàn sau: Tieâu ñeà file aûnh bitmap. Thoâng tin tieâu ñeà aûnh bitmap. Baûng maøu. Maûng caùc byte maø noù chæ roõ caùc bit cuûa aûnh bitmap. File coù daïng nhö sau: BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih; RGBQUAD aColors[];0 BYTE aBitmapBits[]; Chi tieát cuûa caáu truùc file daïng BMP nhö sau: OFFSET Count TYPE Description 000 0000h 2 char ID='BM' – BitMap OS/2 cuõng hoã trôï caùc daïng sau ñaây: ID='BA' – maûng bitmap (Bitmap Array) ID='CI' – bieåu töôïng maøu (Color Icon) ID='CP' – con troû maøu (Color Pointer) (mouse cursor) ID='IC' – bieåu töôïng (Icon) ID='PT' – con troû (Pointer) (mouse cursor) 0002h 1 dword kích thöôùc cuûa taäp tin 0006h 4 byte khoâng söû duïng 000Ah 1 dword khoaûng troáng trong file bitmap ="BOF" 000Eh 1 dword chieàu daøi cuûa BitMapInfoHeader baét ñaàu tröïc tieáp sau phaàn tieâu ñeà naøy: 12 - theo ñòng daïng cuûa OS/2 1.x 40 - theo ñòng daïng cuûa Windows 3.x 64 - theo ñòng daïng cuûa OS/2 2.x 0012h 1 dword nhöõng ñieåm aûnh ngang trong file bitmap 0016h 1 dword nhöõng ñieåm aûnh ñöùng trong file bitmap 001Ah 1 word soá maët phaúng 001Ch 1 word soá Bits treân pixel (nhö vaäy, ñoù chính laø soá maøu) ="BPP" 001Eh 1 dword loaïi taäp tin neùn, coù 3 loaïi neùn khaùc nhau sau ñaây: 0 - none 1 - RLE 8-bit/Pixel 2 - RLE 4-bit/Pixel 0022h 1 dword soá kyù töï trong böùc aûnh 0026h 1 dword ñoä phaân giaûi ngang cuûa aûnh 002Ah 1 dword ñoä phaân giaûi ñöùng cuûa aûnh 002Ah 1 dword soá maøu ñöôïc söû duïng 002Ah 1 dword soá maøu quan troïng 0036h ? rec ñònh nghóa N maøu N=1 shl "BPP" 1 byte thaønh phaàn Blue 1 byte thaønh phaàn Green 1 byte thaønh phaàn Red 1 byte thaønh phaàn laøm ñaày "BOF" ? byte döõ lieäu aûnh Tieâu ñeà file aûnh bitmap chöùa ñöïng thoâng tin veà loïai file aûnh, toång kích thöôùc cuûa file aûnh, vaø caùch trình baøy moät file aûnh bitmap thieát bò baát kyø. Tieâu ñeà ñöôïc ñònh nghóa nhö caáu truùc BITMAPFILEHEADER. Thoâng tin tieâu ñeà aûnh bitmap, ñöôïc ñònh nghóa nhö moät caáu truùc BITMAPINFOHEADER. Chæ roõ chieàu roäng, chieàu cao cuûa aûnh, loaïi neùn aûnh (khoâng neùn, neùn theo giaûi thuaät RLE4 hay RLE8) vaø khuoân daïng maøu cho aûnh bitmap. Baûng maøu, ñöôïc ñònh nghóa nhö moät maûng caùc caáu truùc RGBQUAD bao goàm nhieàu phaàn thöû coù maøu trong aûnh bitmap. Baûng maøu khoâng hieän höõu cho aûnh bitmap vôùi 24bits maøu vì moãi ñieåm ñöôïc ñaïi dieän bôûi caùc giaù trò cuûa 24 bit maøu ñoû-xanh luïc-xanh döông(RGB) trong vuøng döõ lieäu thaät söï cuûa aûnh bitmap. Nhöõng maøu trong baûng maøu xuaát hieän theo thöù töï quan troïng. Ñieàu naøy traû laïi boä phaän ñieàu khieån hieån thò aûnh bitmap treân moät thieát bò hieån thò khoâng ñöôïc nhieàu maøu trong moät aûnh bitmap. Caáu truùc BITMAPINFOHEADER coù theå ñöôïc duøng ñeå ñaïi dieän cho söï keát hôïp giöõa thoâng tin tieâu ñeà file bitmap vaø baûng maøu. Nhöõng bit aûnh bitmap tröïc tieáp theo sau baûng maøu, bao goàm maûng caùc giaù trò BYTE ñaïi dieän cho caùc doøng lieân tuïc nhau, “doøng queùt” cuûa aûnh bitmap. Moãi doøng queùt bao goàm caùc byte lieân tuïc nhau ñaïi dieän cho caùc ñieåm aûnh treân doøng queùt töø traùi qua phaûi. Thöù töï caùc byte ñaïi dieän cho moät doøng queùt phuï thuoäc vaøo khuoân daïng maøu vaø chieàu roäng tính baèng pixel cuûa aûnh bitmap. Caáu truùc BITMAPINFOHEADER xaùc ñònh soá bit ñöôïc ñònh nghóa trong moãi pixel vaø soá maøu lôùn nhaát trong aûnh bitmap. Coù theå coù nhöõng giaù trò sau ñaây: 1 – Laø aûnh bitmap chæ coù moät maøu vaø baûng maøu chöùa hai muïc. Moãi bit trong moät maûng cuûa aûnh bitmap ñaïi dieän cho moät pixel. Neáu bit bò xoùa (khoâng ñöôïc thieát laäp), thì pixel ñöôïc hieån thò vôùi maøu cuûa muïc ñaàu tieân trong baûng maøu. Neáu bit ñöôïc thieát laäp, thì pixel ñöôïc hieån thò vôùi maøu cuûa muïc thöù hau trong baûng maøu. 4 – Laø aûnh bitmap coù toái ña 16 maøu. Moãi pixel trong aûnh bitmap ñöôïc bieåu thò baèng moät chæ soá 4 bit maøu beân trong baûng maøu. Chaúng haïn, neáu byte ñaàu tieân trong aûnh bitmap laø 0x1F thì byte ñaïi dieän cho hai pixel. Pixel ñaàu tieân chöùa maøu trong muïc thöù hai cuûa baûng maøu vaø pixel thöù hai chöùa maøu trong muïc thöù 16 cuûa baûng maøu. 8 – Laø aûnh bitmap coù toái ña 256 maøu. Moãi pixel trong aûnh bitmap ñöôïc bieåu thò baèng moät chæ soá 1 byte beân trong baûng maøu. Chaúng haïn, neáu byte ñaàu tieân trong aûnh bitmap laø 0x1F thì pixel ñaàu tieân coù maøu cuûa muïc thöù 32 trong baûng maøu. 24 – Laø aûnh bitmap coù toái ña 16777216 maøu. Moãi 3-byte theo thöù töï maûng trong aûnh bitmap ñaïi dieän cho cöôøng ñoä töông ñoái cuûa 3 maøu ñoû, xanh, xanh döông theo thöù töï ñònh saún trong moät pixel. Soá maøu thöïc söï trong baûng maøu ñöôïc söû duïng trong aûnh bitmap. Moät ñieàu ñaëc bieät nhaát veà caùc aûnh bitmap cuûa Windows laø caùc byte ñöôïc löu tröõ töø beân treân xuoáng döôùi. Doøng cuoái cuøng trong aûnh bitmap seõ ñöôïc löu tröõ ñaàu tieân, coøn doøng ñaàu tieân seõ ñöôïc löu tröõ cuoái cuøng. Caùc giaûi thuaät neùn aûnh bitmap: Phieân baûn 3.0 cuûa Windows vaø caùc baûn veà sau naøy hoã trôï ñònh daïng RLE(Run-Length Encoded) ñeå neùn aûnh bitmap maø söû duïng 4 bit treân pixel vaø 8 bit treân pixel. Neùn laøm giaûm dung löôïng cuûa ñóa cöùng vaø boä nhôù khi phaûi löu tröõ cho moät aûnh bitmap. Neáu loaïi neùn trong thoâng tin tieâu ñeà file bitmap laø 0 thì neùn khoâng ñöôïc söû duïng, neáu loaïi neùn laø 1 thì aûnh söû duïng giaûi thuaät neùn laø RLE8 coøn neáu loaïi neùn laø 2 thì aûnh söû duïng loaïi neùn laø RLE4. Neùn aûnh bitmap 8 bit treân pixel: Laø loaïi neùn cho moät aûnh coù 256 maøu. Ñònh daïng naøy söû duïng 2 cheá ñoä: cheá ñoä maõ hoùa vaø cheá ñoä tuyeät ñoái. Caû 2 cheá ñoä coù theå xuaát hieän baát cöù nôi naøo khaép caû moät aûnh bitmap ñôn. Cheá ñoä maõ hoùa: Moät ñôn vò thoâng tin beân trong cheá ñoä maõ hoùa bao goàm coù 2 byte. Byte ñaàu tieân chæ roõ soá nhöõng pixel lieân tuïc nhau ñeå veõ söû duïng chæ soá maøu ñöôïc chöùa trong byte soá 2. Byte ñaàu tieân trong 2 byte coù theå thieát laäp veà 0 ñeå thoùat khoûi söï chæ ñònh maø chæ roõ laø cuoái cuûa moät doøng, cuoái moät aûnh bitmap hay moät vuøng naøo ñoù. Giaûi thích veà vieäc keát thuùc phuï thuoäc vaøo giaù trò trong byte thöù 2 trong 2 byte, maø chæ cho pheùp giôùi haïn trong khoaûng 0x00 ñeán 0x02. Sau ñaây giaûi thích cho giaù trò keát thuùc maø coù theå ñöôïc söû duïng trong byte thöù 2. Byte thöù 2 YÙ nghóa 0 Cuoái doøng 1 Cuoái aûnh bitmap 2 Trong moät vuøng naøo ñoù Cheá ñoä tuyeät ñoái: Trong cheá ñoä tuyeät ñoái coù moät ñieåm ñaùng chuù yù laø byte ñaàu tieân trong moät caëp ñöôïc thieát laëp baèng 0 vaø byte thöù 2 coù giaù trò trong khoûang 0x03 ñeán 0xFF. Byte thöù 2 ñaïi dieän cho soá byte theo sau, moãi byte theo sau chöùa chæ soá maøu cuûa moät ñieåm aûnh ñôn. Moãi laàn thöïc thi noù phaûi canh chænh laïi bieân cuûa moät töø. Neùn aûnh bitmap 4 bit treân pixel: Töông töï nhö phaàn neùn aûnh bitmap 8 bit treân pixel chæ coù khaùc laø söû duïng giaûi thuaät neùn cho aûnh bitmap coù 16 maøu. Cheá ñoä maõ hoùa: Moät ñôn vò thoâng tin beân trong cheá ñoä maõ hoùa bao goàm coù 2 byte. Byte ñaàu tieân chæ roõ soá nhöõng pixel lieân tuïc nhau ñeå veõ söû duïng chæ soá maøu ñöôïc chöùa trong byte soá 2. Byte thöù 2 chöùa chæ soá cuûa 2 maøu, moät maøu trong 2 maøu laáy thöù töï cao vaø maøu coøn laïi laáy thöù töï thaáp. Cheá ñoä tuyeät ñoái: Trong cheá ñoä tuyeät ñoái, byte ñaàu tieân chöù soá 0, byte thöù 2 chöùa chæ soá cuûa maøu vaø byte theo sau chöùa chæ soá maøu laáy thöù töï cao vaø thaáp beân trong noù, moãi chæ soá maøu cho moãi pixel. Moãi laàn thöïc thi noù phaûi canh chænh laïi bieân cuûa moät töø. 1.1.2. Ñònh daïng file aûnh JPEG/JPG: Chuaån aûnh theo daïng JPEG/JPG laø moät chuaån neùn aûnh coù söï maát maùt döõ lieäu (nhöng coù hieäu quaû: kích thöôùc taäp tin nhoû hôn raát nhieàu so vôùi taäp tin daïng BMP, chaát löôïng aûnh cuõng khoâng thay ñoåi nhieàu, ... neân noù hay ñöôïc söû duïng nhieàu treân Web vaø nhöõng vieäc xöû lyù aûnh hieän nay). Caáu truùc ñònh daïng cuûa moät khoái JPEG (taát caû döõ lieäu ñeàu naèm trong byte Motorola): OFFSET Soábyte Loaïi Moâ taû 0000h 1 word Block ID 0FFD8h - JPEG kyù hieäu khoái (4 chars="JFIF") 0FFC0h - JPEG thoâng tin veà maøu 0FFC1h - JPEG thoâng tin veà maøu 0002h 1 word kích thöôùc byte trong khoái, khoâng tính ID word. Thoâng tin maøu cuûa ñònh daïng JPEG (thöù töï byte Motorola) : OFFSET Soábyte Loaïi Moâ taû 0000h 1 byte 1 = aûnh xaùm 0001h 1 word chieàu cao 0003h 1 word chieàu roäng 1.1.3. Ñònh daïng file aûnh TIFF (Tag Image File Format): Laø moät theû ñöôïc döïa treân ñònh daïng file maø ñöôïc thieát keá ñeå ñaåy maïnh vieäc thay ñoåi döõ lieäu aûnh kyõ thuaät soá. Kòch baûn toång quaùt cuûa loaïi aûnh TIFF ñöôïc phaùt minh vôùi giaû thuyeát raèng nhöõng öùng duïng phaàn meàm cho vieäc queùt vaø veõ aûnh taïo ra moät file theo daïng TIFF, maø sau ñoù coù theå ñoïc vaø hôïp nhaát vaøo trong moät taøi lieäu hoaëc coâng boá bôûi moät öùng duïng nhö moät goùi cheá baûn ñieän töû. Chuû yù cuûa TIFF seõ toå chöùc vaø laäp ñieàu leä thöïc haønh hieän höõu ñoái vôùi ñònh nghóa vaø caùch duøng ñöôïc thieát keá sao cho döõ lieäu soá goïn nheï, khoâng lan roäng ra nhöõng höôùng ñi môùi hoaëc ñaåy maïnh nhöõng kyõ thuaät chöa ñöôïc chöùng minh. Vaäy maø moät quyeàn öu tieân raát cao ñöôïc ñöa ra cho moät caáu truùc döõ lieäu beân trong moät caùch nhö vaäy nhö vieäc laøm giaûm bôùt ñi noåi khoù nhoïc, maát coâng söùc cho vieäc theâm vaøo sau naøy. TIFF ñöôïc thieát keá laø moät khuoân daïng cho söï trao ñoåi raát deã môû roäng sau naøy. Maët duø TIFF ñoøi hoûi trong moät höôùng naøo ñoù moät giaøu ñònh daïng, noù coù theå deã daøng söû duïng cho nhöõng scanner vaø nhöõng öùng duïng ñôn giaûn nöõa, moät khi ngöôøi phaùt trieån öùng duïng caàn chæ ñöôïc quan taâm vôùi nhöõng khaû naêng maø anh ta yeâu caàu. TIFF ñöôïc döï ñònh ñoäc laäp cho nhöõng heä ñieàu haønh ñaëc bieät, saép xeáp nhöõng heä thoáng, nhöõng trình bieân dòch vaø nhöõng boä xöû lyù. Chæ coù yù nghóa giaû thieát raèng moâi tröôøng löu tröõ khoûang chöøng moät file ñöôïc ñònh nghóa theo thöù töï bytes 8 bit. Nôi maø bytes ghi soá töø 0 ñeán N. File TIFF coù theå lôùn nhaát laø 2*32 bytes. Vì nhöõng con troû ñöôïc söû duïng töï do neân moät file TIFF haàu nhö ñoïc deã daøng töø moät thieát bò truy caäp ngaãu nhieân, maëc daàu noù coù ñoïc vaø ghi file TIFF treân phöông tieän truyeàn thoâng lieân tuïc nhö baêng ghi aâm. Nhieàu chöông trình öùng duïng maø ñoïc nhöõng noäi dung cuûa file hình aûnh TIFF seõ khoâng hoã trôï taát caû caùc ñaëc tính moâ taû trong taøi lieäu naøy. Trong vaøi tröôøng hôïp nhöõng phöông aùn choïn maëc ñònh nhoû beù hôn seõ ñöôïc hoã trôï. Noù leân treân tôùi moãi toå chöùc ñeå xaùc ñònh nhöõng giaù vaø nhöõng lôïi ích lieân quan ñeán nhöõng möùc khaùc nhau cuûa söï phuø hôïp. Bôûi vaäy nhöõng tuyeân boá phuø hôïp vôùi thuyeát minh naøy vôùi soá löôïng nhaéc nhôû nhaát ñònh. Noù ñi theo maø caùch duøng cuûa thuyeát minh naøy khoâng loaïi tröø cho phoái hôïp giöõa ngöôøi vieát ra file hình aûnh vaø ngöôøi ñoïc file hình aûnh. Chính leân treân tôùi ngöôøi thieát keá öùng duïng maø ñaàu tieân vieát moät file trong khuoân daïng naøy ñeå xaùc minh maø nhöõng tuøy choïn file mong muoán ñöôïc hoã trôï bôûi nhöõng öùng duïng maø seõ ñoïc file. Caáu truùc: Trong file TIFF, nhöõng lónh vöïc rieâng leõ seõ ñöôïc xaùc ñònh vôùi moät theû duy nhaát. Ñieàu naøy cho pheùp nhöõng lónh vöïc ñaëc bieät hieän höõu vaø vaéng maët töø file ñöôïc yeâu caàu bôûi öùng duïng. Vaøi file TIFF seõ chæ coù moät ít lónh vöïc trong chuùng nhöng nhöõng loaïi file khaùc thì seõ coù nhieàu lónh vöïc. Phaàn meàm maø taïo ra nhöõng file TIFF caàn phaûi vieát ra trong nhieàu lónh vöïc maø noù tin töôûng seõ ñaày yù nghóa vaø höõu ích (vaø khoâng hôn). Nhöõng phaàn meàm ñoïc file daïng TIFF seõ laø toát nhaát vôùi nhöõng lónh vöïc maø noù tìm thaáy ôû ñoù. Chính caáu truùc TIFF khoâng phaûi laø ñaëc bieät cho nhöõng öùng duïng taïo aûnh beân trong baát kyø caùch naøo. Noù chæ ñònh nghóa trong nhöõng lónh vöïc maø cuøng moâ taû moät hình aûnh. Moät hình aûnh ñöôïc ñònh nghóa laø moät maûng hình chöõ nhaät nhöõng ñieåm, moãi aûnh bao goàm moät hay nhieàu hôn moät maãu. Vôùi döõ lieäu ñôn saéc, chuùng ta coù moät maãu treân ñieåm, maãu vaø ñieåm coù theå ñöôïc söû duïng ñeå thay theá cho nhau ñöôïc. Vôùi döõ lieäu maøu thoâng thöôøng chöùa 3 maãu ñieåm, chaúng haïn moät sô ñoà RGB. 1.1.4. Ñònh daïng file aûnh GIF (Graphices Interchange Format): AÛnh GIF ñöôïc taïo ra bôûi coâng ty CompuServe nhö laø moät chuaån cho vieäc löu tröõ vaø chuyeån ñoåi thoâng tin ñoà hoïa ñöôïc döïa treân ñöôøng queùt, nghóa laø caùc hình aûnh. Moät file aûnh GIF coù theå chöùa nhieàu hình aûnh beân trong, maø ñöôïc hieån thò choàng leân vaø khoâng coù baát kyø thôøi gian trì hoaõn naøo giöõa caùc böùc aûnh. Baûn thaân döõ lieäu theo daïng GIF ñöôïc neùn theo giaûi thuaät LZW. Giaûi thuaät LZW ñöôïc phaùt minh bôûi UniSys vaø keå töø thaùng 1/1995 laø thaønh vieân cuûa CompuServe. File aûnh GIF bao goàm caùc thoâng tin tieâu ñeà chung, moät hoaëc nhieàu hôn khoái aûnh vaø khoâng baét buoäc phaûi coù phaàn môû roäng (phaàn ñuoâi) laø GIF. OFFSET Count TYPE Description 0000h 6 char ID='GIF87a', ID='GIF89a' Soá ID naøy ñöôïc xem nhö moät soá version 0006h 1 word chieàu roäng aûnh 0008h 1 word chieàu cao aûnh 000Ah 1 byte bit ñöôïc aùnh xaï 0-2 - bits per pixel -1 3 - khoâng söû duïng 4-6 - caùc bit maøu 7 - baûng maøu chung cho pheùp moâ taû aûnh 000Bh 1 byte chæ soá maøu cuûa maøm hình neàn 000Ch 1 byte khoâng söû duïng Maøu chung aùnh xaï töùc thì cho pheùp mieâu taû maøn hình vaø coù kích thöôùc (2*bit/pixel) vaø coù cheá ñoä maøu RGB cho moãi chæ soá maøu, soá 0 laø khoâng coù maøu coøn soá 255 laø soá maøu toái ña (cöôøng ñoä maøu toái ña). Caùc byte ñöôïc löu tröõ theo ñònh daïng sau ñaây: OFFSET Soá byte Loaïi Moâ taû 0000h 1 byte thaønh phaàn Red 0001h 1 byte thaønh phaàn Green 0002h 1 byte thaønh phaàn Blue Sau hình aûnh ñaàu tieân, coù theå coù nhieàu aûnh ñöôïc gaén theâm vaøo beân trong file, maø noù ñöôïc choàng leân hình aûnh ñaàu tieân hoaëc moät phaàn cuûa aûnh ñaàu tieân. Boä moâ taû aûnh ñònh nghóa nôi ñaët thaät söï vaø phaïm vi cho pheùp aûnh beân trong daáu caùch ñöôïc ñònh nghóa beân trong boä moâ taû maøn hình. Boä moâ taû aûnh ñöôïc ñöa vaøo baèng moät kyù töï phaân caùch aûnh. Vai troø cuûa boä taùch aûnh thöôøng laø cung caáp moä kyù töï ñoàng boä ñeå ñöa vaøo moät boä moâ taû aûnh, kyù töï phaân chia caùc aûnh ñöôïc ñònh nghóa laø daáu phaåy, coù maõ laø 02Ch. Baát kyø caùc kyù töï ñuïng nhau phaàn cuoái cuûa aûnh tröôùc vaø kyù töï phaân caùch aûnh ñöôïc boû qua. Ñònh daïng cuûa boä moâ taû aûnh troâng gioáng nhö sau: OFFSET Soá byte Loaïi Moâ taû 0000h 1 char boä phaân taùch aûnh ID=',' 0001h 1 word ñoaïn beân traùi aûnh 0003h 1 word ñoaïn treân aûnh 0005h 1 word chieàu roäng aûnh 0007h 1 word chieàu cao aûnh 0009h 1 byte moâ taû baûng maøu bitmapped 0-2 – soá bit.pixel-1 3-5 – khoâng söû duïng (0) 6 – aûnh ñan xen/tuaàn töï 7 – maøu aùnh xaï cuïc boä/toaøn cuïc, boû qua bit 0-2 1.2. CAÙC PHEÙP BIEÁN ÑOÅI TRONG ÑOÀ HOÏA HAI CHIEÀU: Moät trong nhöõng öu ñieåm quan troïng cuûa ñoà hoïa laø cho pheùp deã daøng thao taùc leân caùc ñoái töôïng ñaõ ñöôïc taïo ra. Moät nhaø quaûn lí coù nhu caàu thu nhoû caùc bieåu ñoà trong moät baùo caùo, moät kieán truùc sö muoán nhìn toøa nhaø ôû nhöõng goùc nhìn khaùc nhau, moät nhaø thieát keá muoán quan saùt vaø chænh söõa caùc maãu ñoái töôïng trong quaù trình thieát keá, ... Taát caû caùc thao taùc naøy coù theå ñöôïc hoã trôï moät caùch deã daøng nhôø vaøo caùc pheùp bieán ñoåi hình hoïc. Caùc pheùp bieán ñoåi hình hoïc seõ laøm thay ñoåi veà toïa ñoä cuûa caùc ñoái töôïng, töø ñoù laøm cho ñoái töôïng bò thay ñoåi veà höôùng, kích thöôùc vaø hình daïng. Caùc pheùp bieán ñoåi hình hoïc cô sôû bao goàm : tònh tieán {translation}, quay {rotation} vaø bieán ñoåi tæ leä {scaling}. Ngoaøi ra moät soá pheùp bieán ñoåi khaùc cuõng thöôøng ñöôïc aùp duïng ñoù laø pheùp ñoái xöùng {reflection} vaø bieán daïng {shearing}. Coù hai quan ñieåm veà pheùp bieán ñoåi hình hoïc ñoù laø: bieán ñoåi ñoái töôïng (object transformation) vaø bieán ñoåi heä toïa ñoä (coordinate transformation). Bieán ñoåi ñoái töôïng laø thay ñoåi toïa ñoä cuûa caùc ñieåm moâ taû noù theo moät quy taéc naøo ñoù. Coøn bieán ñoåi heä toïa ñoä laø taïo ra moät heä toïa ñoä môùi vaø taát caû caùc ñieåm moâ taû ñoái töôïng seõ ñöôïng chuyeån veà heä toïa ñoä môùi. Hai caùc naøy coù nhöõng moái lieân heä chaët cheõ vôùi nhau vaø moãi caùch coù nhöõng lôïi theá rieâng. 1.2.1. Caùc pheùp bieán ñoåi hình hoïc cô sôû: Moät pheùp bieán ñoåi hai chieàu seõ bieán ñoåi ñieåm P trong maët phaúng thaønh ñieåm coù toïa ñoä môùi Q theo moät quy luaät naøo ñoù. Veà maët baûn chaát, moät pheùp bieán ñoåi ñieåm laø moät aùnh xaï T ñöôïc ñònh nghóa: T: R2->R2 P(x,y)->Q(x’,y’) Noùi caùch khaùc, T laø haøm soá T(x,y) theo hai bieán (x,y): Pheùp bieán ñoåi affine laø pheùp bieán ñoåi vôùi f(x,y) vaø g(x,y) laø caùc haøm tuyeán tính. Pheùp bieán ñoåi naøy coù daïng: ,a,b,c,d,e,f Î R, ad-bc¹0 Pheùp tònh tieán: Ñeå tònh tieán moät ñieåm P(x,y) töø vò trí naøy sang vò trí khaùc trong maët phaúng, ta coäng theâm caùc giaù trò moâ taû ñoä dôøi vaøo caùc toïa ñoä cuûa P. Neáu goïi trx vaø try laàn löôït laø ñoä dôøi theo truïc hoøanh vaø truïc tung thì toïa ñoä cuûa ñieåm môùi Q(x’,y’) seõ laø: (trx,try) laø coøn ñöôïc goïi laø vector tònh tieán hay vector ñoä dôøi. Chuùng ta coù theå dòch chuyeån toaøn boä moät ñoái töôïng baèng caùch aùp duïng quy taéc treân cho moïi ñieåm thuoäc ñoái töôïng. Ñeå tònh tieán moät ñoaïn thaúng, ñôn giaûn ta chæ caàn tònh tieán hai ñieåm ñaàu vaø cuoái cuûa noù roài sau ñoù veõ laïi ñoïan thaúng noái hai ñieåm môùi. Vôùi ña giaùc, ta tònh tieán caùc ñænh cuûa noù sau ñoù veõ laïi ña giaùc vôùi caùc ñænh môùi. Moät caùch töông töï, ñeå tònh tieán caùc ñoái töôïng nhö ñöôøng troøn, ellipse, ta tònh tieán taâm cuûa chuùng tôùi vò trí môùi roài veõ laïi. y y Q try P trx x x Pheùp quay: Pheùp quay laøm thay ñoåi höôùng cuûa ñoái töôïng. Moät pheùp quay ñoøi hoûi phaûi où taâm quay vaø goùc quay. Goùc quay döông thöôøng ñöôïc qui öôùc laø chieàu ngöôïc chieàu kim ñoàng hoà. Ta coù coâng thöùc bieán ñoåi cuûa pheùp quay P(x,y) quanh goác toïa ñoä moät goùc a. 1.2.2. Moät soá tính chaát cuûa pheùp bieán ñoåi Affine: 1.2.2.1. Pheùp bieán ñoåi affine baûo toaøn ñöôøng thaúng: Aûnh cuûa ñöôøng thaúng qua pheùp bieán ñoåi affine laø ñöôøng thaúng. Thaät vaäy, ta coù phöông trình tham soá cuûa ñöôøng thaúng qua hai ñieåm A, B laø: P(t) = (1-t)A + tB.Q(t) caùc ñieåm nhaän ñöôïc sau pheùp bieán ñoåi M. Q(t) = P(t)M = [(1-t)A + tB]M = (1-t)AM + tBM Neáu goïi A’, B’ laàn löôït laø aûnh cuûa A, B qua pheùp bieán ñoåi M, ta seõ coù A’ = AM, B’ = BM. Luùc naøy Q(t) = (1-t)A’ + tB’. Ñaây chính laø daïng cuûa chöông trình tham soá ñoaïn thaúng qua A’, B’. Töø keá quaû treân, ñeå bieán ñoåi moät ñoaïn thaúng ñi qua hai ñieåm A vaø B, ta chæ caàn aùp duïng pheùp bieán ñoåi cho hai ñieåm A, B roài veõ laïi ñoaïn thaúng qua hai ñieåm môùi. 1.2.2.2. Tính song song cuûa caùc ñöôøng thaúng ñöôïc baûo toaøn: Aûnh cuûa hai ñöôøng thaúng song song laø hai ñöôøng song song. Chuùng ta coù theå vieát laïi phöông trình tham soá cuûa ñöôøng thaúng döôùi daïng tia xuaát phaùt töø A öùng vôùi t = 0 vaø theo phöông b = B – A nhö sau: A + bt. Luùc naøy ta bieåu dieãn hai ñöôøng thaúng song song döôùi daïng tia: L1(t) = A1 + bt vaø L2(t) = A2 + bt coù cuøng phöông bt nhöng xuaát phaùt töø hai ñieåm khaùc nhau. Luùc naøy aùp duïng pheùp bieán ñoåi leân hai ñöôøng thaúng song song naøy, deã daøng nhaän ra aûnh cuûa chuùng seõ coù phöông bM neân chuùng song song. Moät heä quaû quan troïng cuûa tính chaát naøy ñoù laø aûnh cuûa caùc hình bình haønh. 1.2.2.3. Tính tæ leä veà khoaûng caùch ñöôïc baûo toaøn: Giaû söû C laø ñieåm chia ñoaïn AB theo tæ soá t. Neáu A’, B’, C’ laàn löôït laø aûnh A, B, C qua pheùp bieán ñoåi thì C’ cuõng seõ chia A’B’ theo tæ soá t. Trong tröôøng hôïp ñaët bieät, neáu C laø trung ñieåm cuûa AB thì C’ cuõng laø trung ñieåm cuûa A’B’, töø ñoù ta coù theå suy ra moät soá tính chaát sau: Trong hình vuoâng, caùc ñöôøng cheùo caét nhau taïi trung ñieåm cuûa moãi ñöôøng neân caùc ñöôøng cheùo cuûa baát kyø hình bình haønh naøo cuõng caét nhau taïi trung ñieåm cuûa moãi ñöôøng. Trong tam giaùc ñeàu, giao ñieåm cuûa ba ñöôøng trung tuyeán chia moãi ñöôøng theo tæ soá 1:2. Maët khaùc, moät tam giaùc baát kyø laø aûnh cuûa tam giaùc ñeàu qua pheùp bieán ñoåi affine,neân giao ñieåm cuûa caùc ñöôøng trung tuyeán cuûa noù cuõng seõ chia chuùng theo tæ leä 1:2. 1.2.3. Moät soá pheùp bieán ñoåi khaùc: 1.2.3.1. Pheùp ñoái xöùng: Pheùp ñoái xöùng truïc coù theå xem laø pheùp quay quanh truïc ñoái xöùng moät goùc 1080. Neáu truïc ñoái xöùng laø truïc hoaønh hay truïc tung, chuùng ta coù theå bieãu dieãn cuûa pheùp ñoái xöùng qua truïc hoaønh, truïc tung laàn löôït laø: MRfx = , MRfy = 1.2.3.2. Pheùp bieán daïng: Pheùp bieán daïng laø pheùp bieán ñoåi laøm thay ñoåi, meùo moù hình daïng cuûa ñoái töôïng. Hai daïng pheùp bieán daïng thöôøng gaëp ñoù laø bieán daïng theo phöông truïc x vaø bieán daïng theo phöông truïc y baèng caùch thay ñoåi toïa ñoä (x,y) cuûa ñieåm ban ñaàu theo caùch sau: Bieán daïng theo phöông truïc truïc x seõ laøm thay ñoåi hoaønh ñoä coøn tung ñoä vaãn giöõ nguyeân: MShx = Bieán daïng theo phöông truïc y seõ laøm thay ñoåi tung ñoä coøn hoaønh ñoä vaãn giöõ nguyeân: MShy = shxy vaø shyx laàn löôït ñöôïc goïi laø caùc heä soá bieán daïng. CHÖÔNG 2: NHAÄN DAÏNG CAÙC CHAÁM ÑEN Ôû phaàn naøy em chæ trình baøy vieäc nhaän daïng caùc chaám ñen (hai moác vaø ñieåm thi), coøn caùc phaàn lieân quan ñeán phaàn xöû lyù naøy seõ ñöôïc baïn Traàn Vieát Khoâi trình baøy moät caùch ñaày ñuû. 2.1. XAÙC ÑÒNH HAI MOÁC CUÛA FILE BAÛNG ÑIEÅM: Do baûng ñieåm coù kích thöôùc raát lôùn, neáu ta kieåm tra taát caû caùc phaàn treân aûnh ñeå tìm ra moác thì chöông trình cuûa ta seõ phaûi ñoïc aûnh raát nhieàu ñeå tìm daãn ñeán chöông trình coù theå seõ thöïc thi raát chaäm vaø khoâng oån ñònh. Maø treân thöïc teá thì chæ coù moät khoaûng caùc pixel laø coù khaû naêng coù moác. Ñoù laø lyù do ta phaûi xaùc ñònh khoaûng caùc pixelcoù moác. Vaán ñeà laø laøm sao xaùc ñònh ñöôïc chính xaùc taâm cuûa ñieåm moác. Muoán xaùc ñònh chính xaùc taâm cuûa ñieåm moác ta phaûi bieát ñöôïc chính xaùc khoaûng pixel coù theå xuaát hieän moác, vaø phaûi xaùc ñònh khoaûng pixel ñoù naèm ôû ñaâu treân böùc aûnh. Nhö ta ñaõ bieát ôû treân baûng ñieåm ._.coù hai moác naèm ôû vò trí traùi treân vaø phaûi döôùi cuûa baûng ñieåm nhöng khi scan cho ra file aûnh ñieåm thì do aûnh coù theå bò tònh tieán, bò quay neân do ñoù ñieåm moác cuõng khoâng naèm taïi moät vò trí coá ñònh maø noù seõ naèm ôû vò trí tuyø thuoäc vaøo aûnh bò quay bao nhieâu vaø tònh tieán bao nhieâu. Vaán ñeà ôû ñaây laø ta phaûi tìm ra ñöôïc nhöõng vò trí naøo maø moác xuaát hieän khi aûnh quay vaø tònh tieán trong khaû naêng baøi toaùn cho pheùp. Ñeå giaûi quyeát vaán ñeà treân ta phaûi qua thöïc nghieäm ñoái vôùi moïi khaû naêng coù theå xaûy ra ñoái vôùi baøi toaùn ñeå tìm ra ñöôïc khoaûng pixel ñeå xaùc ñònh ñöôïc moác. Qua thöïc nghieäm tính ñöôïc khoaûng pixel coù khaû naêng xaùc ñònh ñöôïc moác thöù nhaát laø naèm trong khoaûng (0,0) ñeán (200,200) vaø moác thöù hai naèm trong khoaûng ((chieàu roäng cuûa aûnh) - 200, (taâm cuûa moác thöù nhaát) + 743) ñeán ((chieàu roäng cuûa aûnh), (taâm cuûa moác thöù nhaát) + 743 + 200). 2.1.1. Giaûi phaùp ñeå xaùc ñònh taâm cuûa moät moác: Giaûi phaùp ñeå xaùc ñònh taâm cuûa moät moác ñöôïc moâ taû nhö sau: Tìm tuaàn töï treân phaàn aûnh coù moác, neáu phaùt hieän ra pixel (ñieåm) ñen thì döøng laïi vaø kieåm tra xem ñieåm ñen ñoù coù thuoäc moác hay khoâng neáu coù thì xaùc ñònh taâm cuûa moác vaø ngöng vieäc tìm moác, neáu khoâng phaûi laø moác thì tieáp tuïc tìm ñieåm ñen treân phaàn aûnh ñoù. Coù hai phöông phaùp ñeå thöïc hieän vieäc kieåm tra moät ñieåm ñen coù thuoäc moác hay khoâng ñöôïc moâ taû nhö sau: Giaûi phaùp 1: Phöông phaùp queùt hình chöõ thaäp Khi ta phaùt hieän ra moät pixel ñen, töø pixel ñen ñoù ta queùt ngang tìm xem treân doøng pixel ñen ñoù coù bao nhieâu pixel ñen, sau ñoù ta laáy pixel ñen ôû giöõa caùc pixel ñen queùt theo coät ñeå tìm xem treân coät ñoù coù bao nhieâu pixel ñen neáu soá pixel ñen treân coät ñoù naèm trong khoaûng töø 12 ñeán 14 pixel thì ta môùi tieáp tuïc coâng vieäc kieåm tra, sau ñoù laáy ñieåm giöõa cuûa caùc pixel treân treân coät ñoù vaø tieáp tuïc queùt ngang qua hai beân ñeå tìm soá pixel ñen ôû hai beân neáu soá pixel ñen ngang ñaït ñöôïc töø 12 deán 14 pixel thì döøng vaø khaúng ñònh caùc pixel ñen ôû treân laø caùc pixel thuoäc moác, töø ñoù ta suy ra taâm cuûa ñieåm ñen laø ñieåm giöõa cuûa doøng vaø coät. Giaûi phaùp naøy coù moät öu ñieåm laø soá laàn kieåm tra moät pixel ñen coù thuoäc moác raát ít doù ñoù chöông trình seõ kieåm tra raát nhanh, nhöng noù coù moät khuyeát ñieåm laø raát deã daãn ñeán sai laàm trong vieäc nhaän daïng moác do trong aûnh ñieåm coù raát nhieàu thöù thoaû maõn vôùi caùch queùt hình chöõ thaäp. Giaûi phaùp 2: Phöông phaùp queùt ñoùng khung Khi ta phaùt hieän ra ñieåm ñen, thì töø pixel ñen ñoù ta seõ queùt theo haøng ngang 14 pixel tìm xem treân doøng pixel ñen ñoù coù bao nhieâu pixel ñen, sau ñoù ta dung moät coâng thöùc sau ñeå tính bieân ñaët khung queùt: toïa ñoä x cuûa chaám ñen = toïa ñoä x cuûa chaám ñen – (14 – soá pixel ñen treân doøng ñoù) / 2 Sau khi bieát ñöôïc bieân ñeå ñaët khung (khung coù chieàu roäng 14 pixel vaø chieàu ngang 14 pixel) ta tieán haønh queùt trong khung laàn löôït töø treân xuoáng ñeå tìm toång soá ñieåm ñen, sau khi queùt heát khung ta tieán haønh kieåm tra toång soá pixel trong khung ñoù, neáu toång soá pixel ñen trong khung ñaït ñöôïc töø 100 ñeán 196 pixel ñen thì ta xaùc ñònh pixel ñen ñoù laø pixel ñen cuûa moác. Sau ñoù ta tieán haønh xaùc ñònh taâm cuûa moác vaø ngöng vieäc kieåm tra. Giaûi phaùp naøy coù moät öu ñieåm laø noù xaùc ñònh pixel ñen thuoäc moác raát chính xaùc vaø ít khi bò laàm laãn trong vieäc nhaän daïng, nhöng noù coù moät khuyeát ñieåm laø noù phaûi kieåm tra quaù nhieàu ñieåm môùi xaùc nhaän ñöôïc moät pixel ñen coù thuoäc moác hay khoâng. Ta cuõng coù theå khaéc phuïc ñöôïc phaàn naøo giaûi phaùp naøy baèng caùch taïo theâm moät soá ñieàu kieän ñeå loaïi tröø nhöõng pixel ñen khoâng thuoäc moác. Nhö vaäy, trong hai giaûi phaùp treân ta nhaän thaáy giaûi phaùp moät raát phöùc taïp maø ñoä chính xaùc cuõng khoâng cao do noù raát deã kieåm tra nhaàm laãn moác maø chöông trình cuûa ta ñoøi hoûi vieäc xaùc ñònh moác phaûi chính xaùc. Coøn giaûi phaùp thöù hai thì töông ñoái chính xaùc hôn nhöng chöông trình seõ phaûi xöû lyù nhieàu hôn. Do nhöõng öu khuyeát ñieåm cuûa hai giaûi phaùp treân ta thaáy vieäc choïn giaûi phaùp thöù nhaát laø khoâng khaû thi do ñoù ta seõ choïn giaûi phaùp thöù hai ñeå giaûi quyeát vaán ñeà nhaän daïng moác cuûa baøi toaùn naøy. 2.2.2. Xaây döïng giaûi thuaät : Giaûi thuaät chia laøm hai phaàn: phaàn ñaàu laø xaùc ñònh moác trong moät khoaûng caùc pixel vaø phaàn hai xaùc ñònh moät pixel ñen coù thuoäc moät moác hay khoâng. Giaûi thuaät ñöôïc moâ taû nhö sau: Xaùc ñònh moät pixel ñen coù thuoäc moät moác: Böôùc 1: Voøng laëp ñeå kieåm tra 14 pixel treân haøng doïc cuûa pixel ñen vaø vò trí kieåm tra phaûi nhoû hôn chieàu cao. Neáu ñuùng nhaûy xuoáng böôùc 2, neáu khoâng nhaûy xuoáng böôùc 5. Böôùc 2: Voøng laëp ñeå kieåm tra 14 pixel treân haøng ngang cuûa pixel ñen vaø vò trí kieåm tra phaûi nhoû hôn chieàu roäng. Neáu ñuùng thì nhaûy xuoáng böôùc 3 neáu khoâng thì nhaûy tôùi böôùc 4. Böôùc 3: Kieåm tra pixel ñen tai vò trí treân neáu laø pixel ñen thì taêng soá pixel ñen tìm ñöôïc leân moät. Böôùc 4: Kieåm tra neáu i = 0 thì xcd -= (14-chamden) / 2 Kieåm tra neáu soá chaám ñen treân moät doøng baèng 0 vaø chæ môùi kieåm tra döôùi 3 doøng thì xaùc ñònh ñaây khoâng phaûi laø moác vaø thoaùt khoûi chöông trình. Kieåm tra neáu soá chaám ñen treân moät doøng baèng 0 vaø ñaõ queùt ñöôïc 4 doøng trôû leân thì ngöng queùt vaø nhaûy xuoáng böôùc 5. Tính toång soá pixel treân vaø nhaûy veà böôùc 1. Böôùc 5: Kieåm tra xem toång soá pixel ñen coù ñaït ñeán troïng soá ñieåm moác hay khoâng neáu coù thì tính toaï ñoä taâm cuûa moác vaø traû veà moác. Neáu khoâng thì thoaùt. Xaùc ñònh moác trong moät khoaûng ñieåm : Böôùc 1: Ñi töø treân xuoáng trong khoaûng caùc pixel cho tröôùc. Böôùc 2: Ñi töø traùi qua phaûi trong khoaûng caùc pixel cho tröôùc. Böôùc 3: Neáu phaùt hieän pixel ñen thì thöïc hieän vieäc kieåm tra (thoâng qua haøm kieåm tra) xem pixel ñen ñoù coù thuoäc moác hay khoâng: _ Neáu coù thì laáy taâm cuûa moác vaø thoaùt. _ Neáu khoâng thì quay laïi böôùc 1, böôùc 2. Traû ra moät moác neáu coù moác. 2.2. XAÙC ÑÒNH CAÙC ÑIEÅM THI: Do baûng ñieåm coù 30 sinh vieân vaø 11 coät ñieåm daãn ñeán khoaûng caùc pixel maø chöùa caùc ñieåm naøy thì raát lôùn, do ñoù ta khoâng theå naøo ñoïc moät laàn heát khoaûng caùc pixel ñoù vaøo boä nhôù ñeå xöû lyù. Cho neân ta phaûi chia nhoû khoaûng caùc pixel ñoù ra thaønh caùc khoaûng nhoû hôn, moãi khoaûng chöùa 6 sinh vieân daãn ñeán ta xöû lyù 5 laàn khoaûng caùc pixel nhoû ñoù ñeå tìm ra caùc ñieåm cuøng vôùi vò trí töông öùng cuûa ñieåm ñoù. (phaàn) aûnh khoâng bò quay hay leäch Do file aûnh ñieåm laø moät saûn phaåm thuû coâng nhö ñaõ noùi ôû treân daãn ñeán khaû naêng aûnh coù theå bò leäch vaø quay theo nhieàu höôùng khaùc nhau. Do ñoù neáu ta ñoïc phaàn aûnh nhö treân thì coù khaû naêng khi aûnh bò quay caùc oâ ñieåm ôû vò trí 0 hoaëc 10 vaø caùc thí sinh naèm ôû vò trí soá 1 hoaëc soá 6 coù theå khoâng rôi vaøo trong phaàn xöû lyù ñieåm cuûa chöông trình daãn ñeán ta coù theå nhaän daïng thieáu hoaëc sai caùc vò trí ñoù. (phaàn) aûnh bò quay Ñeå khaéc phuïc ñöôïc ñieàu naøy ta ñöa ra giaûi phaùp laø ñoïc khoaûng caùc pixel lôùn hôn, nghóa laø seõ ñoïc roäng hôn 24 pixel (ñoïc theâm hai doøng) thì ta coù theå ñoïc ñöôïc toaøn boä thoâng tin cuûa phaàn aûnh bò quay vôùi moät goùc quay nhoû. Nhöng neáu aûnh bò quay moät goùc lôùn (3 ñeán 6 ñoä) thì nhöõng phaàn aûnh caøng veà sau caøng bò leäch vaø khaû naêng leäch ñoù coù theå laøm maát caùc ñieåm vaø vò trí ôû bieân. Ñeå khaéc phuïc ñieàu naøy ta phaûi tính ñoä dôøi theo hai truïc khi aûnh bò quay. Xaùc ñònh ñieåm trong moät khoaûng caùc pixel cho tröôùc: Böôùc 1: Ñi töø treân xuoáng trong khoaûng caùc pixel cho tröôùc. Böôùc 2: Ñi töø traùi qua phaûi trong khoaûng caùc pixel cho tröôùc. Böôùc 3: Neáu phaùt hieän pixel ñen thì thöïc hieän vieäc kieåm tra (thoâng qua haøm kieåm tra) xem pixel ñen ñoù coù thuoäc moác hay khoâng: _ Neáu coù thì laáy taâm cuûa moác vaø thoaùt. _ Neáu khoâng thì quay laïi böôùc 1, böôùc 2. Traû ra soá ñieåm maø noù nhaän dieän ñöôïc. Sau khi coù ñöôïc soá ñieåm ñoù noù seõ thöïc hieän vieäc tính ñieåm cho töøng ñieåm maø noù nhaän daïng ñöôïc. Xaùc ñònh vò trí vaø ñieåm töông öùng: Voøng laëp chaïy töø 0 ñeán 10 (töông öùng vôùi ñieåm töø 0 ñeán 10) Ta xaùc ñònh khoaûng pixel cuûa töøng ñieåm treân baûng ñieåm Neáu taâm cuûa ñieåm ñen ñoù naèm trong khoaûng pixel töông öùng vôùi ñieåm ñoù thì ñieåm ñen ñoù coù ñieåm ñoù. Tính moãi laàn töông öùng vôùi 6 vò trí do ñoù ñeå tính vò trí cho caû baûng ñieåm thì ta thöïc hieän 5 laàn vieäc treân (5*6=30). Cuõng töông töï nhö phaàn tính ñieåm ta cuõng xem ñieåm ñen ñoù naèm trong khoaûng pixel cho phaàn vò trí naøo thì noù coù vò trí ñoù. Cuï theå nhö sau: int TinhDiem(int x,int y,int solan,int xm,int ym,matrix T,int &diem,int &vitri){ diem=-1;vitri=-1; transform(x,y,T); int xa=xm+412, ya=ym+140; // tính ñieåm for(int i=0;i<=10;i++){ if(x>=16*i+xa && x<=16*(i+1)+xa){ diem=i; break; } } // tinh vi tri for(i=solan*6;i<solan*6+6;i++){ if(y>=23*i+ya && y<=23*(i+1)+ya){ vitri=i+1; break; } } if(diem != -1 && vitri != -1) return 1; return 0; } CHÖÔNG 3: PHAÂN TÍCH BAØI TOAÙN 3.1. ÑAËT VAÁN ÑEÀ: Theo em ñöôïc bieát thì töø tröôùc ñeán nay treân thöïc teá ôû Vieät Nam ta chöa coù moät chöông trình naøo phuïc vuï cho vieäc nhaäp ñieåm töï ñoäng ôû caùc tröôøng phoå thoâng cuõng nhö caùc tröôøng ñaïi hoïc. Ñeà taøi naøy em raát thích vì noù gaén lieàn thöïc teá vaø noù laø moät nhu caàu caàn thieát cuûa ngaønh giaùo duïc. Neáu chöông trình hoaït ñoäng toát noù seõ giuùp ích raát nhieàu trong vieäc nhaäp ñieåm vaøo cô sôû döõ lieäu cuûa tröôøng khoâng phaûi nhaäp ñieåm baèng thuû coâng nhö tröôùc ñaây, vaø thoáng keâ ñieåm moät caùch nhanh choùng trong caùc cuoäc thi coù soá löôïng thí sinh tham gia ñoâng nhö caùc cuoäc thi ñaïi hoïc … 3.2. GIÔÙI HAÏN VAÁN ÑEÀ VAØ PHAÙT BIEÅU BAØI TOAÙN: 3.2.1. Giôùi haïn vaán ñeà: Vaán ñeà nhaäp ñieåm töï ñoäng laø moät vaán ñeà raát khoù ñoøi hoûi ta phaûi coù moät khoaûng thôøi gian töông ñoái daøi ñeå giaûi quyeát vaán ñeà nhö nhaän ra caùc chöõ vieát tay cuûa caùc thaày hay coâ (phaàn ghi caùc ñieåm soá), maõ soá cuûa caùc thí sinh, caùc moân hoïc, kì thi, lôùp hoïc, … vaán ñeà treân ñoái vôùi chuùng em thì raát khoù coù theå giaûi quyeát ñöôïc trong khoaûng thôøi gian laø 12 tuaàn. Do ñoù chuùng em ñöa ra moät caùch giaûi quyeát khaùc laø thay vì nhaän daïng chöõ vieát tay ñeå tìm ñieåm thì chuùng em seõ nhaän daïng nhöõng ñieåm toâ ñen treân baûng ñieåm theo maãu cuûa tröôøng ÑHDL Kyõ Thuaät Coâng Ngheä. Baûng ñieåm naøy coù caùc ñaëc tính raát thuaän tieän cho vieäc nhaän dieän ñieåm vì coù coät ñieåm ñöôïc toâ ñen, do ñoù khi ta nhaän dieän ñöôïc toaï ñoä cuûa ñieåm toâ thì ta seõ xaùc ñònh ñöôïc ñieåm vaø soá thöù töï töông öùng cuûa ñieåm ñoù trong tôø baûng ñieåm. Nhö vaäy vaán ñeà nhaäp ñieåm hoaøn toaøn töï ñoäng ñaõ ñöôïc chuyeån veà höôùng laø khi nhaäp ñieåm thì ngöôøi söû duïng phaûi goõ vaøo soá trang (soá tôø cuûa baûng ñieåm), moân hoïc, lôùp hoïc töông öùng treân tôø baûng ñieåm thöïc. Do ñoù vaán ñeà ôû ñaây laø laøm sao nhaän daïng ñöôïc taâm cuûa caùc ñieåm toâ ñeå ñöa ra ñöôïc ñieåm cuøng soá thöù töï. 3.2.2. Phaùt bieåu baøi toaùn: Giaùo vieân khi chaám ñieåm xong seõ ñöa baûng ñieåm leân phoøng ñaøo taïo (coù theå laø töøng vaên phoøng seõ töï nhaäp ñieåm cho rieâng khoa mình). Ngöôøi nhaäp ñieåm seõ laáy tôø baûng ñieåm ñöa vaøo maùy scan, maùy scan seõ scan ra moät file aûnh Bitmap, file aûnh naøy seõ ñöôïc ñöa vaøo “Heä thoáng nhaäp ñieåm töï ñoäng” cuøng vôùi soá tôø (trang), moân hoïc, khoaù hoïc. Chöông trình seõ xöû lyù chænh söûa tôø baûng ñieåm ñoù neáu noù khoâng ñuùng nhö chuaån ban ñaàu cho chöông trình nhaän daïng ñieåm ñaët ra. Sau khi qua böôùc xöû lyù sô boä nhöõng ñieàu coøn chöa ñuùng thì chöông trình nhaän daïng seõ cho ra moät file ñieåm (file vaên baûn) vaø moät file loãi neáu trong quaù trình xöû lyù coù loãi xaûy ra (cuõng laø file text), file naøy seõ ñöôïc chöông trình caáp giao dieän ñoïc vaø xöû lyù ñeå laáy ñöôïc ñieåm vaø soá thöù töï töông öùng vôùi tôø baûng ñieåm thaät vaø sau ñoù löu vaøo cô sôû döõ lieäu. “Heä thoáng nhaäp ñieåm töï ñoäng” laø heä thoáng cho pheùp ngöôøi nhaäp ñieåm coù theå nhaäp moät baûng ñieåm töï ñoäng vaøo heä thoáng cô sôû döõ lieäu ñieåm vaø xem ñieåm thi cuûa sinh vieân theo lôùp hoïc hay theo moân hoïc. 3.3. MOÂ TAÛ DÖÕ LIEÄU ÑAÀU VAØO, ÑAÀU RA VAØ PHAÀN XÖÛ LYÙ DÖÕ LIEÄU: 3.3.1. Döõ lieäu ñaàu vaøo cuûa chöông trình: File ñieåm coù ñieåm vaø soá thöù töï. Coù theå coù file loãi neáu chöông trình thöïc hieän coù loãi xaûy ra. Coù saún cô sôû döõ lieäu ñeå thöïc hieän vieäc nhaäp ñieåm. 3.3.2. Döõ lieäu ñaàu ra cuûa chöông trình: Ñieåm ñöôïc caäp nhaät vaøo cô sôû döõ lieäu. Coù theå xem ñieåm cuûa sinh vieân theo moân hay theo lôùp. 3.3.3. Phaàn xöû lyù döõ lieäu: Coù file baûng ñieåm ñeå cho ra file ñieåm thoâng qua chöông trình nhaän daïng ñieåm. Caàn coù soá trang, moân hoïc, lôùp hoïc ñöôïc cung caáp töø ngöôøi söû duïng. Thöïc hieän caâu truy vaán ñeå ñaët soá thöù töï cuûa sinh vieân theo lôùp hoïc. Thöïc hieän caâu truy vaán ñeå laáy ñöôïc danh saùch sinh vieân töø soá thöù töï naøo ñeán soá thöù töï naøo trong lôùp theo soá trang, moân hoïc, lôùp hoïc. Ta ñöa ñieåm thi vaøo danh saùch treân theo thöù töï ñaõ coù vaøo moät baûng taïm. Ta löu döõ lieäu töø baûng taïm vaøo cô sôû döõ lieäu chính. 3.4. GIÔÙI THIEÄU SÔ LÖÔÏC VEÀ TÔØ BAÛNG ÑIEÅM VAØ FILE BAÛNG ÑIEÅM: Moät baûng ñieåm seõ theo moät maãu quy ñònh (coù khoå giaáy laø tôø A4) khi ñöa vaøo maùy scan seõ cho ra moät file aûnh bitmap, file aûnh naøy ñöôïc chöông trình ñoïc vaø xöû lyù sau ñoù chöông trình cho ra moät file chöùa ñieåm vaø vò trí ñaõ xöû lyù vaø moät file chöùa caùc loãi neáu coù loãi xaûy ra. Sau ñoù moät chöông trình xöû lyù ñeå löu ñieåm vaøo cô sôû döõ lieäu, seõ ñoïc hai file text ñoù vaøo xöû lyù vaø cho ra ñieåm, maõ soá cuûa sinh vieân vaø maõ moân cho vaøo cô sôû döõ lieäu. Döôùi ñaây laø söï moâ taû caùc döõ lieäu treân. 3.4.1. Moâ taû moät tôø baûng ñieåm: Tôø baûng ñieåm coù maøu chuû ñaïo laø maøu ñoû, caùc thoâng tin quan troïng trong ñoù coù phaàn toâ ñieåm coù maøu ñen hoaëc xanh döông, baûng ñieåm goàm coù 3 phaàn chính: phaàn töïa, phaàn thaân, phaàn cuoái. Döôùi ñaây laø file baûng ñieåm ñöôïc scan gioáng nhö aûnh ban ñaàu chöa chænh söûa gì caû: 3.4.1.1. Phaàn töïa: Phaàn thoâng tin treân baûng ñieåm cho bieát baûng ñieåm naøy thuoäc veà tröôøng naøo, lôùp naøo, khoa naøo, moân thi gì, phoøng naøo, ngaøy thi… ÔÛ phaàn naøy coù moät ñieåm quan troïng ñeå phuïc vuï cho coâng vieäc vaøo ñieåm töï ñoäng laø noù coù moät moác. Moác laø moät chaám troøn ñen lôùn beân goùc traùi treân goïi laø moác thöù nhaát. Keá beân laø doøng chöõ noùi veà tröôøng, khoa vaø lôùp…. Goùc beân phaûi laø khung nhoû chæ daãn caùch chaám ñieåm ñoái vôùi baûng ñieåm naøy. Phaàn naøy ta chæ quan taâm ñeán moác thöù nhaát vì chæ khi ta ñoïc ñöôïc moác naøy thì phaàn nhaän daïng ñieåm môùi ñöôïc thöïc hieän coøn neáu khoâng coù thì chöông trình seõ baùo loãi. 3.4.1.2. Phaàn thaân: Laø moät khung goàm coù 8 coät vaø 31 doøng. Doøng ñaàu tieân laø doøng tieâu ñeà vaø 30 doøng coøn laïi laø 30 doøng moâ taû veà 30 hoïc sinh hoaëc sinh vieân (coù theå ít hôn 30). Coät ñaàu tieân laø coät thoâng tin veà soá thöù töï, coät thöù hai laø coät thoâng tin veà maõ soá cuûa hoïc sinh hoaëc sinh vieân, coät thöù ba laø phaàn thoâng tin veà hoï vaø teân cuûa hoïc sinh hoaêc sinh vieân, coät thöù tö laø thoâng tin veà ngaøy thaùng naêm sinh cuûa hoïc sinh hoaëc sinh vieân, coät thöù naêm laø phaàn thoâng tin ñieåm ghi baèng soá, coät thöù saùu laø thoâng tin veà toâ ñieåm, trong ñoù coù 11 oâ troøn ñeå giaùo vieân toâ ñen töông öùng vôùi ñieåm trong oâ troøn coù ghi caùc soá töø 0 ñeán 10 laø phaàn ñieåm töông öùng vôùi phaàn oâ ñöôïc toâ ñen. Coät thöù baûy laø phaàn kyù teân cuûa thí sinh vaø coät thöù taùm laø phaàn ghi chuù cuûa giaùm thò. Moãi doøng treân phaàn naøy töông öùng vôùi moät thí sinh ñöôïc löu trong cô sôû döõ lieäu cuûa tröôøng. Ñieåm ghi vaø ñieåm toâ ñöôïc giaùo vieân chaám vôùi maøu buùt coù maøu ñen hoaëc maøu xanh da trôøi vaø baét buoäc phaûi nhö vaäy. Phaàn ñieåm toâ phaûi toâ ít nhaát hôn phaân nöõa oâ troøn vaø phaûi naèm vaøo beân trong oâ troøn khoâng ñöôïc toâ ra ngoaøi vaø treân moãi moät doøng chæ ñöôïc toâ moät oâ ñieåm duy nhaát. Ôû phaàn naøy ta chæ quan taâm ñeán coät thöù 1(soá thöù töï) trong tôø baûng ñieåm vaø coät thöù 6 (phaàn ñieåm ñöôïc toâ). Neáu vì sinh vieân coù teân trong danh saùch maø khoâng ñi thi hay khoâng ñöôïc döï thi maø khoâng coù lyù do thì seõ khoâng coù ñieåm (null) trong cô sôû döõ lieäu. 3.4.1.3. Phaàn cuoái: Coù caùc thoâng tin nhö sau: soá sinh vieân coù trong tôø baûng ñieåm, soá sinh vieân döï thi, soá sinh vieân ñaït sau khi chaám xong, soá sinh vieân sinh khoâng ñaït, chöõ kyù cuûa caùc caùn boä coi thi, chöõ kyù cuûa caùc giaùo vieân chaám thi, chöõ kyù cuûa thaày tröôûng khoa. Ngoaøi ra noù coøn coù moät thoâng tin nöõa maø khoâng lieân quan gì ñeán vieäc thi cöû nhöng noù raát quan troïng cho vieäc nhaäp ñieåm töï ñoäng laø moác thöù hai cuûa baûng ñieåm. Ôû phaàn naøy ta chæ quan taâm ñeán moác thöù hai ôû beân goác döôùi phaûi cuûa tôø baûng ñieåm. 3.4.2. Moâ taû file aûnh ñieåm: Döôùi ñaây laø moät file baûng ñieåm sau khi ñöôïc scan ra vôùi nhöõng thay ñoåi nhö maøu saéc, ñoä phaân giaûi, soá bit maøu, cheá ñoä neùn aûnh, … cuûa aûnh goác. Moät tôø baûng ñieåm theo khoå A4 khi qua maùy scan seõ cho ra moät file aûnh ñieåm. File aûnh ñieåm maø chöông trình söû duïng phaûi laø aûnh windows bitmap coù ñoä phaân giaûi laø 8 bit maøu, cheá ñoä maøu laø maøu xaùm (nghóa laø 255 maøu töông öùng vôùi aûnh chæ coù caùc pixel saéc ñoä xaùm), aûnh khoâng söû duïng caùc chuaån neùn naøo, theo chuaån TWAIN, aûnh scan phaûi coù ñoä phoùng ñaïi 100%. Aûnh phaûi coù nhöõng ñaët ñieåm treân thì chöông trình môùi xöû lyù ñöôïc. Maùy scan laø moät thieát bò vaät lí neân noù seõ coù nhöõng sai soùt nhaát ñònh do ñoù ñoái vôùi nhöõng maùy scan khaùc nhau thì seõ cho ra nhöõng file aûnh sau khi scan seõ khaùc nhau veà maøu saéc, kích thöôùc, ñoä neùt cuûa böùc aûnh, … nhöõng khaùc bieät ñoù do raát nhieàu nguyeân nhaân nhö maùy scan cuû, maùy môùi, maùy khaùc loaïi, ... Baûn thaân maùy scan khi ta scan cuøng moät böùc aûnh taïi nhieàu thôøi ñieåm khaùc nhau thì nhöõng aûnh scan ñoù cuõng khoâng hoaøn toaøn gioáng nhau. Cuøng moät tôø baûng ñieåm khi scan cho ra moät aûnh scan ñoâi khi laïi khoâng hoaøn toaøn gioáng nhö aûnh ban ñaàu, ví duï: nhöõng ñieåm moác ñoâi khi laïi khoâng troøn nhö thaät teá, ... Ngoaøi ra coøn coù nhöõng sai leäch do con ngöôøi gaây ra nhö ñaët aûnh vaøo maùy scan khoâng thaúng, aûnh bò dô, aûnh bò dòch chuyeån, bò quay vaø ñoâi khi coøn bò bieán daïng do giaáy bò cong, … nhöõng bieán daïng vaø sai leäch treân chuùng ta khoâng theå naøo loaïi boû ñöôïc. Chuùng ta khoâng giaûi quyeát vaán ñeà aûnh bò bieán daïng maø chæ giaûi quyeát vaán ñeà aûnh bò xeâ dòch, quay. 3.5. NHÖÕNG VAÁN ÑEÀ CAÀN GIAÛI QUYEÁT: 3.5.1. Nhöõng vaán ñeà caàn giaûi quyeát ñeå cho ra file ñieåm: Töø yeâu caàu cuûa baøi toaùn ñaõ phaùt sinh ra moät soá vaán ñeà maø ta caàn phaûi giaûi quyeát ñeå xöû lyù cho baøi toaùn nhaäp ñieåm nhaäp töï ñoäng: Laøm sao ñoïc ñöôïc moät aûnh bitmap. Vaán ñeà xöû lyù maøu trong baûng ñieåm. Vaán ñeà xöû lyù aûnh bò bieán daïng. Vaán ñeà nhaän daïng moác. Nhaän daïng ñieåm ñen. Tính ñieåm vaø vò trí. Xuaát döõ lieäu. Nhöõng vaán ñeà caàn ñöôïc giaûi quyeát ôû treân ñaây seõ ñöôïc baïn Traàn Vieát Khoâi thöïc hieän. 3.5.2. Nhöõng vaán ñeà caàn giaûi quyeát ñeå nhaäp ñieåm vaøo cô sôû döõ lieäu: Caùc yeâu caàu thöïc hieän vieäc löu ñieåm ñoù vaøo cô sôû döõ lieäu: Xaây döïng caùc baûng giaû ñònh ñeå thöïc hieän vieäc löu ñieåm. Ñoïc ñöôïc soá thöù töï vaø ñieåm trong file ñieåm. Laáy danh saùch sinh vieân töø cô sôû döõ lieäu theo caùc yeâu caàu cuûa ngöôøi söû duïng. Löu ñieåm vaøo cô sôû döõ lieäu. Xem ñieåm cuûa sinh vieân. Caùc vaán ñeà neâu treân seõ ñöôïc giaûi quyeát döôùi ñaây. CHÖÔNG 4: THIEÁT KEÁ CAÙC BAÛNG CAÀN THIEÁT CHO VIEÄC NHAÄP ÑIEÅM 4.1. GIÔÙI THIEÄU CAÙC HEÄ QUAÛN TRÒ CÔ SÔÛ DÖÕ LIEÄU: Heä quaûn trò cô sôû döõ lieäu (DataBase Management System: DBMS) laø phaàn meàm giuùp xaây döïng cô sôû döõ lieäu vaø cung caáp caùc coâng cuï hoã trôï cho vieäc toå chöùc vaø khai thaùc cô sôû döõ lieäu. Moät heä quaûn trò cô sôû döõ lieäu phaûi coù ngoân ngöõ moâ taû döõ lieäu vaø ngoân ngöõ thao taùc döõ lieäu. Moät soá heä quaûn trò cô sôû döõ lieäu phoå bieán hieän nay laø Visual Foxpro, Dbase, Access, SQL Server, Oracle, … Phaàn chöông trình thöïc hieän vieäc nhaäp ñieåm töï ñoäng vaøo cô sôû döõ lieäu, em duøng coâng cuï Visual Basic 6.0 ñeå thieát keá giao dieän cuøng vôùi phaàn xöû lyù döõ lieäu vaø trình baøy döõ lieäu, coøn phaàn cô sôû döõ lieäu em döïa treân Microsoft Access 2000. Döôùi ñaây em xin trình baøy veà Microsoft Access 2000, coøn veà phaàn Visual Basic 6.0 em seõ trình baøy ôû chöông sau. 4.1.1. Heä quaûn trò cô sôû döõ lieäu Access: Microsoft Access laø moät heä quaûn trò cô sôû döõ lieäu duøng cho maùy ñôn vaø cho maïng maùy tính cuïc boä, noù laø heä quaûn trò thöôøng ñöôïc duøng vì tính ñôn giaûn, deã duøng vaø coù giao dieän thaân thieän vôùi ngöôøi duøng. Noù thích hôïp cho nhöõng cô sôû döõ lieäu coù döõ lieäu töông ñoái nhoû ôû nhöõng coâng ty nhoû, caùc tröôøng hoïc, caùc nhaø maùy, phaân xöôûng, caùc vaên phoøng, … Cô sôû döõ lieäu trong Access: Döõ lieäu laø caùc thoâng tin maø ta muoán löu tröõ vaø söû duïng laïi. Cô sôû döõ lieäu laø taäp hôïp coù toå chöùc nhöõng döõ lieäu lieân quan ñeán moät chuû ñeà hay moät muïc ñích naøo ñoù. Moät cô sôû döõ lieäu cuûa Access bao goàm 6 thaønh phaàn sau: Table (baûng döõ lieäu): laø thaønh phaàn quan troïng, cô baûn nhaát cuûa cô sôû döõ lieäu, chöùa caùc döõ lieäu caàn thieát cuûa CSDL. Query (baûng truy vaán hay baûng vaán tin): duøng ñeå tính toaùn, xöû lyù caùc döõ lieäu ôû caùc Table. Form (bieåu maãu): laø coâng cuï taïo ra caùc maãu ñeå trình baøy döõ lieäu theo caùc daïng maø ngöôøi duøng mong muoán, gioáng caùc maãu phieáu thoâng thöôøng. Report (baùo caùo): laø coâng cuï taïo maãu vaø in caùc baùo caùo. Macro (leänh vó moâ): laø moät taäp hôïp caùc leänh ñöôïc choïn, saép xeáp hôïp lyù cho vieäc töï ñoäng hoùa caùc thao taùc. Module (ñôn theå chöông trình): laø phöông tieän laäp trình treân Access vôùi ngoân ngöõ laäp trình Access Basic. Giôùi thieäu Table: Baûng laø moät taäp hôïp döõ lieäu veà moät chuû ñeà nhaát ñònh naøo ñoù. Baûng toå chöùc döõ lieäu thaønh caùc coät (goïi laø field – tröôøng) vaø haøng (goïi laø record – maãu tin). Moãi coät öùng vôùi moät muïc döõ lieäu maø ta caàn löu tröõ. Moãi coät coù moät teân vaø thuoäc veà moät kieåu döõ lieäu. Moãi doøng chöùa döõ lieäu veà moät ngöôøi hay vaät cuï theå maø ta caàn löu tröõ. Moái quan heä giöõa caùc baûng: Access laø heä quaûn trò cô sôû döõ lieäu theo moâ hình quan heä. Trong moâ hình quan heä, giöõa caùc thöïc theå coù moái quan heä döõ lieäu vôùi nhau. Thieát laäp moái quan heä giöõa caùc table laø ñeå chæ ra moái lieân quan veà döõ lieäu ôû trong cô sôû döõ lieäu. Nhôø coù moái quan heä giöõa caùc table seõ giuùp ta nhaäp döõ lieäu, truy xuaát chính xaùc vaø deã daøng hôn. Giôùi thieäu Query: Query laø coâng cuï khai thaùc vaø xöû lyù döõ lieäu cuûa Microsoft Access, noù coù theå ñaùp öùng caùc nhu caàu tra cöùu veà döõ lieäu cuûa caùc baûng döõ lieäu thuoäc cô sôû döõ lieäu. Access cung caáp nhieàu loaïi query khaùc nhau töông öùng vôùi moãi loaïi query seõ coù coâng duïng rieâng vaø caùch thieát keá rieâng. Query coù caùc loaïi sau: Select query: laø daïng query thöôøng ñöôïc söû duïng nhieàu nhaát, baèng loaïi query naøy, ta coù theå tham khaûo döõ lieäu töø nhieàu baûng döõ lieäu khaùc nhau cuûa cô sôû döõ lieäu, coù theå phaân tích vaø hieäu chænh döõ lieäu ngay treân baûng vaán tin hay söû duïng noù laøm cô sôû cho moät coâng vieäc khaùc. Baûng keát quûa vaán tin ñöôïc goïi laø Dynamic Set. Moät Dynamic Set gioáng nhö moät baûng döõ lieäu nhöng khoâng phaûi laø moät baûng döõ lieäu thaät söï, noù chæ coù tính tham khaûo ñoái vôùi döõ lieäu ñöôïc laáy töø nhieàu baûng khaùc nhau maø thoâi. Total query: duøng ñeå thoáng keâ, toång keát soá lieäu treân moät hoaëc nhieàu ñieàu kieän. Crosstab query: duøng ñeå thoáng keâ, toång keát soá lieäu treân moät hoaëc nhieàu ñieàu kieän, nhöng hình thöùc theå hieän deã hieåu hôn. Action query: nhoùm query haønh ñoäng giuùp ta coù theå chænh söûa soá lieäu trong cô sôû döõ lieäu, sao cheùp hoaëc taïo table ñeå löu tröõ soá lieäu. Parameter query: query tröôøng thoâng soá, laø loaïi query maø ñieàu kieän laáy soá lieäu phuï thuoäc vaøo yeâu caàu söû duïng taïi thôøi ñieåm laáy soá lieäu. SQL Specific query: laø loaïi query ñaët bieät trong ñoù ñieàu kieän ñeå laáy soá lieäu laø moät leänh SQL chöù khoâng phaûi laø moät bieåu thöùc. 4.1.2. Heä quaûn trò cô sôû döõ lieäu SQL Server: 4.1.2.1. Giôùi thieäu sô löôïc: Nhieàu nhaø laäp trình Visual Basic vôùi boä maùy cô sôû döõ lieäu JET chia seõ giöõa Visual Basic vaø Microsoft Access. Nhöng khi öùng duïng caàn laøm vieäc vôùi soá löôïng maãu tin raát lôùn vôùi nhieàu ngöôøi söû duïng noù phaûi gaëp haïn cheá. Tranh chaáp truy caäp döõ lieäu giöõa nhieàu ngöôøi söû duïng, xöû lyù chaäm chaïp, thieáu nhöõng tính naêng naâng cao veà quaûn lyù server vaø döõ lieäu laøm cho caùc nhaø laäp trình phaûi thieát keá nhöõng caáu truùc naëng neà ñeå giaûi quyeát caùc vaán ñeà naøy. Ta khoâng neân laàm laãn giöõa moâi tröôøng Client/Server vaø moâi tröôøng maùy tính nhieàu ngöôøi söû duïng. Moâi tröôøng Client/Server chöùa nhöõng chöông trình töï ñoäng traû veà vaø löu tröõ döõ lieäu, phaân quyeàn truy caäp giöõa nhieàu ngöôøi söû duïng, xöû lyù baûo maät. Trong khi Microsoft Access chæ hoã trôï maùy tính ña ngöôøi duøng, khoâng phaûi laø moâi tröôøng Client/Server vì nhieàu yeâu caàu thoâng tin ñeàu ñöôïc xöû lyù treân maùy Client caù nhaân. Noù khoâng coù chöông trình ñieàu khieån naøo toàn taïi qua maïng ñeå xöû lyù vaø traû veà döõ lieäu. Kieán truùc veà Client/Server: Client: laø baát kyø phaàn naøo cuûa heä thoáng yeâu caàu caùc dòch vuï, taøi nguyeân töø boä phaän khaùc. Server: laø baát cöù phaàn naøo cuûa heä thoáng cung caáp taøi nguyeân, dòch vuï tôùi caùc phaàn khaùc. Moâ hình: 1. Application Local Data Shared Data (Application coù theå truy xuaát döõ lieäu töø Local Network) (Moâ hình File Base) 2. Terminal Host Application (Moâ hình Host Base) 3. Client Application Database Server Server based Data (Moâ hình Client/Server) Thích hôïp cho maïng cuïc boä: coù moät maùy laøm server ñeå löu tröõ döõ lieäu treân ñoù vaø caùc maùy client seõ keát noái vaøo vaø söû duïng caùc döõ lieäu treân ñoù. 4.1.2.2. SQL Server: SQL Server laø moät heä quaûn trò cô sôû döõ lieäu quan heä coù traùch nhieäm: Löu tröõ döõ lieäu Baûo ñaûm raøng buoäc toaøn veïn döõ lieäu Duy trì moái quan heä Khoâi phuï döõ lieäu khi coù söï coá SQL Server ñöôïc tích hôïp chaët cheõ treân Windows NT, theå hieän: Tích hôïp vôùi saûn phaåm Windows NT Duøng cô cheá an toaøn cuûa Windows NT Cuøng hoã trôï treân moâi tröôøng Multiprocessor Chòu söï giaùm saùt hoïat ñoäng cuûa Windows NT SQL Server coù theå: Cho pheùp taïo nhieàu cô sôû döõ lieäu treân server moät khi ngöôøi duøng coù quyeàn söû duïng taøi nguyeân ñoù treân maïng cuïc boä. Sau khi ñaõ coù ñöôïc cô sôû döõ lieäu treân server, ta coù theå: _ Taïo baûng treân cô sôû döõ lieäu ñoù. _ Xoùa baûng, thay ñoåi baûng. _ Thöïc hieän caùc raøng buoäc döõ lieäu. _ Vieát caùc caâu truy vaán döõ lieäu _ Vieát caùc thuû tuïc Stored Procedure (s-p) _ Vieát caùc Cursor _ Vieát caùc View _ Vieát caùc Trigger _ Söû duïng Default, Logins, Users, vaø Role _ Cheá ñoä Backup vaø Restore döõ lieäu _ Quaûn lyù caùc Index. 4.1.2.3. Chuyeån töø Microsoft Access sang SQL Server: Neáu sau naøy cô sôû döõ lieäu duøng ñeå quaûn lyù ñieåm cuûa sinh vieân ñöôïc môû roäng vaø naâng caáp töø Access leân SQL Server thì ta coù theå thöïc hieän moät trong hai caùch sau ñaây: 4.1.2.3.1. Duøng Microsoft Access Upsizing Tools: Ñaây laø moät phaàn boå sung (add in) cuûa Microsoft Access. Ta tieán haønh caùc böôùc sau ñaây ñeå thi haønh Upsizing Tools: Baûo ñaûm cô sôû döõ lieäu duøng chöùa caùc döõ lieäu export coù saún treân SQL Server. Baûo ñaûm cô sôû döõ lieäu SQL Server coù moät nguoàn döõ lieäu ODBC hôïp lyù. Töø menu Tools cuûa Access choïn Add - in, choïn Upsize to SQL Server töø menu con. Upsizing Wizard hoaït ñoäng, cho pheùp ta choïn löïa ñeå taïo cô sôû döõ lieäu môùi hoaët chuyeån ñoåi cô sôû döõ lieäu hieän haønh sang SQL Server. Choïn Use Existing Database, roài nhaán Next. Hoäp thoaïi ODBC Select Data Source xuaát hieän, choïn nguoàn döõ lieäu ODBC töông öùng vôùi SQL Server, roài nhaán OK. Neáu nguoàn döõ lieäu ODBC yeâu caàu ta login, ta seõ thaáy hoäp thoaïi SQL Server Login. Login vaø nhaán OK. Upsizing Wizard hieån thò danh saùch caùc baûng trong cô sôû döõ lieäu Access. Nhaán ñuùp leân töøng baûng maø ta muoán xuaát sang SQL Server. Nhaán Next khi hoøan taát. Cho pheùp ta choïn löïa moät soá khaû naêng ñeå ñieàu khieån caùch xuaát döõ lieäu sang SQL Server. Caùc tuøy choïn naøy bao goàm: _ Choïn phaàn töû naøo maø ta muoán xuaát sang SQL Server: chæ muïc, qui luaät kieåm tra (validation rule), giaù trò maëc ñònh, quan heä, … _ Coù taïo tröôøng timestamp trong baûng xuaát hay khoâng. _ Coù xuaát toaøn boä baûng hay khoâng: bao goàm döõ lieäu hoaëc chæ coù caáu truùc. _ Coù giöõ keát noái link vôùi cô sôû döõ lieäu A._.ùy tính coù caøi Heä Ñieàu Haønh Windows98 vaø Windows2000. 5.3. XÖÛ LYÙ: Seõ coù hai caùch ñeå thöïc hieän vieäc laáy ñieåm vaø löa vaøo cô sôû döõ lieäu: Choïn moät file baûng ñieåm cuøng vôùi vieäc ñaët teân file ñieåm ñeå chöông trình nhaän daïng ñieåm seõ thöïc hieän vieäc laáy ñieåm töø file baûng ñieåm ñoù. Sau ñoù theo yeâu caàu ngöôøi söû duïng seõ löu vaøo cô sôû döõ lieäu. Chöông trình nhaän daïng ñieåm ñaõ thöïc hieän vieäc laáy ñieåm töø file baûng ñieåm vaø ñaõ xuaát ñöôïc ñieåm vaø soá thöù töï file ñieåm roài, thì chöông trình seõ laáy ñieåm vaø soá thöù töï töø file ñieåm ñoù ñeå thöïc hieän vieäc löu ñieåm vaøo cô sôû döõ lieäu. Sau ñaây em seõ trình baøy caùch thöù nhaát coøn caùch thöù hai cuõng gioáng caùch thöù nhaát nhöng seõ boû qua giai ñoaïn thöïc hieän vieäc laáy ñieåm töø file baûng ñieåm maø seõ laáy tröïc tieáp töø file ñieåm ñaõ coù saún. 5.3.1. Chuaån bò file aûnh vaø caùc vaán ñeà lieân quan: Giao dieän chöông trình chính: Thöïc hieän: Ta ñaõ coù caùc file baûng ñieåm cuøng soá thöù töï cuûa sinh vieân, lôùp, moân thi vaø ñieåm sau khi giaùo vieân toâ vaøo phaàn toâ kín moät oâ ñieåm treân tôø baûng ñieåm (baét buoäc phaûi coù phaàn toâ kín naøy ñeå chöông trình xöû lyù). Chöông trình naøy seõ thöïc hieän ñoái vôùi töøng baûng ñieåm moät, cho pheùp ngöôøi söû duïng duyeät ñeå laáy file aûnh (baûng ñieåm) ñöôïc löu trong dóa cöùng cuûa mình vaø sau khi ngöôøi söû duïng choïn xong hình caàn xöû lyù chöông trình seõ hieån thò ngay hình aáy leân cho ngöôøi söû duïng xem tröôùc khi xöû lyù noù. Duyeät laáy file aûnh vaø hieån thò file aûnh leân khung aûnh: Theâm moät ñieàu khieån coù saún sau khi caøi ñaët Visual Basic 6.0 laø Microsoft Common Dialog, ñieàu khieån naøy giuùp ta deã daøng thöïc hieän vieäc duyeät file trong dóa cöùng cuûa ta, noù coøn cho pheùp ta quy ñònh nhöõng loaïi file theo moät ñònh daïng naøo ñoù seõ ñöôïc hieån thò hoaëc taát caû caùc loaïi file. Trong chöông trình ta chæ quy ñònh cho moät loaïi file duy nhaát ñöôïc hieån thò laø windows bitmap (*.bmp) coøn caùc loaïi file khaùc khoâng ñöôïc hieån thò. Trong chöông trình phaàn khung ñeå hieån thò moät aûnh baûng ñieåm theo khoå giaáy A4 laø nhoû, cho neân ta phaûi xöû lyù vieäc hieån thò ñaày ñuû moät file aûnh bmp cuøng vôùi hai thanh cuoän laø thanh cuoän ñöùng vaø thanh cuoän ngang: * Ñaàu tieân ta seõ coù hai ñieàu khieån picture box (khung chöùa aûnh): moät ñieàu khieån naèm treân (picImage) vaø moät ñieàu khieån naèm döôùi (picChild), ta cuõng quy ñònh thuoäc tính AutoSize (töï ñoäng thay ñoåi kích thöôùc khi file aûnh lôùn hôn ñoái töôïng chöùa noù) cho picImage laø False coøn cho picChild laø True. Neáu thuoäc tính AutoSize = False thì ñoái töôïng chöùa aûnh seõ giöõ nguyeân kích thöôùc cho duø aûnh coù lôùn hôn noù, khi aûnh lôùn hôn thì phaàn dö ra ngoaøi seõ bò caét boû coøn ngöôïc laïi khi AutoSize = True thì ñoái töôïng chöùa aûnh seõ thay ñoåi kích thöôùc cho vöøa vôùi aûnh khi aûnh lôùn hôn ñoái töôïng chöùa aûnh. Thuoäc tính BorderStyle (kieåu ñöôøng vieàn cuûa ñoái töôïng) cho caû hai laø 1 (BorderStyle = 1 thì ñoái töôïng chöù aûnh seõ coù ñöôøng vieàn bao quanh coøn khi = 0 thì khoâng coù). * Ta coù hai thanh cuoän: thanh cuoän ñöùng (vscDung) vaø thanh cuoän ngang (hscNgang) ñeå ta coù theå cuoän aûnh xem phaàn aûnh khoâng naèm trong khung aûnh, ta seõ aån hai thanh cuoän naøy khi Form ñöôïc naïp leân vì khi naøo aûnh lôùn hôn khung chöùa thì thanh cuoän môùi ñöôïc xuaát hieän ñeå cuoän aûnh coøn khi aûnh nhoû hôn thì hai thanh cuoän khoâng xuaát hieän. hscNgang.Value = 0: vscDung.Value = 0 Ta ñaët thuoäc tính Value cuûa hai thanh cuoän naøy = khoâng khi ngöôøi söû duïng ñang thanh cuoän ôû nöûa chöøng vaø ñi choïn moät aûnh khaùc thì ñöa thanh cuoän veà phaàn ñaàu (treân cuøng). * Ta seõ naïp file aûnh sau khi ngöôøi söû duïng choïn vaøo picChild thoâng qua haøm LoadPicture(). Ta di chuyeån picImage veà ñuùng vò trí ban ñaàu cuûa noù khi ñöôïc thieát keá vôùi caùc thoâng soá Top, Left, Width, Height. Coøn picChild ta cuõng di chuyeån veà Top, Left ban ñaàu coøn Width vaø Height thì tuøy thuoäc vaøo Width vaø Height cuûa file aûnh. * Ta ñaët thanh cuoän ngang hscNgang ôû döôùi ñaùy cuûa khung aûnh picImage vôùi chieàu roäng baèng chieàu roäng cuûa picImage vaø ñaët thanh cuoän ñöùng vscDung ôû beân phaûi cuûa picImage vôùi chieàu cao baèng chieàu cao cuûa picImage. * Ta thieát laäp thuoäc tính Max cho hscNgang laø picChild.Width - picImage.Width Thuoäc tính Max cuûa vscDung laø picChild.Height - picImage.Height * Xaùc ñònh xem hai thanh cuoän naøy coù xuaát hieän hay khoâng baèng caùch, neáu (picImage.Height < picChild.Height) thì seõ hieän thanh cuoän ñöùng coøn neáu (picImage.Width < picChild.Width) thì seõ hieän thanh cuoän ngang. * Xöû lyù söï kieän Change cuûa hai thanh cuoän khi ngöôøi duøng nhaán vaøo hai ñaàu cuûa thanh cuoän thoâng qua hai thuoäc tính Left vaø Top chæ ra giaù trò aâm cuûa thanh cuoän sao cho khi ta di chuyeån leân, xuoáng, traùi, phaûi maøn hình seõ hieän thò phaàn aûnh töông öùng. Ñaët thuoäc tính SmallChange = 150 töùc laø khi ta nhaán vaøo hai ñaàu cuûa thanh cuoän seõ di chuyeån ñi 150 twips, töông töï cho thuoän tính LargeChange =150 töùc laø ta nhaán vaøo phaàn thaân cuûa thanh cuoän cuõng seõ di chuyeån ñi 150 twips. Teân file aûnh (bmp) vaø teân file ñieåm (txt) caàn phaûi coù tröôùc khi chöông trình xöû lyù vì tham soá ñaàu vaøo cuûa chöông trình xöø lyù laø teân file aûnh (xöû lyù file aûnh naøo) vaø teân file ñieåm (xuaát soá thöù töï cuøng vôùi ñieåm ra file naøo), ñaàu ra cuûa chöông trình laø file ñieåm (soá thöù töï vaø ñieåm neáu chöông trình tính ra ñieåm) vaø moät file chöùa loãi neáu trong quaù trình xöû lyù coù loãi xuaát hieän (danh saùch caùc loãi ñöôïc neâu ra ôû phaàn treân). Teân file ñieåm thì chöông trình taïo ra maëc ñònh laø cuøng teân vôùi file baûng ñieåm vaø coù phaàn môû roäng laø .txt, baïn coù theå ñaët laïi teân file ñieåm cho deã gôïi nhôù. Thöïc hieän moät caâu truy vaán ñeå ñeám soá sinh vieân trong moät lôùp laø bao nhieâu vaø ñeå phaân chia soá sinh vieân trong moät phoøng thi thuoäc cuøng moät lôùp. Neáu trong lôùp ñoù chöa coù sinh vieân naøo (theo cô sôû döõ lieäu giaû ñònh cuûa em) thì baùo cho ngöôøi söû duïng bieát ñeå choïn lôùp khaùc: Neáu soá sinh vieân trong lôùp ñoù <= 30 thì ta phaân soá sinh vieân ñoù vaøo trong cuøng moät lôùp ñeå thi. Neáu soá sinh vieân trong lôùp ñoù töø hôn 30 sinh vieân trôû ñi thì ta phaân chia thaønh nhö sau: caùc phoøng ñaàu coù soá sinh vieân baèng nhau vaø baèng 30 sinh vieân, coøn phoøng cuoái cuøng luùc naøo cuõng seõ laø soá sinh vieân bò dö ra. Ví duï coù 100 sinh vieân trong moät lôùp thì phaân chia ñöôïc 4 phoøng: 3 phoøng ñaàu coù soá sinh vieân nhö nhau vaø baèng 30 sinh vieân coøn phoøng thöù 4 (phoøng cuoái cuøng) seõ coù 10 sinh vieân döï thi. Ñeå laáy ñöôïc soá thöù töï cuûa sinh vieân theo phoøng (trang) thì ta caên cöù vaøo vieäc chia phoøng nhö treân, chaúng haïn: coù 65 sinh vieân trong moät lôùp thì ta ñöôïc 3 phoøng thi (trang) neáu choïn trang ñaàu tieân thì soá thöù töï laø töø 1 ñeán 30, coøn neáu choïn trang 2 thì soá thöù töï laø töø 31 ñeán 60, coøn neáu choïn trang 3 thì soá thöù töï laø töø 61 ñeán 65, coøn ngöôïc laïi neáu choïn soá khaùc thì seõ khoâng coù sinh vieân naøo. Hai ñieàu khieån thöïc hieän vieäc nhaäp lieäu laø soá trang vaø ñaët teân cho file ñieåm ta cuõng phaûi kieåm tra ngöôøi duøng nhaäp coù ñuùng vôùi yeâu caàu khoâng hay laø nhaäp böøa vaøo: Ñeå kieåm tra vieäc nhaäp vaøo teân file ñieåm ta duøng söï kieän Validate ñeå baét nhöõng loãi do ngöôøi duøng ñaùnh vaøo, phaàn naøy yeâu caàu nhaäp teân file ñieåm vôùi ñieàu kieän laø phaûi coù .txt sau cuøng vaø khoâng ñöôïc boû troáng. If txtFilediem.Text = “” then Cancel = True ElseIf Right$(txtFilediem.Text, 4) ".txt" Then Cancel = True End If Ñeå kieåm tra vieäc nhaäp vaøo soá trang ta cuõng duøng söï kieän Validate ñeå baét loãi: khoâng ñöôïc boû troáng phaàn ghi soá trang, kyù töï nhaäp vaøo phaûi laø soá nguyeân khoâng aâm, vaø soá ñöôïc nhaäp vaøo töø 1 ñeán 99. If txtTrangmay.Text = "" Then Cancel = True ElseIf txtTrangmay.Text "" And Not IsNumeric(txtTrangmay.Text) Then txtTrangmay.SelStart = 0 txtTrangmay.SelLength = 9999 Cancel = True ElseIf txtTrangmay.Text "" And CInt(txtTrangmay.Text) 99 Then txtTrangmay.SelStart = 0 txtTrangmay.SelLength = 9999 Cancel = True End If - Phaàn lôùp vaø moân hoïc seõ ñöôïc naïp leân ñieàu khieån DataCombo töø cô sôû döõ lieäu thoâng qua hai Recordset: rsMon cho phaàn hieån thò caùc moân hoïc vaø rsLop cho vieäc hieån thò lôùp hoïc ñeå cho ngöôøi duøng choïn löïa cho deã daøng traùnh tröôøng hôïp nhaäp vaøo sai. Vieäc naïp moân vaø lôùp ñöôïc thöïc hieän khi Form ñöôïc naïp leân. Phaàn hieån thò beân treân laø teân moân hoïc (dcbMongi.ListField=”TENMON”) vaø teân lôùp hoïc (dcbLopmay.ListField = "TENLOP") coøn beân döôùi chöông trình thöïc hieän theo maõ moân hoïc (dcbMongi.BoundColumn = "MAMON") vaø maõ lôùp hoïc (dcbLopmay.BoundColumn = "MALOP") töông öùng vôùi phaàn teân. Nguoàn döõ lieäu cuûa ñieàu khieån DataCombo lôùp: Set dcbLopmay.RowSource = rsLop Nguoàn döõ lieäu cuûa ñieàu khieån DataCombo moân hoïc: Set dcbMongi.RowSource = rsMon 5.3.2. Xöû lyù file aûnh (baûng ñieåm) ñeå cho ra file ñieåm: 5.3.2.1. Sô ñoà xöû lyù file aûnh ra file ñieåm: Baét ñaàu Trang? Lôùp? File ñieåm? Moân? S Common Dialog Ñ Ñ File aûnh S Picture Box Chuaån bò xöû lyù 5.3.2.2. Trình baøy vieäc xöû lyù file aûnh: Giao dieän chöông trình tröôùc khi nhaäp ñieåm: Tröôùc khi xöû lyù file baûng ñieåm thì caùc thoâng tin sau ñaây caàn phaûi cung caáp cho chöông trình: file baûng ñieåm (bmp) vaø file ñieåm (txt), ñaàu vaøo cuûa chöông trình xöû lyù baûng ñieåm laø file baûng ñieåm naøo vaø moät file ñieåm ñeå xuaát ñieåm ra. Ngoaøi ra coøn coù tôø baûng ñieåm ñoù naèm ôû trang maáy, moân gì vaø thuoäc lôùp (khoùa hoïc) naøo. Sau khi coù ñaày ñuû caùc thoâng tin treân (chöông trình phaûi kieåm tra tính hôïp leä cuûa thoâng tin nhö kieåm tra xem ngöôøi söû duïng coù choïn file baûng ñieåm naøo chöa, coù teân file ñieåm chöa, coù nhaäp vaøo soá trang hay khoâng, coù choïn lôùp hoïc hay khoâng vaø moân hoïc khoâng. Neáu moät trong caùc thoâng tin treân chöa coù thì seõ baùo loãi vaø yeâu caàu ngöôøi söû duïng nhaäp vaøo). Ñeán ñaây ta seõ goïi moät chöông trình nhaän daïng ñeå xöû lyù file baûng ñieåm, chöông trình naøy ñöôïc baïn Traàn Vieát Khoâi vieát baèng ngoân ngöõ C++ for DOS (nhö phaàn ñaàu ñeà taøi ñaõ noùi) thoâng qua moät haøm Shell cuûa Visual Basic. Do maëc ñònh, haøm Shell cuûa Visual Basic vaø chöông trình maø noù goïi thöïc hieän khoâng ñoàng boä vôùi nhau, töùc laø khi haøm Shell thöïc hieän xong thì coù theå chöông trình beân trong noù chöa thöïc hieän xong maø do chöông trình beân trong naøy thöïc hieän vieäc xuaát döõ lieäu ra file ñieåm, neân ta theâm moät Form hieän caâu thoâng baùo yeâu caàu ngöôøi söû duïng chôø trong khoûang 1 giaây ñeå cho chöông trình xöû lyù file baûng ñieåm chaïy xong, sau khi chöông trình chaïy xong seõ xuaát ra moät file loãi vaø moät file ñieåm. Neáu trong file loãi coù xuaát hieän moät doøng thoâng baùo loãi do chöông trình xöû lyù ñöa ra khi file aûnh ñoù khoâng ñuùng nhö yeâu caàu maø chöông trình ñöa ra thì chöông trình chính seõ ñoïc doøng thoâng baùo loãi trong file loãi ñoù vaø ñöa ra thoâng baùo ñoù cho ngöôøi söû duïng bieát thoâng qua haøm Msgbox() vaø ngöng luoân chöông trình. Khi chöông trình thöïc hieän thaønh coâng (khoâng coù loãi) vaø xuaát ñöôïc caùc ñieåm ra file ñieåm (file naøy naèm cuøng chung moät thö muïc) thì chöông trình thöïc hieän vieäc ñeám soá sinh vieân vaø phaân chia soá sinh vieân trong phoøng thi nhö phaàn treân ñaõ noùi roõ. Caâu truy vaán ñeå ñeám soá sinh vieân trong moät lôùp vaø phaân chia phoøng thi: Select q_STT_1.MASV AS MASV, q_STT_1.MALOP AS MALOP, Count(q_STT.MALOP) AS STT From q_STT, q_STT AS q_STT_1 Where (((q_STT_1.MASV) >= [q_STT].[MASV]) And ((q_STT_1.MALOP) = '" & LopMay & "')) Group by q_STT_1.MASV, q_STT_1.MALOP Döïa vaøo caâu truy vaán treân ta bieát ñöôïc soá sinh vieân trong phoøng thi vaø maõ soá cuûa caùc sinh vieân cuøng vôùi soá thöù töï baét ñaàu vaø keát thuùc trong moät phoøng thi. 5.3.3. Xöû lyù treân cô sôû döõ lieäu ñeå nhaäp ñieåm: Giao dieän cuûa Form nhaäp ñieåm nhö sau: 5.3.3.1. Sô ñoà cho vieäc xöû lyù döõ lieäu: Baét ñaàu Thöïc hieän truy vaán Coù döõ lieäu K C Danh saùch sinh vieân cuøng soá thöù töï Soá thöù töï, Ñieåm Ñieàu khieån DataGrid Lôùp Trang Moân 5.3.3.2. Trình baøy caùch xöû lyù döõ lieäu: Sau khi thöïc hieän vieäc laáy sinh vieân theo trang trong cô sôû döõ lieäu cuøng vôùi soá thöù töï vaø ñieåm töông öùng trong file ñieåm cho töøng sinh vieân ñeå ñöa leân ñieàu khieån DataGrid tröôùc khi löu ñieåm vaøo cô sôû döõ lieäu. Caùc thoâng tin sau ñaây phaûi ñöôïc cung caáp: File baûng ñieåm. File ñieåm (chöông trình xöû lyù xuaát ra). Soá trang (baûng ñieåm ñoù naèm ôû phoøng naøo trong caùc phoøng thi ñöôïc chia theo quy taéc treân). Lôùp maáy (khoùa maáy). Moân hoïc laø gì. Thöïc hieän moät caâu truy vaán döïa vaøo caùc thoâng tin treân: Select STT, DIEM.MASV, DIEM.MAMON, TENSV, MON.TENMON, DIEM From MON, SINHVIEN, DIEM, q_STT_MON Where DIEM.MAMON = MON.MAMON And SINHVIEN.MASV = DIEM.MASV And DIEM.MAMON='" & MonGi & "' And MALOP='" & LopMay & "' And q_STT_MON.MASV=DIEM.MASV And STT Between " & ttDau & " And " & ttCuoi & " Caâu truy vaán treân thöïc hieän vieäc laáy danh saùch sinh vieân theo moân hoïc, lôùp hoïc, cuøng vôùi soá thöù töï ñaàu vaø cuoái cuøng cuûa phoøng thi (ñaõ laáy ôû treân) thoâng qua moät Recordset (rsSV). rsSV thöïc hieän vieäc môû caâu truy vaán treân moät lieân keát (Connection). Khi moät Recordset thöïc hieän thaønh coâng noù seõ traû ra moät taäp caùc record (danh saùch sinh vieân thi), keát quûa traû ra naøy ñöôïc laøm nguoàn döõ lieäu cho ñieàu khieån DataGrid hieån thò leân. Döõ lieäu treân ñieàu khieån DataGrid sau khi thöïc hieän moät caâu truy vaán ôû treân bao goàm caùc coät sau ñaây: _ Soá thöù töï (theo soá thöù töï cuûa tôø baûng ñieåm) _ Maõ soá sinh vieân _ Maõ moân hoïc _ Hoï vaø teân sinh vieân _ Teân moân hoïc _ Ñieåm thi Nhöng ta chæ cho hieån thò soá thöù töï, hoï vaø teân sinh vieân, teân moân hoïc vaø ñieåm thi töông öùng, coøn maõ soá sinh vieân vaø maõ moân hoïc ta khoâng hieån thò leân maø noù ñöôïc duøng ñeå xöû lyù. Khi döõ lieäu ñöôïc laáy leân töø cô sôû döõ lieäu thì chæ coù phaàn ñieåm thi chöa coù coøn caùc thoâng tin khaùc ñaõ coù ñaày ñuû. Do ñoù ta seõ ñöa phaàn ñieåm thi naøy leân ñieàu khieån DataGrid tröôùc khi chuùng ñöôïc löu vaøo cô sôû döõ lieäu nhö sau: _ Töø file ñieåm (ñöôïc chöông trình xöû lyù xuaát ra) ta ñoïc thoâng tin ñöôïc löu beân trong file goàm soá thöù töï vaø ñieåm töông öùng vôùi soá thöù töï ñoù, tuøy thuoäc vaøo danh saùch sinh vieân thi laø bao nhieâu (<=30) maø ta coù bao nhieâu ñieåm töông öùng. _ Caùch truy xuaát tuaàn töï trong file text: môû file ra ñeå ñoïc neáu chöa heát file thì ñoïc tieáp tuïc thöïc hieän voøng laëp ñeå ñoïc soá thöù töï vaø ñieåm ñoïc moãi laàn moät doøng soá thöù töï ñoïc tröôùc ñieåm ñoïc sau ñoïc xong ñoùng file laïi Ñoaïn chöông trình sau ñoïc file ñieåm baát kyø vaø löu soá thöù töï vaøo bieán toaøn cuïc laø stt(30) vaø löu ñieåm vaøo bieán toaøn cuïc laø diem(30) vôùi danh saùch coù toái ña 30 sinh vieân: ‘fileKQ laø file ñieåm do chöông trình xöû lyù xuaát ra Open fileKQ For Input As file If Not EOF(file) Then Do While Not EOF(file) ‘ôû giöõa phaàn soá thöù töï vaø ñieåm caùch nhau baèng moät ‘khoaûng traéng Input #file, stt(i) Input #file, diem(i) i = i + 1 Loop End If Close #file Sau khi ñaõ laáy ñöôïc soá thöù töï cuøng vôùi ñieåm thi thì ta seõ ñöa ñieåm naøy leân ñieàu khieån DataGrid ñeå cho ngöôøi söû duïng xem tröôùc khi löu, sau khi coù ñöôïc danh saùch caùc sinh vieân ñöôïc theå hieän trong moät Recordset rsSV ta duyeät qua töøng record moät, ta seõ gaùn soá thöù töï taêng daàn cho danh saùch sinh vieân naøy (soá thöù töï naøy truøng vôùi soá thöù töï trong danh saùch thi). Chöông trình ñoïc töøng record trong moät Recordset vaø kieåm tra töøng record naøy baèng caùch thöïc hieän moät voøng laëp For i = soá thöù töï ñaàu thöïc söï cuûa phoøng thi trong cô sôû döõ lieäu to soá thöù töï cuoái thöïc söï cuûa phoøng thi trong cô sôû döõ lieäu, ta laáy soá thöù töï thöïc naøy ñeå sau naøy ta thöïc hieän vieäc ghi ñieåm vaøo cô sôû döõ lieäu ñöôïc deã daøng, coøn ñeå xöû lyù treân ñieàu khieån DataGrid naøy ta laáy soá thöù töï töø 1 ñeán sinh vieân cuoái cuøng trong Recordset. Neáu soá thöù töï naøy baèng vôùi soá thöù töï trong file ñieåm thì ta gaùn ñieåm töông öùng vôùi soá thöù töï trong file ñieåm vaøo coät ñieåm thi töông öùng vôùi coät soá thöù töï trong ñieàu khieån DataGrid vaø thoaùt khoûi voøng laëp For, coøn ngöôïc laïi ta seõ gaùn giaù trò roãng cho soá thöù töï ñoù (giaù trò NULL töông öùng trong cô sôû döõ lieäu). i = 1: j = 1: d = 0 ‘i: soá thöù töï thöïc; j: soá thöù töï ñeå nhaäp ñieåm; d: soá thöù töï theo file ñieåm If Not rsSV.EOF Then 'ñöa con troû veà record ñaàu tieân rsSV.MoveFirst Do While Not rsSV.EOF ‘soá thöù töï baét ñaàu vaø soá thöù töï keát thuùc cuûa phoøng thi ‘(trong CSDL) For i = ttDau To ttCuoi dtgDiem.Columns(0).Text = j soTTu = j If soTTu = stt(d) Then dtgDiem.Columns(5).Text = diem(d) d = d + 1 Exit For Else dtgDiem.Columns(5).Text = “” End If Next j = j + 1 rsSV.MoveNext Loop Else lblThongbao.Caption = "Trang " & TrangMay & " khoâng coù sinh vieân, baïn haõy nhaäp vaøo soá trang (phoøng) trong khoaûng töø 1 ñeán " & soPhong & " !" cmdGhi.Enabled = False End If Döõ lieäu ñöôïc trình baøy trong ñieàu khieån DataGrid ñeå ngöôøi söû duïng coù theå xem xeùt vaø chænh söûa phaàn ñieåm neáu muoán thay ñoåi ñieåm thi hay coù theå sai soùt xaûy ra khi chöông trình xöû lyù phaàn ñieåm. Ta khoâng theå theâm vaøo hay xoùa ñi moät record treân ñieàu khieån DataGrid vì moät record noù lieân quan ñeán nhieàu baûng trong cô sôû döõ lieäu, coù raøng buoäc döõ lieäu vôùi nhau vaø ta khoâng theå naøo ghi vaøo cô sôû döõ lieäu. 5.3.4. Nhaäp ñieåm vaøo cô sôû döõ lieäu: 5.3.4.1. Sô ñoà moâ taû: Döõ lieäu coù saún treân ñieàu khieån DataGrid Löu? Cô sôû döõ lieäu N Y Query caäp nhaät 5.3.4.2. Trình baøy caùch nhaäp ñieåm: Ñeå thöïc hieän vieäc ghi ñieåm vaøo cô sôû döõ lieäu vôùi ñieàu kieän döõ lieäu phaûi coù treân ñieàu khieån DataGrid coøn döõ lieäu treân ñieàu khieån DataGrid khoâng coù thì ta phaûi caám nuùt Ghi (ñeå traùnh tröôøng hôïp ngöôøi duøng baám nuùt Ghi ñeå ghi vaøo cô sôû döõ lieäu khi khoâng coù döõ lieäu). Ta môû moät Connection môùi vaø thöïc hieän vieäc môû laïi Recordset (rsSV) döïa treân Connection ñoù, sau ñoù thöïc hieän vieäc caäp nhaät ñieåm thi vaøo cô sôû döõ lieäu thoâng qua phöông thöùc UpdateBatch cuûa ñoái töôïng Recordset. Khi ngöôøi söû duïng nhaán vaøo nuùt Ghi thì ta seõ hoûi laïi ngöôøi duøng coù thaät söï muoán ghi vaøo cô sôû döõ lieäu khoâng, neáu ngöôøi duøng ñoàng yù thì thöïc hieän vieäc ghi coøn neáu khoâng muoán ghi thì ta huõy vieäc ghi ñoù baèng caùch duøng phöông thöùc CancelBatch cuûa ñoái töôïng Recordset. 5.3.5. Xem ñieåm sinh vieân trong cô sôû döõ lieäu theo lôùp hoïc hay theo moân hoïc: 5.3.5.1. Sô ñoà moâ taû: Moân hoïc Lôùp hoïc Choïn theo? ListView vôùi danh saùch sv theo moân hoïc ListView vôùi danh saùch sv theo lôùp hoïc = lôùp = moân choïn 1 trong 2 5.3.5.2. Laáy döõ lieäu vaø xem döõ lieäu: Döõ lieäu ñöôïc trình baøy treân moät ñieàu khieån ListView bao goàm 4 coät döõ lieäu: maõ soá sinh vieân, hoï teân sinh vieân, teân moân hoïc vaø ñieåm thi. Giao dieän cuûa chöông trình coù daïng nhö sau: Coù theå xem cô sôû döõ lieäu theo hai caùch sau: Xem theo moân hoïc. Xem theo lôùp hoïc (khoùa hoïc). Ñeå xem cô sôû döõ lieäu ñieåm ñaàu tieân ta phaûi choïn moät trong hai caùch xem ôû treân, cuøng moät luùc ta chæ coù theå xem moät trong hai caùch theå hieän, neáu ta choïn caùch xem theo moân hoïc thì chæ coù phaàn moân hoïc ñöôïc hoaït ñoäng coøn phaàn lôùp thì bò caám hoaït ñoäng vaø ngöôïc laïi, ñöôïc theå hieän qua ñoaïn maõ sau ñaây: Select Case Index ‘0: choïn theo moân; 1: choïn theo lôùp Case 0 dcbMon.Enabled = True dcbLop.Enabled = False Case 1 dcbMon.Enabled = False dcbLop.Enabled = True End Select Khi Form xem ñieåm ñöôïc naïp leân thì döõ lieäu trong hai DataCombo: _ Ñoái vôùi DataCombo moân hoïc ta söû duïng moät Recordset (rsMonhoc) ñeå thöïc hieän moät caâu truy vaán döïa treân baûng MON ñeå laáy teân moân hoïc laøm nguoàn döõ lieäu cho DataCombo, coøn maõ moân hoïc ñöôïc chöông trình söû duïng ñeå hieån thò döõ lieäu leân ListView. _ Ñoái vôùi DataCombo lôùp thì ta cuõng söû duïng moät Recordset (rsLop) ñeå thöïc hieän moät caâu truy vaán döïa treân baûng LOP ñeå laáy teân lôùp laøm nguoàn döõ lieäu cho DataCombo, coøn maõ lôùp thì ñöôïc chöông trình söû duïng ñeå hieån thò döõ lieäu leân ListView. Khi Form xem ñieåm bò huõy thì ta kieåm tra xem traïng thaùi cuûa rsMonhoc, rsLop, cn1 laø ñang môû hay ñoùng neáu ñang môû thì ta ñoùng laïi vaø giaûi phoùng hai Recordset (rsMonhoc vaø rsLop) ñoàng thôøi cuõng ñoùng moät Connection taïm thôøi cho vieäc xöû lyù döõ lieäu laø cn1, coøn ngöôïc laïi thì thoâi ñeå traùnh tröôøng hôïp ngöôøi söû duïng thöïc hieän nhieàu laàn cuøng moät taùc vuï vì khi ta ñang môû moät Recordset hay moät Connection maø ta laïi môû tieáp thì chöông trình seõ baùo loãi: If rsMonhoc.State And adStateOpen Then rsMonhoc.Close Set rsMonhoc = Nothing End If If rsLop.State And adStateOpen Then rsLop.Close Set rsLop = Nothing End If If cn1.State And adStateOpen Then cn1.Close: Set cn1 = Nothing End If Khi ta caàn thöïc hieän moät vieäc gì lieân quan ñeán cô sôû döõ lieäu trong Visual Basic thì ta caàn laøm nhö sau: _ Ñaàu tieân phaûi môû moät Recordset hay moät Connection hay moät Command. _ Tieáp theo laø xöû lyù yeâu caàu maø baøi toaùn ñaët ra. _ Cuoái cuøng sau khi thöïc hieän xong ta phaûi ñoùng laïi vaø giaûi phoùng ñoái töôïng maø ta ñaõ söû duïng. Khi ngöôøi söû duïng nhaáp leân phaàn thaân cuûa DataCombo moân hoïc (dcbMon) vaø choïn moät moân trong danh saùch ñöôïc lieät keâ thì laäp töùc chöông trình seõ thöïc hieän caâu truy vaán vôùi moät tham soá laø maõ moân hoïc vaø seõ trình baøy döõ lieäu leân DataCombo sau khi thöïc hieän xong truy vaán. Töông töï khi ngöôøi duøng nhaáp leân phaàn thaân cuûa DataCombo lôùp (dcbLop) vaø choïn moät lôùp trong danh saùch ñöôïc lieät keâ ra thì laäp töùc chöông trình seõ thöïc hieän caâu truy vaán vôùi moät tham soá laø maõ moân hoïc vaø seõ trình baøy döõ lieäu leân DataCombo sau khi thöïc hieän xong truy vaán. Neáu coù ñieàu kieän chöông trình ñöôïc môû roäng thì ta coù theå xuaát döõ lieäu ra moät trang HTML hay ra moät baûng tính Excel ñeå tieän cho vieäc trình baøy döõ lieäu vaø in aán neáu caàn thieát. 5.4. GIAÛI THUAÄT: 5.4.1. Ñaùnh soá thöù töï cuûa sinh vieân: Giaûi thuaät: Ñeå ñaùnh soá thöù töï cuûa sinh vieân trong baûng SINHVIEN sau khi ñöôïc saép xeáp maõ soá sinh vieân taêng daàn theo thöù töï Alphabet thì ta thöïc hieän nhö sau: Coù saún moät baûng SINHVIEN Taïo moät baûng sau cuûa baûng SINHVIEN laø SINHVIEN_1 Thöïc hieän vieäc ñeám taát caû sinh vieân trong cô sôû döõ lieäu Vôùi ñieàu kieän MASV cuûa baûng SINHVIEN_1 lôùn hôn hay baèng MASV cuûa baûng SINHVIEN Nhoùm theo MASV vaø MALOP cuûa baûng SINHVIEN_1 Minh hoïa giaûi thuaät treân baèng caâu leänh SQL: SELECT SINHVIEN_1.MASV AS MASV, SINHVIEN_1.MALOP AS MALOP, COUNT(SINHVIEN_1.MALOP) AS SOTT FROM SINHVIEN, SINHVIEN AS SINHVIEN_1 WHERE (((SINHVIEN_1.MASV)>=[SINHVIEN.MASV])) GROUP BY SINHVIEN_1.MASV, SINHVIEN_1.MALOP; 5.4.2. Caäp nhaät ñieåm thi: Ñeå caäp nhaät ñieåm thi vaøo cô sôû döõ lieäu ta thöïc hieän nhö sau: Tröôùc tieân ta phaûi laáy ñöôïc danh saùch sinh vieân töông öùng vôùi yeâu caàu cuûa ngöôøi söû duïng, ta thöï hieän nhö sau: Coù ñöôïc soá trang Laáy soá thöù töï sinh vieân töø trang Laáy moân hoïc vaø lôùp hoïc Cuï theå nhö sau: SELECT STT, DIEM.MASV, DIEM.MAMON, TENSV, MON.TENMON, DIEM FROM MON, SINHVIEN, DIEM, q_STT_MON WHERE DIEM.MAMON =MON.MAMON AND SINHVIEN.MASV=DIEM.MASV AND DIEM.MAMON='" & MonGi & "' AND MALOP='" & LopMay & "' AND q_STT_MON.MASV=DIEM.MASV AND STT BETWEEN " & ttDau & " AND " & ttCuoi & " Caâu truy vaán naøy seõ laáy ñöôïc danh saùch caùc sinh vieân coù soá thöù töï töø ttDau (soá thöù töï ñaàu) ñeán ttCuoi (soá thöù töï cuoái) theo maõ moân, maõ lôùp vaø soá trang vôùi caùc thoâng tin moâ taû sinh vieân cuøng ñieåm thi cuûa sinh vieân ñoù goàm: soá thöù töï (STT), maõ sinh vieân (MASV), maõ moân hoïc (MAMON), teân sinh vieân (TENSV), teân moân hoïc (TENMON), vaø ñieåm thi (ñieåm thi chöa coù). Taát caû caùc thoâng tin ñoù ta ñöa vaøo ñieàu khieån DataGrid. Ta cuõng thöïc hieän vieäc laáy soá thöù töï vaø ñieåm töông öùng vôùi soá thöù töï töø trong file ñieåm do chöông trình nhaän daïng xuaát ra. Töø soá thöù töï cuûa caùc sinh vieân ñöôïc laáy töø cô sôû döõ lieäu vaø soá thöù töï trong file ñieåm, ta seõ thöïc hieän nhö sau: So truøng neáu hai soá thöù töï baèng nhau ta seõ gaùn ñieåm cho soá thöù töï töông öùng. So truøng neáu khoâng baèng nhau thì ta gaùn giaù trò Null cho soá thöù töï ñoù vì sinh vieân töông öùng vôùi soá thöù töï ñoù trong baûng ñieåm khoâng coù thi hay khoâng ñöôïc döï thi. Caùc thoâng tin veà sinh vieân cuøng ñieåm thi seõ xuaát hieän treân DataGrid. Vaø ngöôøi duøng chæ caàn phaùt leänh ghi thì ñieåm seõ ñöôïc caäp nhaät vaøo cô sôû döõ lieäu. CHÖÔNG 6: ÖU ÑIEÅM, KHUYEÁT ÑIEÅM VAØ HÖÔÙNG PHAÙT TRIEÅN ÑEÀ TAØI 6.1. ÖU ÑIEÅM: Thöïc hieän vieäc nhaäp ñieåm vaøo cô sôû döõ lieäu thoâng qua tôø baûng ñieåm ñöôïc nhanh choùng vaø chính xaùc. Chöông trình raát deã söû duïng vaø coù phaàn trôï giuùp cho ngöôøi söû duïng laàn ñaàu tieân söû duïng. Chaïy treân haàu heát vôùi nhöõng caáu hình maùy tính hieän nay. Deã daøng naâng caáp caùc tính naêng môùi vaø cao caáp sau naøy. Dung löôïng chöông trình sau khi caøi ñaët nhoû, goïn. 6.2. KHUYEÁT ÑIEÅM: Phaàn thieát keá cho giao dieän chöông trình coøn ñôn giaûn, ít chöùc naêng cho vieäc laøm vieäc vôùi cô sôû döõ lieäu ñieåm cuûa sinh vieân. Thöïc hieän vôùi cô sôû döõ lieäu coøn naëng vì phaûi thöïc hieän truy vaán laáy soá sinh vieân trong cô sôû döõ lieäu coù raát nhieàu sinh vieân cuøng vôùi moân hoïc vaø lôùp hoïc. Ôû phaàn nhaän daïng, chöông trình môùi nhaän daïng ñöôïc phaàn toâ ñieåm coøn nhöõng phaàn khaùc chöa ñöôïc xöû lyù. Tôø baûng ñieåm coù toái ña laø 30 sinh vieân maø vì lyù do naøo ñoù coù theâm moät vaøi sinh vieân thì chöông trình seõ khoâng xöû lyù ñöôïc soá sinh vieân ñöôïc theâm vaøo. 6.3. HÖÔÙNG PHAÙT TRIEÅN CUÛA ÑEÀ TAØI: Hieän taïi cô sôû döõ lieäu ñöôïc söû duïng laø Microsoft Access 2000 vaø sau naøy neáu coù naâng caáp leân SQL Server thì cuõng deã daøng thöïc hieän. Sau naøy neáu coù ñieàu kieän phaùt trieån thì chuùng em seõ thöïc hieän vieäc nhaän daïng caùc thoâng tin treân tôø baûng ñieåm seõ ñaày ñuû caùc phaàn nhö maõ soá sinh vieân, lôùp hoïc, moân thi, kyø thi, coù theå coù laàn thi, keå caû phaàn giaùo vieân cho ñieåm thi baèng tay, … phaàn naøy do chöông trình nhaän daïng ñieåm thi giaûi quyeát. Coù theå xuaát döõ lieäu theo yeâu caàu cuûa ngöôøi söû duïng vaø xuaát döõ lieäu ra moät trang Web hay ra baûng tính Excel ñeå thuaän tieän cho vieäc in aán vaø thoáng keâ khi caàn thieát. Coù theå xöû lyù nhöõng file aûnh coù maøu, cheá ñoä 24bits maøu, aûnh neùn theo caùc giaûi thuaät khaùc nhau. Xöû lyù aûnh bò bieán daïng, bò dô, aûnh keùm chaát löôïng. Giao dieän chöông trình ñeïp hôn vaø coù nhieàu chöùc naêng ñeå ñaùp öùng phaàn naøo yeâu caàu cuûa ngöôøi söû duïng. Khaûo saùt cô sôû döõ lieäu thöïc teá cuûa Tröôøng ñeå thieát keá chöông trình sao cho thöïc hieän vieäc nhaäp ñieåm ñôn giaûn vaø deã daøng hôn. Ñöa ra ñöôïc moâ hình ngoaøi vaø söï ñoäc laäp döõ lieäu. LÔØI CAÛM ÔN Em xin gôûi lôøi caùm ôn chaân thaønh ñeán Khoa COÂNG NGHEÄ THOÂNG TIN, tröôøng ÑAÏI HOÏC DAÂN LAÄP KYÕ THUAÄT COÂNG NGHEÄ TP HCM ñaõ taïo ñieàu kieän cho em thöïc hieän ñeà taøi naøy. Em xin chaân thaønh caùm ôn thaày HUYØNH VAÊN ÑÖÙC ñaõ taän tình höôùng daãn, chæ baûo em trong suoát thôøi gian thöïc hieän ñeà taøi. Em cuõng xin chaân thaønh caûm ôn quyù Thaày Coâ trong Khoa ñaõ taän tình giaûng daïy, trang bò cho chuùng em nhöõng kieán thöùc caàn thieát trong suoát quaù trình hoïc taäp taïi tröôøng, vaø cuõng xin gôûi lôøi bieát ôn saâu saéc ñeán Cha, Meï, Em, vaø baïn beø ñaõ uûng hoä, giuùp ñôõ, ñoäng vieân em trong nhöõng luùc khoù khaên cuõng nhö trong suoát nhöõng naêm hoïc vöøa qua. Maëc duø ñaõ coá gaéng hoaøn thaønh luaän vaên vôùi taát caû nhöõng noå löïc cuûa baûn thaân, nhöng luaän vaên chaéc khoâng traùnh khoûi nhöõng thieáu soùt nhaát ñònh, kính mong söï caûm thoâng vaø taän tình chæ baûo cuûa quyù Thaày Coâ. Sinh vieân thöïc hieän Nguyeãn Vaên Thaønh TAØI LIEÄU THAM KHAÛO 1. Microsoft Visual Basic 6.0 vaø Laäp trình cô sôû döõ lieäu cuûa Nhaø Xuaát Baûn Giaùo Duïc do caùc taùc giaû: Nguyeãn Thò Ngoïc Mai (chuû bieân), Nguyeãn Thò Kim Trang, Hoaøng Ñöùc Haûi, Nguyeãn Höõu Anh (coá vaán kyõ thuaät). 2. Taøi lieäu tham khaûo Visual Basic cuûa thaày Laâm Taán Phaùt. 3. Kyõ thuaät laäp trình - Visual Basic töï hoïc trong 21 ngaøy cuûa Nhaø Xuaát Baûn Giaùo Duïc do caùc taùc giaû: Nguyeãn Tieán, Ngoâ Quoác Vieät, Phaïm Nguyeãn Tuaán Kyø. 4. Taøi lieäu Laäp trình Visual Basic vaø cô sôû döõ lieäu cuûa thaày Nguyeãn Gia Tuaán Anh. 5. Giaùo trình Microsoft Access 97 cuûa Trung Taâm Tin Hoïc Thöïc haønh. 6. Baøi giaûng Laäp trình quaûn lyù vaø Heä quaûn trò cô sôû döõ lieäu Access cuûa giaùo vieân Ngoâ Phöôùc Nguyeân. 7. Cô sôû ñoà hoïa maùy tính cuûa Nhaø Xuaát Baûn Giaùo Duïc do Hoaøng Kieám (chuû bieân), Döông Anh Ñöùc, Leâ Ñình Duy vaø Vuõ Haûi Quaân. ._.

Các file đính kèm theo tài liệu này:

  • docBAOCAO.doc
  • docBaoCaoKhoi.doc
  • pptBaoCaoKhoi.ppt
  • docBIA NGOAI.doc
  • docBIA TRONG.doc
  • pptBAOCAO.PPT
Tài liệu liên quan