// user.c #include "user.h" #include #include #define USER_FILE "users.txt" #define MAX_LINE 256 // 加载所有用户 int load_users(User users[], int max_users) { FILE *fp = fopen(USER_FILE, "r"); if (!fp) return 0; int count = 0; char line[MAX_LINE]; while (fgets(line, sizeof(line), fp) && count < max_users) { User *u = &users[count]; char *p = strtok(line, " \n"); if (!p) continue; strcpy(u->username, p); p = strtok(NULL, " \n"); if (!p) continue; strcpy(u->password, p); u->friend_count = 0; p = strtok(NULL, " \n"); if (p) { char *f = strtok(p, ","); while (f && u->friend_count < MAX_FRIENDS) { strcpy(u->friends[u->friend_count++], f); f = strtok(NULL, ","); } } count++; } fclose(fp); return count; } // 保存所有用户 int save_users(User users[], int user_count) { FILE *fp = fopen(USER_FILE, "w"); if (!fp) return -1; for (int i = 0; i < user_count; i++) { fprintf(fp, "%s %s", users[i].username, users[i].password); for (int j = 0; j < users[i].friend_count; j++) { fprintf(fp, "%c%s", j == 0 ? ' ' : ',', users[i].friends[j]); } fprintf(fp, "\n"); } fclose(fp); return 0; } // 查找用户 int find_user(User users[], int user_count, const char *username) { for (int i = 0; i < user_count; i++) { if (strcmp(users[i].username, username) == 0) return i; } return -1; } // 检查密码 int check_password(User users[], int user_count, const char *username, const char *password) { int idx = find_user(users, user_count, username); if (idx == -1) return 0; return strcmp(users[idx].password, password) == 0; } // 添加用户 int add_user(User users[], int *user_count, const char *username, const char *password) { if (find_user(users, *user_count, username) != -1) return 0; User *u = &users[(*user_count)++]; strcpy(u->username, username); strcpy(u->password, password); u->friend_count = 0; return 1; } // 添加好友 int add_friend(User users[], int user_count, const char *username, const char *friendname) { int idx = find_user(users, user_count, username); int fidx = find_user(users, user_count, friendname); if (idx == -1 || fidx == -1) return 0; User *u = &users[idx]; for (int i = 0; i < u->friend_count; i++) { if (strcmp(u->friends[i], friendname) == 0) return 0; // 已是好友 } if (u->friend_count < MAX_FRIENDS) { strcpy(u->friends[u->friend_count++], friendname); return 1; } return 0; }