根据用户输入的账号和密码,判断用户是否合法,如果是合法用户则记录用户的账号、上机时间,如果为非法用户则提示账号或密码错误,请重试。用户上机结束后,记录用户的下机时间,并计算费用(设每小时时间费用为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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: