| | |
Struct and binary files...
Please support our C advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Feb 2008
Posts: 59
Reputation:
Solved Threads: 0
Okay so I'm pretty sure I've completely destroyed this code. All I'm trying to do is send the user-inputted product info into a binary file to display when the user chooses the report option from the menu. I'm so confused though and I think I really screwed it up.
c Syntax (Toggle Plain Text)
// ** Prototypes ** void heading(void); int menu(); void add(); void report(); char getstring(char entry, char prompt[]); int getint(int min, int max, char prompt[]); double getreal(double min, double max, char prompt[]); double total(double quantity, double amount); double profit(double profit_cost, double profit_price); void init_costs(double t[], int x); void show_costs(double t[], int x); void show(int prodnum, int prodtype, char d[], int prodquan, double cost, double price, double prod_price, double prod_cost, double prod_profit); int menuerror(int min, int max, char prompt[]); int prompt(char msg[]); int quit(void); void message(char msg[]); char firstUpper(char *buf); typedef struct Sports { int prodnum; int prodtype; char prodscrip; int prodquan; double cost; double price; } Sports; /* ================================================================ */ // ** Functions ** int main() { int TRUE = 1; int FALSE = 0; int select, end = TRUE; do { select = menu(); switch (select) { case 1: add(); break; case 2: report(); break; case 3: case 4: case 5: end = quit(); break; default: message("\n\nPlease make a selection between 1 and 5.\a"); } } while (end); return 0; } /* ================================================================ */ int menu() { int choice; system("cls"); printf("Sierra Sporting Goods\n\n"); printf("1 = Add a record\n"); printf("2 = Report\n"); printf("3 = Delete a record\n"); printf("4 = Change a record\n"); printf("5 = Quit\n\n"); choice = menuerror(1, 5, "Enter your selection"); return(choice); } /* ================================================================ */ void heading() { system("cls"); printf("Sierra Sporting Goods\n\n\n"); return; } /* ================================================================ */ void add() { double cost, price, prod_cost, prod_price, prod_profit; double MINCOST; double MAXCOST; double MINPRICE; double MAXPRICE; int prodnum, prodtype, prodquan; int MINPROD; int MAXPROD; int MINTYPE; int MAXTYPE; int MINQUAN; int MAXQUAN; char prodscrip; double types[6]; char choice; char line[1][6]; Sports s; FILE *fp; init_costs(types,6); fp = fopen("limits.txt", "rt"); if (fp == NULL) { printf("File does not exist"); return; } else { fscanf_s(fp, "%d %d %d %d %d %d %lf %lf %lf %lf", &MINPROD, &MAXPROD, &MINTYPE, &MAXTYPE, &MINQUAN, &MAXQUAN, &MINCOST, &MAXCOST, &MINPRICE, &MAXPRICE); fclose(fp); } fp = fopen("data.dat", "ab"); if (fp == NULL) { message("Error opening data file\a"); return; } do { heading(); s.prodnum = getint(MINPROD, MAXPROD, "product number"); s.prodtype = getint(MINTYPE, MAXTYPE, "product type"); s.prodscrip = getstring(prodscrip, "Enter the product description: "); s.prodscrip = firstUpper(&prodscrip); s.prodquan = getint(MINQUAN, MAXQUAN, "product quantity"); s.cost = getreal(MINCOST, MAXCOST, "product cost"); s.price = getreal(MINPRICE, MAXPRICE, "product price"); prod_cost = total(prodquan, cost); prod_price = total(prodquan, price); prod_profit = profit(prod_price, prod_cost); types[prodtype] += prod_cost; show(prodnum, prodtype, prodscrip, prodquan, cost, price, prod_price, prod_cost, prod_profit); choice = prompt("Would you like to enter another product"); } while (choice != 'N'); getchar(); show_costs(types,6); return; } /* ================================================================ */ char firstUpper(char *buf) { while (*buf) // Continue as long as characters available. { while( isspace(*buf) || !isalpha(*buf) ) *buf++; // Skip all spaces until next character. *buf = toupper(*buf); // Capitalize first character after space. while(*buf && !isspace(*buf) ) *buf++; // Skip all characters until next space. } } /* ================================================================ */ int getint(int min, int max, char item[]) { int x; printf("Enter the %s between %d and %d: ", item, min, max); scanf("%d%*c", &x); while (x < min || x > max) { message("\nError in range. Press Enter to continue.\a"); printf("Enter the %s between %d and %d: ", item, min, max); scanf("%d%*c", &x); } return(x); } /* ================================================================ */ double getreal(double min, double max, char item[]) { double y; printf("Enter the %s between $%.2lf and $%.2lf: ", item, min, max); scanf("%lf%*c", &y); while (y < min || y > max) { message("\nError in range. Press Enter to continue.\a"); printf("Enter the %s between $%.2lf and $%.2lf: ", item, min, max); scanf("%lf%*c", &y); } return(y); } /* ================================================================ */ double total(double quantity, double amount) { return (quantity * amount); } /* ================================================================ */ double profit(double profit_price, double profit_cost) { return (profit_price - profit_cost); } /* ================================================================ */ void init_costs(double *t, int x) { int z; for (z = 1; z < x; z++) *(t + z) = 0; } /* ================================================================ */ void show_costs(double *t, int x) { int z; double total = 0; system("cls"); printf(" Product Cost by Type\n\n"); printf("_Type_____________Cost_\n\n"); for (z = 1; z < x; z++) { printf(" %2d%20.2lf\n", z, *(t+z)); total += *(t+z); } printf("________________________\n"); printf("%23.2lf\n\n\n\n", total); printf("Press ENTER to return to the Main Menu..."); getchar(); } /* ================================================================ */ void message(char *msg) { printf("%s\n\n", *msg); } /* ================================================================ */ int prompt(char *msg) { int z; do { printf("%s (Y/N)? ", msg); z = toupper(getchar()); if (z != 'Y' && z != 'N') printf("\nError, please enter Y or N only.\n"); } while (z != 'Y' && z != 'N'); return(z); } /* ================================================================ */ int quit() { int TRUE = 1; int FALSE = 0; int z, end = TRUE; z = prompt("\nEnd program\a"); if (z == 'Y') { system("cls"); message("\nSierra Sporting Goods Database closed successfully."); end = FALSE; } return(end); } /* ================================================================ */ int menuerror(int min, int max, char item[]) { int z; printf("%s from %d to %d: ", item, min, max); scanf("%d%*c", &z); while (z < min || z > max) { message("\nError in range. Press Enter to continue.\a"); printf("%s from %d to %d: ", item, min, max); scanf("%d%*c", &z); } return(z); } /* ================================================================ */ void show(int prodnum, int prodtype, char prodscrip, int prodquan, double cost, double price, double prod_price, double prod_cost, double prod_profit) { printf("\n\n\nThe product number is ----------> %04d\n", prodnum); printf("The product type is ------------> %d\n", prodtype); printf("The product description is -----> %s\n", prodscrip); printf("The quantity is ----------------> %d\n", prodquan); printf("The cost is --------------------> $%.2lf\n", cost); printf("The price is -------------------> $%.2lf\n\n", price); printf("Total product price ----------> $%.2lf\n", prod_price); printf("Total product cost -----------> $%.2lf\n", prod_cost); printf("Total product profit ---------> $%.2lf\n\n\n\n", prod_profit); return; } /* ================================================================ */ void report() { int data; FILE *fp; struct Sports s; fp = fopen(“data.dat”, “ab”); while (fread(&s, sizeof(s), 1, fp) != 0) { show(); } fclose(fp); }
•
•
Join Date: Feb 2008
Posts: 59
Reputation:
Solved Threads: 0
I thought
fp = fopen(“data.dat”, “ab”);
was the right way to code it. It's what my teacher wrote in our lecture.
What do you mean when I have something useful make a copy of it? I'm confused... I'm just trying to learn how to do this stuff and my teacher is of absolutely no help whatsoever, not to mention that according to you his syntax isn't even correct! I don't understand that though because at the top of my code I reference another file using the same format and I haven't gotten an error for it.
fp = fopen(“data.dat”, “ab”);
was the right way to code it. It's what my teacher wrote in our lecture.
What do you mean when I have something useful make a copy of it? I'm confused... I'm just trying to learn how to do this stuff and my teacher is of absolutely no help whatsoever, not to mention that according to you his syntax isn't even correct! I don't understand that though because at the top of my code I reference another file using the same format and I haven't gotten an error for it.
•
•
•
•
I thought
fp = fopen(“data.dat”, “ab”);
was the right way to code it.
fp = fopen("data.dat", "ab"); (wrong quotes)•
•
•
•
What do you mean when I have something useful make a copy of it?

