#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_SEATS 30
#define MAX_MOVIES 4
#define MAX_BOOKING 4
#define rows 5
#define cols 6
//Ticket
struct Ticket {
char customerName[100];
int booked;
};
//Movie
struct Movie {
char movieName[50];
struct Ticket seats[MAX_SEATS];
};
struct Movie movies[MAX_MOVIES] = {{"CPE Adventure"},{"Mufasa: The Lion King"},{"Ratatouille"},{"Avengers: Endgame"}};
//Movie list
void displayMovies(struct Movie movies[]) {
printf("\n-- Movies list --\n"); for (int i = 0; i < MAX_MOVIES; i++) {
printf("\n%d. %s\n", i
+ 1, movies
[i
].movieName
); }
}
// Seat booking
void bookTicket(struct Movie *movie) {
int col;
int numtickets;
char name[50];
char rowchar;
//Display seat
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
int seatIndex = row * cols + col;
if (seatIndex >= MAX_SEATS) break;
char rowChar = 'A' + row;
printf("%c%d(", rowChar
, col
+ 1); if (movie
->seats[seatIndex
].booked
) printf("XX"); }
}
printf("How many tickets do you want : "); scanf("%d", &numtickets);
if (numtickets < 1 || numtickets > MAX_SEATS) {
printf("Invalid number of seats!\n"); return;
}
scanf(" %[^\n]", name); //C B8B#C B8B1C B8C B8C B9C B8B2C B8C B8B7C B9C B8
for (int i = 0; i < numtickets; i++) {
printf("\nBooking seat %d \n", i
+ 1);
printf("Enter seat (Ex:A1): "); scanf(" %c%d", &rowchar, &col);
rowchar = toupper(rowchar);
int row = rowchar - 'A';
if (row < 0 || row >= rows || col < 1 || col > cols) {
continue;
}
int seatIndex = row * cols + (col - 1);
if (movie->seats[seatIndex].booked) {
printf("\nSeat %c%d already booked!\n", rowchar
, col
); continue;
}
movie->seats[seatIndex].booked = 1;
strcpy(movie->seats[seatIndex].customerName, name);
printf("Seat %c%d reserved for %s\n", rowchar
, col
, name
); }
}
//Cancel booking
void cancelBooking(struct Movie *movie) {
int col;
int numtickets;
char name[50];
char rowchar;
//Display seat
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
int seatIndex = row * cols + col;
if (seatIndex >= MAX_SEATS) {
break;
}
char rowChar = 'A' + row; // C B9C B8C B8B%C B8C B9C B8B%C B8C B9C B8C B8B'C B9C B8C B9C B8C B8C B8B1C B8B'C B8 C B8B1C B8C B8B)C B8B# A, B, C, ...
printf("%c%d(", rowChar
, col
+ 1);
if (movie->seats[seatIndex].booked) {
}
else {
}
}
printf("\n\n"); // C B8C B8B6C B9C B8C B8C B8B#C B8B#C B8C B8B1C B8C B9C B8B+C B8B!C B9C B9C B8B!C B8B7C B9C B8 C B8C B8 1 C B9C B8C B8B' }
printf("\nPlease enter seat number to cancel (Ex : A1): \n"); scanf(" %c%d", &rowchar, &col);
rowchar = toupper(rowchar);
int row = rowchar - 'A';
if (row < 0 || row >= rows || col < 1 || col > cols) {
return;
}
int seatIndex = row * cols + (col - 1);
if (movie->seats[seatIndex].booked == 0) {
printf("Seat is available!\n"); return;
}
else {
movie->seats[seatIndex].booked = 0;
strcpy(movie->seats[seatIndex].customerName, ""); // C B8B%C B8C B8C B8B7C B9C B8 C B8B%C B8B9C B8C B8C B9C B8B2
printf("Seat %c%d successfully cancel\n", rowchar
, col
); }
}
//Seat available
void checkSeatStatus(struct Movie *movie) {
printf("\nCheck seat available (%s)\n\n", movie
->movieName);
//Display seat
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
int seatIndex = row * cols + col;
if (seatIndex >= MAX_SEATS) {
break;
}
char rowChar = 'A' + row; // C B9C B8C B8B%C B8C B9C B8B%C B8C B9C B8C B8B'C B9C B8C B9C B8C B8C B8B1C B8B'C B8 C B8B1C B8C B8B)C B8B# A, B, C, ...
printf("%c%d(", rowChar
, col
+ 1);
if (movie->seats[seatIndex].booked) {
}
else {
}
}
printf("\n\n"); // C B8C B8B6C B9C B8C B8C B8B#C B8B#C B8C B8B1C B8C B9C B8B+C B8B!C B9C B9C B8B!C B8B7C B9C B8 C B8C B8 1 C B9C B8C B8B' }
}
// Search bookings
void searchBooking(struct Movie movies[]) {
int found = 0;
char searchName[100];
printf("Enter customer name to search : "); scanf(" %[^\n]", searchName);
printf("\n--- Bookings for | %s | ---\n", searchName
);
for (int i = 0; i < MAX_MOVIES; i++) {
for (int j = 0; j < MAX_SEATS; j++) {
if (movies
[i
].seats
[j
].booked
&& strcmp(movies
[i
].seats
[j
].customerName
, searchName
) == 0) {
int row = j / cols;
int col = j % cols;
printf("\n------------------------------\n"); printf("\nMovie: %s \n", movies
[i
].movieName
); printf("Seat: %c%d\n ", 'A' + row
, col
+ 1); printf("\n------------------------------\n"); found = 1;
}
}
}
if (!found) {
printf("No bookings found for | %s |.\n", searchName
); }
}
//Save data
void saveData(struct Movie movies[]) {
FILE *file = fopen("ticketfinal.txt", "w");//C B9C B8C B8C B9C B8C B9C B8C B8B%C B9C B8C B8B7C B9C B8 ticketfinal.txt printf("Error opening file for writing!\n"); return;
}
for (int i = 0; i < MAX_MOVIES; i++) {
for (int j = 0; j < MAX_SEATS; j++) {
if (movies[i].seats[j].booked) {
fprintf(file, "Seat %d: Booked by %s\n", j
+ 1, movies
[i
].seats
[j
].customerName
); }
else {
}
}
fprintf(file, "------------------------------------------------------\n"); }//C B9C B8C B9C B8C B8C B8B1C B8B'C B8C B8B1C B9C B8C B8B#C B8B0C B8B+C B8B'C B9C B8B2C B8C B9C B8C B9C B8B%C B8B0C B9C B8B#C B8B7C B9C B8 C B8
printf("Data saved successfully to ticketfinal.txt!\n"); }
// Load data
void loadData(struct Movie movies[]) {
return;
}
char line[200];
int movieIndex = -1;
if (strncmp(line
, "Movie:", 6) == 0) { movieIndex++;
}
else if (strncmp(line
, "Seat", 4) == 0 && movieIndex
>= 0) { int seatNumber;
char status[20];
char name[100] = "";
if (strstr(line
, "Booked by")) { sscanf(line
, "Seat %d: Booked by %s", &seatNumber
, name
); movies[movieIndex].seats[seatNumber - 1].booked = 1;
strcpy(movies[movieIndex].seats[seatNumber - 1].customerName, name);
}
else {
sscanf(line
, "Seat %d: %s", &seatNumber
, status
); movies[movieIndex].seats[seatNumber - 1].booked = 0;
strcpy(movies[movieIndex].seats[seatNumber - 1].customerName, "");
}
}
}
}
int main() {
int choice;
int movieChoice;
printf("Majoi movies ticket booking system\n"); loadData(movies); //C B9C B8B+C B8B%C B8C B8C B9C B8 C B8B!C B8B9C B8B%C B8C B8B2C B8C B9C B8C B8B%C B9C B8C B8B5C B9C B8C B8B1C B8C B8C B8B6C B8C B9C B8B'C B9
while (1) {
printf("\n| -- Main menu -- |\n| |\n| 1. Ticket booking |"); printf("\n| 2. Seat available |\n| 3. Cancel booking |\n| 4. search booking |"); printf("\n| 5. Exit |\nSelect menu (1-4): "); scanf("%d", &choice);
switch (choice) {
case 1:
displayMovies(movies);
printf("\nSelect movie (1-%d): \n", MAX_MOVIES
); scanf("%d", &movieChoice);
if (movieChoice < 1 || movieChoice > MAX_MOVIES) {
printf("\nSelection failed!\n"); }
else {
bookTicket(&movies[movieChoice - 1]);
}
break;
case 2:
displayMovies(movies);
printf("\nSelect movie (1-%d): \n", MAX_MOVIES
); scanf("%d", &movieChoice);
if (movieChoice < 1 || movieChoice > MAX_MOVIES) {
printf("\nSelection failed!\n"); }
else {
checkSeatStatus(&movies[movieChoice - 1]);
}
break;
case 3:
displayMovies(movies);
printf("\nSelect movie (1-%d): \n", MAX_MOVIES
); scanf("%d", &movieChoice);
if (movieChoice < 1 || movieChoice > MAX_MOVIES) {
printf("\nSelection failed!\n"); }
else {
cancelBooking(&movies[movieChoice - 1]);
}
break;
case 4:
searchBooking(movies);
break;
case 5:
saveData(movies);//C B9C B8C B8C B8C B9C B8 C B8B!C B8B9C B8B%
printf("\nThank you Jubjub!\n"); return 0;
default:
printf("\nPlease select menu again (1-4)\n"); }
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CgojZGVmaW5lIE1BWF9TRUFUUyAzMAojZGVmaW5lIE1BWF9NT1ZJRVMgNAojZGVmaW5lIE1BWF9CT09LSU5HIDQKI2RlZmluZSByb3dzIDUKI2RlZmluZSBjb2xzIDYKCi8vVGlja2V0CnN0cnVjdCBUaWNrZXQgewogY2hhciBjdXN0b21lck5hbWVbMTAwXTsKIGludCBib29rZWQ7Cn07CgovL01vdmllCnN0cnVjdCBNb3ZpZSB7CiBjaGFyIG1vdmllTmFtZVs1MF07CiBzdHJ1Y3QgVGlja2V0IHNlYXRzW01BWF9TRUFUU107Cn07CnN0cnVjdCBNb3ZpZSBtb3ZpZXNbTUFYX01PVklFU10gPSB7eyJDUEUgQWR2ZW50dXJlIn0seyJNdWZhc2E6IFRoZSBMaW9uIEtpbmcifSx7IlJhdGF0b3VpbGxlIn0seyJBdmVuZ2VyczogRW5kZ2FtZSJ9fTsKCi8vTW92aWUgbGlzdAp2b2lkIGRpc3BsYXlNb3ZpZXMoc3RydWN0IE1vdmllIG1vdmllc1tdKSB7CiBwcmludGYoIlxuLS0gTW92aWVzIGxpc3QgLS1cbiIpOwogZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfTU9WSUVTOyBpKyspIHsKICBwcmludGYoIlxuJWQuICVzXG4iLCBpICsgMSwgbW92aWVzW2ldLm1vdmllTmFtZSk7CiB9Cn0KCi8vIFNlYXQgYm9va2luZwp2b2lkIGJvb2tUaWNrZXQoc3RydWN0IE1vdmllICptb3ZpZSkgewogaW50IGNvbDsKIGludCBudW10aWNrZXRzOwogY2hhciBuYW1lWzUwXTsKIGNoYXIgcm93Y2hhcjsKCiAvL0Rpc3BsYXkgc2VhdAogZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHsKICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBjb2xzOyBjb2wrKykgewogICBpbnQgc2VhdEluZGV4ID0gcm93ICogY29scyArIGNvbDsKICAgaWYgKHNlYXRJbmRleCA+PSBNQVhfU0VBVFMpIGJyZWFrOwoKICAgY2hhciByb3dDaGFyID0gJ0EnICsgcm93OwogICBwcmludGYoIiVjJWQoIiwgcm93Q2hhciwgY29sICsgMSk7CiAgIGlmIChtb3ZpZS0+c2VhdHNbc2VhdEluZGV4XS5ib29rZWQpIHByaW50ZigiWFgiKTsKICAgZWxzZSBwcmludGYoIiIpOwogICBwcmludGYoIilcdCIpOwogIH0KICBwcmludGYoIlxuXG4iKTsKIH0KCiBwcmludGYoIkhvdyBtYW55IHRpY2tldHMgZG8geW91IHdhbnQgOiAiKTsKIHNjYW5mKCIlZCIsICZudW10aWNrZXRzKTsKCiBpZiAobnVtdGlja2V0cyA8IDEgfHwgbnVtdGlja2V0cyA+IE1BWF9TRUFUUykgewogIHByaW50ZigiSW52YWxpZCBudW1iZXIgb2Ygc2VhdHMhXG4iKTsKICByZXR1cm47CiB9CgogcHJpbnRmKCJFbnRlciB5b3VyIG5hbWUgOiAiKTsKIHNjYW5mKCIgJVteXG5dIiwgbmFtZSk7ICAvL0MgQjhCI0MgQjhCMUMgQjhDIEI4QyBCOUMgQjhCMkMgQjhDIEI4QjdDIEI5QyBCOAoKIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtdGlja2V0czsgaSsrKSB7CiAgcHJpbnRmKCJcbkJvb2tpbmcgc2VhdCAlZCBcbiIsIGkgKyAxKTsKCiAgcHJpbnRmKCJFbnRlciBzZWF0IChFeDpBMSk6ICIpOwogIHNjYW5mKCIgJWMlZCIsICZyb3djaGFyLCAmY29sKTsKICByb3djaGFyID0gdG91cHBlcihyb3djaGFyKTsKCiAgaW50IHJvdyA9IHJvd2NoYXIgLSAnQSc7CiAgaWYgKHJvdyA8IDAgfHwgcm93ID49IHJvd3MgfHwgY29sIDwgMSB8fCBjb2wgPiBjb2xzKSB7CiAgIHByaW50ZigiXG5JbnZhbGlkIHNlYXQhXG4iKTsKICAgY29udGludWU7CiAgfQoKICBpbnQgc2VhdEluZGV4ID0gcm93ICogY29scyArIChjb2wgLSAxKTsKICBpZiAobW92aWUtPnNlYXRzW3NlYXRJbmRleF0uYm9va2VkKSB7CiAgIHByaW50ZigiXG5TZWF0ICVjJWQgYWxyZWFkeSBib29rZWQhXG4iLCByb3djaGFyLCBjb2wpOwogICBjb250aW51ZTsKICB9CgogIG1vdmllLT5zZWF0c1tzZWF0SW5kZXhdLmJvb2tlZCA9IDE7CiAgc3RyY3B5KG1vdmllLT5zZWF0c1tzZWF0SW5kZXhdLmN1c3RvbWVyTmFtZSwgbmFtZSk7CgogIHByaW50ZigiU2VhdCAlYyVkIHJlc2VydmVkIGZvciAlc1xuIiwgcm93Y2hhciwgY29sLCBuYW1lKTsKIH0KfQoKLy9DYW5jZWwgYm9va2luZwp2b2lkIGNhbmNlbEJvb2tpbmcoc3RydWN0IE1vdmllICptb3ZpZSkgewogaW50IGNvbDsKIGludCBudW10aWNrZXRzOwogY2hhciBuYW1lWzUwXTsKIGNoYXIgcm93Y2hhcjsKCiAvL0Rpc3BsYXkgc2VhdAogZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHsKICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBjb2xzOyBjb2wrKykgewogICBpbnQgc2VhdEluZGV4ID0gcm93ICogY29scyArIGNvbDsKICAgaWYgKHNlYXRJbmRleCA+PSBNQVhfU0VBVFMpIHsKICAgIGJyZWFrOwogICB9CgogICBjaGFyIHJvd0NoYXIgPSAnQScgKyByb3c7ICAvLyBDIEI5QyBCOEMgQjhCJUMgQjhDIEI5QyBCOEIlQyBCOEMgQjlDIEI4QyBCOEInQyBCOUMgQjhDIEI5QyBCOEMgQjhDIEI4QjFDIEI4QidDIEI4IEMgQjhCMUMgQjhDIEI4QilDIEI4QiMgQSwgQiwgQywgLi4uCgogICBwcmludGYoIiVjJWQoIiwgcm93Q2hhciwgY29sICsgMSk7CgogICBpZiAobW92aWUtPnNlYXRzW3NlYXRJbmRleF0uYm9va2VkKSB7CiAgICBwcmludGYoIlhYIik7CiAgIH0KICAgZWxzZSB7CiAgICBwcmludGYoIiIpOwogICB9CiAgIHByaW50ZigiKVx0Iik7CiAgfQogIHByaW50ZigiXG5cbiIpOyAvLyBDIEI4QyBCOEI2QyBCOUMgQjhDIEI4QyBCOEIjQyBCOEIjQyBCOEMgQjhCMUMgQjhDIEI5QyBCOEIrQyBCOEIhQyBCOUMgQjlDIEI4QiFDIEI4QjdDIEI5QyBCOCBDIEI4QyBCOCAxIEMgQjlDIEI4QyBCOEInCiB9CgogcHJpbnRmKCJcblBsZWFzZSBlbnRlciBzZWF0IG51bWJlciB0byBjYW5jZWwgKEV4IDogQTEpOiBcbiIpOwogc2NhbmYoIiAlYyVkIiwgJnJvd2NoYXIsICZjb2wpOwogcm93Y2hhciA9IHRvdXBwZXIocm93Y2hhcik7CgoKIGludCByb3cgPSByb3djaGFyIC0gJ0EnOwogaWYgKHJvdyA8IDAgfHwgcm93ID49IHJvd3MgfHwgY29sIDwgMSB8fCBjb2wgPiBjb2xzKSB7CiAgcHJpbnRmKCJJbnZhbGlkIHNlYXQhXG4iKTsKICByZXR1cm47CiB9CgogaW50IHNlYXRJbmRleCA9IHJvdyAqIGNvbHMgKyAoY29sIC0gMSk7CiBpZiAobW92aWUtPnNlYXRzW3NlYXRJbmRleF0uYm9va2VkID09IDApIHsKICBwcmludGYoIlNlYXQgaXMgYXZhaWxhYmxlIVxuIik7CiAgcmV0dXJuOwogfQogZWxzZSB7CiAgbW92aWUtPnNlYXRzW3NlYXRJbmRleF0uYm9va2VkID0gMDsKICBzdHJjcHkobW92aWUtPnNlYXRzW3NlYXRJbmRleF0uY3VzdG9tZXJOYW1lLCAiIik7IC8vIEMgQjhCJUMgQjhDIEI4QyBCOEI3QyBCOUMgQjggQyBCOEIlQyBCOEI5QyBCOEMgQjhDIEI5QyBCOEIyCiAgcHJpbnRmKCJTZWF0ICVjJWQgc3VjY2Vzc2Z1bGx5IGNhbmNlbFxuIiwgcm93Y2hhciwgY29sKTsKIH0KfQoKLy9TZWF0IGF2YWlsYWJsZQp2b2lkIGNoZWNrU2VhdFN0YXR1cyhzdHJ1Y3QgTW92aWUgKm1vdmllKSB7CiBwcmludGYoIlxuQ2hlY2sgc2VhdCBhdmFpbGFibGUgKCVzKVxuXG4iLCBtb3ZpZS0+bW92aWVOYW1lKTsKCiAvL0Rpc3BsYXkgc2VhdAogZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspIHsKICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBjb2xzOyBjb2wrKykgewogICBpbnQgc2VhdEluZGV4ID0gcm93ICogY29scyArIGNvbDsKICAgaWYgKHNlYXRJbmRleCA+PSBNQVhfU0VBVFMpIHsKICAgIGJyZWFrOwogICB9CgogICBjaGFyIHJvd0NoYXIgPSAnQScgKyByb3c7ICAvLyBDIEI5QyBCOEMgQjhCJUMgQjhDIEI5QyBCOEIlQyBCOEMgQjlDIEI4QyBCOEInQyBCOUMgQjhDIEI5QyBCOEMgQjhDIEI4QjFDIEI4QidDIEI4IEMgQjhCMUMgQjhDIEI4QilDIEI4QiMgQSwgQiwgQywgLi4uCgogICBwcmludGYoIiVjJWQoIiwgcm93Q2hhciwgY29sICsgMSk7CgogICBpZiAobW92aWUtPnNlYXRzW3NlYXRJbmRleF0uYm9va2VkKSB7CiAgICBwcmludGYoIlhYIik7CiAgIH0KICAgZWxzZSB7CiAgICBwcmludGYoIiIpOwogICB9CiAgIHByaW50ZigiKVx0Iik7CiAgfQogIHByaW50ZigiXG5cbiIpOyAvLyBDIEI4QyBCOEI2QyBCOUMgQjhDIEI4QyBCOEIjQyBCOEIjQyBCOEMgQjhCMUMgQjhDIEI5QyBCOEIrQyBCOEIhQyBCOUMgQjlDIEI4QiFDIEI4QjdDIEI5QyBCOCBDIEI4QyBCOCAxIEMgQjlDIEI4QyBCOEInCiB9Cn0KCi8vIFNlYXJjaCBib29raW5ncwp2b2lkIHNlYXJjaEJvb2tpbmcoc3RydWN0IE1vdmllIG1vdmllc1tdKSB7CiBpbnQgZm91bmQgPSAwOwogY2hhciBzZWFyY2hOYW1lWzEwMF07CgogcHJpbnRmKCJFbnRlciBjdXN0b21lciBuYW1lIHRvIHNlYXJjaCA6ICIpOwogc2NhbmYoIiAlW15cbl0iLCBzZWFyY2hOYW1lKTsKCiBwcmludGYoIlxuLS0tIEJvb2tpbmdzIGZvciB8ICVzIHwgLS0tXG4iLCBzZWFyY2hOYW1lKTsKCiBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9NT1ZJRVM7IGkrKykgewogIGZvciAoaW50IGogPSAwOyBqIDwgTUFYX1NFQVRTOyBqKyspIHsKICAgaWYgKG1vdmllc1tpXS5zZWF0c1tqXS5ib29rZWQgJiYgc3RyY21wKG1vdmllc1tpXS5zZWF0c1tqXS5jdXN0b21lck5hbWUsIHNlYXJjaE5hbWUpID09IDApIHsKCiAgICBpbnQgcm93ID0gaiAvIGNvbHM7CiAgICBpbnQgY29sID0gaiAlIGNvbHM7CgogICAgcHJpbnRmKCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICBwcmludGYoIlxuTW92aWU6ICVzIFxuIiwgbW92aWVzW2ldLm1vdmllTmFtZSk7CiAgICBwcmludGYoIlNlYXQ6ICVjJWRcbiAiLCAnQScgKyByb3csIGNvbCArIDEpOwogICAgcHJpbnRmKCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICBmb3VuZCA9IDE7CiAgIH0KICB9CiB9CiBpZiAoIWZvdW5kKSB7CiAgcHJpbnRmKCJObyBib29raW5ncyBmb3VuZCBmb3IgfCAlcyB8LlxuIiwgc2VhcmNoTmFtZSk7CiB9Cn0KCi8vU2F2ZSBkYXRhCnZvaWQgc2F2ZURhdGEoc3RydWN0IE1vdmllIG1vdmllc1tdKSB7CiBGSUxFICpmaWxlID0gZm9wZW4oInRpY2tldGZpbmFsLnR4dCIsICJ3Iik7Ly9DIEI5QyBCOEMgQjhDIEI5QyBCOEMgQjlDIEI4QyBCOEIlQyBCOUMgQjhDIEI4QjdDIEI5QyBCOCB0aWNrZXRmaW5hbC50eHQKIGlmIChmaWxlID09IE5VTEwpIHsKICBwcmludGYoIkVycm9yIG9wZW5pbmcgZmlsZSBmb3Igd3JpdGluZyFcbiIpOwogIHJldHVybjsKIH0KCiBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9NT1ZJRVM7IGkrKykgewogIGZwcmludGYoZmlsZSwgIk1vdmllOiAlc1xuIiwgbW92aWVzW2ldLm1vdmllTmFtZSk7CiAgZm9yIChpbnQgaiA9IDA7IGogPCBNQVhfU0VBVFM7IGorKykgewogICBpZiAobW92aWVzW2ldLnNlYXRzW2pdLmJvb2tlZCkgewogICAgZnByaW50ZihmaWxlLCAiU2VhdCAlZDogQm9va2VkIGJ5ICVzXG4iLCBqICsgMSwgbW92aWVzW2ldLnNlYXRzW2pdLmN1c3RvbWVyTmFtZSk7CiAgIH0KICAgZWxzZSB7CiAgICBmcHJpbnRmKGZpbGUsICJTZWF0ICVkOiBGcmVlXG4iLCBqICsgMSk7CiAgIH0KICB9CiAgZnByaW50ZihmaWxlLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIH0vL0MgQjlDIEI4QyBCOUMgQjhDIEI4QyBCOEIxQyBCOEInQyBCOEMgQjhCMUMgQjlDIEI4QyBCOEIjQyBCOEIwQyBCOEIrQyBCOEInQyBCOUMgQjhCMkMgQjhDIEI5QyBCOEMgQjlDIEI4QiVDIEI4QjBDIEI5QyBCOEIjQyBCOEI3QyBCOUMgQjggQyBCOAoKIGZjbG9zZShmaWxlKTsKIHByaW50ZigiRGF0YSBzYXZlZCBzdWNjZXNzZnVsbHkgdG8gdGlja2V0ZmluYWwudHh0IVxuIik7Cn0KLy8gTG9hZCBkYXRhCnZvaWQgbG9hZERhdGEoc3RydWN0IE1vdmllIG1vdmllc1tdKSB7CiBGSUxFICpmaWxlID0gZm9wZW4oInRpY2tldGZpbmFsLnR4dCIsICJyIik7CiBpZiAoZmlsZSA9PSBOVUxMKSB7CiAgcHJpbnRmKCIiKTsKICByZXR1cm47CiB9CgogY2hhciBsaW5lWzIwMF07CiBpbnQgbW92aWVJbmRleCA9IC0xOwogd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZmlsZSkpIHsKICBpZiAoc3RybmNtcChsaW5lLCAiTW92aWU6IiwgNikgPT0gMCkgewogICBtb3ZpZUluZGV4Kys7CiAgfQogIGVsc2UgaWYgKHN0cm5jbXAobGluZSwgIlNlYXQiLCA0KSA9PSAwICYmIG1vdmllSW5kZXggPj0gMCkgewogICBpbnQgc2VhdE51bWJlcjsKICAgY2hhciBzdGF0dXNbMjBdOwogICBjaGFyIG5hbWVbMTAwXSA9ICIiOwoKICAgaWYgKHN0cnN0cihsaW5lLCAiQm9va2VkIGJ5IikpIHsKICAgIHNzY2FuZihsaW5lLCAiU2VhdCAlZDogQm9va2VkIGJ5ICVzIiwgJnNlYXROdW1iZXIsIG5hbWUpOwogICAgbW92aWVzW21vdmllSW5kZXhdLnNlYXRzW3NlYXROdW1iZXIgLSAxXS5ib29rZWQgPSAxOwogICAgc3RyY3B5KG1vdmllc1ttb3ZpZUluZGV4XS5zZWF0c1tzZWF0TnVtYmVyIC0gMV0uY3VzdG9tZXJOYW1lLCBuYW1lKTsKICAgfQogICBlbHNlIHsKICAgIHNzY2FuZihsaW5lLCAiU2VhdCAlZDogJXMiLCAmc2VhdE51bWJlciwgc3RhdHVzKTsKICAgIG1vdmllc1ttb3ZpZUluZGV4XS5zZWF0c1tzZWF0TnVtYmVyIC0gMV0uYm9va2VkID0gMDsKICAgIHN0cmNweShtb3ZpZXNbbW92aWVJbmRleF0uc2VhdHNbc2VhdE51bWJlciAtIDFdLmN1c3RvbWVyTmFtZSwgIiIpOwogICB9CiAgfQogfQogZmNsb3NlKGZpbGUpOwp9CgppbnQgbWFpbigpIHsKIGludCBjaG9pY2U7CiBpbnQgbW92aWVDaG9pY2U7CgogcHJpbnRmKCJNYWpvaSBtb3ZpZXMgdGlja2V0IGJvb2tpbmcgc3lzdGVtXG4iKTsKIGxvYWREYXRhKG1vdmllcyk7IC8vQyBCOUMgQjhCK0MgQjhCJUMgQjhDIEI4QyBCOUMgQjggQyBCOEIhQyBCOEI5QyBCOEIlQyBCOEMgQjhCMkMgQjhDIEI5QyBCOEMgQjhCJUMgQjlDIEI4QyBCOEI1QyBCOUMgQjhDIEI4QjFDIEI4QyBCOEMgQjhCNkMgQjhDIEI5QyBCOEInQyBCOQoKIHdoaWxlICgxKSB7CiAgcHJpbnRmKCJcbnwgIC0tIE1haW4gbWVudSAtLSAgfFxufCAgICAgICAgICAgICAgICAgICB8XG58IDEuIFRpY2tldCBib29raW5nIHwiKTsKICBwcmludGYoIlxufCAyLiBTZWF0IGF2YWlsYWJsZSB8XG58IDMuIENhbmNlbCBib29raW5nIHxcbnwgNC4gc2VhcmNoIGJvb2tpbmcgfCIpOwogIHByaW50ZigiXG58IDUuIEV4aXQgICAgICAgICAgIHxcblNlbGVjdCBtZW51ICgxLTQpOiAiKTsKICBzY2FuZigiJWQiLCAmY2hvaWNlKTsKCiAgc3dpdGNoIChjaG9pY2UpIHsKICBjYXNlIDE6CiAgIGRpc3BsYXlNb3ZpZXMobW92aWVzKTsKICAgcHJpbnRmKCJcblNlbGVjdCBtb3ZpZSAoMS0lZCk6IFxuIiwgTUFYX01PVklFUyk7CiAgIHNjYW5mKCIlZCIsICZtb3ZpZUNob2ljZSk7CiAgIGlmIChtb3ZpZUNob2ljZSA8IDEgfHwgbW92aWVDaG9pY2UgPiBNQVhfTU9WSUVTKSB7CiAgICBwcmludGYoIlxuU2VsZWN0aW9uIGZhaWxlZCFcbiIpOwogICB9CiAgIGVsc2UgewogICAgYm9va1RpY2tldCgmbW92aWVzW21vdmllQ2hvaWNlIC0gMV0pOwogICB9CiAgIGJyZWFrOwoKICBjYXNlIDI6CiAgIGRpc3BsYXlNb3ZpZXMobW92aWVzKTsKICAgcHJpbnRmKCJcblNlbGVjdCBtb3ZpZSAoMS0lZCk6IFxuIiwgTUFYX01PVklFUyk7CiAgIHNjYW5mKCIlZCIsICZtb3ZpZUNob2ljZSk7CiAgIGlmIChtb3ZpZUNob2ljZSA8IDEgfHwgbW92aWVDaG9pY2UgPiBNQVhfTU9WSUVTKSB7CiAgICBwcmludGYoIlxuU2VsZWN0aW9uIGZhaWxlZCFcbiIpOwogICB9CiAgIGVsc2UgewogICAgY2hlY2tTZWF0U3RhdHVzKCZtb3ZpZXNbbW92aWVDaG9pY2UgLSAxXSk7CiAgIH0KICAgYnJlYWs7CgogIGNhc2UgMzoKICAgZGlzcGxheU1vdmllcyhtb3ZpZXMpOwogICBwcmludGYoIlxuU2VsZWN0IG1vdmllICgxLSVkKTogXG4iLCBNQVhfTU9WSUVTKTsKICAgc2NhbmYoIiVkIiwgJm1vdmllQ2hvaWNlKTsKICAgaWYgKG1vdmllQ2hvaWNlIDwgMSB8fCBtb3ZpZUNob2ljZSA+IE1BWF9NT1ZJRVMpIHsKICAgIHByaW50ZigiXG5TZWxlY3Rpb24gZmFpbGVkIVxuIik7CiAgIH0KICAgZWxzZSB7CiAgICBjYW5jZWxCb29raW5nKCZtb3ZpZXNbbW92aWVDaG9pY2UgLSAxXSk7CiAgIH0KICAgYnJlYWs7CgogIGNhc2UgNDoKICAgc2VhcmNoQm9va2luZyhtb3ZpZXMpOwogICBicmVhazsKCiAgY2FzZSA1OgogICBzYXZlRGF0YShtb3ZpZXMpOy8vQyBCOUMgQjhDIEI4QyBCOEMgQjlDIEI4IEMgQjhCIUMgQjhCOUMgQjhCJQogICBwcmludGYoIlxuVGhhbmsgeW91IEp1Ymp1YiFcbiIpOwogICByZXR1cm4gMDsKCiAgZGVmYXVsdDoKICAgcHJpbnRmKCJcblBsZWFzZSBzZWxlY3QgbWVudSBhZ2FpbiAoMS00KVxuIik7CiAgfQogfQp9
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_SEATS 30
#define MAX_MOVIES 4
#define MAX_BOOKING 4
#define rows 5
#define cols 6
//Ticket
struct Ticket {
char customerName[100];
int booked;
};
//Movie
struct Movie {
char movieName[50];
struct Ticket seats[MAX_SEATS];
};
struct Movie movies[MAX_MOVIES] = {{"CPE Adventure"},{"Mufasa: The Lion King"},{"Ratatouille"},{"Avengers: Endgame"}};
//Movie list
void displayMovies(struct Movie movies[]) {
printf("\n-- Movies list --\n");
for (int i = 0; i < MAX_MOVIES; i++) {
printf("\n%d. %s\n", i + 1, movies[i].movieName);
}
}
// Seat booking
void bookTicket(struct Movie *movie) {
int col;
int numtickets;
char name[50];
char rowchar;
//Display seat
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
int seatIndex = row * cols + col;
if (seatIndex >= MAX_SEATS) break;
char rowChar = 'A' + row;
printf("%c%d(", rowChar, col + 1);
if (movie->seats[seatIndex].booked) printf("XX");
else printf("");
printf(")\t");
}
printf("\n\n");
}
printf("How many tickets do you want : ");
scanf("%d", &numtickets);
if (numtickets < 1 || numtickets > MAX_SEATS) {
printf("Invalid number of seats!\n");
return;
}
printf("Enter your name : ");
scanf(" %[^\n]", name); //C B8B#C B8B1C B8C B8C B9C B8B2C B8C B8B7C B9C B8
for (int i = 0; i < numtickets; i++) {
printf("\nBooking seat %d \n", i + 1);
printf("Enter seat (Ex:A1): ");
scanf(" %c%d", &rowchar, &col);
rowchar = toupper(rowchar);
int row = rowchar - 'A';
if (row < 0 || row >= rows || col < 1 || col > cols) {
printf("\nInvalid seat!\n");
continue;
}
int seatIndex = row * cols + (col - 1);
if (movie->seats[seatIndex].booked) {
printf("\nSeat %c%d already booked!\n", rowchar, col);
continue;
}
movie->seats[seatIndex].booked = 1;
strcpy(movie->seats[seatIndex].customerName, name);
printf("Seat %c%d reserved for %s\n", rowchar, col, name);
}
}
//Cancel booking
void cancelBooking(struct Movie *movie) {
int col;
int numtickets;
char name[50];
char rowchar;
//Display seat
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
int seatIndex = row * cols + col;
if (seatIndex >= MAX_SEATS) {
break;
}
char rowChar = 'A' + row; // C B9C B8C B8B%C B8C B9C B8B%C B8C B9C B8C B8B'C B9C B8C B9C B8C B8C B8B1C B8B'C B8 C B8B1C B8C B8B)C B8B# A, B, C, ...
printf("%c%d(", rowChar, col + 1);
if (movie->seats[seatIndex].booked) {
printf("XX");
}
else {
printf("");
}
printf(")\t");
}
printf("\n\n"); // C B8C B8B6C B9C B8C B8C B8B#C B8B#C B8C B8B1C B8C B9C B8B+C B8B!C B9C B9C B8B!C B8B7C B9C B8 C B8C B8 1 C B9C B8C B8B'
}
printf("\nPlease enter seat number to cancel (Ex : A1): \n");
scanf(" %c%d", &rowchar, &col);
rowchar = toupper(rowchar);
int row = rowchar - 'A';
if (row < 0 || row >= rows || col < 1 || col > cols) {
printf("Invalid seat!\n");
return;
}
int seatIndex = row * cols + (col - 1);
if (movie->seats[seatIndex].booked == 0) {
printf("Seat is available!\n");
return;
}
else {
movie->seats[seatIndex].booked = 0;
strcpy(movie->seats[seatIndex].customerName, ""); // C B8B%C B8C B8C B8B7C B9C B8 C B8B%C B8B9C B8C B8C B9C B8B2
printf("Seat %c%d successfully cancel\n", rowchar, col);
}
}
//Seat available
void checkSeatStatus(struct Movie *movie) {
printf("\nCheck seat available (%s)\n\n", movie->movieName);
//Display seat
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
int seatIndex = row * cols + col;
if (seatIndex >= MAX_SEATS) {
break;
}
char rowChar = 'A' + row; // C B9C B8C B8B%C B8C B9C B8B%C B8C B9C B8C B8B'C B9C B8C B9C B8C B8C B8B1C B8B'C B8 C B8B1C B8C B8B)C B8B# A, B, C, ...
printf("%c%d(", rowChar, col + 1);
if (movie->seats[seatIndex].booked) {
printf("XX");
}
else {
printf("");
}
printf(")\t");
}
printf("\n\n"); // C B8C B8B6C B9C B8C B8C B8B#C B8B#C B8C B8B1C B8C B9C B8B+C B8B!C B9C B9C B8B!C B8B7C B9C B8 C B8C B8 1 C B9C B8C B8B'
}
}
// Search bookings
void searchBooking(struct Movie movies[]) {
int found = 0;
char searchName[100];
printf("Enter customer name to search : ");
scanf(" %[^\n]", searchName);
printf("\n--- Bookings for | %s | ---\n", searchName);
for (int i = 0; i < MAX_MOVIES; i++) {
for (int j = 0; j < MAX_SEATS; j++) {
if (movies[i].seats[j].booked && strcmp(movies[i].seats[j].customerName, searchName) == 0) {
int row = j / cols;
int col = j % cols;
printf("\n------------------------------\n");
printf("\nMovie: %s \n", movies[i].movieName);
printf("Seat: %c%d\n ", 'A' + row, col + 1);
printf("\n------------------------------\n");
found = 1;
}
}
}
if (!found) {
printf("No bookings found for | %s |.\n", searchName);
}
}
//Save data
void saveData(struct Movie movies[]) {
FILE *file = fopen("ticketfinal.txt", "w");//C B9C B8C B8C B9C B8C B9C B8C B8B%C B9C B8C B8B7C B9C B8 ticketfinal.txt
if (file == NULL) {
printf("Error opening file for writing!\n");
return;
}
for (int i = 0; i < MAX_MOVIES; i++) {
fprintf(file, "Movie: %s\n", movies[i].movieName);
for (int j = 0; j < MAX_SEATS; j++) {
if (movies[i].seats[j].booked) {
fprintf(file, "Seat %d: Booked by %s\n", j + 1, movies[i].seats[j].customerName);
}
else {
fprintf(file, "Seat %d: Free\n", j + 1);
}
}
fprintf(file, "------------------------------------------------------\n");
}//C B9C B8C B9C B8C B8C B8B1C B8B'C B8C B8B1C B9C B8C B8B#C B8B0C B8B+C B8B'C B9C B8B2C B8C B9C B8C B9C B8B%C B8B0C B9C B8B#C B8B7C B9C B8 C B8
fclose(file);
printf("Data saved successfully to ticketfinal.txt!\n");
}
// Load data
void loadData(struct Movie movies[]) {
FILE *file = fopen("ticketfinal.txt", "r");
if (file == NULL) {
printf("");
return;
}
char line[200];
int movieIndex = -1;
while (fgets(line, sizeof(line), file)) {
if (strncmp(line, "Movie:", 6) == 0) {
movieIndex++;
}
else if (strncmp(line, "Seat", 4) == 0 && movieIndex >= 0) {
int seatNumber;
char status[20];
char name[100] = "";
if (strstr(line, "Booked by")) {
sscanf(line, "Seat %d: Booked by %s", &seatNumber, name);
movies[movieIndex].seats[seatNumber - 1].booked = 1;
strcpy(movies[movieIndex].seats[seatNumber - 1].customerName, name);
}
else {
sscanf(line, "Seat %d: %s", &seatNumber, status);
movies[movieIndex].seats[seatNumber - 1].booked = 0;
strcpy(movies[movieIndex].seats[seatNumber - 1].customerName, "");
}
}
}
fclose(file);
}
int main() {
int choice;
int movieChoice;
printf("Majoi movies ticket booking system\n");
loadData(movies); //C B9C B8B+C B8B%C B8C B8C B9C B8 C B8B!C B8B9C B8B%C B8C B8B2C B8C B9C B8C B8B%C B9C B8C B8B5C B9C B8C B8B1C B8C B8C B8B6C B8C B9C B8B'C B9
while (1) {
printf("\n| -- Main menu -- |\n| |\n| 1. Ticket booking |");
printf("\n| 2. Seat available |\n| 3. Cancel booking |\n| 4. search booking |");
printf("\n| 5. Exit |\nSelect menu (1-4): ");
scanf("%d", &choice);
switch (choice) {
case 1:
displayMovies(movies);
printf("\nSelect movie (1-%d): \n", MAX_MOVIES);
scanf("%d", &movieChoice);
if (movieChoice < 1 || movieChoice > MAX_MOVIES) {
printf("\nSelection failed!\n");
}
else {
bookTicket(&movies[movieChoice - 1]);
}
break;
case 2:
displayMovies(movies);
printf("\nSelect movie (1-%d): \n", MAX_MOVIES);
scanf("%d", &movieChoice);
if (movieChoice < 1 || movieChoice > MAX_MOVIES) {
printf("\nSelection failed!\n");
}
else {
checkSeatStatus(&movies[movieChoice - 1]);
}
break;
case 3:
displayMovies(movies);
printf("\nSelect movie (1-%d): \n", MAX_MOVIES);
scanf("%d", &movieChoice);
if (movieChoice < 1 || movieChoice > MAX_MOVIES) {
printf("\nSelection failed!\n");
}
else {
cancelBooking(&movies[movieChoice - 1]);
}
break;
case 4:
searchBooking(movies);
break;
case 5:
saveData(movies);//C B9C B8C B8C B8C B9C B8 C B8B!C B8B9C B8B%
printf("\nThank you Jubjub!\n");
return 0;
default:
printf("\nPlease select menu again (1-4)\n");
}
}
}