Tìm thông tin về vé theo giá từ x đến y và tính bình quân giá vé

Mọi người giúp e sửa lỗi sai trong code.

  • thongtin(): Tìm thông tin về vé theo giá từ x đến y nhập từ bàn phim
  • binhquan(): tính bình quân giá vé

Em có code thử rồi mọi người. Mọi người xem và góp ý giúp em với…

#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 100
struct ve
{
	char tenphim[max];
	char soghe[10],loaive[10],tinhtrang[10];
	int giave;
	int giochieu,phut;
};
void Ke(int x)
{
    int index;
    for (index=0; index<x; index++)
        printf("-");
}
void Nhap(ve a[], int &n)
{
	do{
		printf("Cho biet so ve: ");
		scanf("%d", &n);
	} while (n <= 0);
	for (int i = 1; i <= n; i++)
	{
		printf("Thong tin ve %d la: \n", i);
		printf("So ghe: \n");
		fflush(stdin);
		gets(a[i].soghe);
		printf("Ten phim: \n");
		fflush(stdin);
		gets(a[i].tenphim);
		printf("Gio chieu :\n");
		scanf("%d", &a[i].giochieu);
		printf("Nhap phut :\n");
		scanf("%d", &a[i].phut);
		printf("Gia ve: \n");
		scanf("%d", &a[i].giave);
		fflush(stdin);
		printf("Loai ve: \n");
		gets(a[i].loaive);
		printf("Tinh trang : \n");
		gets (a[i].tinhtrang);
	}
}
void Xuat(ve a[], int n)
{
    printf("\n%40s\n\n", "DANH SACH VE CHIEU PHIM");
	printf("So ghe\t\t   Ten phim\t\t Gio chieu\t\t Gia ve\t Loai ve\t Tinhtrang");
	for (int i = 1; i <= n; i++)
	{
		printf("\n %s \t\t  %s \t\t %d h %d phut \t\t %d \t\ %s \t %s \n", a[i].soghe,a[i].tenphim,a[i].giochieu,a[i].phut,
a[i].giave, a[i].loaive, a[i].tinhtrang);
	}
}
void thongtin(ve a[], int n)
{
    int x,y;
    printf("\n Nhap x:",x); scanf("%d",&x);
    printf("\n Nhap y:",y);scanf("%d",&y);
    for (int i=0;i<n;i++)
    {
        if (x<=a[i].giave<=y)
        {
           printf("\n %s \t\t  %s \t\t %d h %d phut \t\t %d \t\ %s \t %s \n", a[i].soghe,a[i].tenphim,a[i].giochieu,a[i].phut,
a[i].giave, a[i].loaive, a[i].tinhtrang);
        }
    }

}
void binhquan(ve a[], int n){
float tbc;
for(int i=0;i<n;i++)
{
    int t=0;
    t=t+a[i].giave;
    tbc=(float)t/n;
}
printf("\n Binh quan gia ve ban ra: %5.2f ",tbc);
}
void Luufile( ve a[], int n)
{
    int i;
    FILE *file;
    file=fopen("veban.dat", "wb");
    if (file == NULL)
        printf("\nLoi mo tep!");
    else
    {
        for (i=0; i<n; i++)
            {
                fprintf(file, "\n %s \t\t  %s \t\t %d h %d phut \t\t %d \t\ %s \t %s \n", a[i].soghe,a[i].tenphim,a[i].giochieu,a[i].phut,
a[i].giave, a[i].loaive, a[i].tinhtrang);
                if (i != n-1)
                    fprintf(file,"%s", "\n");
            }
        printf("\nDa luu thanh cong vao tep %s", "veban.dat");
        fclose(file);
    }
}


int main()
{
    ve a[100];
    int n,number;
    do
    {
        printf("\n\n");
        Ke(39);
        printf("\n|%20s%18s\n", "MENU", "|");
        Ke(39);
        printf("\n| %-36s|", "1. Nhap du lieu ve chieu phim.");
        printf("\n| %-36s|", "2. Hien danh sach ve chieu phim.");
        printf("\n| %-36s|", "3. Thong tin gia ve x,y.");
        printf("\n| %-36s|", "4. Ghi vao tep veban.dat.");
        printf("\n| %-36s|", "5. Binh quan gia ve.");
        printf("\n| %-36s|\n", "0. Thoat.");
        Ke(39);
        printf("\n\nNhap lua chon: "); scanf("%d", &number);
        switch (number)
        {
            case 1: Nhap(a,n); continue;
            case 2: Xuat(a,n); continue;
            case 3: thongtin(a,n); continue;
            case 4: Luufile(a,n); continue;
            case 5: binhquan(a,n); continue;
            default: exit(0);
        }
    }while (1);
    return 0;
}
``

Gặp vấn đề gì thì nói chi tiết ra. Không nói thì ai mà biết mà giúp bạn chứ!

2 Likes

Tiêu đề là vấn đề đấy ạ

Ý bạn kia là nêu vấn đề bạn gặp phải
Chứ quăng cái đề + code thì biết bạn bị gì mà giúp :))

Đề và bài giải bạn đã làm, bạn còn thắc mắc gì???

Hay bài làm không phải của bạn?

vấn đề là e chạy ko ra kq, nhưng e kb lỗi ở đâu, với e muốn tham khảo thêm cách làm khác

Màn hình console không hiện gì hết!!!
Hay kết quả không đúng.

Mất kiên nhẫn với bạn quá, bạn có thể nói chi tiết không? Bị ở hàm nào?

  • Console không hiện gì?
  • Nhập không được?
  • Xuất không được?
  • Ghi vào tập tin không được?
  • Tính trung bình không được?

???

2 Likes

Bạn xem lại khúc này nhé tbc=(float)t/n; cái tbc bạn đặt ngoài vòng for nó mới tính được trung bình cộng chứ
Với lại trong switch case là break; chứ nhỉ
Góp ý thêm cái nữa là bạn nên đặt tên hàm lại, tên hàm nên ghi đầy đủ hơn và nên có dạng camelCase
Ví dụ: tinhTrungBinhGiaVe

2 Likes

Trong thongtin(), sửa đoạn này

if (x<=a[i].giave<=y) { ... }

thành

if (x <= a[i].giave && a[i].giave <= y) { ... }

Trong binhquan(), chuyển ttbc ra ngoài for. Thay vì

for(int i=0;i<n;i++)
{
    int t=0;
    t=t+a[i].giave;
    tbc=(float)t/n;
}

thì viết như sau

int t = 0;
for (int i = 0; i < n; i++)
    t += a[i].giave;
float tbc = (float)t / n;
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?