Now tell us, what compiler errors your have, or what errors your program output has.
And as Salem said:
•
•
•
•
Originally Posted by Salem
> show();
show() expects a lot of parameters.
•
•
Join Date: Feb 2008
Posts: 59
Reputation:
Solved Threads: 0
Good lord I'm so confused lol. What part of my version was wrong? I'm supposed to use different quotes? Where in the world are they? lol. It's finals week and I'm exhausted heh.
As far as the backups go, I do have a backup, I just wasnt sure if I wanted to go all the way back to it, and even that one was having problems running as well. But I am going to go back to it because I am way too far gone on this one and I need to figure out why the last one isn't working. It's having trouble opening the text file for some reason and I can't figure out why because I added it as a resource. The program runs but when it asks me to enter a selection I choose 1 to add a record and it flashes "file does not exist" really quickly and then does nothing. Hopefully when I fix this the rest will be easier. Here it is:
As far as the backups go, I do have a backup, I just wasnt sure if I wanted to go all the way back to it, and even that one was having problems running as well. But I am going to go back to it because I am way too far gone on this one and I need to figure out why the last one isn't working. It's having trouble opening the text file for some reason and I can't figure out why because I added it as a resource. The program runs but when it asks me to enter a selection I choose 1 to add a record and it flashes "file does not exist" really quickly and then does nothing. Hopefully when I fix this the rest will be easier. Here it is:
c Syntax (Toggle Plain Text)
// ** Prototypes ** void heading(void); int menu(); int add(); void getstring(char entry[], char prompt[]); int getint(int min, int max, char prompt[]); double getreal(double min, double max, char prompt[]); double total(double quantity, double amount); double profit(double profit_cost, double profit_price); void init_costs(double t[], int x); void show_costs(double t[], int x); void show(int prodnum, int prodtype, char d[], int prodquan, double cost, double price, double prod_price, double prod_cost, double prod_profit); int menuerror(int min, int max, char prompt[]); int prompt(char msg[]); int quit(void); void message(char msg[]); void firstUpper(char *buf); #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include "Lab9.h" /* ================================================================== */ // ** Functions ** int main() { int TRUE = 1; int FALSE = 0; int select, end = TRUE; do { select = menu(); switch (select) { case 1: add(); break; case 2: case 3: case 4: case 5: end = quit(); break; default: message("\n\nPlease make a selection between 1 and 5.\a"); } } while (end); return 0; } /* ================================================================ */ int menu() { int choice; system("cls"); printf("Sierra Sporting Goods\n\n"); printf("1 = Add a record\n"); printf("2 = Report\n"); printf("3 = Delete a record\n"); printf("4 = Change a record\n"); printf("5 = Quit\n\n"); choice = menuerror(1, 5, "Enter your selection"); return(choice); } /* ================================================================ */ void heading() { system("cls"); printf("Sierra Sporting Goods\n\n\n"); return; } /* ================================================================ */ int add() { double cost, price, prod_cost, prod_price, prod_profit; double MINCOST; double MAXCOST; double MINPRICE; double MAXPRICE; int prodnum, prodtype, prodquan; int MINPROD; int MAXPROD; int MINTYPE; int MAXTYPE; int MINQUAN; int MAXQUAN; char prodscrip[40]; double types[6]; char choice; FILE *fp; char line[1][6]; init_costs(types,6); fp = fopen("limits.txt", "rt"); if (fp == NULL) { printf("File does not exist"); return 0; } else { fscanf(fp, "%d %d %d %d %d %d %lf %lf %lf %lf", &MINPROD, &MAXPROD, &MINTYPE, &MAXTYPE, &MINQUAN, &MAXQUAN, &MINCOST, &MAXCOST, &MINPRICE, &MAXPRICE); } fclose(fp); do { heading(); prodnum = getint(MINPROD, MAXPROD, "product number"); prodtype = getint(MINTYPE, MAXTYPE, "product type"); printf("Enter the product description: "); gets(prodscrip); firstUpper(prodscrip); prodquan = getint(MINQUAN, MAXQUAN, "product quantity"); cost = getreal(MINCOST, MAXCOST, "product cost"); price = getreal(MINPRICE, MAXPRICE, "product price"); prod_cost = total(prodquan, cost); prod_price = total(prodquan, price); prod_profit = profit(prod_price, prod_cost); types[prodtype] += prod_cost; show(prodnum, prodtype, prodscrip, prodquan, cost, price, prod_price, prod_cost, prod_profit); choice = prompt("Would you like to enter another product"); } while (choice != 'N'); getchar(); show_costs(types,6); return 0; } /* ================================================================ */ void firstUpper(char *buf) { while (*buf) // Continue as long as characters available. { while( isspace(*buf) || !isalpha(*buf) ) *buf++; // Skip all spaces until next character. *buf = toupper(*buf); // Capitalize first character after space. while(*buf && !isspace(*buf) ) *buf++; // Skip all characters until next space. } } /* ================================================================ */ int getint(int min, int max, char item[]) { int x; printf("Enter the %s between %d and %d: ", item, min, max); scanf("%d%*c", &x); while (x < min || x > max) { message("\nError in range. Press Enter to continue.\a"); printf("Enter the %s between %d and %d: ", item, min, max); scanf("%d%*c", &x); } return(x); } /* ================================================================ */ double getreal(double min, double max, char item[]) { double y; printf("Enter the %s between $%.2lf and $%.2lf: ", item, min, max); scanf("%lf%*c", &y); while (y < min || y > max) { message("\nError in range. Press Enter to continue.\a"); printf("Enter the %s between $%.2lf and $%.2lf: ", item, min, max); scanf("%lf%*c", &y); } return(y); } /* ================================================================ */ double total(double quantity, double amount) { return (quantity * amount); } /* ================================================================ */ double profit(double profit_price, double profit_cost) { return (profit_price - profit_cost); } /* ================================================================ */ void init_costs(double *t, int x) { int z; for (z = 1; z < x; z++) *(t + z) = 0; } /* ================================================================ */ void show_costs(double *t, int x) { int z; double total = 0; system("cls"); printf(" Product Cost by Type\n\n"); printf("_Type_____________Cost_\n\n"); for (z = 1; z < x; z++) { printf(" %2d%20.2lf\n", z, *(t+z)); total += *(t+z); } printf("________________________\n"); printf("%23.2lf\n\n\n\n", total); printf("Press ENTER to return to the Main Menu..."); getchar(); } /* ================================================================ */ void message(char *msg) { printf("%s\n\n", *msg); } /* ================================================================ */ int prompt(char *msg) { int z; do { printf("%s (Y/N)? ", msg); z = toupper(getchar()); if (z != 'Y' && z != 'N') printf("\nError, please enter Y or N only.\n"); } while (z != 'Y' && z != 'N'); return(z); } /* ================================================================ */ int quit() { int TRUE = 1; int FALSE = 0; int z, end = TRUE; z = prompt("\nEnd program\a"); if (z == 'Y') { system("cls"); message("\nSierra Sporting Goods Database closed successfully."); end = FALSE; } return(end); } /* ================================================================ */ int menuerror(int min, int max, char item[]) { int z; printf("%s from %d to %d: ", item, min, max); scanf("%d%*c", &z); while (z < min || z > max) { message("\nError in range. Press Enter to continue.\a"); printf("%s from %d to %d: ", item, min, max); scanf("%d%*c", &z); } return(z); } /* ================================================================ */ void show(int prodnum, int prodtype, char prodscrip[], int prodquan, double cost, double price, double prod_price, double prod_cost, double prod_profit) { printf("\n\n\nThe product number is ----------> %04d\n", prodnum); printf("The product type is ------------> %d\n", prodtype); printf("The product description is -----> %s\n", prodscrip); printf("The quantity is ----------------> %d\n", prodquan); printf("The cost is --------------------> $%.2lf\n", cost); printf("The price is -------------------> $%.2lf\n\n", price); printf("Total product price ----------> $%.2lf\n", prod_price); printf("Total product cost -----------> $%.2lf\n", prod_cost); printf("Total product profit ---------> $%.2lf\n\n\n\n", prod_profit); return; } /* ================================================================ */
•
•
Join Date: Feb 2008
Posts: 59
Reputation:
Solved Threads: 0
Alright so it looks like I'm still getting an error... When I select 5 to quit and it asks if I'm sure, if I type "Y" it breaks and I get a window that says "Unhandled exception at 0x1029984f (msvcr90d.dll) in lab 10 FIX.exe: 0xC0000005: Access violation reading location 0x0000000a.
It then opens the output file and goes to line 1624 which says "while (i-- && *p)".
What am I doing wrong??
It then opens the output file and goes to line 1624 which says "while (i-- && *p)".
What am I doing wrong??
•
•
Join Date: Nov 2007
Posts: 981
Reputation:
Solved Threads: 210
•
•
•
•
When I select 5 to quit and it asks if I'm sure, if I type "Y" it breaks and I get a window that says "Unhandled exception at 0x1029984f (msvcr90d.dll) in lab 10 FIX.exe: 0xC0000005: Access violation reading location 0x0000000a.
C Syntax (Toggle Plain Text)
void message(char *msg) { printf("%s\n\n", msg); // <- asterisk preceding msg now removed }
•
•
Join Date: Feb 2008
Posts: 59
Reputation:
Solved Threads: 0
Oh wow awesome, thanks!
So now I am starting with fresh code (or rather the error-free code from my previous lab). Now I am editing this lab using struct and binary record to accept the user-inputted data and display it as a report when the user selects report from the menu.
The only problems I'm having now are storing the prodscrip in the binary file after it runs through the firstUpper() function, and getting the report to display.
BTW, there is a limits file included and it looks like this:
1 9999
1 5
1 50
5.00 900.00
6.00 1000.00
Here is the code:
So now I am starting with fresh code (or rather the error-free code from my previous lab). Now I am editing this lab using struct and binary record to accept the user-inputted data and display it as a report when the user selects report from the menu.
The only problems I'm having now are storing the prodscrip in the binary file after it runs through the firstUpper() function, and getting the report to display.
BTW, there is a limits file included and it looks like this:
1 9999
1 5
1 50
5.00 900.00
6.00 1000.00
Here is the code:
c Syntax (Toggle Plain Text)
// ** Prototypes ** void heading(void); int menu(); int add(); void report(); void getstring(char entry[], char prompt[]); int getint(int min, int max, char prompt[]); double getreal(double min, double max, char prompt[]); double total(double quantity, double amount); double profit(double profit_cost, double profit_price); void init_costs(double t[], int x); void show_costs(double t[], int x); void show(int prodnum, int prodtype, char d[], int prodquan, double cost, double price, double prod_price, double prod_cost, double prod_profit); int menuerror(int min, int max, char prompt[]); int prompt(char msg[]); int quit(void); void message(char msg[]); void firstUpper(char *buf); struct sports { int prodnum; int prodtype; char prodscrip; int prodquan; double cost; double price; }; #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include "10 final.h" /* ================================================================== */ // ** Functions ** int main() { int TRUE = 1; int FALSE = 0; int select, end = TRUE; do { select = menu(); switch (select) { case 1: add(); break; case 2: report(); break; case 3: case 4: case 5: end = quit(); break; default: message("\n\nPlease make a selection between 1 and 5.\a"); } } while (end); return 0; } /* ================================================================ */ int menu() { int choice; system("cls"); printf("Sierra Sporting Goods\n\n"); printf("1 = Add a record\n"); printf("2 = Report\n"); printf("3 = Delete a record\n"); printf("4 = Change a record\n"); printf("5 = Quit\n\n"); choice = menuerror(1, 5, "Enter your selection"); return(choice); } /* ================================================================ */ void heading() { system("cls"); printf("Sierra Sporting Goods\n\n\n"); return; } /* ================================================================ */ int add() { double cost, price, prod_cost, prod_price, prod_profit; double MINCOST; double MAXCOST; double MINPRICE; double MAXPRICE; int prodnum, prodtype, prodquan; int MINPROD; int MAXPROD; int MINTYPE; int MAXTYPE; int MINQUAN; int MAXQUAN; char prodscrip[40]; double types[6]; char choice; FILE *fp; FILE *f; char line[1][6]; init_costs(types,6); struct sports s; fp = fopen("limits.txt", "rt"); if (fp == NULL) { printf("File does not exist"); return 0; } else { fscanf(fp, "%d %d %d %d %d %d %lf %lf %lf %lf", &MINPROD, &MAXPROD, &MINTYPE, &MAXTYPE, &MINQUAN, &MAXQUAN, &MINCOST, &MAXCOST, &MINPRICE, &MAXPRICE); } fclose(fp); f = fopen("data.dat", "ab"); if (f == NULL) { message("Error opening data file\a"); return 1; } do { heading(); s.prodnum = getint(MINPROD, MAXPROD, "product number"); s.prodtype = getint(MINTYPE, MAXTYPE, "product type"); printf("Enter the product description: "); gets(prodscrip); firstUpper(prodscrip); s.prodquan = getint(MINQUAN, MAXQUAN, "product quantity"); s.cost = getreal(MINCOST, MAXCOST, "product cost"); s.price = getreal(MINPRICE, MAXPRICE, "product price"); prod_cost = total(s.prodquan, s.cost); prod_price = total(s.prodquan, s.price); prod_profit = profit(prod_price, prod_cost); types[s.prodtype] += prod_cost; show(s.prodnum, s.prodtype, prodscrip, s.prodquan, s.cost, s.price, prod_price, prod_cost, prod_profit); choice = prompt("Would you like to enter another product"); } while (choice != 'N'); getchar(); show_costs(types,6); return 0; fclose(f); } /* ================================================================ */ void firstUpper(char *buf) { while (*buf) // Continue as long as characters available. { while( isspace(*buf) || !isalpha(*buf) ) *buf++; // Skip all spaces until next character. *buf = toupper(*buf); // Capitalize first character after space. while(*buf && !isspace(*buf) ) *buf++; // Skip all characters until next space. } } /* ================================================================ */ int getint(int min, int max, char item[]) { int x; printf("Enter the %s between %d and %d: ", item, min, max); scanf("%d%*c", &x); while (x < min || x > max) { message("\nError in range. Press Enter to continue.\a"); printf("Enter the %s between %d and %d: ", item, min, max); scanf("%d%*c", &x); } return(x); } /* ================================================================ */ double getreal(double min, double max, char item[]) { double y; printf("Enter the %s between $%.2lf and $%.2lf: ", item, min, max); scanf("%lf%*c", &y); while (y < min || y > max) { message("\nError in range. Press Enter to continue.\a"); printf("Enter the %s between $%.2lf and $%.2lf: ", item, min, max); scanf("%lf%*c", &y); } return(y); } /* ================================================================ */ double total(double quantity, double amount) { return (quantity * amount); } /* ================================================================ */ double profit(double profit_price, double profit_cost) { return (profit_price - profit_cost); } /* ================================================================ */ void init_costs(double *t, int x) { int z; for (z = 1; z < x; z++) *(t + z) = 0; } /* ================================================================ */ void show_costs(double *t, int x) { int z; double total = 0; system("cls"); printf(" Product Cost by Type\n\n"); printf("_Type_____________Cost_\n\n"); for (z = 1; z < x; z++) { printf(" %2d%20.2lf\n", z, *(t+z)); total += *(t+z); } printf("________________________\n"); printf("%23.2lf\n\n\n\n", total); printf("Press ENTER to return to the Main Menu..."); getchar(); } /* ================================================================ */ void message(char *msg) { printf("%s\n\n", msg); } /* ================================================================ */ int prompt(char *msg) { int z; do { printf("%s (Y/N)? ", msg); z = toupper(getchar()); if (z != 'Y' && z != 'N') printf("\nError, please enter Y or N only.\n"); } while (z != 'Y' && z != 'N'); return(z); } /* ================================================================ */ int quit() { int TRUE = 1; int FALSE = 0; int z, end = TRUE; z = prompt("\nEnd program\a"); if (z == 'Y') { system("cls"); message("\nSierra Sporting Goods Database closed successfully."); end = FALSE; } return(end); } /* ================================================================ */ int menuerror(int min, int max, char item[]) { int z; printf("%s from %d to %d: ", item, min, max); scanf("%d%*c", &z); while (z < min || z > max) { message("\nError in range.\a"); printf("%s from %d to %d: ", item, min, max); scanf("%d%*c", &z); } return(z); } /* ================================================================ */ void show(int prodnum, int prodtype, char prodscrip[], int prodquan, double cost, double price, double prod_price, double prod_cost, double prod_profit) { printf("\n\n\nThe product number is ----------> %04d\n", prodnum); printf("The product type is ------------> %d\n", prodtype); printf("The product description is -----> %s\n", prodscrip); printf("The quantity is ----------------> %d\n", prodquan); printf("The cost is --------------------> $%.2lf\n", cost); printf("The price is -------------------> $%.2lf\n\n", price); printf("Total product price ----------> $%.2lf\n", prod_price); printf("Total product cost -----------> $%.2lf\n", prod_cost); printf("Total product profit ---------> $%.2lf\n\n\n\n", prod_profit); return; } /* ================================================================ */ void report() { double prod_profit, prod_cost, prod_price; char prodscrip[40]; FILE *fp; struct sports s; fp = fopen("data.dat","ab"); while (fread(&s, sizeof(s), 10, fp) != 0) { show(s.prodnum, s.prodtype, prodscrip, s.prodquan, s.cost, s.price, prod_cost, prod_price, prod_profit); } fclose(fp); printf("Press ENTER to return to the Main Menu..."); getchar(); } /* ================================================================ */
•
•
Join Date: Feb 2008
Posts: 59
Reputation:
Solved Threads: 0
Alright, worked on it for a while and sort of did the report() function but I don't think it's quite the right way, and none of the values are showing up right.
c Syntax (Toggle Plain Text)
// ** Prototypes ** void heading(void); int menu(); int add(); void report(); void getstring(char entry[], char prompt[]); int getint(int min, int max, char prompt[]); double getreal(double min, double max, char prompt[]); double total(double quantity, double amount); double profit(double profit_cost, double profit_price); void init_costs(double t[], int x); void show_costs(double t[], int x); void show(int prodnum, int prodtype, char d[], int prodquan, double cost, double price, double prod_price, double prod_cost, double prod_profit); int menuerror(int min, int max, char prompt[]); int prompt(char msg[]); int quit(void); void message(char msg[]); void firstUpper(char *buf); struct sports { int prodnum; int prodtype; char prodscrip; int prodquan; double cost; double price; }; #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include "10 final.h" /* ================================================================== */ // ** Functions ** int main() { int TRUE = 1; int FALSE = 0; int select, end = TRUE; do { select = menu(); switch (select) { case 1: add(); break; case 2: report(); break; case 3: case 4: case 5: end = quit(); break; default: message("\n\nPlease make a selection between 1 and 5.\a"); } } while (end); return 0; } /* ================================================================ */ int menu() { int choice; system("cls"); printf("Sierra Sporting Goods\n\n"); printf("1 = Add a record\n"); printf("2 = Report\n"); printf("3 = Delete a record\n"); printf("4 = Change a record\n"); printf("5 = Quit\n\n"); choice = menuerror(1, 5, "Enter your selection"); return(choice); } /* ================================================================ */ void heading() { system("cls"); printf("Sierra Sporting Goods\n\n\n"); return; } /* ================================================================ */ int add() { double cost, price, prod_cost, prod_price, prod_profit; double MINCOST; double MAXCOST; double MINPRICE; double MAXPRICE; int prodnum, prodtype, prodquan; int MINPROD; int MAXPROD; int MINTYPE; int MAXTYPE; int MINQUAN; int MAXQUAN; char prodscrip[20]; double types[6]; char choice; FILE *fp; FILE *f; char line[1][6]; init_costs(types,6); struct sports s; fp = fopen("limits.txt", "rt"); if (fp == NULL) { printf("File does not exist"); return 0; } else { fscanf(fp, "%d %d %d %d %d %d %lf %lf %lf %lf", &MINPROD, &MAXPROD, &MINTYPE, &MAXTYPE, &MINQUAN, &MAXQUAN, &MINCOST, &MAXCOST, &MINPRICE, &MAXPRICE); } fclose(fp); f = fopen("data.dat", "ab"); if (f == NULL) { message("Error opening data file\a"); return 1; } do { heading(); s.prodnum = getint(MINPROD, MAXPROD, "product number"); s.prodtype = getint(MINTYPE, MAXTYPE, "product type"); printf("Enter the product description: "); gets(prodscrip); firstUpper(prodscrip); s.prodquan = getint(MINQUAN, MAXQUAN, "product quantity"); s.cost = getreal(MINCOST, MAXCOST, "product cost"); s.price = getreal(MINPRICE, MAXPRICE, "product price"); prod_cost = total(s.prodquan, s.cost); prod_price = total(s.prodquan, s.price); prod_profit = profit(prod_price, prod_cost); types[s.prodtype] += prod_cost; fwrite(&s,sizeof(struct sports),6,fp); show(s.prodnum, s.prodtype, prodscrip, s.prodquan, s.cost, s.price, prod_price, prod_cost, prod_profit); choice = prompt("Would you like to enter another product"); } while (choice != 'N'); getchar(); show_costs(types,6); return 0; fclose(f); } /* ================================================================ */ void firstUpper(char *buf) { while (*buf) // Continue as long as characters available. { while( isspace(*buf) || !isalpha(*buf) ) *buf++; // Skip all spaces until next character. *buf = toupper(*buf); // Capitalize first character after space. while(*buf && !isspace(*buf) ) *buf++; // Skip all characters until next space. } } /* ================================================================ */ int getint(int min, int max, char item[]) { int x; printf("Enter the %s between %d and %d: ", item, min, max); scanf("%d%*c", &x); while (x < min || x > max) { message("\nError in range. Press Enter to continue.\a"); printf("Enter the %s between %d and %d: ", item, min, max); scanf("%d%*c", &x); } return(x); } /* ================================================================ */ double getreal(double min, double max, char item[]) { double y; printf("Enter the %s between $%.2lf and $%.2lf: ", item, min, max); scanf("%lf%*c", &y); while (y < min || y > max) { message("\nError in range. Press Enter to continue.\a"); printf("Enter the %s between $%.2lf and $%.2lf: ", item, min, max); scanf("%lf%*c", &y); } return(y); } /* ================================================================ */ double total(double quantity, double amount) { return (quantity * amount); } /* ================================================================ */ double profit(double profit_price, double profit_cost) { return (profit_price - profit_cost); } /* ================================================================ */ void init_costs(double *t, int x) { int z; for (z = 1; z < x; z++) *(t + z) = 0; } /* ================================================================ */ void show_costs(double *t, int x) { int z; double total = 0; system("cls"); printf(" Product Cost by Type\n\n"); printf("_Type_____________Cost_\n\n"); for (z = 1; z < x; z++) { printf(" %2d%20.2lf\n", z, *(t+z)); total += *(t+z); } printf("________________________\n"); printf("%23.2lf\n\n\n\n", total); printf("Press ENTER to return to the Main Menu..."); getchar(); } /* ================================================================ */ void message(char *msg) { printf("%s\n\n", msg); } /* ================================================================ */ int prompt(char *msg) { int z; do { printf("%s (Y/N)? ", msg); z = toupper(getchar()); if (z != 'Y' && z != 'N') printf("\nError, please enter Y or N only.\n"); } while (z != 'Y' && z != 'N'); return(z); } /* ================================================================ */ int quit() { int TRUE = 1; int FALSE = 0; int z, end = TRUE; z = prompt("\nEnd program\a"); if (z == 'Y') { system("cls"); message("\nSierra Sporting Goods Database closed successfully."); end = FALSE; } return(end); } /* ================================================================ */ int menuerror(int min, int max, char item[]) { int z; printf("%s from %d to %d: ", item, min, max); scanf("%d%*c", &z); while (z < min || z > max) { message("\nError in range.\a"); printf("%s from %d to %d: ", item, min, max); scanf("%d%*c", &z); } return(z); } /* ================================================================ */ void show(int prodnum, int prodtype, char prodscrip[], int prodquan, double cost, double price, double prod_price, double prod_cost, double prod_profit) { printf("\n\n\nThe product number is ----------> %04d\n", prodnum); printf("The product type is ------------> %d\n", prodtype); printf("The product description is -----> %s\n", prodscrip); printf("The quantity is ----------------> %d\n", prodquan); printf("The cost is --------------------> $%.2lf\n", cost); printf("The price is -------------------> $%.2lf\n\n", price); printf("Total product price ----------> $%.2lf\n", prod_price); printf("Total product cost -----------> $%.2lf\n", prod_cost); printf("Total product profit ---------> $%.2lf\n\n\n\n", prod_profit); return; } /* ================================================================ */ void report() { double prod_profit = 0, total_profit = 0; char prodscrip[20]; FILE *fp; struct sports s; system("cls"); fp = fopen("data.dat","ab"); if (fp == NULL) { printf("File does not exist"); return; } else { fread(&s, sizeof(s), 10, fp); printf(" Sierra Sporting Goods\n\n"); printf("__Prod #___Type___Description____________Qty___Cost____Price____Profit__\n\n"); prod_profit = (s.price - s.cost) * s.prodquan; total_profit += prod_profit; printf(" %3d%5d%5s%4d%3.2f%3.2f%3.2f\n", s.prodnum, s.prodtype, prodscrip, s.prodquan, s.cost, s.price, prod_profit); printf("________________________________________________________________________\n"); printf(" Total Expected Profit%46.2f\n\n\n\n", total_profit); printf("Press ENTER to return to the Main Menu..."); getchar(); } fclose(fp); } /* ================================================================ */
![]() |
Similar Threads
- random-access files (C++)
- fstream Tutorial (C++)
- Reading binary files (Python)
- reading ints from a binary file (C)
- File Handling using C++ (C++)
- fread, fwrite issues (C)
- Computer Program Issues (C++)
- Conserving resources and scrolling in files (C)
- C++ raster files (writing structs to a binary file) (C++)
Other Threads in the C Forum
- Previous Thread: use of timer/thread in c language
- Next Thread: brighton's fibboncci sequence
Views: 1026 | Replies: 12
| Thread Tools | Search this Thread |
Tag cloud for C
adobe ansi api array arrays bash binarysearch centimeter char character convert copyanyfile copypdffile createcopyoffile createprocess() csyntax directory drawing dynamic executable feet fflush file floatingpointvalidation fork frequency getlasterror getlogicaldrivestrin givemetehcodez global graphics gtkgcurlcompiling hardware highest homework i/o ide infiniteloop initialization interest intmain() kilometer lazy license linked linkedlist linux linuxsegmentationfault list match matrix meter microsoft multi mysql oddnumber odf open openwebfoundation pattern pause pdf pointer pointers posix power program programming pyramidusingturboccodes read recursion recv recvblocked repetition scheduling segmentationfault send shape single socketprogramming spoonfeeding stack standard strchr string strings structures student suggestions system test testautomation unix urboc user visualstudio voidmain() win32 win32api windows.h






