By GokiSoft.com| 22:55 28/10/2021|
Lập Trình C

[Video] Hướng dẫn chừa bài tập quản lý rạp chiều phím - Lập trình C

Đề bài: Rạp chiều phim

1. Dữ liệu[1]

Định nghĩa 1 cấu trúc:

-struct Cinema: (rạp chiếu phim) với các trường char Name[25] (tên rạp), char Address[35] (địa chỉ rạp), int Seats (tổng số ghế của rạp)

-     Trong hàm main() khai báo một mảng gồm 4 phần tử lưu danh sách các rạp chiếu phim tại Hà Nội tên “cinemaList”.


2. Tạo ra Menu dưới đây:[ 1 ]

  1. Nhập dữ liệu quản lý danh sách rạp chiếu phim.

  2. Hiển thị danh sách rạp ra màn hình.

  3. Tìm rạp theo số ghế tối thiểu.

  4. Lưu dữ liệu ra tệp cinema.dat

  5. Đọc dữ liệu từ tệp cinema.dat

  6. Thoát.

3.  Nhập dữ liệu quản lý danh sách rạp chiếu phim[ 4 ]

Khi chọn 1 từ Menu, thực hiện các yêu cầu dưới đây cho cả 4 rạp cần quản lý:

  • Hiển thị  “Nhap ten rap chieu phim thu 1:

  • Sau đó, hiển thị “Nhap dia chi rap:” 

  • Sau đó, hiển thị  “Nhap so luong ghe:”

Viết hàm để thực hiện chức năng này theo yêu cầu dưới đây:

  • Sử dụng tham biến là con trỏ cấu trúc Cinema. 

  • Lưu các giá trị nhập từ người sử dụng vào mảng cinemaList trong hàm main().

4. Hiển thị danh sách rạp ra màn hình .[ 5.5]

Khi chọn 2 từ Menu, sắp xếp các rạp theo tên theo thứ tự alphabet từ A đến Z sau đó hiển thị thông tin chi tiết của các rạp như dưới đây:


Name

Address

Seats

DAN CHU

211 Kham Thien DD

400

FAFIM VN

191 Nguyen Trai TX

800

FANSLAND

84 Ly Thuong Kiet HK

670

MEGASTAR CINEPLEX

191 Ba Trieu HBT

1200


5. Tìm rạp theo số ghế tối thiểu[4]

Khi chọn 3 từ Menu, thực hiện các yêu cầu dưới đây:

  • Hiển thị  “Nhap so ghe toi thieu:” 

  • Tìm và hiển theo định dạng như câu 4 tất cả các rạp có số ghế lớn hơn hoặc bằng số ghế người dung vừa nhập. Trong trường hợp không tìm thấy rạp nào, hiển thị thông báo  “Khong co rap nao phu hop”

Sử dụng hàm để thực hiện chức năng này theo yêu cầu dưới đây:

  • Sử dụng tham biến là mảng cấu trúc Cinema.


6. Lưu dữ liệu ra tệp cinema.dat.[2]


Khi chọn 4 từ Menu, ghi tất cả thông tin của từng rạp chiếu phim vào file nhị phân  “cinema.dat”.

Sử dụng hàm để thực hiện chức năng này theo yêu cầu dưới đây:

  • Sử dụng tham biến là mảng cấu trúc Cinema. 

  • Tạo file nhị phân “cinema.dat”. 

  • Lưu trữ tất cả thông tin của các rạp chiếu phim trong cinemaList vào tệp này, ghi với chế độ ghi đè.  

  • Đóng tệp.

7. Đọc dữ liệu từ tệp cinema.dat.[2]


Khi chọn 5 từ Menu, đọc tất cả thông tin của các rạp chiếu phim từ file nhị phân  “cinema.dat”. Khi bắt đầu chương trình nếu đã lưu tệp 1 lần thì chỉ cần đọc nội dung từ tệp ra rồi chạy các chức năng khác như hiển thị hoặc tìm kiếm bình thường.

Sử dụng hàm để thực hiện chức năng này theo yêu cầu dưới đây:

  • Sử dụng tham biến là mảng cấu trúc Cinema. 

  • Đọc file nhị phân “cinema.dat”. 

  • Đọc tất cả thông tin trong tệp này và lưu vào mảng là tham biến được truyền vào.  

  • Đóng tệp.

