| | |
File Processing Creation/Display Error
Please support our C advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Oct 2008
Posts: 9
Reputation:
Solved Threads: 0
Hello, the program I have creates a database and lets you update/add/delete any information you want about hardware items. My problem is.. after I exit the program, all the data is lost in the binary file. I need to keep a database in a binary file and update it everytime the user runs the program. I'm confused on how to go about that. example: I run the program and add a item called jigsaw, then exit.
The next time I run the program, I should have a jigsaw in my database.
My other problem is. I already designed the program to send the information to a text file, is there anyway to simply change that and just have the information stored in the file displayed in the program, not in a text file?
here is my program as of right now with information sending to text file and other problem
The next time I run the program, I should have a jigsaw in my database.
My other problem is. I already designed the program to send the information to a text file, is there anyway to simply change that and just have the information stored in the file displayed in the program, not in a text file?
here is my program as of right now with information sending to text file and other problem
=C Syntax (Toggle Plain Text)
#include <stdlib.h> #include <stdio.h> #include<string.h> struct hardwareData{ int RecordNum; char ToolName[ 20 ]; int quantity; double cost; }; int enterChoice( void ); void textFile( FILE *readPtr ); void updateRecord( FILE *fPtr ); void newRecord( FILE *fPtr ); void deleteRecord( FILE *fPtr ); int main( void ) { FILE *cfPtr; int choice; if ( ( cfPtr = fopen( "hardware.dat", "wb+" ) ) == NULL ) { printf( "File could not be opened. \n" ); } else { while ( ( choice = enterChoice() ) != 5 ) { switch ( choice ) { case 1: textFile( cfPtr ); break; case 2: updateRecord( cfPtr ); break; case 3: newRecord( cfPtr ); break; case 4: deleteRecord( cfPtr ); break; default: printf( "Incorrect choice \n" ); break; } } fclose( cfPtr ); } system("pause"); return 0; } void textFile( FILE *readPtr ) { FILE *writePtr; struct hardwareData hardware = { 0, "", 0, 0.0 }; if ( ( writePtr = fopen( "hardware.list.txt", "w" ) ) == NULL ) { printf( "File could not be opened. \n" ); } else { rewind( readPtr ); fprintf( writePtr, "%-12s%-20s%-11s%10s\n", "Record #", "Tool Name", "Quantity","Cost" ); while ( fread( &hardware, sizeof( struct hardwareData ), 1, readPtr ) == 1 ){ if (hardware.RecordNum != 0){ fprintf( writePtr, "%-12d%-20s%-11d%10.2f\n", hardware.RecordNum, hardware.ToolName, hardware.quantity, hardware.cost ); } } } fclose( writePtr ); } void updateRecord( FILE *fPtr ) { int record; int newquantity = 0; double newcost = 0; char NewToolName[20]; struct hardwareData hardware = { 0, "", 0, 0.0 }; printf( "Enter record to update ( 1 - 100 ): " ); scanf( "%d", &record ); fseek( fPtr, ( record - 1 ) * sizeof( struct hardwareData ), SEEK_SET ); fread( &hardware, sizeof( struct hardwareData ), 1, fPtr ); if ( hardware.RecordNum == 0 ) { printf( "Record #%d has no information. \n", record ); } else { printf( "%-12s%-20s%-11s%10s\n", "Record #", "Tool Name", "Quantity","Cost" ); printf( "%-12d%-20s%-11d%10.2f\n\n", hardware.RecordNum, hardware.ToolName, hardware.quantity, hardware.cost ); printf( "Enter new tool name (Without Spaces), Quantity, and Cost: " ); scanf( "%s%d%lf", &NewToolName, &newquantity, &newcost ); hardware.quantity = newquantity; hardware.cost = newcost; strcpy(hardware.ToolName, NewToolName); printf( "%-12s%-20s%-11s%10s\n", "Record #", "Tool Name", "Quantity", "Cost" ); printf( "%-12d%-20s%-11d%10.2f\n", hardware.RecordNum, hardware.ToolName, hardware.quantity, hardware.cost ); fseek( fPtr, ( record - 1 ) * sizeof( struct hardwareData ), SEEK_SET ); fwrite( &hardware, sizeof( struct hardwareData ), 1, fPtr ); } } /* delete an existing record */ void deleteRecord( FILE *fPtr ) { struct hardwareData hardware; struct hardwareData blankHardware = { 0, " ", 0, 0 }; int RecordNum; printf( "Enter record number to delete ( 1 - 100 ): " ); scanf( "%d", &RecordNum ); fseek( fPtr, ( RecordNum - 1 ) * sizeof( struct hardwareData ), SEEK_SET ); fread( &hardware, sizeof( struct hardwareData ), 1, fPtr ); if ( hardware.RecordNum == 0 ) { printf( "Record %d does not exist.\n", RecordNum ); } else { fseek( fPtr, ( RecordNum - 1 ) * sizeof( struct hardwareData ), SEEK_SET ); fwrite( &blankHardware, sizeof( struct hardwareData ), 1, fPtr ); } } /* create new record */ void newRecord( FILE *fPtr ) { struct hardwareData hardware = { 0, "", 0, 0.0 }; int RecordNum; printf( "Enter new record number ( 1 - 100 ): " ); scanf( "%d", &RecordNum ); fseek( fPtr, ( RecordNum - 1 ) * sizeof( struct hardwareData ), SEEK_SET ); fread( &hardware, sizeof( struct hardwareData ), 1, fPtr ); if ( hardware.RecordNum != 0 ) { printf( "Account #%d already contains information.\n", hardware.RecordNum ); } else { printf( "Enter tool name (Without Spaces), quantity, cost\n? " ); scanf( "%s%d%lf", &hardware.ToolName, &hardware.quantity, &hardware.cost ); hardware.RecordNum = RecordNum; fseek( fPtr, ( hardware.RecordNum - 1 ) * sizeof( struct hardwareData ), SEEK_SET ); fwrite( &hardware, sizeof( struct hardwareData ), 1, fPtr ); } } int enterChoice( void ) { int menuChoice; printf( "\nEnter your choice\n" "1 - Store a formatted text file of acounts called\n" " \"hardware.list.txt\" for printing\n" "2 - Update a record\n" "3 - Add a new record\n" "4 - Delete a record\n" "5 - End program\n? " ); scanf( "%d", &menuChoice ); return menuChoice; }
The problem is the way the program opens the file on line 22 of the code you posted. "wb+" will delete the contents of the file if the file already exists. Read about the open flags here.
Don't PM me with questions -- you might get a nasty PM in response. If you have a question then post it in one of the forums.
![]() |
Similar Threads
- Cannot find server or DNS Error - please help! (Viruses, Spyware and other Nasties)
- home work help funcations and arry issues (C)
Other Threads in the C Forum
- Previous Thread: need help!!!
- Next Thread: Can I get some help
| Thread Tools | Search this Thread |
adobe api array arrays bash binarysearch calculate char cm convert copyanyfile copypdffile cprogramme createcopyoffile createprocess() csyntax directory dynamic feet fflush file floatingpointvalidation fork forloop frequency getlasterror givemetehcodez global graphics gtkgcurlcompiling hacking hardware highest homework i/o inches incrementoperators initialization intmain() iso km linked linkedlist linux linuxsegmentationfault list locate logical_drives loopinsideloop. match matrix microsoft motherboard mqqueue multi mysql oddnumber odf open opendocumentformat opensource openwebfoundation pattern pdf performance pointer pointers posix power program programming pyramidusingturboccodes read recursion recv recvblocked repetition scanf scheduling scripting segmentationfault send shape socketprograming socketprogramming stack standard strchr string strings suggestions test testautomation unix urboc user variable voidmain() win32api windows.h






