c语言机房上机模拟系统

根据用户输入的账号和密码,判断用户是否合法,如果是合法用户则记录用户的账号、上机时间,如果为非法用户则提示账号或密码错误,请重试。用户上机结束后,记录用户的下机时间,并计算费用(设每小时时间费用为1元)。


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

#define MAX_USERS 100
#define MAX_NAME_LENGTH 20
#define MAX_PASSWORD_LENGTH 20

typedef struct {
    char name[MAX_NAME_LENGTH];
    char password[MAX_PASSWORD_LENGTH];
    time_t login_time;
    time_t logout_time;
    int logged_in;
} user_t;

user_t users[MAX_USERS];
int num_users = 0;

int login(char *name, char *password) {
    int i;
    for (i = 0; i < num_users; i++) {
        if (strcmp(users[i].name, name) == 0 && strcmp(users[i].password, password) == 0) {
            if (users[i].logged_in) {
                printf("Error: User %s is already logged in.\n", name);
                return 0;
            } else {
                users[i].logged_in = 1;
                users[i].login_time = time(NULL);
                printf("Welcome, %s! You are now logged in.\n", name);
                return 1;
            }
        }
    }
    printf("Error: Invalid username or password. Please try again.\n");
    return 0;
}

void logout(char *name) {
    int i;
    for (i = 0; i < num_users; i++) {
        if (strcmp(users[i].name, name) == 0 && users[i].logged_in) {
            users[i].logged_in = 0;
            users[i].logout_time = time(NULL);
            printf("Goodbye, %s! You have been logged out.\n", name);
            int duration = (int)difftime(users[i].logout_time, users[i].login_time);
            int cost = duration / 3600;
            if (duration % 3600 != 0) {
                cost++;
            }
            printf("Your total cost is %d yuan.\n", cost);
            return;
        }
    }
    printf("Error: User %s is not logged in.\n", name);
}

int main() {
    // Add some sample users
    strcpy(users[0].name, "alice");
    strcpy(users[0].password, "password1");
    users[0].logged_in = 0;
    num_users++;
    strcpy(users[1].name, "bob");
    strcpy(users[1].password, "password2");
    users[1].logged_in = 0;
    num_users++;

    // Loop until the user quits
    while (1) {
        char name[MAX_NAME_LENGTH];
        char password[MAX_PASSWORD_LENGTH];
        printf("Enter your username (or type 'quit' to exit): ");
        scanf("%s", name);
        if (strcmp(name, "quit") == 0) {
            break;
        }
        printf("Enter your password: ");
        scanf("%s", password);
        login(name, password);
        printf("\n");
        // Wait for user to log out
        while (1) {
            char command[MAX_NAME_LENGTH];
            printf("Enter 'logout' to log out: ");
            scanf("%s", command);
            if (strcmp(command, "logout") == 0) {
                logout(name);
                printf("\n");
                break;
            } else {
                printf("Unknown command.\n");
            }
        }
    }

    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^