Jianbaiyi 发表于 2023-6-19 10:55:08

注册登录功能没有实现,代码可以运行,不知道那里出错,劳烦各位帮我看看

本帖最后由 Jianbaiyi 于 2023-6-19 16:11 编辑

注册登录功能没有实现,代码可以运行,不能把注册的账号储存在文件中,还可以注册重复账号,其他功能该怎么做到,我用的是vs studio
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#define N 100
#define M 1000
typedef struct userinfo
{
        char Accont; //账号
        char Password;//密码
        char ID; //身份证号
        char People_name;//用户姓名
}USER;
void MainMenu();//登录注册主菜单界面
void Sign_up_Menu();//注册菜单界面
void Log_in_Menu();//登录菜单界面
void BMainMenu();//B端主菜单界面
void CMainMenu();//C端主菜单界面
void Register_system();//用户登记注册菜单函数
void Log_in();//系统用户登录函数
void Sign_in();//新用户注册函数
int sign = 0;
char ACCOUNT;
int main()
{
        int n;
        USER user;
        Register_system();
        return 0;
}
//登录注册主菜单界面
void MainMenu()
{
        system("cls");
        printf("-----------------------------------\n");
        printf("|                                 |\n");
        printf("|欢迎使用ofo共享单车借车系统      |\n");
        printf("|1:用户登录                      |\n");
        printf("|2:用户注册                      |\n");
        printf("|0:退出系统                      |\n");
        printf("|                                 |\n");
        printf("-----------------------------------\n");
}
//B端主菜单界面
void BMainMenu()
{
        system("cls");
        printf("-----------------------------------\n");
        printf("|                                 |\n");
        printf("| 请选择你需要的服务            |\n");
        printf("| 1:按单车号查询               |\n");
        printf("| 2:按借车时间查询               |\n");
        printf("| 3:按照还车时间查询             |\n");
        printf("| 4:按使用者查询               |\n");
        printf("| 0:退出                         |\n");
        printf("|                                 |\n");
        printf("-----------------------------------\n");

}
//C端主菜单界面
void CMainMenu()
{
        system("cls");
        printf("-----------------------------------\n");
        printf("|                                 |\n");
        printf("| 请选择你需要的服务            |\n");
        printf("| 1:租车                         |\n");
        printf("| 2:还车                         |\n");
        printf("| 3:充值                         |\n");
        printf("| 4:余额查询                     |\n");
        printf("| 5:租车查询                     |\n");
        printf("| 0:退出                         |\n");
        printf("|                                 |\n");
        printf("-----------------------------------\n");

}
//注册菜单界面
void Sign_up_Menu()
{
        system("cls");
        printf("-----------------------------------\n");
        printf("|                                 |\n");
        printf("| 请选择你需要的服务            |\n");
        printf("| 1:注册账号                     |\n");
        printf("| 2:返回*用户登录注册界面*       |\n");
        printf("| 0:退出                         |\n");
        printf("|                                 |\n");
        printf("-----------------------------------\n");
}
//登录菜单界面
void Log_in_Menu()
{
        system("cls");
        printf("-----------------------------------\n");
        printf("|                                 |\n");
        printf("| 请选择你需要的服务            |\n");
        printf("| 1:登录账号                     |\n");
        printf("| 2:返回*用户登录注册界面*       |\n");
        printf("| 0:退出                         |\n");
        printf("|                                 |\n");
        printf("-----------------------------------\n");

}

//用户登记注册函数菜单
void Register_system()
{
        int select;
        MainMenu();
        scanf_s("%d", &select);
        switch (select)
        {
        case 0:
                printf("\n成功退出系统!期待你的下次使用O(∩_∩)O ,祝你生活愉快!\n");
                exit(0);
        case 1:
                Log_in();
                return;
        case 2:
                Sign_in();
                return;
        default:
                printf("\n输入错误,输入任意键返回 *登录注册主菜单界面* ...\n");
                scanf_s("%*c%*c");
                system("cls");
                Register_system();
                return;
        }
}

