用c语言设计程序模拟电影院售票系统

img


已知某电影院有5个放映厅,请模拟实现电影放映排片和观众购票。系统要求对文件中所存储的票务信息进行各种常规操作,如:查询、计算、显示等功能。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些算法思想的应用。

img

我帮你写了一个代码,但是总觉得在c语言中太麻烦了,不如用c++加一个后台数据库存储影片记录:

#include <stdio.h>
#include <string.h>

#define MAX_USER 100
#define MAX_ROOM 5
#define ROW 10
#define COL 10

struct user {
    char username[20];
    char password[20];
};

struct movie {
    char name[50];
    char date[20];
    char time[20];
    int adult_price;
    int child_price;
    int adult_num[ROW][COL];
    int child_num[ROW][COL];
};

struct user users[MAX_USER];
struct movie movies[MAX_ROOM];

void init_users() {
    for (int i = 0; i < MAX_USER; i++) {
        strcpy(users[i].username, "");
        strcpy(users[i].password, "");
    }
}

void init_movies() {
    for (int i = 0; i < MAX_ROOM; i++) {
        strcpy(movies[i].name, "");
        strcpy(movies[i].date, "");
        strcpy(movies[i].time, "");
        movies[i].adult_price = 0;
        movies[i].child_price = 0;

        for (int j = 0; j < ROW; j++) {
            for (int k = 0; k < COL; k++) {
                movies[i].adult_num[j][k] = 0;
                movies[i].child_num[j][k] = 0;
            }
        }
    }
}

int find_user(char* username) {
    for (int i = 0; i < MAX_USER; i++) {
        if (strcmp(users[i].username, username) == 0) {
            return i;
        }
    }

    return -1;
}

int register_user() {
    char username[20], password[20];
    int i;

    printf("请输入用户名:");
    scanf("%s", username);

    i = find_user(username);

    if (i != -1) {
        printf("用户名已存在,请重新输入!\n");
        return 0;
    }

    for (i = 0; i < MAX_USER; i++) {
        if (strcmp(users[i].username, "") == 0) {
            strcpy(users[i].username, username);
            printf("请输入密码:");
            scanf("%s", password);
            strcpy(users[i].password, password);
            printf("注册成功!\n");
            return 1;
        }
    }

    printf("用户数量已达到上限,无法注册!\n");
    return 0;
}

int login() {
    char username[20], password[20];
    int index;

    printf("请输入用户名:");
    scanf("%s", username);

    index = find_user(username);

    if (index == -1) {
        printf("用户名不存在,请重新输入!\n");
        return 0;
    }

    printf("请输入密码:");
    scanf("%s", password);

    if (strcmp(users[index].password, password) != 0) {
        printf("密码错误,请重新输入!\n");
        return 0;
    }

    printf("登录成功!\n");
    return 1;
}

void print_movies() {
    int i, j, k;

    for (i = 0; i < MAX_ROOM; i++) {
        if (strcmp(movies[i].name, "") != 0) {
            printf("放映厅%d:\n", i + 1);
            printf("电影名称:%s\n", movies[i].name);
            printf("放映日期:%s\n", movies[i].date);
            printf("放映时间:%s\n", movies[i].time);
            printf("成人票价格:%d元\n", movies[i].adult_price);
            printf("儿童票价格:%d元\n", movies[i].child_price);
            printf("放映厅座位图:\n");

            for (j = 0; j < ROW; j++) {
                for (k = 0; k < COL; k++) {
                    printf("%d ", movies[i].adult_num[j][k] + movies[i].child_num[j][k]);
                }

                printf("\\n");
            }

            printf("=================================\n");
        }
    }
}

