Lap trinh

LẬP TRÌNH TRÊN VISUALFOX

Tóm tắt lý thuyết

1. CHƯƠNG TRÌNH

1.1. Khái niệm

Là một dãy lệnh liên tiếp được tổ chức vào 1 file chương trình, file chương trình mặc định có phần mở rộng là *. PRG.

1.2. Các bước tiến hành khi lập trình

Khi bắt đầu lập trình, thông thường phải thực hiện các bước sau:

Hiểu rõ vấn đề bạn sắp viết chương trình.

Chia nhỏ vấn đề cần giải quyết thành các mục nhỏ hơn.

Xác định các dạng dữ liệu nhập, xuất.

Chương trình hoá các mục này.

Kiểm tra và chỉnh sửa các mục.

Kết nối các mục lại với nhau thành một chương trình.

1.3. Cấu trúc chung của một chương trình

a.Tạo môi trường làm việc: thường chứa các lệnh sau:

SET DATE FRENCH: đặt ngày tháng năm theo dạng DD-MM-YY

SET CURENCY ON : đặt năm có 4 chữ số

SET TALK OFF/ON : ẩn hiện các kết quả thực hiện lệnh

SET DEFAULT TO <đường dẫn> : đặt đường dẫn hiện thời

CLEAR: xoá màn hình hiển thị kết quả

CLOSE ALL: đóng các bảng dữ liệu, các file cơ sở dữ liệu,...

b. Phần thân chương trình

Thực hiện các công việc mà chương trình yêu cầu như :

Cập nhập dữ liệu

Xử lý, tính toán

Kết xuất thông tin

c. Kết thúc chương trình

Đóng các tập tin CSDL, các bảng dữ liệu đang sử dụng.

Giải phóng biến nhớ .

Trả lại các chế độ cho hệ thống.

d. Chú thích trong chương trình

Là các giải thích được thêm vào để làm rõ cho chương trình, phải được bắt đầu bởi dấu * hay &&

* : Bắt đầu một dòng

&& : Viết sau một lệnh

Một lệnh có thể được viết trên nhiều dòng, nhưng cuối mỗi dòng phải có dấu chấm phẩy trừ dòng cuối cùng.

2. CÁC CÂU LỆNH NHẬP, XUẤT DỮ LIỆU

2.1. Nhập dữ liệu

Cú pháp: @<x,y> Say.........get..........read

2.2. Xuất dữ liệu

Cú pháp: @<x,y> Say <Biểu thức>

3. CÁC CẤU TRÚC ĐIỀU KHIỂN

3.1. Cấu trúc tuần tự: Chương trình được thực hiện từ trên xuống.

3.2. Cấu trúc rẽ nhánh

Cấu trúc rẽ nhánh có hai dạng: dạng khuyết và dạng đầy đủ:

a. Dạng khuyết

Cú pháp:

IF <Bthức Logic>

<các lệnh>

ENDIF

b. Dạng đầy đủ

Cú pháp:

IF <Bthức Logic>

<các lệnh 1>

ELSE

<các lệnh 2>

ENDIF

c. Lựa chọn một trong nhiều trường hợp

Cú pháp:

DO CASE

CASE <Bthức L1>

<các lệnh 1>

CASE <Bthức L2>

<các lệnh 2>

......................

CASE <Bthức Ln>

<các lệnh n>

[OTHERWISE

<Các lệnh n+1>]

ENDCASE

3.3. Cấu trúc lặp

a. Cấu trúc DO WHILE

Cú pháp:

DO WHILE <Bthức Logic>

<Các lệnh>

[LOOP]

[EXIT]

ENDDO

b. Cấu trúc SCAN

Cú pháp:

SCAN [<phạm vi>] [FOR<Bthức Logic>] [WHILE<bthức Logic>]

<Các lệnh>

[LOOP]

[EXIT]

END SCAN

c. Cấu trúc FOR

Cú pháp:

FOR <Biến>=<Giá trị đầu> TO <Giá trị cuối> [Step <n>]

<Các lệnh>

END FOR

A. Bài tập có lời giải

BÀI SỐ 1

Viết chương trình nhập vào chỉ số điện kế cũ và mới của một hộ gia đình, rồi tính tiền điện của hộ đó. Biết rằng đơn giá trong định mức là 550đồng/Kwh, định mức tiêu thụ được cho bởi bảng sau:

1. Hộ dân : 60Kwh/Tháng

2. Hộ công nhân viên : 120Kwh/Tháng

3. Hộ dân kinh doanh : 500Kwh/Tháng

4. Hộ sản xuất : 700Kwh/Tháng

