55555

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX_LEN 100

// 用户信息结构体

typedef struct {

    int id;

    char username[MAX_LEN];

    char password[MAX_LEN];

    char contact[MAX_LEN];

} User;

// 链表节点结构体

typedef struct Node {

    User user;

    struct Node* next;

} Node;

// 读取.csv文件中的用户信息并加载到链表中

Node* loadUsersFromCSV(const char* filename) {

    FILE* file = fopen(filename, "r");

    if (file == NULL) {

        printf("Failed to open file: %s\n", filename);

        return NULL;

    }

    char line[MAX_LEN];

    Node* head = NULL;

    Node* tail = NULL;

    while (fgets(line, sizeof(line), file) != NULL) {

        // 解析CSV行

        char* token;

        char* rest = line;

        int field = 0;

        Node* newNode = (Node*)malloc(sizeof(Node));

        newNode->next = NULL;

        while ((token = strtok_r(rest, ",", &rest))) {

            switch (field) {

                case 0:

                    newNode->user.id = atoi(token);

                    break;

                case 1:

                    strcpy(newNode->user.username, token);

                    break;

                case 2:

                    strcpy(newNode->user.password, token);

                    break;

                case 3:

                    strcpy(newNode->user.contact, token);

                    break;

                default:

                    break;

            }

            field++;

        }

        if (head == NULL) {

            head = newNode;

            tail = newNode;

        } else {

            tail->next = newNode;

            tail = newNode;

        }

    }

    fclose(file);

    return head;

}

// 在链表中查找指定ID的用户

Node* findUser(Node* head, int id) {

    Node* current = head;

    while (current != NULL) {

        if (current->user.id == id) {

            return current;

        }

        current = current->next;

    }

    return NULL;

}

// 添加用户到链表

void addUser(Node** head, User newUser) {

    Node* newNode = (Node*)malloc(sizeof(Node));

    newNode->user = newUser;

    newNode->next = *head;

    *head = newNode;

    printf("User added successfully.\n");

}

// 从链表中删除指定ID的用户

void deleteUser(Node** head, int id) {

    Node* current = *head;

    Node* prev = NULL;

    while (current != NULL) {

        if (current->user.id == id) {

            if (prev == NULL) {

                *head = current->next;

            } else {

                prev->next = current->next;

            }

            free(current);

            printf("User deleted successfully.\n");

            return;

        }

        prev = current;

        current = current->next;

    }

    printf("User not found.\n");

}

// 修改链表中指定ID的用户信息

void modifyUser(Node* head, int id, User modifiedUser) {

    Node* userNode = findUser(head, id);

    if (userNode != NULL) {

        userNode->user = modifiedUser;

        printf("User modified successfully.\n");

    } else {

        printf("User not found.\n");

    }

}

// 将链表中的用户信息写入.csv文件

void saveUsersToCSV(const char* filename, Node* head) {

    FILE* file = fopen(filename, "w");

    if (file == NULL) {

        printf("Failed to open file: %s\n", filename);

        return;

    }

    Node* current = head;

    while (current != NULL) {

        fprintf(file, "%d,%s,%s,%s\n", current->user.id, current->user.username, current->user.password, current->user.contact);

        current = current->next;

    }

    fclose(file);

    printf("User information saved successfully.\n");

}

// 释放链表内存

void freeList(Node* head) {

    Node* current = head;

    while (current != NULL) {

        Node* temp = current;

        current = current->next;

        free(temp);

    }

}

int main() {

    const char* filename = "users.csv";

    Node* userList = loadUsersFromCSV(filename);

    if (userList == NULL) {

        printf("No user information found.\n");

        return 0;

    }

    int choice;

    int id;

    User newUser;

    User modifiedUser;

    do {

        printf("\nUser Management System\n");

        printf("1. Add User\n");

        printf("2. Delete User\n");

        printf("3. Modify User\n");

        printf("4. Search User\n");

        printf("5. Save User Information\n");

        printf("6. Exit\n");

        printf("Enter your choice: ");

        scanf("%d", &choice);

        switch (choice) {

            case 1:

                printf("Enter user ID: ");

                scanf("%d", &newUser.id);

                printf("Enter username: ");

                scanf("%s", newUser.username);

                printf("Enter password: ");

                scanf("%s", newUser.password);

                printf("Enter contact: ");

                scanf("%s", newUser.contact);

                addUser(&userList, newUser);

                break;

            case 2:

                printf("Enter user ID to delete: ");

                scanf("%d", &id);

                deleteUser(&userList, id);

                break;

            case 3:

                printf("Enter user ID to modify: ");

                scanf("%d", &id);

                printf("Enter new username: ");

                scanf("%s", modifiedUser.username);

                printf("Enter new password: ");

                scanf("%s", modifiedUser.password);

                printf("Enter new contact: ");

                scanf("%s", modifiedUser.contact);

                modifyUser(userList, id, modifiedUser);

                break;

            case 4:

                printf("Enter user ID to search: ");

                scanf("%d", &id);

                Node* userNode = findUser(userList, id);

                if (userNode != NULL) {

                    printf("User found:\n");

                    printf("ID: %d\n", userNode->user.id);

                    printf("Username: %s\n", userNode->user.username);

                    printf("Password: %s\n", userNode->user.password);

                    printf("Contact: %s\n", userNode->user.contact);

                } else {

                    printf("User not found.\n");

                }

                break;

            case 5:

                saveUsersToCSV(filename, userList);

                break;

            case 6:

                printf("Exiting program.\n");

                break;

            default:

                printf("Invalid choice. Please try again.\n");

                break;

        }

    } while (choice != 6);

    freeList(userList);

    return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值