//新用户注册函数
void Sign_in()
{
        int select;
        char Accont, Password1, Password2, ID, People_name;
        FILE* fp;
        Sign_up_Menu();
        if (fopen_s(&fp, "userinfo.dat", "r") != 0)
        {
                printf("无法找到该文件\n");
                exit(0);
        }

        fclose(fp);
        scanf_s("%d", &select);
        switch (select)
        {
        case 1:
                while (1)
                {
                        FILE* fp;
                        int i;
                        char Accont1, password1, ID, People_name;
                        int sign1 = 0;
                        system("cls");
                        printf("请输入注册账号(九位数数字):\n");
                        scanf_s("%s", Accont, N);
                        if (fopen_s(&fp, "userinfo.dat", "r") != 0)
                        {
                                printf("无法找到该文件\n");
                                exit(0);
                        }
                        for (i = 0; Accont != '\0'; i++) // 检查是否为九位账号
                        {
                                if (isdigit(Accont) == 0)// 检查账号是否为数字账号
                                {
                                        sign1 = 1; break;
                                }
                        }
                        if (i >= 10 || sign1 == 1 || i < 9)
                        {
                                sign1 = 1;
                                printf("未按要求注册账号,请重新注册! \n");
                                printf("\n输入任意键返回 *新用户注册界面* ...\n");
                                scanf_s("%*c%*c");
                                fflush(stdin);
                                Sign_in();
                                return;
                        }
                        while (!feof(fp))
                        {
                                fscanf_s(fp, "%s%s   %s%s", &Accont1, &password1, &ID, &People_name);

                                if (strcmp(Accont, Accont1) == 0)
                                {
                                        fclose(fp);
                                        printf("该账号已被注册,请重新注册!\n");
                                        printf("\n输入任意键返回 *新用户注册界面* ...\n");
                                        scanf_s("%*c%*c");
                                        sign1 = 1;
                                        fflush(stdin);
                                        Sign_in();
                                        return;
                                }
                        }
                        fclose(fp);
                        if (i == 9 && sign1 == 0)
                        {
                                printf("注册账号符合要求。\n");
                                break;
                        }
                }
                if (fopen_s(&fp, "userinfo.dat", "a") != 0)
                {
                        printf("无法找到该文件\n");
                        exit(0);
                }
                printf("请输入你的身份证号:\n");
                scanf_s("%s", ID, N);
                printf("请输入你的姓名:\n");
                scanf_s("%s", People_name, N);
                printf("请输入账号密码:\n");
                scanf_s("%s", Password1, N);
                printf("请再次输入密码:\n");
                scanf_s("%s", Password2, N);
                if (strcmp(Password1, Password2) == 0)
                {
                        fprintf(fp, "\n%s%s   %s%s\n", Accont, Password1, ID, People_name);
                        fclose(fp);
                        printf("****新用户创建成功( ̄▽ ̄)**** \n");
                        printf("\n输入任意键返回 *登录注册主菜单界面* ...\n");
                        scanf_s("%*c%*c");
                        system("cls");
                        MainMenu();
                        return;
                }
                else
                {
                        fflush(stdin);
                        printf("\n****两次输入密码不一致!!!! 请重新注册****\n");
                        printf("\n输入任意键返回 *系统用户注册界面* ...\n");
                        scanf_s("%*c%*c");
                        Sign_in();
                        return;
                }
        case 2:
                printf("\n按任意键返回*用户登录注册界面*\n");
                scanf_s("%*c%*c");
                system("cls");
                Register_system();
                return;

        case 0:
                printf("\n成功退出系统!期待你的下次使用O(∩_∩)O,祝你生活愉快!\n");
                exit(0);

        default:
                printf("\n输入错误,无该菜单,输入任意键返回 *系统用户注册界面* ...\n");
                scanf_s("%*c%*c");
                system("cls");
                Sign_in();
                return;
        }

}