7. Exit[ 0.5 ]

Khi chọn 6 từ Menu, chương trình kết thúc.

Lời Giải:



#include <stdio.h>
#include <stdlib.h>
#include "cinema.h"

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	Cinema cinemaList[4];
	int choose;
	
	do {
		showMenu();
		scanf("%d", &choose);
		
		switch(choose) {
			case 1:
				inputCinemaList(cinemaList);
				break;
			case 2:
				sort(cinemaList);
				displayCinemaList(cinemaList);
				break;
			case 3:
				searchByMinSeats(cinemaList);
				break;
			case 4:
				saveFile(cinemaList);
				break;
			case 5:
				readFile(cinemaList);
				break;
			case 6:
				printf("\nGood bye!!!");
				break;
			default:
				printf("\nNhap sai!!!");
				break;
		}
	} while(choose != 6);
	
	return 0;
}



typedef struct Cinema_ST {
	char name[25], address[35];
	int seats;
} Cinema;

void showMenu();

void inputCinemaList(Cinema *p);

void displayCinemaList(Cinema *p);

void sort(Cinema *p);

void searchByMinSeats(Cinema *p);

void saveFile(Cinema *p);

void readFile(Cinema *p);



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cinema.h"

void showMenu() {
	printf("\n1. Nhap du lieu");
	printf("\n2. Hien thi du lieu");
	printf("\n3. Tim kiem");
	printf("\n4. Luu data");
	printf("\n5. Doc data");
	printf("\n6. Thoat");
	printf("\nChon: ");
}

void inputCinemaList(Cinema *p) {
	int i;
	for(i=0;i<4;i++) {
		printf("\nNhap ten rap chieu phim thu %d: ", i+1);
		fflush(stdin);fflush(stdout);
		gets(p[i].name);
		printf("\nNhap dia chi rap: ");
		fflush(stdin);fflush(stdout);
		gets(p[i].address);
		printf("\nNhap so ghe: ");
		fflush(stdin);fflush(stdout);
		scanf("%d", &p[i].seats);
	}
}

void sort(Cinema *p) {
	int i, j;
	for(i=0;i<3;i++) {
		for(j=i+1;j<4;j++) {
			int cmp = strcmp(p[i].name, p[j].name);
			if(cmp > 0) {
				//swap cinema.
				Cinema tmp = p[i];
				p[i] = p[j];
				p[j] = tmp;
			}
		}
	}
}

void displayCinemaList(Cinema *p) {
	int i, j;
	//header
	printf("\n");
	for(i=0;i<70;i++) {
		printf("-");
	}
	printf("\n|%25s|%35s|%6s|", "Name", "Address", "Seats");
	printf("\n");
	for(i=0;i<70;i++) {
		printf("-");
	}
	for(i=0;i<4;i++) {
		printf("\n|%25s|%35s|%6d|", p[i].name, p[i].address, p[i].seats);
		printf("\n");
		for(j=0;j<70;j++) {
			printf("-");
		}
	}
}

void searchByMinSeats(Cinema *p) {
	int i, j, minSeats;
	printf("\nNhap so ghe toi thieu can tim: ");
	scanf("%d", &minSeats);
	
	//header
	printf("\n");
	for(i=0;i<70;i++) {
		printf("-");
	}
	printf("\n|%25s|%35s|%6s|", "Name", "Address", "Seats");
	printf("\n");
	for(i=0;i<70;i++) {
		printf("-");
	}
	//header end
	int count = 0;
	
	for(i=0;i<4;i++) {
		if(p[i].seats >= minSeats) {
			count++;
			printf("\n|%25s|%35s|%6d|", p[i].name, p[i].address, p[i].seats);
			printf("\n");
			for(j=0;j<70;j++) {
				printf("-");
			}
		}
	}
	
	if(count == 0) {
		printf("\nKhong co rap nao phu hop");
	}
}

void saveFile(Cinema *p) {
	FILE *fp;
	fp = fopen("cinema.dat", "wb");
	fwrite(p, sizeof(Cinema), 4, fp);
	fclose(fp);
}

void readFile(Cinema *p) {
	FILE *fp;
	fp = fopen("cinema.dat", "rb");
	fread(p, sizeof(Cinema), 4, fp);
	fclose(fp);
}


Phản hồi từ học viên

5

(Dựa trên đánh giá ngày hôm nay)