Lập Trình C căn bản -L22 - Lab. -p11

11 270 1
Lập Trình  C căn bản -L22 - Lab. -p11

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập Trình C căn bản

Bài 22 Quản Lý Tập Tin Mục tiêu: Kết thúc học này, bạn có thể:  Thực thao tác tập tin văn tập tin nhị phân  Mở đóng tập tin  Đọc từ tập tin ghi vào tập tin  Sử dụng trỏ tập tin Các bước cho giải thích cặn kẽ, dễ hiểu tư cẩn thận từ đầu đến cuối Bài viết để đáp ứng mục tiêu học để hiểu hồn tồn cơng cụ Xin thực theo bước cách cẩn thận Phần I – Trong thời gian 30 phút đầu: 22.1 Quản lý tập tin C C cung cấp giao diện đồng cho việc quản lý nhập xuất Các phương pháp truy cập tập tin giống phương pháp quản lý thiết bị khác Giải pháp cho tính đồng C khơng có kiểu tập tin C xem tất tập tin stream 22.1.1 Đọc, ghi truy cập liệu tập tin Có số hàm xử lý tập tin tập tin header stdio.h Chúng ta viết chương trình C sử dụng hàm Chương trình tạo hệ thống ngân hàng đơn giản Các chi tiết khách hàng nhập vào lưu tập tin gọi customer Chi tiết giao dịch gửi tiền rút tiền kiểm tra hợp lệ tập tin customer Các giao dịch hợp lệ ghi nhận tập tin trans Một báo cáo khách hàng có số vốn thấp in Các bước liệt kê sau: Định nghĩa structure để lưu trữ liệu khách hàng giao dịch Câu lệnh là: struct cust_st { int acc_no; char cust_nm[30]; float bal; }; struct tran_st { int acc_no; char trantype; float amt; }; Hiển thị danh mục để thực thao tác khác dựa lựa chọn người dùng Câu lệnh là: while(choice != 4) { clrscr(); Quản lý tập tin 305 } printf("\nSelect choice from menu\n\n1 Accept customer details\n2 Record Withdrawal/Deposit transaction\n3 Print Low Balance Report\n4 Exit\n\nEnter choice: "); scanf(" %d", &choice); Gọi hàm tương ứng dựa vào lựa chọn người dùng Câu lệnh là: if(choice == 1) addcust(); else if(choice == 2) rectran(); else if(choice == 3) prnlowbal(); Trong hàm thêm chi tiết khách hàng, định nghĩa trỏ tập tin để kết hợp với tập tin customer Khai báo biến cấu trúc để nhập liệu khách hàng Câu lệnh là: FILE *fp; struct cust_st custdata; Mở tập tin customer theo chế độ append để thêm mẫu tin Xác nhận thao tác mở tập tin thực Câu lệnh là: if((fp = fopen("customer", "a+")) == NULL) { printf("\nERROR opening customer file"); getch(); return; } Nhập liệu khách hàng vào biến cấu trúc ghi liệu vào tập tin customer Câu lệnh là: fwrite(&custdata, sizeof(struct cust_st), 1, fp); Đóng tập tin customer sau nhập liệu Câu lệnh là: fclose(fp); Trong hàm dùng để ghi giao dịch, định nghĩa biến trỏ để trỏ đến tập tin customer tập tin trans Và định nghĩa biến cấu trúc để nhập vào liệu giao dịch đọc liệu khách hàng Câu lệnh là: FILE *fp1, *fp2; struct cust_st custdata; struct tran_st trandata; Mở hai tập tin theo chế độ thích hợp Tập tin customer phải mở để đọc cập nhật, tập tin trans phải cho phép thêm mẫu tin Câu lệnh là: if((fp1=fopen("customer", "r+w"))==NULL) { printf("\nERROR opening customer file"); 306 Lập trình C getch(); return; } if((fp2 = fopen("trans", "a+")) == NULL) { printf("\nERROR opening transaction file"); getch(); return; } 10 Nhập vào số tài khoản cho giao dịch bảo đảm tồn tập tin customer Câu lệnh là: while((fread(&custdata, size, 1, fp1)) == && found == 'n') { if(custdata.acc_no == trandata.acc_no) { found='y'; break; } } 11 Để bảo đảm nhập vào kiểu giao dịch hợp lệ, câu lệnh là: if(trandata.trantype!='D' && trandata.trantype!='d' && trandata.trantype!='W' && trandata.trantype!='w') printf("\t\tInvalid transaction type, please reenter"); 12 Đối với giao dịch rút tiền, phải bảo đảm số tiền rút phải sẳn có tài khoản khách hàng Nếu sẳn có, cập nhật số tiền lại tài khoản Cũng cần cập nhật số tiền tài khoản cho giao dịch gửi tiền Câu lệnh là: if(trandata.trantype=='W' || trandata.trantype=='w') { if(trandata.amt>custdata.bal) printf("\nAccount balance is %.2f Please reenter withdrawal amount.", custdata.bal); else { custdata.bal-=trandata.amt; } } else { custdata.bal+=trandata.amt; } 13 Ghi mẫu tin chứa giao dịch vào tập tin trans cập nhật mẫu tin khách hàng tập tin customer Câu lệnh là: fwrite(&trandata, sizeof(struct tran_st), 1, fp2); fseek(fp1, (long)(-size), 1); Quản lý tập tin 307 fwrite(&custdata, size, 1, fp1); Lưu ý suốt trình kiểm tra số tài khoản khách hàng, mẫu tin đọc cuối khách hàng thực giao dịch Vì vậy, trỏ tập tin tập tin customer phải nằm cuối mẫu tin cần cập nhật Con trỏ tập tin đặt lại vị trí đầu mẫu tin sử dụng hàm fseek() Ở size biến số nguyên chứa kích cở cấu trúc cho liệu khách hàng 14 Đóng hai tập tin sau nhập giao dịch Câu lệnh là: fclose(fp1); fclose(fp2); 15 Trong hàm hiển thị tài khoản có số vốn ít, định nghĩa trỏ tập tin để kết hợp với tập tin customer Khai báo biến cấu trúc để đọc liệu khách hàng Câu lệnh là: FILE *fp; struct cust_st custdata; 16 Sau mở tập tin chế độ đọc, đọc mẩu tin khách hàng kiểm tra số vốn Nếu 250, in mẩu tin Câu lệnh là: while((fread(&custdata, sizeof(struct cust_st), 1, fp))==1) { if(custdata.bal custdata.bal) printf("\nAccount balance is %.2f Please reenter withdrawal amount.", custdata.bal); else { custdata.bal -= trandata.amt; val_flag = 'y'; } } else { custdata.bal += trandata.amt; val_flag = 'y'; } } fwrite(&trandata, sizeof(struct tran_st), 1, fp2); } else fseek(fp1, (long)(-size), 1); fwrite(&custdata, size, 1, fp1); printf("\nThis account number does not exist"); printf("\nRecord another transaction? (y/n): "); scanf(" %c", &flag); } fclose(fp1); fclose(fp2); } prnlowbal() { FILE *fp; struct cust_st custdata; char flag = 'n'; clrscr(); if((fp = fopen("customer", "r")) == NULL) { printf("\nERROR opening customer file"); getch(); return; } printf("\nReport on account balances below 250\n\n"); while((fread(&custdata, sizeof(struct cust_st), 1, fp)) == 1) Quản lý tập tin { if(custdata.bal < 250) { flag = 'y'; printf("\n%d\t%s\t%.2f", custdata.acc_no, custdata.cust_nm, custdata.bal); 311 } } if(flag == 'n') printf("\nNo account balances found below 250"); getch(); fclose(fp); } Để xem kết quả, thực bước sau đây: Lưu tập tin với tên filesI.C Biên dịch tập tin, filesI.C Thực thi chương trình, filesI.C Trở chương trình soạn thảo Kết xuất chương trình sau: Select choice from menu Accept customer details Record Withdrawal/Deposit transaction Print Low Balance Report Exit Enter choice: Một mẫu kết xuất hàm thêm vào chi tiết khách hàng sau: Enter Account number: 123 Enter Customer Name: E.Wilson Enter Account Balance: 2000 Add another? (y/n): Một mẫu kết xuất hàm thêm vào chi tiết giao dịch sau: Enter Account number: 123 Enter Transaction type (D/W): W Enter amount: 1000 Record another transaction? (y/n): Một mẫu kết xuất hàm hiển thị báo cáo tài khoản có vốn thấp sau: 312 Lập trình C Report on account balances below 250 104 113 120 Quản lý tập tin Jones 200 Sharon 150 Paula 200 313 Phần II – Trong thời gian 30 phút kế tiếp: Viết chương trình C để hiển thị khác hai tập tin nhập vào đối số dòng lệnh Với khác nhau, hiển thị vị trí tìm thấy khác ký tự hai tập tin vị trí Cũng cần phải bảo đảm người sử dụng nhập vào số lượng đối số hợp lệ Cuối cùng, hiển thị tổng số khác tìm thấy Để làm điều này, a Khai báo biến argv argc để nhận vào đối số từ dòng lệnh b Khai báo trỏ trỏ đến hai tập tin c Kiểm tra tính hợp lệ argc để bảo đảm nhập số đối số d Mở hai tập tin chế độ đọc e Đặt vòng lặp để đọc ký tự từ hai tập tin đến cuối hai tập tin f Nếu ký tự khác nhau, hiển thị chúng với vị trí chúng Tăng số đếm khác lên g Nếu đến cuối tập tin, in ký tự lại tập tin khác biệt h Kiểm tra số đếm khác để hiển thị thơng báo thích hợp i Đóng hai tập tin 314 Lập trình C Bài tập tự làm Viết chương trình C để chép nội dung tập tin vào tập tin khác loại trừ từ a, an, the Viết chương trình C để nhập vào hai chuỗi số Lưu trữ chuỗi hai tập tin riêng biệt Sắp xếp chuỗi tập tin Trộn hai chuỗi vào một, xếp lưu lại chuỗi kết vào tập tin Hiển thị nội dung tập tin Quản lý tập tin 315 ... acc_no; char cust_nm[30]; float bal; }; 308 Lập trình C struct tran_st { int acc_no; char trantype; float amt; }; void main() { int choice = 1; while(choice != 4) { clrscr(); printf("\nSelect choice... menu\n\n1 Accept customer details\n2 Record Withdrawal/Deposit transaction\n3 Print Low Balance Report\n4 Exit\n\nEnter choice: "); scanf(" %d", &choice); } if(choice == 1) addcust(); else if(choice... fclose(fp); Chúng ta nhìn vào chương trình hồn chỉnh Mở chương trình soạn thảo mà bạn dùng để gõ chương trình C Tạo tập tin Gõ vào dòng lệnh sau đây: #include struct cust_st { int acc_no;

Ngày đăng: 14/11/2012, 16:13

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan