Logo of Vovisoft

CÁC BÀI TẬP VB6

Bạn có thể download các bài mẫu của những bài tập VB6 từ trang VB6 Source codes
Trong Zip file của mỗi project có file Readme cắt nghĩa đề bài. Trước khi viết code bạn có thể chạy thử program để biết rõ nó làm gì. Lưu ý thật kỹ mọi chi tiết về hình ảnh, công tác của chương trình.
Mục đích trước mắt của bạn là viết một program để làm công việc giống hịch bài mẫu mà không cần sự giúp đở từ đâu cả. Trong khi học, nếu kẹt quá bạn có thể hí hí đọc source code của bài mẫu, nhưng sau cùng phải tự làm từ đầu đến cuối một cách xuông xẻ.
Ráng hiễu rõ và học thuộc lòng các câu code. Nếu chỗ nào bí thì Email hỏi Tutor của bạn hay đặt câu hỏi trong Forums VB6 từ xa để Thầy/Cô nào khác trả lời cũng được và câu trả lời ấy còn được những người khác trong cùng cảnh ngộ của bạn trong tương lai sẽ đọc được.
Sở dĩ bạn phải học thuộc lòng vì khi viết code bạn không nên tùy thuộc quá nhiều vào các trang References/Help để nhắc syntax các statements. Sau nầy bạn phải có thể design mọi thứ trong đầu trong khi bạn đi bách bộ hay lái xe. Một khi đã design rõ ràng rồi, lúc ngồi xuống viết code, bạn phải có khả năng viết code nhanh như viết thư tình vậy.
Nếu đây là lần đầu viết code, bạn sẽ rất frustrated (bực mình) vì hở một chút là bị VB6 compiler bắt lỗi và không chịu chạy. Ðó là vì bạn chưa học thuộc lòng các reserve words của ngôn ngữ VB6 và chưa quen cách viết code.
Ðừng nản lòng, nên nhớ rằng trên đời nầy chẳng có thành quả nào ra hồn mà không đòi hỏi cố gắng và kiên nhẩn hết. Cứ xem như mình đang canh tác một miếng đất mới. Lúc đầu nó còn nhiều đá và cỏ dại. Sau một thời gian tranh đấu, phòng tay, đổ mồ hôi, miếng đất sẽ trở nên mềm và không còn cỏ dại nữa.
Nếu đề tài khó quá, bạn hãy bắt đầu từ cái gì đơn giản và dễ hiểu, dễ làm nhất. Sau nó sẽ thử những thứ rắc rối và khó khăn hơn. Dĩ nhiên, nếu ngồi cả tiếng đồng hồ mà vẫn bí thì Zip tất cả mọi files của project rồi Email thỉnh ý Tutor (Không thầy đố mầy làm nên).
Hảy xem một em bé tập đi. Nó bắt đầu chập chững từng buớc một. Khi đã có chút tự tin rồi, nó sẽ đi xa hơn trước khi ngồi xuống, và sau cùng nó chạy.
Một khi đã có thể ngồi viết code của một project từ đầu đến cuối một loạt, không cần dòm ngó vào đâu, mà nó chạy hoàn hảo, không có lỗi, kế đó bạn thử đặt thêm những nhu cầu mới của chương trình rồi design và viết code để thực hiện những điều đó. Bạn sẽ đạt thêm tự tin qua cách ấy.
Lập trình là một việc làm thực tế và nghệ thuật, cho nên bạn phải thực tập lập trình càng nhiều càng tốt. Nếu bạn không yêu nghề lập trình, bạn sẽ không thể nào tiến thân trong kinh nghiệm được. Nhớ rằng Programmers chẳng qua là thợ may hay đầu bếp, nhưng làm việc nhẹ nhàng và lãnh lương nhiều hơn. Giống như các nghề kia, ta chỉ có thể thành thạo, nhanh giỏi hơn nhờ chịu khó thực hành.
Và sau cùng, xin nhớ nộp bài cho Tutor để lấy Feedback. Ngoài các bài mẫu ở đây, bạn cũng có thể xem các Sample source codes downloaded từ các bài học như nhũng bài mẫu để bắt chước viết theo và thêm thắt các features.

Dự án TodoList

