
Patrick B. answered 02/02/20
Math and computer tutor/teacher
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//include <conio.h>
#define MAX_NAME_LENGTH (20)
#define PW_INVALID_SIZE (1)
#define PW_MISSING_UPPERCASE_LETTER (2)
#define PW_MISSING_LOWERCASE_LETTER (4)
#define PW_MISSING_DIGIT (8)
#define PW_MISSING_PUNCTUATION (16)
#define PUNCTUATION_CHARS ("?,.;!:")
typedef struct _TNameStruct
{
char firstName[MAX_NAME_LENGTH];
char lastName[MAX_NAME_LENGTH];
char middleName[MAX_NAME_LENGTH];
char nameBuff[3*MAX_NAME_LENGTH];
} _TName;
typedef struct _TNameStruct * TName;
char* PromptForInput(char promptMsg[], char responseBuff[])
{
if (promptMsg!=NULL)
{
printf(promptMsg);
}
printf(":>");
gets(responseBuff);
return(responseBuff);
}
int Names(char name[],TName nameBuff)
{
char first[MAX_NAME_LENGTH];
char mid[MAX_NAME_LENGTH];
char last[MAX_NAME_LENGTH];
name = PromptForInput("Please input your FULL name: First Middle Last",name);
printf(" input name is >%s<\n",name);
strcpy(first,strtok(name," "));
strcpy(mid,strtok(NULL," "));
strcpy(last,strtok(NULL," "));
printf(" Names: first name is >%s<\n",first);
printf(" Names: middle name is >%s<\n",mid);
printf(" Names: last name is >%s<\n",last);
strcpy(nameBuff->firstName,first);
strcpy(nameBuff->middleName,mid);
strcpy(nameBuff->lastName,last);
sprintf(nameBuff->nameBuff,"%s,%s %s",last,first,mid);
}
void PrintNames(TName nameBuff, char * debugMsg)
{
if (debugMsg !=NULL)
{
printf("*****************************************************\n");
printf("%s\n",debugMsg);
}
printf("************************************************************\n");
printf(" First name is >%s<\n",nameBuff->firstName);
printf(" Last name is >%s<\n",nameBuff->lastName);
printf(" Middle name is >%s\n",nameBuff->middleName);
printf(" Formatted name [first,last middle] :>%s",nameBuff->nameBuff);
}
int Password( char * pwBuff)
{
PromptForInput("\nPlease input the password",pwBuff);
int iReturn = 0;
int uCaseFlag = 0;
int lCaseFlag = 0;
int digitFlag=0;
int punctFlag=0;
int iLoop;
char ch;
int pwLength = strlen(pwBuff);
for (iLoop=0; iLoop<pwLength; iLoop++)
{
ch = pwBuff[iLoop];
if ((ch>=65) && (ch<=90)) { uCaseFlag=1; }
if ((ch>=97) && (ch<=122)) { lCaseFlag=1; }
if ((ch>=48) && (ch<=57)) { digitFlag=1; }
punctFlag = (strchr(PUNCTUATION_CHARS,ch)!=NULL) ? 1 : 0;
}
if ((pwLength <6) || (pwLength>14))
{
iReturn -= PW_INVALID_SIZE;
}
if (uCaseFlag==0) { iReturn -= PW_MISSING_UPPERCASE_LETTER; }
if (lCaseFlag==0) { iReturn -= PW_MISSING_LOWERCASE_LETTER; }
if (digitFlag==0) { iReturn -= PW_MISSING_DIGIT; }
if (punctFlag==0) { iReturn -= PW_MISSING_PUNCTUATION; }
return(iReturn);
} /* Password */
void Password_Validation( int iPasswordReturnVal)
{
int iReturn = iPasswordReturnVal;
if (iReturn==0)
{
printf("Password is CORRECT !!! \n");
}
else
{
int X = abs(iReturn);
printf("The Password is Incorrect \n");
if (X / PW_MISSING_PUNCTUATION)
{
printf("Password must contain one of the following punctuation symbols: %s \n",PUNCTUATION_CHARS);
X %= PW_MISSING_PUNCTUATION;
}
if (X / PW_MISSING_DIGIT)
{
printf("Password must contain at least one digit \n");
X %= PW_MISSING_DIGIT;
}
if (X / PW_MISSING_LOWERCASE_LETTER)
{
printf("Password must contain at least one lowercase letter \n");
X %= PW_MISSING_LOWERCASE_LETTER;
}
if (X / PW_MISSING_UPPERCASE_LETTER)
{
printf("Password must contain at least one uppercase letter \n");
X%= PW_MISSING_UPPERCASE_LETTER;
}
if (X/PW_INVALID_SIZE)
{
printf("Password must be between 6 and 14 characters \n");
}
} /* password validation */
}
int main()
{
char name[MAX_NAME_LENGTH];
char pwBuff[255];
_TName nameBuff;
Names(name,&nameBuff);
PrintNames(&nameBuff," NAMES ");
int iReturn = Password(pwBuff);
printf("Password is %s \n",pwBuff);
Password_Validation(iReturn);
return 0;
}