C语言利用链表与文件实现登录注册功能

C语言利用链表与文件实现登录注册功能攻略

1. 简介

本攻略旨在介绍如何利用链表与文件实现登录注册功能。具体而言,我们将通过C语言实现一个简单的用户登录注册系统,所有用户信息将存储在文件中,并使用链表进行管理。该系统应具有以下功能:

  • 注册新用户;
  • 查询已注册用户;
  • 用户登录;
  • 修改用户密码;
  • 删除用户。

2. 设计

2.1 用户信息结构体

为管理用户信息,我们需要一个结构体来存储用户相关信息,如下所示:

struct user {
    char username[20];
    char password[20];
    struct user *next;
};

其中,username保存用户名称,password保存用户密码,next指向下一个用户信息结点。

2.2 文件管理

我们将用户信息保存在文件中,文件名为user.txt,每行代表一个用户的信息,格式为:

username,password

因此,我们需要针对文件进行以下操作:

  • 读取文件,加载已经注册的用户信息;
  • 写入文件,注册新用户。

2.3 链表管理

为实现对用户信息的管理,我们使用链表对已注册用户进行存储,并进行增删查改等操作。

2.4 用户操作界面

为方便用户使用,我们以命令行方式提供用户操作界面,具体命令及功能如下:

  • register:注册新用户;
  • query:查询已注册用户;
  • login:用户登录;
  • modify:修改用户密码;
  • delete:删除用户。

3. 实现步骤

以下为主要实现步骤:

3.1 文件读取

在程序启动时,读取用户信息文件user.txt,加载已经注册的用户信息到链表中。

void read_users(struct user **head) {
    FILE *fp = fopen("user.txt", "r");
    char buf[50];
    while (fgets(buf, 50, fp)) {
        char* username = strtok(buf, ",");
        char* password = strtok(NULL, ",");
        register_user(head, username, password); // 注册到链表中
    }
    fclose(fp);
}

3.2 注册新用户

用户输入命令register后,用户输入用户名和密码,程序将新用户信息写入文件并写入链表。

void register() {
    struct user *new_user;
    new_user = (struct user *) malloc(sizeof(struct user));
    printf("Input Username: ");
    scanf("%s", new_user->username);
    printf("Input Password: ");
    scanf("%s", new_user->password);
    new_user->next = NULL;
    register_user(&head, new_user->username, new_user->password); // 注册到链表中
    write_user(new_user); // 写入文件
}

3.3 按用户名注册

若用户名已经存在,则注册失败。实现如下:

void register_user(struct user **head, char *username, char *password) {
    struct user *p = *head;
    while (p) {
        if (strcmp(p->username, username) == 0) {
            printf("User already exists!\n");
            return;
        }
        p = p->next;
    }
    struct user *new_user;
    new_user = (struct user *) malloc(sizeof(struct user));
    strcpy(new_user->username, username);
    strcpy(new_user->password, password);
    new_user->next = *head;
    *head = new_user;
}

3.4 查询已注册用户

用户输入命令query后,程序将已注册用户信息输出到屏幕。

void query() {
    struct user *p = head;
    while (p) {
        printf("%s\n", p->username);
        p = p->next;
    }
}

3.5 用户登录

用户输入命令login后,用户输入用户名和密码,程序在链表中查找该用户,若存在则登录成功。

void login() {
    char username[20];
    char password[20];

    printf("Input Username: ");
    scanf("%s", &username);
    printf("Input Password: ");
    scanf("%s", &password);

    struct user *p = head;
    while (p) {
        if (strcmp(p->username, username) == 0 && strcmp(p->password, password) == 0) {
            printf("Login successful!\n");
            return;
        }
        p = p->next;
    }
    printf("Login failed, incorrect username or password.\n");
    return;
}

3.6 修改用户密码

用户输入命令modify后,用户输入要修改密码的用户名和新密码,程序在链表中查找该用户,若存在则将密码修改为新密码。

void modify() {
    char username[20];
    char password[20];

    printf("Input Username: ");
    scanf("%s", &username);
    printf("Input new Password: ");
    scanf("%s", &password);

    struct user *p = head;
    while (p) {
        if (strcmp(p->username, username) == 0) {
            strcpy(p->password, password); // 修改密码
            printf("Password modified successfully!\n");
            return;
        }
        p = p->next;
    }
    printf("User does not exist, password modification failed.\n");
    return;
}

3.7 删除用户

用户输入命令delete后,用户输入要删除的用户名,程序在链表中查找该用户,若存在则将该用户从链表中删除。

void delete() {
    char username[20];

    printf("Input Username to delete: ");
    scanf("%s", &username);

    struct user *p = head;
    struct user *pre = NULL;
    while (p) {
        if (strcmp(p->username, username) == 0) {
            if (pre == NULL) { // 删除表头结点
                head = p->next;
            } else {
                pre->next = p->next;
            }
            printf("User %s deleted successfully!\n", username);
            free(p);
            return;
        }
        pre = p;
        p = p->next;
    }
    printf("User does not exist, delete failed.\n");
    return;
}

