Here is the code
#include <stdio.h>
struct CustomerData
{
int customerID;
char customerFirstName[20];
char customerLastName[20];
int age;
char gender[2];
float weight;
float height;
int membershipTerm;
};
int menu(void);
void averages(FILE *ptr);
void addRecord(FILE *ptr);
void changeRecord(FILE *ptr);
void deleteRecord(FILE *ptr);
void viewRecord(FILE *ptr);//DELETE BEFORE TURN IN!!!!!
void initialCustomers(FILE *ptr);
int main()
{
FILE *cPtr;
int choice = 0;
if ((cPtr = fopen ("customers.dat", "wb+")) == NULL)
{
printf("Could not open file.\n");
}
else
{
initialCustomers(cPtr);
while (choice != 6)
{
choice = menu();
switch(choice)
{
case 1:
averages(cPtr);
break;
case 2:
addRecord(cPtr);
break;
case 3:
changeRecord(cPtr);
break;
case 4:
deleteRecord(cPtr);
break;
case 5:
viewRecord(cPtr);
break;
case 6:
break;
default:
printf("Invalid choice");
break;
}
}
}
fclose(cPtr);
return 0;
}
int menu(void)
{
int i;
printf("\nMAIN MENU\n\n");
printf("1. Calculate Averages\n");
printf("2. Add Record\n");
printf("3. Change Record\n");
printf("4. Delete Record\n");
printf("5. View All Records\n");
printf("6. Quit\n");
printf("\nSelection: ");
scanf("%d", &i);
return i;
}
void averages(FILE *ptr)
{
struct CustomerData client = {0,"","",0,"",0.0,0.0,0};
float avgAge = 0, avgWeight = 0, avgHeight = 0, avgMem = 0;
int count = 0;
rewind(ptr);
if((ptr = fopen("customers.dat","rb+")) == NULL)
{
printf("file could not be opened");
}
else{
while (!feof(ptr))
{
fread(&client, sizeof(struct CustomerData), 1, ptr);
if (client.customerID != 0)
{
avgAge += client.age;
avgWeight += client.weight;
avgHeight += client.height;
avgMem += client.membershipTerm;
count++;
}
}
}
//for some reason it would add the last record on file twice, so i
//created lines 113-117 as a work around for the bug
avgAge -= client.age;
avgWeight -= client.weight;
avgHeight -= client.height;
avgMem -= client.membershipTerm;
count--;
avgAge /= count;
avgWeight /= count;
avgHeight /= count;
avgMem /= count;
printf("\nThe average age is %.2f.\n", avgAge);
printf("\nThe average weight is is %.2f.\n", avgWeight);
printf("\nThe average height is %.2f.\n", avgHeight);
printf("\nThe average membership term is %.2f.\n\n", avgMem);
}
void addRecord(FILE *ptr)
{
struct CustomerData client = {0,"","",0,"",0.0,0.0,0};
int id;
printf("Enter an ID number to be added: ");
scanf("%d", &id);
fseek(ptr, (id - 1) * sizeof(struct CustomerData), SEEK_SET);
fread(&client, sizeof(struct CustomerData), 1, ptr);
if (client.customerID != 0)
{
printf("This ID already exist.");
}
else
{
printf("Enter first name, last name, age, gender, weight, height, membership term:\n");
scanf("%s%s%d%s%f%f%d)", &client.customerFirstName, &client.customerLastName, &client.age, &client.gender, &client.weight, &client.height, &client.membershipTerm);
client.customerID = id;
fseek(ptr, (client.customerID - 1) * sizeof(struct CustomerData), SEEK_SET);
fwrite(&client, sizeof(struct CustomerData), 1, ptr);
}
}
void changeRecord(FILE *ptr)
{
struct CustomerData client = {0,"","",0,"",0.0,0.0,0};
int id;
printf("Enter a customer ID to be edited: ");
scanf("%d", &id);
fseek(ptr, (id - 1) * sizeof(struct CustomerData), SEEK_SET);
fread(&client, sizeof(struct CustomerData), 1, ptr);
while (client.customerID == 0)
{
printf("This ID does not exist. Enter a valid ID: ");
scanf("%d", &id);
fseek(ptr, (id - 1) * sizeof(struct CustomerData), SEEK_SET);
fread(&client, sizeof(struct CustomerData), 1, ptr);
}
printf("Enter first name, last name, age, gender, weight, height, membership term:\n");
scanf("%s%s%d%s%f%f%d)", &client.customerFirstName, &client.customerLastName, &client.age, &client.gender, &client.weight, &client.height, &client.membershipTerm);
client.customerID = id;
fseek(ptr, (client.customerID - 1) * sizeof(struct CustomerData), SEEK_SET);
fwrite(&client, sizeof(struct CustomerData), 1, ptr);
}
void deleteRecord(FILE *ptr)
{
struct CustomerData client;
struct CustomerData deleteClient = {0,"","",0,"",0.0,0.0,0};
int id;
printf("Enter a customer ID to be deleted: ");
scanf("%d", &id);
fseek(ptr, (id - 1) * sizeof(struct CustomerData), SEEK_SET);
fread(&client, sizeof(struct CustomerData), 1, ptr);
while (client.customerID == 0)
{
printf("This ID does not exist. Enter a valid ID: ");
scanf("%d", &id);
fseek(ptr, (id - 1) * sizeof(struct CustomerData), SEEK_SET);
fread(&client, sizeof(struct CustomerData), 1, ptr);
}
fseek(ptr, (id - 1) * sizeof(struct CustomerData), SEEK_SET);
fwrite(&deleteClient, sizeof(struct CustomerData), 1, ptr);
printf("The record with customerID %d has been deleted.\n", id);
}
void initialCustomers(FILE *ptr)
{
struct CustomerData initialClient1 = {101,"Jane","Cane",17,"F",120.15,160.56,6};
struct CustomerData initialClient2 = {102,"Mike","Space",33,"M",90.78,180.35,12};
struct CustomerData initialClient3 = {103,"Sean","Todd",45,"M",110,191.50,3};
struct CustomerData initialClient4 = {104,"Alanis","Hall",25,"F",50.3,178.65,9};
struct CustomerData initialClient5 = {105,"Frank","Cool",47,"F",95.8,175.45,12};
fseek(ptr, (100) * sizeof(struct CustomerData), SEEK_SET);
fwrite(&initialClient1, sizeof(struct CustomerData), 1, ptr);
fwrite(&initialClient2, sizeof(struct CustomerData), 1, ptr);
fwrite(&initialClient3, sizeof(struct CustomerData), 1, ptr);
fwrite(&initialClient4, sizeof(struct CustomerData), 1, ptr);
fwrite(&initialClient5, sizeof(struct CustomerData), 1, ptr);
}
void viewRecord(FILE *ptr)
{
struct CustomerData client = {0,"","",0,"",0.0,0.0,0};
rewind(ptr);
printf("\n%-5s%-21s%-21s%-4s\%-5s\n\n", "ID", "First Name", "Last Name", "Age", "Gender");
//printf("%-6s%-6s%-4s\n", "Weight", "Height", "Membership Term");
if((ptr = fopen("customers.dat","rb+")) == NULL)
{
printf("file could not be opened");
}
else
{
while (!feof(ptr))
{
fread(&client, sizeof(struct CustomerData),1,ptr);
if(client.customerID != 0)
{
printf("\n%-5d%-21s%-21s%d%-3s", client.customerID, client.customerFirstName, client.customerLastName, client.age, client.gender);
}
}
}
printf("\n");
}


Sign In
Create Account

Back to top