//系统用户登录函数
void Log_in()
{
        int select;
        char Accont, Password;
        char Accont1, Password1, ID1, People_name1;
        FILE* fp;
        if (fopen_s(&fp, "userinfo.dat", "a") != 0)
        {
                printf("无法找到该文件\n");
                exit(0);
        }
        fclose(fp);
        Log_in_Menu();
        scanf_s("%d", &select);
        switch (select)
        {
        case 1:
                if (fopen_s(&fp, "userinfo.dat", "r") != 0)
                {
                        printf("无法找到该文件\n");
                        exit(0);
                }
                printf("请输入账号:\n");
                scanf_s("%s", Accont, N);
                printf("请输入密码:\n");
                scanf_s("%s", Password, N);
                while (!feof(fp))
                {
                        fscanf_s(fp, "%s %s", Accont1, Password1);
                        if (strcmp(Accont, "000000") == 0 && strcmp(Password, "000000") == 0)
                        {
                                sign = 1;   //系统管理员标识符
                                fclose(fp);
                                printf("账号登录成功!!尊敬的无敌帅气管理员欢迎你使用\n *欢迎主子使用ofo共享单车借车系统* \n");
                                printf("\n输入任意键前往 *系统管理员功能菜单界面* ...\n");
                                scanf_s("%*c%*c");
                                return;
                        }
                        if (strcmp(Accont, Accont1) == 0 && strcmp(Password, Password1) == 0)
                        {
                                strcpy_s(ACCOUNT, Accont);
                                sign = 2;//普通用户标识符
                                fclose(fp);
                                printf("账号登录成功!!尊敬的用户欢迎你使用 *欢迎使用ofo共享单车借车系统*\n");
                                printf("\n输入任意键前往 *系统用户功能菜单界面* ...\n");
                                scanf_s("%*c%*c");
                        }
                }
        case 2:
                printf("\n按任意键返回*用户登录注册界面*\n");
                scanf_s("%*c%*c");
                system("cls");
                Register_system();
                return;

        case 0:
                printf("\n成功退出系统!期待你的下次使用O(∩_∩)O ,祝你生活愉快!\n");
                exit(0);

        default:
                printf("\n输入错误,输入任意键返回 *登录菜单界面* ...\n");
                scanf_s("%*c%*c");
                system("cls");
                Log_in();

        }
        if (sign == 0)
        {
                printf("账号密码错误!! 请重新输入......\n");
                printf("如若忘记账号密码,请联系管理员\n");
                printf("\n输入任意键返回 *系统用户登录界面* ...\n");
                scanf_s("%*c%*c");
                Log_in();
                return;
        }

}

Jianbaiyi 发表于 2023-6-19 10:57:36

注册登录功能没有实现,代码可以运行,不能把注册的账号储存在文件中,麻烦了

本帖最后由 Jianbaiyi 于 2023-6-19 11:25 编辑

如果能帮我实现其他功能就更好了,我使用的是vs studio

面对巨人 发表于 2023-6-19 15:01:11

{:10_302:}你是不是把帖子的悬赏设置错了,变成别人要看问题还得向你支付鱼币了,这有些大牛都看不到,还要购买主题才能看见

沐雨尘枫 发表于 2023-6-19 15:52:19

1在代码中,你定义了一个USER结构体来表示用户信息,但没有实际的注册逻辑来将新用户的信息存储起来
2在注册功能中,你打开了userinfo.dat文件,但在写入新用户信息之前,没有使用fclose(fp)来关闭文件
3可以注册重复账号:在注册功能中,你并没有检查新注册的账号是否已经存在于文件中。你需要在注册时检查账号是否已经存在,并给出相应的提示或处理。

沐雨尘枫 发表于 2023-6-19 15:54:33

修改后的代码#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#define N 100
#define M 1000

typedef struct userinfo
{
    char Account; // 账号
    char Password; // 密码
    char ID; // 身份证号
    char People_name; // 用户姓名
} USER;

void MainMenu();
void Sign_up_Menu();
void Log_in_Menu();
void Register_system();
void Log_in();
void Sign_in();
int checkDuplicateAccount(const char* account);

int main()
{
    Register_system();
    return 0;
}

