#include <stdio.h>#include <stdlib.h>#include <string.h>//定义用户结构体typedef struct User { char username[20]; char password[20]; struct User *next;} User;//定义用户链表头结点User *head;//打印菜单void printMenu() { printf("\n**********欢迎使用登录注册系统**********\n"); printf("1.注册\n"); printf("2.登录\n"); printf("0.退出\n"); printf("请选择操作:");}//判断用户名是否已存在,存在返回1,不存在返回0int isExistUsername(char *username) { User *p = head; while (p != NULL) { if (strcmp(p->username, username) == 0) { return 1; } p = p->next; } return 0;}//注册void registerUser() { printf("\n**********注册**********\n"); //输入用户名和密码 char username[20], password[20]; printf("请输入用户名(不超过20个字符):"); scanf("%s", username); if (isExistUsername(username)) { printf("用户名已存在,请重新输入!\n"); return; } printf("请输入密码(不超过20个字符):"); scanf("%s", password); //创建新用户节点 User *newUser = (User *) malloc(sizeof(User)); strcpy(newUser->username, username); strcpy(newUser->password, password); newUser->next = NULL; //将新用户加入到链表尾部 if (head == NULL) { head = newUser; } else { User *p = head; while (p->next != NULL) { p = p->next; } p->next = newUser; } printf("注册成功!\n");}//登录void loginUser() { printf("\n**********登录**********\n"); //输入用户名和密码 char username[20], password[20]; printf("请输入用户名:"); scanf("%s", username); printf("请输入密码:"); scanf("%s", password); //遍历链表,查找是否有匹配的用户 User *p = head; while (p != NULL) { if (strcmp(p->username, username) == 0 && strcmp(p->password, password) == 0) { printf("登录成功!\n"); return; } p = p->next; } //没有匹配的用户 printf("用户名或密码错误,登录失败!\n");}int main() { head = NULL; while (1) { printMenu(); int choice; scanf("%d", &choice); switch (choice) { case 1: registerUser(); break; case 2: loginUser(); break; case 0: printf("谢谢使用,再见!\n"); return 0; default: printf("输入有误,请重新选择!\n"); break; } } return 0;}
c语言链表实现登录注册
于 2023-04-13 10:06:38 首次发布