C编程登录功能

问题描述 投票:0回答:1

这是我现在正在工作的一个小型c项目。注册新帐户后,我尝试登录,但是即使输入正确的信息仍然无法登录,也找不到错误。代码很多,但是我尽了最大的努力。

代码:

这是控制台运行时的主界面,用于选择登录或注册。如果您是首次登录用户,则必须在登录前注册一个新帐户。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>

void customer();
void customerres();
void customerlogin();
void fordelay();

int i, j;
int main_exit;

struct date
{
    int month, day, year;
};

struct
{
    int acc_no, age;
    char password[20];
    char repassword[20];
    char name[60];
    char user[60];
    char address[60];
    char gender[15];
    char acc_type[10];
    double phone;
    float amt;
    struct date dob;
    struct date deposit;
    struct date withdraw;
}add, upd, check;

void fordelay(int j)
{
    int i, k;
    for (i = 0;i < j;i++)
        k = i;
}

void main()
{
    system("cls");
    int choose;

    printf("\n1. Login\n2. Register\n\n\nEnter your choice:");
    scanf("%d", &choose);

    switch (choose)
    {
    case 1:
        customerlogin();
        break;

    case 2:
        customerres();
        break;
    }
}

这是注册功能,我添加了两个功能,即检查帐号的可用性,以及检查重新输入的密码是否匹配。为了检查帐号的可用性,我使用POINTER来完成。输入其余用户信息后,程序会将其保存到txt文件中。

void customerres()
{
    int checkpassword;
    FILE* ptr;
    ptr = fopen("record.txt", "a+");
account_no:
    system("cls");
    printf("Register New Account");
    printf("\n\n\nEnter today's date(dd/mm/yyyy):");
    scanf("%d/%d/%d", &add.deposit.day, &add.deposit.month, &add.deposit.year);
    printf("\nEnter the Account Number:");
    scanf("%d", &check.acc_no);
    while (fscanf(ptr, "%d %s %s %s %s %d/%d/%d %d %s %s %lf %s %f %d/%d/%d\n", &add.acc_no, add.password, add.repassword, add.user, add.name, &add.dob.month, &add.dob.day, &add.dob.year, &add.age, add.address, add.gender, &add.phone, add.acc_type, &add.amt, &add.deposit.month, &add.deposit.day, &add.deposit.year) != EOF)
    {
        if (check.acc_no == add.acc_no)
        {
            printf("Account no. already in use!");
            fordelay(1000000000);
            goto account_no;

        }
    }
    add.acc_no = check.acc_no;
    printf("\nEnter the Username:");
    scanf("%s", add.user);
    checkpassword = 0;
    while (checkpassword == 0)
    {
    password:
        printf("\nEnter the password:");
        scanf("%s", add.password);
        printf("\nRe-enter the password:");
        scanf("%s", add.repassword);
        if (strcmp(add.password, add.repassword) == 0)
        {
            checkpassword = 1;
            printf("Password match!\n");
        }
        else
        {
            printf("Password don't match!\n");
            fordelay(1000000000);
            goto password;
        }
    }
    printf("\nEnter your name:");
    scanf("%s", add.name);
    printf("\nEnter the Date Of Birth(dd/mm/yyyy):");
    scanf("%d/%d/%d", &add.dob.day, &add.dob.month, &add.dob.year);
    printf("\nEnter the age:");
    scanf("%d", &add.age);
    printf("\nEnter the address:");
    scanf("%s", add.address);
    printf("\nEnter the gender:");
    scanf("%s", add.gender);
    printf("\nEnter the phone number: ");
    scanf("%lf", &add.phone);
    printf("\nEnter the amount to deposit:$");
    scanf("%f", &add.amt);
    printf("\nType of account:\n\t#Saving\n\t#Current\n\tEnter your choice:");
    scanf("%s", add.acc_type);

    fprintf(ptr, "%d %s %s %s %s %d/%d/%d %d %s %s %lf %s %f %d/%d/%d\n", &add.acc_no, add.password, add.repassword, add.user, add.name, add.dob.month, add.dob.day, add.dob.year, add.age, add.address, add.gender, add.phone, add.acc_type, add.amt, add.deposit.month, add.deposit.day, add.deposit.year);


    fclose(ptr);
    printf("\nAccount created successfully!");
add_invalid:
    printf("\n\n\n\t\tEnter 1 to go to the main menu and 0 to exit:");
    scanf("%d", &main_exit);
    system("cls");
    if (main_exit == 1)
    {
        main();
    }
    else if (main_exit == 0)
    {
        exit(0);
    }
    else
    {
        printf("\nInvalid!\a");
        goto add_invalid;
    }
}

在此代码中,我执行了一个功能来检查用户是否输入了正确的信息。如果帐号,用户名和密码匹配,它将成功登录,但是我在这里失败。

void customerlogin()
{
    system("cls");
    FILE* ptr;
    ptr = fopen("record.txt", "r");

    printf("\nAccount number: ");
    scanf("%d", &check.acc_no);
    printf("Username: ");
    scanf("%s", check.name);
    printf("Password: ");
    scanf("%s", check.password);

    int checkcredential, choose, findacct, login;
    choose = 0;
    checkcredential = 0;
    findacct = 0;
    login = 0;
    while (fscanf(ptr, "%d %s %s %s %s %d/%d/%d %d %s %s %lf %s %f %d/%d/%d\n", &add.acc_no, add.password, add.repassword, add.user, add.name, &add.dob.month, &add.dob.day, &add.dob.year, &add.age, add.address, add.gender, &add.phone, add.acc_type, &add.amt, &add.deposit.month, &add.deposit.day, &add.deposit.year) != EOF)
    {
        if (check.acc_no == add.acc_no)
        {
            if (strcmp(check.name, add.name) == 0)
            {
                if (strcmp(check.password, add.password) == 0)
                {
                    fclose(ptr);
                    login = 1;
                    customer(check.acc_no);
                }
                else
                {
                    checkcredential = 1;
                }
            }
            else
            {
                checkcredential = 1;
            }
        }
        else
        {
            findacct = 1;
        }
    }
    fclose(ptr);
    if (login == 0)
    {
        if (findacct == 1 || checkcredential == 1)
        {
            printf("\nSorry, wrong credentials!\n\nEnter 1 to try again and 0 to exit:");
            scanf("%d", &main_exit);
            system("cls");
            if (main_exit == 1)
            {
                customerlogin();
            }
            else if (main_exit == 0)
            {
                exit(0);
            }
        }
    }
}


void customer()
{
    printf("/n Login Successful!");
}

感谢您对我的代码进行任何更正,我对此表示赞赏。

c
1个回答
0
投票

不错的工作,我建议您在函数中选择更重要的变量名称。它将帮助您和其他人更快地理解您的代码:)。

© www.soinside.com 2019 - 2024. All rights reserved.