void MainMenu()
{
    system("cls");
    printf("-----------------------------------\n");
    printf("|                                 |\n");
    printf("| 欢迎使用ofo共享单车借车系统   |\n");
    printf("| 1:用户登录                     |\n");
    printf("| 2:用户注册                     |\n");
    printf("| 0:退出系统                     |\n");
    printf("|                                 |\n");
    printf("-----------------------------------\n");
}

void Sign_up_Menu()
{
    system("cls");
    printf("-----------------------------------\n");
    printf("|                                 |\n");
    printf("| 请选择你需要的服务            |\n");
    printf("| 1:注册账号                     |\n");
    printf("| 2:返回用户登录注册界面         |\n");
    printf("| 0:退出                         |\n");
    printf("|                                 |\n");
    printf("-----------------------------------\n");
}

void Register_system()
{
    int select;
    MainMenu();
    scanf("%d", &select);
    switch (select)
    {
      case 0:
            printf("\n成功退出系统!期待你的下次使用O(∩_∩)O ,祝你生活愉快!\n");
            exit(0);
      case 1:
            Log_in();
            return;
      case 2:
            Sign_in();
            return;
      default:
            printf("\n输入错误,输入任意键返回登录注册主菜单界面...\n");
            fflush(stdin);
            getchar();
            system("cls");
            Register_system();
            return;
    }
}

void Sign_in()
{
    int select;
    char Account, Password1, Password2, ID, People_name;
    FILE* fp;
    Sign_up_Menu();
    if (fopen_s(&fp, "userinfo.dat", "a") != 0)
    {
      printf("无法找到该文件\n");
      exit(0);
    }
    fclose(fp);
    scanf("%d", &select);
    switch (select)
    {
      case 1:
            while (1)
            {
                FILE* fp;
                int i;
                char Account1, password1, ID, People_name;
                int sign1 = 0;
                system("cls");
                printf("请输入注册账号(九位数数字):\n");
                scanf("%s", Account);
                if (fopen_s(&fp, "userinfo.dat", "r") != 0)
                {
                  printf("无法找到该文件\n");
                  exit(0);
                }
                for (i = 0; Account != '\0'; i++) // 检查是否为九位账号
                {
                  if (!isdigit(Account))// 检查账号是否为数字账号
                  {
                        sign1 = 1;
                        break;
                  }
                }
                if (i >= 10 || sign1 == 1 || i < 9)
                {
                  sign1 = 1;
                  printf("未按要求注册账号,请重新注册! \n");
                  printf("\n输入任意键返回新用户注册界面...\n");
                  fflush(stdin);
                  getchar();
                  Sign_in();
                  return;
                }
                while (!feof(fp))
                {
                  fscanf_s(fp, "%s %s %s %s", Account1, password1, ID, People_name);

                  if (strcmp(Account, Account1) == 0)
                  {
                        fclose(fp);
                        printf("该账号已被注册,请重新注册!\n");
                        printf("\n输入任意键返回新用户注册界面...\n");
                        fflush(stdin);
                        getchar();
                        sign1 = 1;
                        Sign_in();
                        return;
                  }
                }
                fclose(fp);
                if (i == 9 && sign1 == 0)
                {
                  printf("注册账号符合要求。\n");
                  break;
                }
            }
            if (fopen_s(&fp, "userinfo.dat", "a") != 0)
            {
                printf("无法找到该文件\n");
                exit(0);
            }
            printf("请输入你的身份证号:\n");
            scanf("%s", ID);
            printf("请输入你的姓名:\n");
            scanf("%s", People_name);
            printf("请输入账号密码:\n");
            scanf("%s", Password1);
            printf("请再次输入密码:\n");
            scanf("%s", Password2);
            if (strcmp(Password1, Password2) == 0)
            {
                fprintf(fp, "%s %s %s %s\n", Account, Password1, ID, People_name);
                fclose(fp);
                printf("新用户创建成功( ̄▽ ̄) \n");
                printf("\n输入任意键返回登录注册主菜单界面...\n");
                fflush(stdin);
                getchar();
                system("cls");
                MainMenu();
                return;
            }
            else
            {
                fflush(stdin);
                printf("\n两次输入密码不一致!!!! 请重新注册\n");
                printf("\n输入任意键返回系统用户注册界面...\n");
                fflush(stdin);
                getchar();
                Sign_in();
                return;
            }
      case 2:
            printf("\n按任意键返回用户登录注册界面\n");
            fflush(stdin);
            getchar();
            system("cls");
            Register_system();
            return;
      case 0:
            printf("\n成功退出系统!期待你的下次使用O(∩_∩)O ,祝你生活愉快!\n");
            exit(0);
      default:
            printf("\n输入错误,无该菜单,输入任意键返回系统用户注册界面...\n");
            fflush(stdin);
            getchar();
            system("cls");
            Sign_in();
            return;
    }
}