void print_room_status() {
    int i, j, k, room;
    char date[20], time[20];

    printf("请输入放映厅号:");
    scanf("%d", &room);

    printf("请输入日期:");
    scanf("%s", date);

    printf("请输入时间:");
    scanf("%s", time);

    if (room < 1 || room > MAX_ROOM) {
        printf("放映厅号输入有误,请重新输入!\n");
        return;
    }

    for (i = 0; i < MAX_ROOM; i++) {
        if (strcmp(movies[i].date, date) == 0 && strcmp(movies[i].time, time) == 0) {
            if (i == room - 1) {
                printf("放映厅%d:%s %s 售票情况:\n", room, date, time);

                for (j = 0; j < ROW; j++) {
                    for (k = 0; k < COL; k++) {
                        printf("%d ", movies[i].adult_num[j][k] + movies[i].child_num[j][k]);
                    }

                    printf("\n");
                }

                printf("=================================\n");
                return;
            }
        }
    }

    printf("未找到指定的放映厅和时间,请重新输入!\n");
}

int main() {
    int i, choice, result;
    char username[20], password[20];

    init_users();
    init_movies();

    while (1) {
        printf("欢迎来到电影售票系统!\n");
        printf("请选择操作:\n");
        printf("1. 用户注册\n");
        printf("2. 密码登录\n");
        printf("3. 查看电影排片信息\n");
        printf("4. 查看放映厅售票情况\n");
        printf("5. 退出系统\n");
        printf("请选择:");

        if (scanf("%d", &choice) != 1) {
            printf("选择错误,请重新选择!\n");
            getchar();
            continue;
        }

        switch (choice) {
            case 1:
                register_user();
                break;
            case 2:
                result = login();

                if (result == 1) {
                    while (1) {
                        printf("请选择操作:\n");
                        printf("1. 查看电影排片信息\n");
                        printf("2. 查看放映厅售票情况\n");
                        printf("3. 登出系统\n");
                        printf("请选择:");

                        if (scanf("%d", &choice) != 1) {
                            printf("选择错误,请重新选择!\n");
                            getchar();
                            continue;
                        }

                        switch (choice) {
                            case 1:
                                print_movies();
                                break;
                            case 2:
                                print_room_status();
                                break;
                            case 3:
                                printf("退出登录!\n");
                                break;
                            default:
                                printf("选择错误,请重新选择!\n");
                                break;
                        }

                        if (choice == 3) {
                            break;
                        }
                    }
                }

                break;
            case 3:
                printf("电影排片信息:\n");

                for (i = 0; i < MAX_ROOM; i++) {
                    if (strcmp(movies[i].name, "") != 0) {
                        printf("放映厅%d:%s %s\n", i + 1, movies[i].date, movies[i].time);
                    }
                }

                printf("=================================\n");
                break;
            case 4:
                printf("请先登录系统!\n");
                break;
            case 5:
                printf("退出系统!\n");
                return 0;
            default:
                printf("选择错误,请重新选择!\n");
                break;
        }
    }

    return 0;
}


https://blog.csdn.net/WZRbeliever/article/details/125553819

基于new bing的思路模块参考:

  1. 读取文件模块:负责读取放映信息和票务信息文件,并将读取的数据存储到对应的数组中。
  1. 登录模块:实现管理员和普通观众的登录功能,确认身份后进入相应的操作界面。
  1. 管理员操作模块:包括查找、增加、删除和修改放映信息;统计某部电影当天的票房;对当天的票房进行排序。管理员的操作需要更新放映信息和票务信息数组,并在程序结束时更新保存至文件中。
  1. 普通观众操作模块:包括浏览排片信息;查看每个放映厅的售票情况;选座购票;售票和退票;查看历史购票记录。普通观众的操作需要更新票务信息数组,并在程序结束时更新保存至文件中。
  1. 菜单选择模块:提供菜单选择项,如角色选择、时间选择、功能选择等,方便用户进行操作。
  1. 输入检查和异常处理模块:对于用户的输入进行一定的正确性检查,避免出现不合理的输入导致程序崩溃或出错。
  1. 保存文件模块:保存更新后的放映信息和票务信息到相应的文件中。