0

サインイン、従業員 ID とパスワード、または可能であれば従業員 ID だけでログインする記録システムを作成しようとしています。問題は、雇用者 ID をテキスト ファイルに配置するたびに、コードで定義済みのユーザー名のみが制限されることです。テキスト ファイルに含まれるすべての雇用者 ID を受け入れて、正常にログインできるようにするにはどうすればよいですか?

        #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>

    void mainMenu();
    void EnterItem();
    void ViewItem();
    void SearchItem();
    void Exit();

    int count=1,ulength,plength;
    char username[]="Admin",password[]="1234";
    char name1[10],pass[10];

    char code[20],name[20],search[20];
    int price,qty;
     main(){

     printf("\nEnter USer ID And Password below(You have Only Three Chances!\nPress Enter To Continue" );
      getch();
      while(count<=3)
      {

      printf("\nENter User ID:");
      scanf("%s",name1);
      printf("\nENter Password:");
      scanf("%s",pass);
      ulength=strcmp(name1,username);
      plength=strcmp(pass,password);
      if(ulength==0&&plength==0)
      {
      printf("\nWelcome %s",name1);
      break;
      }
      else
      {
      printf("\nUsername And Password is Invalid!\n You Have %d more Chances/s.",3-count);
      }
      getch();
      count++;
      }
      if(count==4)
      printf("Maximum of three(3)Try only!");
      getch();




        mainMenu();
        EnterItem();
        ViewItem();
        SearchItem();
        Exit();
         getch();
         }

    void mainMenu(void){

    char choice;
    printf("\t*************************************\n");
    printf("\t******========================*******\n");
    printf("\t******==!!INVENTORY SYSTEM!!==*******\n");
    printf("\t******========================*******\n");
    printf("\t*************************************\n");
    printf("\n");

    printf("\nMenu:\n[a]EnterItem\n[b]ViewItem\n[c]SearchItem\n[d]Exit\n");
    printf("What do you want to perform?:");
    fflush(stdin);

    scanf("%c",choice);
    switch(choice){

    case 'a':
        EnterItem();
        break;
    case 'b':
        ViewItem();
        break;
    case 'c':
           SearchItem();
        break;
    case 'd':
        Exit();

        break;
    default:
        printf("Invalid Choice");

        }
    }

    void EnterItem(void){

    FILE *MyFile;
    char opt;
    do{
        printf("Enter Item Code:");
        fflush(stdin);
        scanf("%s",code);

        printf("Enter Item Name:");
        fflush(stdin);
        scanf("%s",name);


        printf("Enter Item Price:");
        fflush(stdin);
        scanf("%i",&price);


        printf("Enter Item Quantity:");
        fflush(stdin);
        scanf("%i",&qty);
            MyFile=fopen("MyFiles.txt","a+");
            fprintf(MyFile,"%s\t%s\t%i\t%i\n",code,name,price,qty);
            printf("Item Saved!!\n");

        printf("Do you want to Add More?:[y/n]");
        fflush(stdin);
        scanf("%c",&opt);


    }while(opt=='Y'||opt=='y');
    printf("Do you want to Go Back To main?:[y/n]");
    fflush(stdin);
    scanf("%c",&opt);
    if(opt=='y'||opt=='Y')
    mainMenu();
    else
       printf("Invalid Choice!!");

         }

    void ViewItem(void){

    FILE *MyFile;
    int c;

    if((MyFile=fopen("MyFiles.txt","r"))==NULL)
    {
    printf("Error Reading File!!");

    }
    while((c=fgetc(MyFile))!=EOF)
    printf("%c",c);
    printf("Go to Main Menu[y/n]:");
    fflush(stdin);
    scanf("%c",opt);
    if(opt=='y'||opt=='Y')
    mainMenu();
    else(); 
    fclose(MyFile);
    getch();
    }

    void SearchItem(void){

    FILE *MyFile;

        MyFile=fopen("MyFiles.txt","a+");
        printf("Enter the Item Code to Search:");
        fflush(stdin);
        scanf("%s",search);
        while(!feof(MyFile))
        {
        fscanf(MyFile,"%s %s %i %i",code,name,price,qty);
            if(strcmp(search,code)==0)
            {
            printf("Item Code: %s\n",code);
            printf("Item Name: %s\n",name);
            printf("Item Price: %i\n",price);
            printf("Item Quantity: %i\n",qty);
            break;
            printf("Go Back To main Menu[y/n]:");
            fflush(stdin);
            scanf("%s",opt);
    if(opt=='y'||opt=='Y')
    mainMenu();
    else
            }
           }
              fclose(MyFile);
    }

    void Exit(void){
    getch();
    }
4

1 に答える 1

0

ulength=strcmp(name1,username); plength=strcmp(pass,password);

これにより、コードで定義済みのユーザー名のみを使用する機能が制限されています。「管理者」を保持するユーザー名と比較しています。したがって、ユーザー名として何を入力しても、常に文字列「Admin」と比較されます。

あなたがする必要があるのは、「fopen」を使用して従業員の詳細を含むファイルを開くことです。次に、「fgets」を使用して、従業員の詳細を配列 (または選択した別のデータ構造) に読み取ることができます。リストを繰り返し処理して、「name1」と比較できます。

乾杯、VSN

PS strncmp を使用すると、コードがより安全になります。UNIX マシンで作業している場合は、他の標準 C 関数に加えて、「fopen」、「fgets」、および「strncmp」のマニュアル ページがあります。

于 2012-10-16T05:52:21.260 に答える