Nếu sử dụng điện quá định mức thu số Kwh sẽ được tính giá 800đồng/Kwh.

Hướng dẫn giải

close all

clea

set talk off

@5,5 say 'Chi so cu' get chisocu defa 0

@6,5 say 'Chi so moi' get chisomoi defa 0

@7,5 say 'Loai ho gia dinh' get Loaiho defa space(20)

read

do case

case Loaiho='HO DAN'

if (chisomoi-chisocu)<=60

thanhtien=(chisomoi-chisocu)*550

else

thanhtien=60*550+(chisomoi-chisocu-60)*800

endi

case Loaiho='CONG NHAN VIEN'

if (chisomoi-chisocu)<=120

thanhtien=(chisomoi-chisocu)*550

else

thanhtien=120*550+(chisomoi-chisocu-120)*800

endi

case Loaiho='KINH DOANH'

if (chisomoi-chisocu)<=500

thanhtien=(chisomoi-chisocu)*550

else

thanhtien=500*550+(chisomoi-chisocu-500)*800

endi

othe

if (chisocu-chisomoi)<=700

thanhtien=(chisocu-chisomoi)*550

else

thanhtien=700*550+(chisocu-chisomoi-700)*800

endi

endcase

@10,10 say 'So tien phai tra la ' +str(thanhtien)

set talk on

BÀI SỐ 2

Viết chương trình nhập vào tiền lương hàng tháng của một người nào đó, sau đó tính thuế thu nhập mà người đó phải nộp. Biết rằng

Lương <= 5000000 không phải nộp thuế.

Lương > 5000000 thì số tiền dư sẽ được tính thuế 10%

Hướng dẫn giải

close all

clea

set talk off

@5,5 say 'Nhap tien luong' get Luong defa 0

read

if Luong<=5000000

mLuong=Luong

else

mluong=5000000+(Luong-5000000)/10

endif

@10,10 say 'Luong thuc nhan la' + str(mluong)

set talk on

BÀI SỐ 3

Viết chương trình tìm bội số chung nhỏ nhất của 2 số nguyên

Hướng dẫn giải

clea

clos all

set talk off

@5,5 say 'Nhap so thu nhat' get so1 defa 0

@6,5 say 'Nhap so thu hai' get so2 defa 0

read

p=so1*so2

do while so1<>so2

if so1>so2 then

so1=so1-so2

else

so2=so2-so1

endif

enddo

@10,5 say 'Boi so chung nho nhat la' +str(p/so1)

clos all

set talk on

BÀI SỐ 4

Viết chương trình in ra màn hình các số nguyên tố trong phạm vi n

Hướng dẫn giải

clea

set talk off

@5,5 say 'Nhap pham vi' get n defa 0 vali n>=0

read

dem=0

i=2

do while (i<=n)

if songuyento(i)

dem=dem+1

??i,''

if mod(dem,20)=0

?

endif

endif

i=i+1

enddo

Function Songuyento

Para x

j=2

k=int(sqrt(x))

do while (j<=k) and (mod(x,j)<>0)

j=j+1

enddo

if j>k

Songuyento=.T.

else

Songuyento=.F.

Endif

return songuyento

BÀI SỐ 5

Để quản lý bán hàng trong một Salon xe gắn máy Hồng Phát, người ta sử dụng tập tin dự án QLYXE.PJX chứa tập tin cơ sở dữ liệu CSDL.DBC chứa 2 bảng dữ liệu sau:

Bảng DSXE.DBF

Tên trường Kiểu dữ liệu Độ rộng Diễn giải Ghi chú

MAXE C 4 Mã xe Khoá chính

TENXE C 30 Tên xe

SOLUONG N 2 Số lượng có

DONGIA N 7 Đơn giá

Bảng BANXE.DBF

Tên trường Kiểu dữ liệu Độ rộng Diễn giải Ghi chú

MAXE C 4 Mã xe

TENKHACH C 30 Họ và tên khách

DIACHI C 30 Địa chỉ khách

SLBAN N 1 Số lượng bán

NGAYBAN D 8 Ngày bán

THANTIEN N 10 Thành tiến

a. Viết chương trình bổ sung các loại xe cho bảng DSXE.DBF

b. Viết chương trình bổ sung một số bản ghi cho bảng BANXE.DBF mỗi khi có khách hàng mua xe, chú ý rằng trong quá trình bổ sung phải đảm bảo mối quan hệ giữa hai bảng dữ liệu, SOLUONG=SOLUONG-SLBAN mỗi khi khách hàng mua xe.

c. Viết chương trình in bảng thống kê tình hình bán mỗi loại xe trong một năm nào đó.

d. Viết chương trình nhập vào một tháng và một loại xe bất kỳ, in danh sách những khách hàng mua loại xe trong tháng đó, tổng số lượt khách và tổng số lượng bán

Hướng dẫn giải

Tạo cấu trúc hai bảng dữ liệu trên.

Câu a

clea

clos all

set talk off

set date fren

Do capnhat

procedure capnhat

use dsxe

Do while .T.

scat memv blan

if last()=27

exit

endif

@5,5 say 'Ma xe' get M.maxe vali kt_maxe(M.maxe)

@6,5 say 'Ten xe' get M.Tenxe

@7,5 say 'So luong' get M.Soluong vali M.soluong>0

@8,5 say 'Don gia' get M.Dongia vali M.dongia>0

read

appe blan

gath memv

enddo

Function kt_maxe

para x

loca for x=maxe

if found()

kt_maxe=.F.

else

kt_maxe=.T.

endif

Return kt_maxe

Câu b

clea

clos all

set talk off

set date fren

sele 1

use dsxe

inde on maxe to sx

sele 2

use banxe

set rela to maxe into A

Do capnhat

procedure capnhat

Do while .T.

clea

scat memv blan

if last()=27

exit

endif

@5,5 say 'Ma xe' get M.maxe vali kt(M.maxe)

@6,5 say 'Ten khach' get M.Tenkhach

@7,5 say 'Dia chi' get M.diachi

@8,5 say 'So luong ban' get M.Slban vali M.Slban>0

@9,5 say 'Ngay ban' get M.Ngayban vali M.Ngayban<=Date()

read

appe blan

gath memv

repl all thanhtien with slban*A.dongia

sele 1

repl soluong with soluong-M.slban for M.maxe=maxe

enddo

return

Function kt

para y

sele 1

loca for y=maxe

if found()

kt=.T.

else

kt=.F.

endif

sele 2

return kt

Câu c

clea

clos all

set talk off

set date fren

Do Thongke

Procedure Thongke

Do thietlap

Do Tinhtoan

return

Procedure Thietlap

sele 1

use dsxe

inde on maxe to sx

sele 2

use banxe

inde on maxe+str(year(ngayban)) to s1

total on maxe+str(year(ngayban)) to ketqua fiel slban,thanhtien

sele 3

use ketqua

set rela to maxe into A

Return

Procedure Tinhtoan

@5,5 say 'Nhap nam bat ky' get nam defa 0

read

set filt to year(ngayban)=nam

count to dem

if dem=0

@10,10 say 'Trong nam nay khong ban'

else

go top

brow Fiel A.Tenxe, Slban, Thanhtien

sum thanhtien,Slban to x,y

@20,10 say 'Tong thanh tien'+str(x)

@21,10 say 'Tong so luong'+str(y)

Return

Câu d

clea

clos all

set talk off

set date fren

Do Inan

Procedure Inan

Do TLquanhe

Do Xuly

return

Procedure TLquanhe

sele 1

use dsxe

inde on maxe to sx

sele 2

use banxe

set rela to maxe into A

Return

Procedure Xuly

@5,5 say 'Nhap nam bat ky' get thang defa 0

@6,5 say 'Nhap ma xe' get ma defa space(4)

read

set filt to mont(ngayban)=thang and ma=maxe

count to dem

if dem=0

@10,10 say 'Trong thang nay khong ban laoi xe'+ ma

else

go top

stt=1

i=5

@4,10 say ' STT Ho va ten Sluong ban Ngay ban Thanhtien '

do while not eof()

@i,10 say str(stt)+ tenkhach+str(slban)+DTOC(ngayban)+str(thanhtien)

skip

i=i+1

enddo

sum Slban to x

@20,10 say 'Tong luot khach'+str(dem)

@21,10 say 'Tong so luong ban'+str(x)

endif

Return

B. Bài tập không lời giải

Sử dụng Project Tuyensinh.PJX trong bài thực hành số 1 (phần bài tập không có lời giải) trong chương 2, hãy thực hiện các yêu cầu sau:

BÀI SỐ 1

Dựa vào bảng học sinh hãy viết chương trình nhập vào một khối thi nào đó, cho biết khối thi đó có bao nhiêu thí sinh nam dự thi, bao nhiêu thí sinh nữ dự thi

BÀI SỐ 2

Giả sử khối A ngành Tin học có điểm chuẩn là 20 điểm, hày viết chương trình in danh sách các thí sinh đậu khối A ngành Tin học bao gồm các thông tin: Makhoi, manganh, Tentruong, mahs, Hoten, Phai, Tongdiem

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: