C Prog - 文件处理限制

时间:2012-10-16 05:28:51

标签: c

我正在尝试创建一个记录系统,我想登录,使用我的员工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();
    }

1 个答案:

答案 0 :(得分:0)

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

这限制了您在代码中仅使用预定义用户名的能力。您正在将其与用户名进行比较,用户名为“Admin”。因此,无论您输入什么用户名,您都会将其与字符串“Admin”进行比较。

您需要做的是使用“fopen”打开包含员工详细信息的文件。然后,您可以使用“fgets”将员工详细信息读入数组(或您选择的其他数据结构)。您可以遍历列表并将其与“name1”进行比较。

干杯, VSN

P.S。使用strncmp可以使代码更安全。如果您在UNIX机器上工作,除了其他标准C函数之外,您还可以找到“fopen”,“fgets”和“strncmp”的手册页。