m0_74211124 2023-05-19 13:03 采纳率: 100%
浏览 223
已结题

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

img


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

  • 写回答

3条回答 默认 最新

  • Watch the clown 2023-05-19 17:15
    关注

    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;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月27日
  • 已采纳回答 5月19日
  • 创建了问题 5月19日