我正在尝试创建一个记录系统,我想登录,使用我的员工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();
}
答案 0 :(得分:0)
ulength=strcmp(name1,username);
plength=strcmp(pass,password);
这限制了您在代码中仅使用预定义用户名的能力。您正在将其与用户名进行比较,用户名为“Admin”。因此,无论您输入什么用户名,您都会将其与字符串“Admin”进行比较。
您需要做的是使用“fopen”打开包含员工详细信息的文件。然后,您可以使用“fgets”将员工详细信息读入数组(或您选择的其他数据结构)。您可以遍历列表并将其与“name1”进行比较。
干杯, VSN
P.S。使用strncmp可以使代码更安全。如果您在UNIX机器上工作,除了其他标准C函数之外,您还可以找到“fopen”,“fgets”和“strncmp”的手册页。