Thực tập Kỹ thuật lập trình Xây dựng cấu trúc dữ liệu và các chức năng nhập xuất dữ liệu

27 526 0
Thực tập Kỹ thuật lập trình Xây dựng cấu trúc dữ liệu và các chức năng nhập xuất dữ liệu

Đ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

Tài liệu hướng dẫn chi tiết cách xây dựng cấu trúc dữ liệu và các chức năng nhập xuất dữ liệu cho bài toán Xây dựng chương trình quản lý sinh viên. Với các bước hướng dẫn chi tiết và dễ hiểu như thế trong tài liệu, hi vọng các bạn sẽ biết cách cách xây dựng cấu trúc dữ liệu và các chức năng nhập xuất dữ liệu với các bài toán tương tự.

Thực tập KỸ THUẬT LẬP TRÌNH Tuần 4-6: Xây dựng cấu trúc liệu chức nhập/xuất liệu Yêu cầu: - Xây dựng cấu trúc liệu phù hợp để quản lý đối tượng sinh viên, gồm thông tin:      Mã lớp Mã sinh viên Họ tên Ngày sinh Điểm trung bình tích lũy - Dữ liệu (hồ sơ sinh viên) ghi file - Xây dựng chức cho phép nhập hồ sơ, in danh sách nhập - Tự động chỉnh sửa tả nhập họ tên sinh viên - Kiểm tra tính hợp lệ ngày sinh nhập Ngày sinh có dạng dd/mm/yyyy, dd ngày có giá trị khoảng từ đến 31, mm tháng có giá trị trọng khoảng đến 12 yyyy năm có giá trị từ 1900 đến 2016; dd/mm/yyyy phải ngày hợp hệ (có lịch), ví dụ ngày 30/2/2016 không hợp lệ - Kiểm tra tính hợp lệ điểm trung bình tích lũy, điểm trung bình tích lũy >=0 Hầu hết ngôn ngữ lập trình có C/C++ cho phép người lập trình tự định nghĩa cấu trúc theo nhu cầu sử dụng từ kiểu liệu có định nghĩa trước Kiểu cấu trúc (Structure) kiểu liệu bao gồm nhiều thành phần có kiểu khác nhau, thành phần gọi trường (field) Sự khác biệt kiểu cấu trúc kiểu mảng là: phần tử mảng kiểu phần tử kiểu cấu trúc có kiểu khác Hình ảnh sau kiểu cấu trúc với trường kiểu mảng có dạng: 11 12 13 14 Cú pháp 1: struct { ; ; …… ; }; Cú pháp 2: typedef struct { ; ; …… ; } ; Trong đó: - : tên đặt theo quy tắc đặt tên danh biểu; tên mang ý nghĩa tên kiểu cấu trúc; - (i=1 n): trường cấu trúcliệu thuộc kiểu (tên trường phải tên đặt theo quy tắc đặt tên danh biểu) Ví dụ 1: Để quản lý ngày, tháng, năm ngày năm ta khai báo kiểu cấu trúc gồm thông tin: ngày, tháng, năm struct KieuNgayThang { unsigned char Ngay; unsigned char Thang; unsigned int Nam; }; typedef struct { unsigned char Ngay; unsigned char Thang; unsigned int Nam; } KieuNgayThang; Ví dụ 2: Mỗi sinh viên cần quản lý thông tin: Mã số sinh viên, họ tên, ngày tháng năm sinh, giới tính, địa thường trú Lúc ta khai báo struct gồm thông tin struct KieuSinhVien { char MSSV[10]; char HoTen[40]; struct KieuNgayThang NgaySinh; int Phai; char DiaChi[40]; }; typedef struct { char MSSV[10]; char HoTen[40]; KieuNgayThang NgaySinh; int Phai; char DiaChi[40]; } KieuSinhVien; o Mỗi thành phần giống biến riêng thuộc cấu trúc, gồm kiểu tên thành phần Một thành phần gọi trường o Phần tên kiểu cấu trúc phần danh sách biến có không Tuy nhiên khai báo kí tự kết thúc cuối phải dấu chấm phẩy (;) o Các kiểu cấu trúc phép khai báo lồng nhau, nghĩa thành phần kiểu cấu trúc lại trường có kiểu cấu trúc o Một biến có kiểu cấu trúc cấp phát nhớ cho thực liên tục theo thứ tự xuất khai báo Khai báo biến cấu trúc Việc khai báo biến cấu trúc tương tự khai báo biến thuộc kiểu liệu chuẩn Cú pháp: - Đối với cấu trúc định nghĩa theo cách 1: struct [, …]; - Đối với cấu trúc định nghĩa theo cách 2: [, …]; Ví dụ: Khai báo biến NgaySinh có kiểu cấu trúc KieuNgayThang; biến SV có kiểu cấu trúc KieuSinhVien struct KieuNgayThang NgaySinh; struct KieuSinhVien SV; KieuNgayThang NgaySinh; KieuSinhVien SV; Các thao tác biến kiểu cấu trúc Truy xuất đến trường biến cấu trúc Cú pháp: .; Khi sử dụng cách truy xuất theo kiểu này, thao tác . giống thao tác biến kiểu liệu Ví dụ1: Viết chương trình cho phép đọc liệu từ bàn phím cho biến mẩu tin SinhVien in biến mẩu tin lên hình: #include #include #include typedef struct { unsigned char Ngay; unsigned char Thang; unsigned int Nam; } KieuNgayThang; typedef struct { char MSSV[10]; char HoTen[40]; KieuNgayThang NgaySinh; int Phai; char DiaChi[40]; } KieuSinhVien; /* Hàm in lên hình m?u tin SinhVien*/ void InSV(KieuSinhVien s) { printf(“MSSV: | Ho va ten | Ngay Sinh | Dia chi\n”); printf(“%s | %s | %d-%d-%d | %s\n”,s.MSSV,s.HoTen, s.NgaySinh.Ngay,s.NgaySinh.Thang,s.NgaySinh.Nam,s.DiaChi); } int main() { KieuSinhVien SV, s; printf(“Nhap MSSV: “);gets(SV.MSSV); printf(“Nhap Ho va ten: “);gets(SV.HoTen); printf(“Sinh ngay: “);scanf(“%d”,&SV.NgaySinh.Ngay); printf(“Thang: “);scanf(“%d”,&SV.NgaySinh.Thang); printf(“Nam: “);scanf(“%d”,&SV.NgaySinh.Nam); printf(“Gioi tinh (0: Nu), (1: Nam): “);scanf(“%d”,&SV.Phai); fflush(stdin); printf(“Dia chi: “);gets(SV.DiaChi); InSV(SV); s=SV; InSV(s); getch(); return 0; } Lưu ý: - Các biến cấu trúc gán cho Thực chất thao tác toàn cấu trúc trường riêng rẽ Chương trình dòng s=SV ví dụ; - Với biến kiểu cấu trúc ta thực thao tác sau đây:  Sử dụng hàm xuất nhập biến cấu trúc;  Các phép toán quan hệ, phép toán số học logic Ví dụ 2: Nhập vào hai số phức tính tổng chúng Ta biết số phức cặp (a,b) a, b số thực, a gọi phần thực, b phần ảo (Đôi người ta viết số phức dạng a + ib i đơn vị ảo có tính chất i2=-1) Gọi số phức c1=(a1, b1) c2=(a2,b2) tổng hai số phức c1 c2 số phức c3 mà c3=(a1+a2, b1+b2) Với hiểu biết ta xem số phức cấu trúc có hai trường, trường biểu diễn cho phần thực, trường biểu diễn cho phần ảo Việc tính tổng hai số phức tính cách lấy phần thực cộng với phần thực phần ảo cộng với phần ảo #include #include #include typedef struct { float Thuc; float Ao; } SoPhuc; /* Ham in so phuc len man hinh*/ void InSoPhuc(SoPhuc p) { printf(“%.2f + i%.2f\n”,p.Thuc,p.Ao); } int main() { SoPhuc p1,p2,p; printf(“Nhap so phuc thu nhat:\n”); printf(“Phan thuc: “);scanf(“%f”,&p1.Thuc); printf(“Phan ao: “);scanf(“%f”,&p1.Ao); printf(“Nhap so phuc thu hai:\n”); printf(“Phan thuc: “);scanf(“%f”,&p2.Thuc); printf(“Phan ao: “);scanf(“%f”,&p2.Ao); printf(“So phuc thu nhat: “); InSoPhuc(p1); printf(“So phuc thu hai: “); InSoPhuc(p2); p.Thuc = p1.Thuc+p2.Thuc; p.Ao = p1.Ao + p2.Ao; printf(“Tong so phuc: “); InSoPhuc(p); getch(); return 0; } Khởi tạo cấu trúc Việc khởi tạo cấu trúc thực lúc khai báo biến cấu trúc Các trường cấu trúc khởi tạo đạt dấu { }, chúng phân cách dấu phẩy (,) Ví dụ: Khởi tạo biến cấu trúc NgaySinh: struct KieuNgayThang NgaySinh ={29, 8, 1986}; Con trỏ cấu trúc Khai báo Việc khai báo biến trỏ kiểu cấu trúc tương tự khai báo biến trỏ khác, nghĩa đặt thêm dấu * vào phía trước tên biến Cú pháp: struct * ; Ví dụ: Ta khai báo trỏ cấu trúc kiểu NgayThang sau: struct NgayThang *p; /* NgayThang *p; // Nếu có định nghĩa kiểu */ Sử dụng trỏ kiểu cấu trúc Khi khai báo biến trỏ cấu trúc, biến trỏ chưa có địa cụ thể Lúc cấp phát byte để lưu giữ địa ghi nhận trỏ đến cấu trúc, chưa đến đối tượng cụ thể Muốn thao tác trỏ cấu trúc hợp lệ, tương tự trỏ khác, ta phải: - Cấp phát vùng nhớ cho (sử dụng hàm malloc() hay calloc); - Hoặc, cho quản lý địa biến cấu trúc Ví dụ: Sau khởi tạo giá trị cấu trúc: struct NgayThang Ngay = {29,8,1986}; p = &Ngay; lúc biến trỏ p chứa địa Ngay Truy cập thành phần cấu trúc quản lý trỏ Để truy cập đến trường cấu trúc thông qua trỏ nó, ta sử dụng toán tử dấu mũi tên (->: dấu - dấu >) Ngoài ra, ta sử dụng đến phép toán * để truy cập vùng liệu quản lý trỏ cấu trúc để lấy thông tin cần thiết Ví dụ: Sử dụng trỏ cấu trúc #include #include typedef struct { unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang; int main() { NgayThang Ng={29,8,1986}; NgayThang *p; p=&Ng; printf(“Truy cap binh thuong %d-%d-%d\n”, Ng.Ngay,Ng.Thang,Ng.Nam); printf(“Truy cap qua tro %d-%d-%d\n”, p->Ngay,p->Thang,p->Nam); printf(“Truy cap qua vung nho tro %d-%d-%d\n”, (*p).Ngay,(*p).Thang,(*p).Nam); getch(); return 0; } - Cho phép sử dụng cấu trúc, trỏ cấu trúc đối số hàm loại biến khác - Cho phép hàm xây dựng trả kiểu cấu trúcdụ : Xử lý danh sách sinh viên, sử dụng hàm với đối số cấu trúc #include #include //Ngay thang struct Ngaythang { int ng ; int th ; int nam ; }; //Sinh vien struct Sinhvien { char hoten[25] ; Ngaythang ns; int gt; float diem ; }; //cac ham xu ly int sua(Sinhvien &r) ; int in(Sinhvien x) ; int nhap(Sinhvien *p) ; int nhapds(Sinhvien *a, int n) ; int suads(Sinhvien *a, int n) ; int inds(const Sinhvien *a, int n) ; // struct Sinhvien a[10]; int main() { nhap(a); // in(a[1]); // sua(a[1]); nhapds(a,9); suads(a,9); inds(a,9); getch(); return 0; } ///trien khai cac ham int sua(Sinhvien &r) { int chon; { printf("1: Sua ho ten\n2: Sua sinh\n3:Sua gioi tinh\n4:Sua diem\n5:In\n0: Ket thuc\n"); scanf("%d",&chon); switch (chon) { case 1: printf("Nhap ho ten:"); scanf("%s",r.hoten); break; case 2: printf("Nhap thang nam sinh:"); scanf("%d%d%d",&r.ns.ng,&r.ns.th,&r.ns.nam); break; case 3: printf("Nhap gioi tinh 0:Nu 1:Nam:"); scanf("%d",&r.gt) ; break; case 4: printf("Nhap diem:"); scanf("%f",&r.diem); break; case 5: printf("Sinh vien:"); in(r); 10 b Đặc điểm Cần ý đặc điểm sau cấu trúc có chứa trường bit: − Các bit bố trí liên tục dãy byte − Kiểu trường bit phải int (signed unsigned) − Độ dài trường bit không 16 bit − Có thể bỏ qua số bit bỏ trống tên trường, ví dụ: struct tu { int: 8; int x:8; } biến cấu trúc theo khai báo gồm byte, bỏ qua không sử dụng byte thấp trường x chiếm byte (8 bit) cao − Không cho phép lấy địa thành phần kiểu bit − Không thể xây dựng mảng kiểu bit − Không trả từ hàm thành phần kiểu bit Ví dụ b thành phần biến cấu trúc x có kiểu bit câu lệnh sau sai: return x.b ; // sai nhiên thông qua biến phụ sau: int tam = x.b ; return tam ; − Tiết kiệm nhớ − Dùng kiểu union để lấy bit từ (xem ví dụ phần kiểu hợp) Câu lệnh typedef Để thuận tiện sử dụng, thông thường kiểu NSD tạo gán cho tên kiểu câu lệnh typedef sau: typedef ; Ví dụ: Để tạo kiểu có tên Bool chứa giá trị nguyên (thực chất cần giá trị 0, 1), ta khai báo: typedef int Bool; khai báo cho phép xem Bool kiểu số nguyên đặt tên cho kiểu ngày tháng Date với khai báo sau: typedef struct Date { int ng; int th; int nam; 13 }; ta sử dụng tên kiểu khai báo (ví dụ tên kiểu đối, giá trị hàm trả lại …) Hàm sizeof() Hàm trả lại kích thước biến kiểu Ví dụ: Bool a, b; Date x, y, z[50]; printf("%d,%d,%d",sizeof(a),sizeof(b),sizeof(Bool)) ; // in 2,2,2 printf("Số phần tử z =%d ",sizeof(z) / sizeof(Date)); // in 50 B LÀM VIỆC VỚI FILE I Một số khái niệm Dữ liệu chương trình lưu trữ RAM máy tính, kết thúc chương trình, tắt máy liệu bị giải phóng Để xử lý liệu cần phải lưu trữ nhớ (đĩa cứng, USB, …) dạng file File tập hợp byte liên tục lưu trữ gán tên gọi Khi xử lý file chương trình xem xét chuỗi byte với cách nhìn khác nhau, có ứng xử khác với liệu Trong C hỗ trợ việc thao tác với file với quan điểm: file văn bản, file nhị phân o File văn (Text File): loại tập tin dùng để ghi tự lên đĩa Điểm đặc biệt liệu tập tin lưu trữ thành dòng, dòng kết thúc tự xuống dòng (new line), hiệu ‘\n’; tự kết hợp tự CR (Carriage Return - Về đầu dòng, mã Ascii 13) LF (Line Feed Xuống dòng, mã Ascii 10) Mỗi tập tin kết thúc tự EOF (End Of File) có mã Ascii 26 (xác định tổ hợp phím Ctrl + Z) Truy xuất tập tin theo kiểu văn truy xuất theo kiểu o Tập tin nhị phân: Quan điểm tập tin dãy byte liên tục, việc xử lý với tập tin dựa việc đọc ghi dãy byte Biến tập tin: biến thuộc kiểu liệu tập tin dùng để đại diện cho tập tin Dữ liệu chứa tập tin truy xuất qua thao tác với thông số biến tập tin đại diện cho tập tin 14 Con trỏ tập tin: Khi tập tin mở để làm việc, thời điểm, có vị trí tập tin mà việc đọc/ghi thông tin xảy Người ta hình dung có trỏ đến vị trí đặt tên trỏ tập tin Sau đọc/ghi xong liệu, trỏ chuyển dịch thêm phần tử phía cuối tập tin Sau phần tử liệu cuối tập tin dấu kết thúc tập tin EOF (End Of File) II Các thao tác tập tin Các thao tác với tập tin: o Khai báo biến tập tin o Mở tập tin hàm fopen() o Thực thao tác xử lý liệu tập tin hàm đọc/ghi liệu o Đóng tập tin hàm fclose() Ở đây, ta thao tác với tập tin nhờ hàm định nghĩa thư viện stdio.h Khai báo biến tập tin Cú pháp FILE Các biến danh sách phải trỏ phân cách dấu phẩy(,) Ví dụ: FILE *f1,*f2; Mở tập tin Cú pháp FILE *fopen(char *Path, const char *Mode) Trong đó: - Path: chuỗi đường dẫn đến tập tin đĩa - Mode: chuỗi xác định cách thứctập tin mở Các giá trị Mode: Chế độ Ý nghĩa r Mở tập tin văn để đọc 15 w Tạo tập tin văn để ghi a Nối vào tập tin văn rb Mở tập tin nhị phân để đọc wb Tạo tập tin nhị phân để ghi ab Nối vào tập tin nhị phân r+ Mở tập tin văn để đọc/ghi w+ Tạo tập tin văn để đọc ghi a+ Nối vào hay tạo tập tin văn để đọc/ghi r+b Mở tập tin nhị phân để đọc/ghi w+b Tạo tập tin nhị phân để đọc/ghi a+b Nối vào hay tạo tập tin nhị phân Mặc định mở dạng text xác định b, rõ ràng thêm định t để xác định kiểu text - Hàm fopen trả trỏ tập tin Chương trình ta thay đổi giá trị trỏ Nếu có lỗi xuất mở tập tin hàm trả trỏ NULL Ví dụ: Mở tập tin tên TEST.txt để ghi FILE *f; f = fopen("c:\\TEST.txt", "w"); if (f!=NULL) { /* Các câu lệnh để thao tác với tập tin*/ /* Đóng tập tin*/ } Kiểm tra trỏ f với giá trị NULL cho phép xác định lệnh thực thành công hay không? Nếu mở tập tin để ghi, trường hợp tập tin tồn tập tin bị xóa tập tin tạo Nếu ta muốn ghi nối liệu, ta phải sử dụng chế độ “a” Khi mở với chế độ đọc, tập tin phải tồn rồi, không lỗi xuất Đóng tập tin Hàm fclose() dùng để đóng tập tin mở hàm fopen() Hàm ghi liệu lại vùng đệm vào tập tin đóng lại tập tin Cú pháp: int fclose(FILE *f) 16 Trong f trỏ tập tin mở hàm fopen() Giá trị trả hàm báo việc đóng tập tin thành công Hàm trả EOF có xuất lỗi Ngoài ra, ta sử dụng hàm fcloseall() để đóng tất tập tin lại Cú pháp: int fcloseall() Kết trả hàm tổng số tập tin đóng lại Nếu không thành công, kết trả EOF Kiểm tra đến cuối tập tin hay chưa? Cú pháp: int feof(FILE *f) Ý nghĩa: Kiểm tra xem chạm tới cuối tập tin hay chưa trả EOF cuối tập tin chạm tới, ngược lại trả Di chuyển trỏ tập tin đầu tập tin - Hàm rewind() - Chuyển đầu tập tin, sử dụng hàm rewind() Cú pháp: void rewind(FILE *f); + f: trỏ tập tin thao tác - Chuyển đến vị trí sử dụng hàm fseek() Cú pháp: int fseek(FILE *f, long offset, int whence); + f: trỏ tập tin thao tác + offset: số byte cần dịch chuyển trỏ tập tin + whence: vị trí bắt đầu để tính khoảng cách dịch chuyển cho offset: SEEK_SET Vị trí đầu tập tin SEEK_CUR Vị trí trỏ tập tin SEEK_END Vị trí cuối tập tin + Kết trả hàm việc di chuyển thành công Nếu không thành công, giá trị khác (đó mã lỗi) trả - Lấy vị trị trỏ file hàm ftell(); Cú pháp: long ftell(FILE *stream); + stream: biến đại diện cho file + trả vị trí trỏ file so với đầu file 17 III Truy cập tập tin văn Ghi liệu lên tập tin văn 1.1 Hàm fputc() Hàm dùng để ghi tự lên tập tin văn mở để làm việc Cú pháp: int fputc(int c, FILE *f) Trong đó, tham số c chứa mã Ascii tự Mã ghi lên tập tin liên kết với trỏ f Hàm trả EOF gặp lỗi 1.2 Hàm fputs() Hàm dùng để ghi chuỗi tự chứa vùng đệm lên tập tin văn Cú pháp: int fputs(const char *buffer, FILE *f) Trong đó, buffer trỏ có kiểu char đến vị trí chuỗi tự ghi vào Hàm trả giá trị buffer chứa chuỗi rỗng trả EOF gặp lỗi 1.3 Hàm fprintf() Hàm dùng để ghi liệu có định dạng lên tập tin văn Cú pháp: fprintf(FILE *f, const char *format, varexpr) Trong đó: format: chuỗi định dạng (giống với định dạng hàm printf()), varexpr: danh sách biểu thức, biểu thức cách dấu phẩy (,) Định dạng Ý nghĩa %d %[.số chữ số thập phân] f Ghi số nguyên Ghi số thực có theo quy tắc %o %x %c %s %e làm tròn số Ghi số nguyên hệ bát phân Ghi số nguyên hệ thập lục phân Ghi tự Ghi chuỗi tự %E %g Ghi số thực dạng khoa học (nhân 10 mũ x) %G Ví dụ: Viết chương trình ghi chuỗi tự lên tập tin văn D:\\Baihat.txt 18 #include #include int main(){ FILE *f; clrscr(); f=fopen("D:\\Baihat.txt","w+"); if (f!=NULL){ fputs("Em oi Ha Noi pho.\n",f); fputs("Ta em, mui hoang lan; ta em, mui hoa sua.",f); fclose(f); } getch(); return 0; } Đọc liệu từ tập tin văn 2.1 Hàm fgetc() Hàm dùng để đọc liệu từ tập tin văn mở để làm việc Cú pháp: int fgetc(FILE *f) Hàm trả mã Ascii tự (kể EOF) tập tin liên kết với trỏ f 2.2 Hàm fgets() Cú pháp: char *fgets(char *buffer, int n, FILE *f) Hàm dùng để đọc chuỗi tự từ tập tin văn mở liên kết với trỏ f đọc đủ n tự gặp tự xuống dòng ‘\n’ (ký tự đưa vào chuỗi kết quả) hay gặp tự kết thúc EOF (ký tự không đưa vào chuỗi kết quả) Trong đó: - buffer (vùng đệm): trỏ có kiểu char đến nhớ đủ lớn chứa tự nhận - n: giá trị nguyên độ dài lớn chuỗi tự nhận - f: trỏ liên kết với tập tin - tự NULL (‘\0’) tự động thêm vào cuối chuỗi kết lưu vùng đêm 19 - Hàm trả địa vùng đệm không gặp lỗi chưa gặp tự kết thúc EOF Ngược lại, hàm trả giá trị NULL 2.3 Hàm fscanf() Hàm dùng để đọc liệu từ tập tin văn vào danh sách biến theo định dạng Cú pháp: fscanf(FILE *f, const char *format, varlist) Trong đó: format: chuỗi định dạng (giống hàm scanf()); varlist: danh sách biến biến cách dấu phẩy (,) Ví dụ: Viết chương trình chép tập tin D:\Baihat.txt sang tập tin D:\Baica.txt #include #include int main() { FILE *f1,*f2; clrscr(); f1=fopen("D:\\Baihat.txt","rt"); f2=fopen("D:\\Baica.txt","wt"); if (f1!=NULL && f2!=NULL) { int ch=fgetc(f1); while (! feof(f1)) { fputc(ch,f2); ch=fgetc(f1); } fcloseall(); } getch(); return 0; } Ví dụ Đọc ma trận tính ma trận, ghi ma trận chuyển vị vào file Xem xét file văn đầu vào, đầu chương trình, thay nhận từ bàn phím xuất hình 20 #include #include int a[100][100]; int n,m; int main() { char *infile="vao.txt", *outfile="ra.txt"; int i, j; FILE *f1,*f2; f1=fopen(infile,"rt"); if(f1==NULL) { printf("Loi mo file %s",infile); getch(); return -1; } f2=fopen(outfile,"wt"); if(f2==NULL) { printf("Loi mo file %s",outfile); getch(); fclose(f1); return -2; } fscanf(f1,"%d%d",&m,&n); for(i=0;i

Ngày đăng: 16/05/2017, 14:03

Từ khóa liên quan

Mục lục

  • Yêu cầu:

  • Xây dựng cấu trúc dữ liệu phù hợp để quản lý đối tượng sinh viên, gồm các thông tin:

  • Dữ liệu (hồ sơ sinh viên) được ghi trên file.

  • Xây dựng các chức năng cho phép nhập hồ sơ, in danh sách đã nhập.

  • Tự động chỉnh sửa chính tả khi nhập họ tên sinh viên.

  • Kiểm tra tính hợp lệ của ngày sinh khi nhập. Ngày sinh có dạng dd/mm/yyyy, dd là ngày có giá trị trong khoảng từ 1 đến 31, mm là tháng có giá trị trọng khoảng 1 đến 12 và yyyy là năm có giá trị từ 1900 đến 2016; và dd/mm/yyyy phải là ngày hợp hệ (có trên lịch), ví dụ ngày 30/2/2016 là không hợp lệ.

  • Kiểm tra tính hợp lệ của điểm trung bình tích lũy, điểm trung bình tích lũy >=0 và <=10.

  • Các chức năng này được kết hợp trong chương trình đã xây dựng ở các tuần trước.

  • Kiến thức liên quan:

  • A. KIỂU BẢN GHI

    • 1 Khái niệm

    • 2. Khai báo biến cấu trúc

    • 3. Các thao tác trên biến kiểu cấu trúc

    • 4. Con trỏ cấu trúc

    • 5. Cấu trúc với thành phần kiểu bit

    • 6. Câu lệnh typedef

    • 7. Hàm sizeof()

  • B. LÀM VIỆC VỚI FILE

    • I. Một số khái niệm

    • II. Các thao tác trên tập tin

      • 1. Khai báo biến tập tin

      • 2. Mở tập tin

      • 3. Đóng tập tin

      • 4. Kiểm tra đến cuối tập tin hay chưa?

      • 5. Di chuyển con trỏ tập tin về đầu tập tin - Hàm rewind()

    • III. Truy cập tập tin văn bản

      • 1. Ghi dữ liệu lên tập tin văn bản

      • 2. Đọc dữ liệu từ tập tin văn bản

      • 3. Ví dụ

    • IV. Truy cập tập tin nhị phân

      • 1. Ghi dữ liệu lên tập tin nhị phân

      • 2. Đọc dữ liệu từ tập tin nhị phân

      • 3. Ví dụ

  • Kết quả: Chương trình QLSV chạy được theo các yêu cầu đặt ra.

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

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

Tài liệu liên quan