#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 用户信息结构体
typedef struct User {
int id;
char username[50];
char password[50];
char phone[20];
char email[50];
struct User* next;
} User;
// 链表头节点
User* head = NULL;
// 从.csv文件中加载用户信息到链表中
void loadUsersFromFile() {
FILE* file = fopen("users.csv", "r");
if (file == NULL) {
printf("Failed to open file.\n");
return;
}
char line[200];
while (fgets(line, sizeof(line), file)) {
User* newUser = (User*)malloc(sizeof(User));
// 使用逗号分隔行中的字段
char* token = strtok(line, ",");
newUser->id = atoi(token);
token = strtok(NULL, ",");
strcpy(newUser->username, token);
token = strtok(NULL, ",");
strcpy(newUser->password, token);
token = strtok(NULL, ",");
strcpy(newUser->phone, token);
token = strtok(NULL, ",");
strcpy(newUser->email, token);
// 插入节点到链表中
if (head == NULL || newUser->id < head->id) {
newUser->next = head;
head = newUser;
} else {
User* current = head;
while (current->next != NULL && current->next->id < newUser->id) {
current = current->next;
}
newUser->next = current->next;
current->next = newUser;
}
}
fclose(file);
}
// 将链表中的用户信息写入.csv文件
void saveUsersToFile() {
FILE* file = fopen("users.csv", "w");
if (file == NULL) {
printf("Failed to open file.\n");
return;
}
User* current = head;
while (current != NULL) {
fprintf(file, "%d,%s,%s,%s,%s\n", current->id, current->username, current->password, current->phone, current->email);
current = current->next;
}
fclose(file);
}
// 打印链表中的用户信息
void printUsers() {
printf("User Information:\n");
User* current = head;
while (current != NULL) {
printf("ID: %d\n", current->id);
printf("Username: %s\n", current->username);
printf("Password: %s\n", current->password);
printf("Phone: %s\n", current->phone);
printf("Email: %s\n", current->email);
printf("\n");
current = current->next;
}
}
// 增加用户信息
void addUser(int id, const char* username, const char* password, const char* phone, const char* email) {
User* newUser = (User*)malloc(sizeof(User));
newUser->id = id;
strcpy(newUser->username, username);
strcpy(newUser->password, password);
strcpy(newUser->phone, phone);
strcpy(newUser->email, email);
if (head == NULL || newUser->id < head->id) {
newUser->next = head;
head = newUser;
}else {
User* current = head;
while (current->next != NULL && current->next->id < newUser->id) {
current = current->next;
}
newUser->next = current->next;
current->next = newUser;
}
}
// 删除用户信息
void deleteUser(int id) {
if (head == NULL) {
printf("User not found.\n");
return;
}
User* current = head;
User* previous = NULL;
while (current != NULL && current->id != id) {
previous = current;
current = current->next;
}
if (current == NULL) {
printf("User not found.\n");
return;
}
if (previous == NULL) {
head = current->next;
} else {
previous->next = current->next;
}
free(current);
}
// 修改用户信息
void updateUser(int id, const char* username, const char* password, const char* phone, const char* email) {
User* current = head;
while (current != NULL && current->id != id) {
current = current->next;
}
if (current == NULL) {
printf("User not found.\n");
return;
}
strcpy(current->username, username);
strcpy(current->password, password);
strcpy(current->phone, phone);
strcpy(current->email, email);
}
// 查找用户信息
User* findUser(int id) {
User* current = head;
while (current != NULL) {
if (current->id == id) {
return current;
}
current = current->next;
}
return NULL;
}
// 显示菜单
void displayMenu() {
printf("Welcome to User Management System\n");
printf("1. Add User\n");
printf("2. Delete User\n");
printf("3. Update User\n");
printf("4. Find User\n");
printf("5. Print Users\n");
printf("6. Exit\n");
printf("Enter your choice: ");
}
int main() {
loadUsersFromFile();
int choice = 0;
while (choice != 6) {
displayMenu();
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1: {
int id;
char username[50];
char password[50];
char phone[20];
char email[50];
printf("Enter ID: ");
scanf("%d", &id);
printf("Enter Username: ");
scanf("%s", username);
printf("Enter Password: ");
scanf("%s", password);
printf("Enter Phone: ");
scanf("%s", phone);
printf("Enter Email: ");
scanf("%s", email);
addUser(id, username, password, phone, email);
printf("User added successfully.\n");
break;
}
case 2: {
int id;
printf("Enter ID: ");
scanf("%d", &id);
deleteUser(id);
printf("User deleted successfully.\n");
break;
}
case 3: {
int id;
char username[50];
char password[50];
char phone[20];
char email[50];
printf("Enter ID: ");
scanf("%d", &id);
printf("Enter New Username: ");
scanf("%s", username);
printf("Enter New Password: ");
scanf("%s", password);
printf("Enter New Phone: ");
scanf("%s", phone);
printf("EnterNew Email: ");
scanf("%s", email);
updateUser(id, username, password, phone, email);
printf("User updated successfully.\n");
break;
}
case 4: {
int id;
printf("Enter ID: ");
scanf("%d", &id);
User* user = findUser(id);
if (user != NULL) {
printf("User found:\n");
printf("ID: %d\n", user->id);
printf("Username: %s\n", user->username);
printf("Password: %s\n", user->password);
printf("Phone: %s\n", user->phone);
printf("Email: %s\n", user->email);
} else {
printf("User not found.\n");
}
break;
}
case 5:
printUsers();
break;
case 6:
printf("Exiting...\n");
break;
default:
printf("Invalid choice. Please try again.\n");
}
printf("\n");
}
// 将修改后的用户信息写入.csv文件
saveUsersToFile();
return 0;
}