Trong project nầy bạn muốn giữ một Todo-List (danh sách những chuyện bạn cần phải làm). Danh sách nầy sẽ được lưu trữ trong một text file để không bị xóa khi bạn ngưng program hay tắt máy.
Bạn cho vào danh sách một chuyện phải làm mới bằng cách chọn một Item từ ComboBox WhatToDo. Nếu ComboBox không có thứ bạn muốn, bạn cũng có thể tự đánh vào chuyện phải làm vào ComboBox. Kế đó bạn điền vào TextBox When ngày bạn phải làm chuyện ấy dưới Format dd/mm/yy. Sau đó bạn click nút Enter. Một Item mới sẽ được thêm vào Listbox TodoList.
Nếu để ý, bạn sẽ thấy các Items trong ListBox được sorted theo ngày bằng cách display ngày dưới dạng yy/mm/dd.
Nếu bạn click button Due next 7 days program sẽ display trong một Form khác, nằm bên phải, những chuyện phải làm trong vòng 7 ngày tới.
Program cũng có nút Save để giúp bạn lưu trữ Content của Listbox trong một text file mang tên todolist.txt. File nầy nằm trong cùng folder với executable file todolist.exe.
Ngoài ra, khi bạn start program, nó tự động Load content của todolist.txt vào Listbox.

Khi bạn đã viết được program todolist rồi, bạn có thể thử cho thêm những Features mới như:
  • Tự động Save Item mới. Như thế bạn có thể bỏ nút Save.
  • Cho User phương tiện để delete một Item trong todolist
  • Tự động delete những Items cũ vì chúng không còn hiệu lực nữa
  • Thay thế TextBox When bằng một DTPicker control như hình dưới đây để user enter ngày dễ dàng hơn. (Bạn sẽ thấy icon của DTPicker control trong Toolbox khi bạn chọn project mới thuộc loại VB Pro Edition Controls)

Dự án MoneyChanger

Trong project nầy bạn được công ty Cabramatta Foreign Exchange Pty Ltd mướn để design và implement một program dùng trong việc đổi tiền từ Australian dollars ra Ðồng ViệtNam.
User enters số tiền đô la rồi click nút Convert. Số tiền sẽ được đổi ra Ðồng và một Item mới được thêm vào trong ListBox ActivityList. Mỗi Item ghi lại sự cố đổi tiền nầy còn được gọi là Transaction. Mỗi Item trong ActivityList ghi rõ chi tiết ngày, giờ, số đôla, hối xuất và số tiền Ðồng VN.
Dĩ nhiên user có thể thay đổi hối xuất bất cứ lúc nào bằng cách sữa trực tiếp trong TextBox ExchangeRate. Program không lưu trữ được gì một khi bạn ngừng program hay tắt máy.

Khi bạn đã viết được program MoneyChanger rồi, bạn có thể thử cho thêm những Features mới như:
  • Tự động Save các Transactions trong một text file. Dùng một text file khác cho mỗi ngày.
  • User có thể sữa đổi hối xuất bằng cách điền vào một TextBox khác cùng với tên người đánh vào. Và mỗi lần như thế ta ghi lại trong một text file sự kiện nầy để có chứng cớ rằng hối xuất đã được ai thay đổi. Sẽ có lúc ta cũng không dám tin tưởng nhân viên khi khách hàng là bà con của họ.
  • Cho phép dùng nhiều hối xuất, tùy theo số tiền. Nếu trên 1.000 hay 10.000 thì có hối xuất hấp dẫn hơn.
  • Cho phương tiện để user làm sổ tổng kết cuối ngày, cuối tuần, cuối tháng và cuối năm.

Dự án Sandwich Shop

Trong project nầy bạn được chủ tiệm Blue Ocean (Thanh Dương) Sandwich mướn để design và implement một program tính tiền bán bánh mì sandwich.
Mỗi phần bánh sandwich gồm có hai miếng bánh mì (loại trắng thông thường, loại lức hay loại có nhiều hạt), nhưn thịt (gà, bò, cá thu .v.v.) và rau cải (cà chua, dưa leo, bắp, .v.v..).
Mỗi khi tính tiền, trước hết User clicks nút Make Sandwich.. để làm hiện ra khung New Sandwich bên phải. Kế đó, User cứ drag những thứ khách hàng muốn từ các Listboxes Fillings, SaladsBread và drop vô giữa khung New Sandwich.
Mỗi lần một Item được dropped vào trong khung New Sandwich là giá tiền của nó được thêm vào trong TextBox txtSndwTotal, nằm bên phải chữ Cost $. Nhớ là khách muốn ăn bao nhiêu thứ thịt hay rau cải cũng được. Khi xong một Sandwich, User click nút Done để tiền của Sandwich được chuyển xuống khung Sales Ledger và thêm vào TextBox txtSaleTotal, nằm bên phải chữ Total Cost.

