Linux/Project/新建文件夹/User.c
2025-06-10 23:43:56 +08:00

94 lines
2.7 KiB
C

// user.c
#include "user.h"
#include <stdio.h>
#include <string.h>
#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;
}