void Log_in()
{
    int select;
    char Account, Password;
    char Account1, Password1, ID1, People_name1;
    FILE* fp;
    if (fopen_s(&fp, "userinfo.dat", "a") != 0)
    {
      printf("无法找到该文件\n");
      exit(0);
    }
    fclose(fp);
    Log_in_Menu();
    scanf("%d", &select);
    switch (select)
    {
      case 1:
            if (fopen_s(&fp, "userinfo.dat", "r") != 0)
            {
                printf("无法找到该文件\n");
                exit(0);
            }
            printf("请输入账号:\n");
            scanf("%s", Account);
            printf("请输入密码:\n");
            scanf("%s", Password);
            while (!feof(fp))
            {
                fscanf_s(fp, "%s %s", Account1, Password1);
                if (strcmp(Account, "000000") == 0 && strcmp(Password, "000000") == 0)
                {
                  sign = 1;   // 系统管理员标识符
                  fclose(fp);
                  printf("账号登录成功!尊敬的管理员欢迎你使用\n");
                  printf("\n输入任意键前往系统管理员功能菜单界面...\n");
                  fflush(stdin);
                  getchar();
                  return;
                }
                if (strcmp(Account, Account1) == 0 && strcmp(Password, Password1) == 0)
                {
                  strcpy_s(ACCOUNT, Account);
                  sign = 2;// 普通用户标识符
                  fclose(fp);
                  printf("账号登录成功!尊敬的用户欢迎你使用\n");
                  printf("\n输入任意键前往系统用户功能菜单界面...\n");
                  fflush(stdin);
                  getchar();
                }
            }
            break;
      case 2:
            printf("\n按任意键返回用户登录注册界面\n");
            fflush(stdin);
            getchar();
            system("cls");
            Register_system();
            return;
      case 0:
            printf("\n成功退出系统!期待你的下次使用O(∩_∩)O ,祝你生活愉快!\n");
            exit(0);
      default:
            printf("\n输入错误,输入任意键返回登录菜单界面...\n");
            fflush(stdin);
            getchar();
            system("cls");
            Log_in();
            return;
    }
    if (sign == 0)
    {
      printf("账号密码错误,请重新输入\n");
      printf("如若忘记账号密码,请联系管理员\n");
      printf("\n输入任意键返回系统用户登录界面...\n");
      fflush(stdin);
      getchar();
      Log_in();
      return;
    }
}

Jianbaiyi 发表于 2023-6-19 16:11:51

面对巨人 发表于 2023-6-19 15:01
你是不是把帖子的悬赏设置错了,变成别人要看问题还得向你支付鱼币了,这有些大牛都看不到,还要 ...

蛙趣还真是 我本来是想设置悬赏的没仔细看

Jianbaiyi 发表于 2023-6-19 16:50:05

沐雨尘枫 发表于 2023-6-19 15:54
修改后的代码

还是不行 是不是我的编译器问题

琅琊王朝 发表于 2023-6-19 17:14:39

C语言??

Jianbaiyi 发表于 2023-6-19 17:54:17

琅琊王朝 发表于 2023-6-19 17:14
C语言??

是滴
页: [1]
查看完整版本: 注册登录功能没有实现,代码可以运行,不知道那里出错,劳烦各位帮我看看