94 lines
2.7 KiB
C
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;
|
|
} |