Vì việc thêm tiền vào hai Textboxes txtSndwTotaltxtSaleTotal tương tợ nhau nên ta có thể viết một Sub để dùng cho cả hai trường hợp. Xem:
Sub AddToTotal(txtTotal As TextBox, CAmount As Integer)
trong bài mẫu.
Khi một item được dropped vào khung New Sandwich, Event DragDrop sẽ được generated cho ListBox lstNewSandwich, tức là program sẽ execute Sub dưới đây:
Private Sub lstNewSandwich_DragDrop(Source As Control, X As Single, Y As Single)
Lưu ý paramater Source có thể là một trong ba Listboxes Fillings, SaladsBread. Ở đây ta có thể dùng Source trực tiếp mà không cần phải biết rõ nó là Listbox nào khi muốn lấy ra Item được dragged, thí dụ như:
Item = Source.List(Source.ListIndex)
Khi bạn đã viết được program SandwichShop rồi, bạn có thể thử cho thêm những Features mới như:
  • User có thể delete một item trong khung New Sandwich, vì khách hàng đổi ý.
  • User có thể Edit và thêm mọi thứ trong ba Listboxes Fillings, SaladsBread.
  • Lưu trử chi tiết các lần bán (Sales Transactions).
  • Tổng kết tiền bán mỗi ngày, mỗi tháng.

Dự án Vịnh Hạ Long

Ðã là người Việt Nam thì ít ra một lần trong đời cũng phải viếng Vịnh Hạ Long cho biết kỳ quan thế giới của đất nước.
Có một chủ nhà hàng kia ở Bãi Cháy cho du khách mướn tàu để tham quan Vịnh Hạ long. Khách có thể bao chiếc tàu để dùng trong nửa ngày hay trọn ngày. Trước khi đi, khách có thể mua mang theo bánh mì thịt (Salad Rolls) và thức uống. Nếu du khách muốn có một người đi theo cùng để phục vụ ăn uống như luộc ghẹ, nướng khô mực, .v.v. thì chỉ cần trả thêm 10% tiền thức uống, gọi là Service Charge (tiền phụ trội cho dịch vụ).

Bạn đuợc nhờ để viết cho họ program làm việc nầy. Ngoài ra, du khách có thể trả tiền bằng tiền mặt (cash), hay Credit cards như Mastercard, Visa hay AmericanExpress. Bạn phải cho họ một receipt (biên lai nhận tiền) xem giống như dưới đây.

Ở đây ta chỉ cần cho hiển thị Receipt trong một Listbox là đủ rồi. Trong thực tế, ta có thể in nó ra một Docket Printer. Phần lớn các Docket printers thuộc loại "dot matrix", tức là in từng hàng chữ một, khi printer head có 8 Pins rà từ trái qua phải. Do đó bạn cần phải Setup printer với Generic Driver để chỉ in các hàng chữ (Text Only) chớ không phải Graphic Driver như thường dùng cho Windows. Các Docket printers còn có một sợi dây tín hiệu cho bạn nối printer với hộp tiền để mỗi lần in receipt thì hộp tiền được mở khóa để ngăn tiền tự động chạy ra.

Ðể cho các hàng chữ trong Receipt sắp ngay hàng thẳng lối, bạn nên dùng Fixed Length Font Courier cho Listbox chứa nó. Trong Font Courier tất cả mọi letter đều có cùng một chiều rộng. Trong khi nếu ta dùng một Proportional Spacing Font như MS Sans Serif thì chữ m rộng hơn chữ i.

Khi bạn đã viết được program HalongBay rồi, bạn có thể thử cho thêm những Features mới như:
  • Thay thế hai cái Radio buttons cho Service bằng một Checkbox WithService duy nhất.
  • Bán thêm nhiều thức ăn hay sản phẩm khác.
  • Lưu trử chi tiết các receipt bán (Sales Transactions).
  • Tổng kết tiền bán mỗi ngày, mỗi tháng.

Dự án Giờ làm việc

Bà chủ xưởng may kia có đến 20 người thợ. Bà muốn có một hệ thống đơn giản để biết giờ các nhân viên đến, đi, và có thể trong tương lai dựa vào đó để trả lương nhân viên. Bà ấy nhờ bạn nghiên cứu xem có thể thực hiện việc nầy đuợc không.
Mỗi nhân viên đuợc cấp cho một phiếu có Barcode của số nhân viên độc đáo (unique) của họ. Mỗi lần vào hay ra hãng, nhân viên sẽ quẹt (swipe) cái phiếu qua một Barcode CardReader. BarCode CarReader sẽ gởi con số đọc được vào Computer để ghi nhận rằng người nào vừa ra hay vào. Ðầu ngày, computer coi như mọi người đều ở ngoài xưởng. Khi nhân viên Swipe card lần đầu trong ngày thì là đến sở làm. Lần kế khi nhân viên Swipe card thì là họ rời hảng, có thể là đi về, nhưng cũng có thể là đi vắng một lúc để về nhà mang con đi bác sĩ chẳng hạn. Chủ sẽ dựa vào giờ nhân viên có mặt trong hảng để trả lương.
Vì không có Barcode CardReader nên trong bài nầy ta sẽ giả bộ (emulate) việc dùng BarCode CardReader bằng cách Drag một con số từ danh sách các số nhân viên trong Listbox lstBarcodes và Drop nó vào TextBox txtSwipe. Lập tức một Entry của biến cố nầy sẽ hiện ra trong Listbox lstSwipeTimes. Sau đó, bất cứ lúc nào nhìn vào Listbox lstSwipeTimes ta cũng sẽ thấy ghi rõ giờ đến/đi của nhân viên.
Ðể tiện việc test cái program nầy ta cần có một cái đồng hồ để xác nhận lúc nào nhân viên Swipe card. Ðồng hồ ta dùng ở đây có thể đuợc điều khiển cho thời gian đi nhanh theo ý muốn của chúng ta. Nắm cái nút trong hộp Adjust Clock Speed Ratio kéo qua bên phải để mỗi giây đồng hồ thật làm thành 1 (60 giây), 2 (120 giây) hay 3 phút (180 giây) trong đồng hồ giả của program chúng ta.
Ta dùng một Timer Control để hiển thị giờ của đồng hồ. Trong khi Property Enabled bằng True thì Timer1 Control sẽ execute Sub Timer1_Timer mỗi Interval. Ở đây ta set Interval của Timer1 bằng 1000 milliseconds, tức là 1 giây. Do đó cứ mỗi giây, đồng hồ sẽ tăng giờ. Tùy theo Clock Speed Ratio, đồng hồ sẽ tăng 1, 2 hay 3 phút cho mỗi giây thật (every real-time second).

Ðôi khi, để biết hiện giờ một nhân viên có mặt trong hãng không, bà chủ hãng không cần phải chạy ra khỏi văn phòng để xem, chỉ cần bấm nút In-Out Status là biết ngay như trong hình dưới đây. Trong bản báo cáo, bên phải tên mỗi người là chữ IN hay OUT. Kế đó là thứ tự những giờ vào, ra của nhân viên. Nếu không đủ chỗ để hiển thị trong cùng một hàng thì tiếp tục hiển thị ở hàng kế đó.

Việc tính ra status IN/OUT của nhân viên dựa vào content của Listbox lstSwipeTimes. Ðể gom mọi entries của một nhân viên lại với nhau ta cần sort chúng theo tên nhân viên hay số nhân viên (Barcode Id Number). Ta có thể thực hiện việc nầy với một sorted Listbox mà mỗi Item bắt đầu bằng thứ chúng ta muốn sort.
Hể nhân viên ra/vào số lần lẻ thì là IN, chẵn thì là OUT.
Ðể tiện việc bảo trì danh sách nhân viên và số BarCode của họ, một Form tên frmSetUp đuợc dùng để Edit hay Delete tên một nhân viên và để Add một nhân viên mới. Bấm nút Update Entry Form List để Update Entry Form ngay lập tức với data vừa mới cho vào. Bấm nút Save List để lưu trử data mới nhất.



Khi bạn đã viết được program SwiRead rồi, bạn có thể thử cho thêm những Features mới như:
  • Tính ra số giờ làm việc của mỗi người trong ngày và báo cáo.
  • Nếu từ 1giờ trưa đến 1:30 mọi người đều phải nghỉ ăn trưa và không tính vào giờ làm việc thì tiền lương trong ngày của mỗi người là bao nhiêu, giả dụ mỗi giờ 5 đô la.
  • Lưu trử dữ kiện để trả lương tuần
  • Nếu ai làm nhiều hơn 40 giờ một tuần thì từ giờ thứ 41 trở đi được ăn phụ trội 50%.


 

  Học Microsoft Visual Basic 6.0