Code:
#include <stdio.h>
#include <stdio.h>
const int MAX_NAME_LENGTH = 20;
int Families_Known(FILE *ifp)
{
int families;
fscanf(ifp, "%d", &families);
return families;
}
int Hall_Capacity(FILE *ifp)
{
int capacity;
fscanf(ifp, "%d", &capacity);
return capacity;
}
void Read_And_Store(FILE *ifp, int FAMILIES_KNOWN, char First_Name[][MAX_NAME_LENGTH], char Last_Name[][MAX_NAME_LENGTH], int Family_Members[], int Priority[])
{
int i;
for(i = 0; i < FAMILIES_KNOWN; i++)
{
fscanf(ifp, "%s", First_Name[i]);
fscanf(ifp, "%s", Last_Name[i]);
fscanf(ifp, "%d", &Family_Members[i]);
fscanf(ifp, "%d", &Priority[i]);
}
}
void Print(FILE *ofp, int FAMILIES_KNOWN, int Guests_Invited, char First_Name[][MAX_NAME_LENGTH], char Last_Name[][MAX_NAME_LENGTH], int Family_Members[])
{
fprintf(ofp, "%d ", FAMILIES_KNOWN);
fprintf(ofp, "%d \n", Guests_Invited);
int i;
for(i = 0; i < FAMILIES_KNOWN; i++)
{
fprintf(ofp, "%s, ", Last_Name[i]);
fprintf(ofp, "%s ", First_Name[i]);
fprintf(ofp, "%d ", Family_Members[i]);
fprintf(ofp, "\n");
}
}
int Compare_Priority(int *Priority1, int *Priority2)
{
if(*Priority1 == *Priority2)
{
return 0;
}
else if(*Priority1 < *Priority2)
{
return -1;
}
else
{
return 1;
}
}
int Compare_Name(char name1[], char name2[])
{
return strcmp(name1, name2);
}
void Swap_Number(int *Number1, int *Number2)
{
int tmp;
tmp = *Number1;
*Number1 = *Number2;
*Number2 = tmp;
}
void Swap_Name(char Name1[], char Name2[])
{
char tmp[MAX_NAME_LENGTH];
strcpy(tmp, Name1); //line 91 here
strcpy(Name1, Name2);
strcpy(Name2, tmp);
}
int Sort_Priority(int FAMILIES_KNOWN, int Priority[], int Family_Members[], char First_Name[][MAX_NAME_LENGTH], char Last_Name[][MAX_NAME_LENGTH])
{
int i, j;
for(i = 1; i < FAMILIES_KNOWN; i++)
{
for(j = i; j >= 1; j--)
{
if(Compare_Priority(&Priority[j], &Priority[j - 1]) < 0)
{
Swap_Number(&Priority[j], &Priority[j - 1]);
Swap_Number(&Family_Members[j], &Family_Members[j - 1]);
Swap_Name(Last_Name[j], Last_Name[j - 1]);
Swap_Name(First_Name[j], First_Name[j - 1]);
}
else
{
break;
}
}
}
}
int Sort_Alphabetical(int Invited_Families, int Priority[], int Family_Members[], char First_Name[][MAX_NAME_LENGTH], char Last_Name[][MAX_NAME_LENGTH])
{
int i, j;
for(i = 1; i < Invited_Families; i++)
{
for(j = i; j >= 1; j--)
{
if(Compare_Name(Last_Name[j], Last_Name[j - 1]) < 0)
{
Swap_Number(&Priority[j], &Priority[j-1]);
Swap_Number(&Family_Members[j], &Family_Members[j - 1]);
Swap_Name(Last_Name[j], Last_Name[j - 1]);
Swap_Name(First_Name[j], First_Name[j - 1]);
}
else if(Compare_Name(Last_Name[j], Last_Name[j - 1]) == 0)
{
if(Compare_Name(First_Name[j], First_Name[j - 1]) < 0)
{
Swap_Name(First_Name[j], First_Name[j - 1]);
Swap_Number(&Priority[j], &Priority[j-1]);
Swap_Number(&Family_Members[j], &Family_Members[j - 1]);
}
}
else
{
break;
}
}
}
}
Check_Capacity(int FAMILIES_KNOWN, int CAPACITY, int Family_Members[])
{
int i, num_families = 0, num_guests = 0;
for(i = 0; i < FAMILIES_KNOWN; i++)
{
num_guests += Family_Members[i];
if(num_guests <= CAPACITY)
{
num_families++;
}
else
{
break;
}
}
return num_families;
}
Num_Guests(int FAMILIES_KNOWN, int Family_Members[])
{
int i, num_guests = 0;
for(i = 0; i < FAMILIES_KNOWN; i++)
{
num_guests += Family_Members[i];
}
return num_guests;
}
int main()
{
FILE *ifp;
ifp = fopen("allguests.txt", "r");
const int FAMILIES_KNOWN = Families_Known(ifp);
const int CAPACITY = Hall_Capacity(ifp);
char First_Name[FAMILIES_KNOWN][MAX_NAME_LENGTH];
char Last_Name[FAMILIES_KNOWN][MAX_NAME_LENGTH];
int Family_Members[FAMILIES_KNOWN];
int Priority[FAMILIES_KNOWN];
Read_And_Store(ifp, FAMILIES_KNOWN, First_Name, Last_Name, Family_Members, Priority);
fclose(ifp);
Sort_Priority(FAMILIES_KNOWN, Priority, Family_Members, First_Name, Last_Name);
int Invited_Families = Check_Capacity(FAMILIES_KNOWN, CAPACITY, Family_Members);
int Guests_Invited = Num_Guests(Invited_Families, Family_Members);
Sort_Alphabetical(Invited_Families, Priority, Family_Members, First_Name, Last_Name);
FILE *ofp;
ofp = fopen("finalguestlist.txt", "w");
Print(ofp, Invited_Families, Guests_Invited, First_Name, Last_Name, Family_Members);
fclose(ofp);
return 0;
}
Works fine for cases such as: same last name, similar first name. Same First Name, similar last name, etc. (Don't have to worry about same last name same first name because our teacher told us we didn't need to account for that). If you find anything out of the ordinary don't hesitate to bring it up.