4. 示例说明

4.1 示例一

用户登录:

Input Username: alice
Input Password: 123456
Login successful!

修改密码:

Input Username: alice
Input new Password: 111111
Password modified successfully!

4.2 示例二

注册新用户:

Input Username: bob
Input Password: 654321

查询已注册用户:

alice
bob

删除用户:

Input Username to delete: bob
User bob deleted successfully!

5. 总结

本攻略详细介绍了如何利用链表与文件实现登录注册功能。通过实现一个综合性较强的用户登录注册系统,不仅加深了对数据结构的理解,同时对C语言编程能力的提升也有一定的帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言利用链表与文件实现登录注册功能 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Win10键盘大小写切换怎么设置有声音?

    当你在使用Windows 10操作系统时,你可以通过以下步骤设置键盘大小写切换时的声音: 打开“设置”:点击任务栏上的“开始”按钮,然后点击“设置”图标(齿轮状图标)。 进入“时间和语言”设置:在“设置”窗口中,点击“时间和语言”选项。 进入“区域和语言”设置:在“时间和语言”窗口中,点击左侧导航栏中的“区域和语言”选项。 打开“语言首选项”:在“区域和语言…

    other 2023年8月16日
    00
  • Python字符串字母大小写转换的各种情况详析

    Python字符串字母大小写转换的各种情况详析 在Python中,我们可以使用内置的字符串方法来实现字母大小写的转换。下面将详细讲解各种情况下的转换方法,并提供两个示例说明。 1. 将字符串全部转为大写或小写 要将字符串全部转为大写,可以使用upper()方法;要将字符串全部转为小写,可以使用lower()方法。下面是示例代码: string = \&quo…

    other 2023年8月16日
    00
  • win10/win11/Mac苹果电脑IP地址冲突怎么办

    解决Win10/Win11/Mac苹果电脑IP地址冲突的攻略 IP地址冲突是指在同一网络中存在两台或多台设备使用了相同的IP地址,这会导致网络通信故障和连接问题。下面是解决Win10/Win11/Mac苹果电脑IP地址冲突的完整攻略: 步骤1:确认IP地址冲突 首先,我们需要确认是否存在IP地址冲突。在Win10/Win11上,可以通过以下步骤进行确认: 打…

    other 2023年7月30日
    00
  • 未将对象引用设置到对象的实例 (System.NullReferenceException)

    未将对象引用设置到对象的实例 (System.NullReferenceException) 是一种常见的 C# 异常。该异常表示代码中访问了一个空引用对象,即没有被初始化或者已经被销毁的对象。这种异常通常会导致程序崩溃或者导致意外的行为。 以下是处理该异常的完整攻略: 理解 NullReferenceException 异常的原因 相信这个异常很多开发者都…

    other 2023年6月25日
    00
  • 如何压缩体积大的中文字体包

    以下是关于“如何压缩体积大的中文字体包”的完整攻略,包括基本概念、使用方法和两个示例。 基本概念 中文字体包是指包含中文字符的字体文件,通常由多个字体文件组成。由于中文字符数量庞大,中文字体包的体积通常比较大,这会对网页或应用程序的加载速度和性能产生影响。因此,压缩中文字体包是一项重要的优化技术。 使用方法 以下是压缩中文字体包的方法: 删除不必要的字文件:…

    other 2023年5月7日
    00
  • 全网最全最细的jmeter接口测试教程以及接口测试流程(入门教程)

    当然!下面是关于\”全网最全最细的JMeter接口测试教程以及接口测试流程(入门教程)\”的完整攻略,包含两个示例说明。 … … … … … … … … … … … … … … … … … … … … … … … … … … …

    other 2023年8月20日
    00
  • iOS12公测版Beta4描述文件下载地址及安装方法

    iOS 12 公测版 Beta 4 描述文件下载地址及安装方法攻略 iOS 12 公测版 Beta 4 是苹果公司提供给用户测试的最新版本。本攻略将详细介绍如何下载描述文件并安装 iOS 12 公测版 Beta 4。以下是完整的攻略步骤: 步骤一:下载描述文件 打开 Safari 浏览器,访问 Apple Beta Software Program 官方网站…

    other 2023年8月4日
    00
  • mongodb的可视化工具

    MongoDB的可视化工具 MongoDB是一个非常流行的NoSQL数据库,它的结构为非常灵活的文档式存储。但是,MongoDB命令行界面对于很多人来说,操作麻烦不直观。因此,开发了如下几个MongoDB的可视化工具,以提高管理和操作效率。 1. Robo 3T Robo 3T是一款MongoDB的可视化管理软件,可以运行在Windows,Mac OS,Li…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部