GIDForums  

Go Back   GIDForums > Computer Programming Forums > CPP / C++ Forum
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
 
Thread Tools Search this Thread Rate Thread
  #1  
Old 10-May-2008, 13:25
chopficaro chopficaro is offline
New Member
 
Join Date: May 2008
Posts: 5
chopficaro is on a distinguished road

fwrite


im trying to make a database of patients and i am working on writing 2 of 8 of the functions in the menu. displaypatients is supposed to display all the info for the patients 1 by 1, and addpatient is supposed to add a patient to an array of patientstructs in the file. i currently can add one patient, then display him, that works. but if i try to add another patient, the first gets all messed up. i believe the fault lies with my fwrite function wich is marked with a /**/ before it:


CPP / C++ / C Code:
#include "iostream"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "process.h"
#define maxpatients 8
using namespace std;
 
void main();
 
 
 
struct namestruct
{
    char firstName[32];
    char middleI;
    char lastName[32];
};
 
struct addressstruct
{
    char streetAddress[32];
    char city[32];
    char state[3];
    int zipcode;
};
 
struct locationstruct
{
    int numFloor;
    int numRoom;
    unsigned char subLocation;
};
 
struct geninfostruct
{
    addressstruct address;
    char phoneNumber[12];
};
 
struct insuranceinfostruct
{
    char nameCarrier[32];
    geninfostruct insurancegeninfo;
    float deductable;
};
 
struct datestruct
{
    int day;
    int month;
    int year;
};
 
struct patientstruct
{
    namestruct namepatient;
    int age;
    geninfostruct geninfopatient;
    insuranceinfostruct insurence;
    datestruct dischargedate;
    locationstruct locationpatient;
    char information[1024];
};
 
 
 
char menu()
{
    char option1;
    do
    {
    system("cls");
    printf("press a coresponding key and then press enter to choose an option:\n1. open a file\n2. write database to file\n3. display patients\n4. find a patient\n5. add a patient\n6. delete a patient\n7. move a patient\n8.print out patients by discharge date\n");
    option1 = getchar();
    }
    while (option1<'1' || option1 > '7');
 
    fflush(stdin);
 
    return option1;
}
 
void addpatient(patientstruct (*patientstructpointer)[maxpatients], int (*count)=0)
{
    int numread;
    char yesno;
    FILE *fp;
    fp=fopen("c:\\patientdirectory.txt","r");
    if(fp==NULL)
    {
        printf("file not found. create one?y/n");
        fflush(stdin);
        do
        {
//            scanf_s("%c",&yesno);
            cin>>yesno;
            switch(yesno)
            {    
                case 'y':
                    break;
                case 'n':
                    main();
                    break;
                default:
                    printf("please enter y for yes or n for no and press enter");
                    break;
            }
        }while(yesno!='y');
    }
    else
    {
        while (!feof(fp))
        {
            numread = fread((patientstructpointer)[*count],sizeof(*patientstructpointer),1,fp);
            (*count)++;
        }
    }
 
 
 
 
 
 
 
 
    system("cls");
 
    fflush(stdin);
    printf("\nEnter the patient's first name\n");
    gets_s((*patientstructpointer)[*count].namepatient.firstName);
    fflush(stdin);
    printf("\nEnter the patient's middle initial\n");
    (*patientstructpointer)[*count].namepatient.middleI=getchar();
    fflush(stdin);
    printf("\nEnter the patient's last name\n");
    gets_s((*patientstructpointer)[*count].namepatient.firstName);
    fflush(stdin);
    printf("\nEnter the patient's age\n");
    scanf_s("%d",&(*patientstructpointer)[*count].age);
    fflush(stdin);
    printf("\nEnter the patient's state of residence\n");
    gets_s((*patientstructpointer)[*count].geninfopatient.address.state);
    printf("\nEnter the patient's city of residence\n");
    gets_s((*patientstructpointer)[*count].geninfopatient.address.city);
    fflush(stdin);
    printf("\nEnter the patient's zipcode of residence\n");
    scanf_s("%d",&(*patientstructpointer)[*count].geninfopatient.address.zipcode);
    fflush(stdin);
    printf("\nEnter the patient's street address of residence\n");
    gets_s((*patientstructpointer)[*count].geninfopatient.address.streetAddress);
    fflush(stdin);
    printf("\nEnter the patient's phone number\n");
    gets_s((*patientstructpointer)[*count].geninfopatient.phoneNumber);
    fflush(stdin);
    printf("\nEnter the patient's insurance carrier's name\n");
    gets_s((*patientstructpointer)[*count].insurence.nameCarrier);
    fflush(stdin);
    printf("\nEnter the patient's insurance carrier's state\n");
    gets_s((*patientstructpointer)[*count].insurence.insurancegeninfo.address.state);
    fflush(stdin);
    printf("\nEnter the patient's insurance carrier's city\n");
    gets_s((*patientstructpointer)[*count].insurence.insurancegeninfo.address.city);
    fflush(stdin);
    printf("\nEnter the patient's insurance carrier's zipcode\n");
    scanf_s("%d",&(*patientstructpointer)[*count].insurence.insurancegeninfo.address.zipcode);
    fflush(stdin);
    printf("\nEnter the patient's insurance carrier's street address\n");
    gets_s((*patientstructpointer)[*count].insurence.insurancegeninfo.address.streetAddress);
    fflush(stdin);
    printf("\nEnter the patient's insurance carrier's deductable\n");
    scanf_s("%f",&(*patientstructpointer)[*count].insurence.deductable);
    fflush(stdin);
    printf("\nEnter the patient's year of discharge\n");
    scanf_s("%d",&(*patientstructpointer)[*count].dischargedate.year);
    fflush(stdin);
    printf("\nEnter the patient's month of discharge\n");
    scanf_s("%d",&(*patientstructpointer)[*count].dischargedate.month);
    fflush(stdin);
    printf("\nEnter the patient's day of discharge\n");
    scanf_s("%d",&(*patientstructpointer)[*count].dischargedate.day);
    fflush(stdin);
    printf("\nEnter the patient's floor number\n");
    scanf_s("%d",&(*patientstructpointer)[*count].locationpatient.numFloor);
    fflush(stdin);
    printf("\nEnter the patient's room number\n");
    scanf_s("%d",&(*patientstructpointer)[*count].locationpatient.numRoom);
    fflush(stdin);
    printf("\nEnter the patient's location number\n");
//location
    ((*patientstructpointer)[*count].locationpatient.subLocation)=1;
    int locationnumber;
    scanf_s("%d",&locationnumber);
        switch(locationnumber)
        {    
        case 1:
            break;
        case '2':
            ((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<1;
            break;
        case '3':
            ((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<2;
            break;
        case '4':
            ((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<3;
            break;
        case '5':
            ((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<4;
            break;
        case '6':
            ((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<5;
            break;
        case '7':
            ((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<6;
            break;
        case '8':
            ((*patientstructpointer)[*count].locationpatient.subLocation)=((*patientstructpointer)[*count].locationpatient.subLocation)<<7;
            break;
        default:
            printf("you're fired");
        }
    fflush(stdin);
    printf("\nEnter the patient's description (less than 1023 characters please)\n");
    gets_s((*patientstructpointer)[*count].information);
    fp=fopen("c:\\patientdirectory.txt","w");
/**/fwrite ((patientstructpointer)[*count],sizeof(*patientstructpointer),1,fp);
}
 
 
 
 
 
void displaypatients()
{
    FILE *fp;
    fp=fopen("c:\\patientdirectory.txt","r");
    patientstruct (*patientstructpointer)[maxpatients];
    patientstruct (patientstruct1)[maxpatients];
    (patientstructpointer)=&(patientstruct1);
    int numread;
    int *count;
    int asa;
    count=&asa;
    asa=0;
    numread = fread((patientstructpointer)[*count],sizeof(*patientstructpointer),1,fp);
    fflush(stdin);
    printf("\npatient's first name\n");
    puts((*patientstructpointer)[*count].namepatient.firstName);
    fflush(stdin);
    printf("\npatient's middle initial\n");
    printf("%c",(*patientstructpointer)[*count].namepatient.middleI);
    fflush(stdin);
    printf("\npatient's last name\n");
    puts((*patientstructpointer)[*count].namepatient.firstName);
    fflush(stdin);
    printf("\npatient's age\n");
    printf("%d",(*patientstructpointer)[*count].age);
    fflush(stdin);
    printf("\npatient's state of residence\n");
    puts((*patientstructpointer)[*count].geninfopatient.address.state);
    printf("\npatient's city of residence\n");
    puts((*patientstructpointer)[*count].geninfopatient.address.city);
    fflush(stdin);
    printf("\npatient's zipcode of residence\n");
    printf("%d",(*patientstructpointer)[*count].geninfopatient.address.zipcode);
    fflush(stdin);
    printf("\npatient's street address of residence\n");
    puts((*patientstructpointer)[*count].geninfopatient.address.streetAddress);
    fflush(stdin);
    printf("\npatient's phone number\n");
    puts((*patientstructpointer)[*count].geninfopatient.phoneNumber);
    fflush(stdin);
    printf("\npatient's insurance carrier's name\n");
    puts((*patientstructpointer)[*count].insurence.nameCarrier);
    fflush(stdin);
    printf("\npatient's insurance carrier's state\n");
    puts((*patientstructpointer)[*count].insurence.insurancegeninfo.address.state);
    fflush(stdin);
    printf("\npatient's insurance carrier's city\n");
    puts((*patientstructpointer)[*count].insurence.insurancegeninfo.address.city);
    fflush(stdin);
    printf("\npatient's insurance carrier's zipcode\n");
    printf("%d",(*patientstructpointer)[*count].insurence.insurancegeninfo.address.zipcode);
    fflush(stdin);
    printf("\npatient's insurance carrier's street address\n");
    puts((*patientstructpointer)[*count].insurence.insurancegeninfo.address.streetAddress);
    fflush(stdin);
    printf("\npatient's insurance carrier's deductable\n");
    printf("%f",(*patientstructpointer)[*count].insurence.deductable);
    fflush(stdin);
    printf("\npatient's year of discharge\n");
    printf("%d",(*patientstructpointer)[*count].dischargedate.year);
    fflush(stdin);
    printf("\npatient's month of discharge\n");
    printf("%d",(*patientstructpointer)[*count].dischargedate.month);
    fflush(stdin);
    printf("\npatient's day of discharge\n");
    printf("%d",(*patientstructpointer)[*count].dischargedate.day);
    fflush(stdin);
    printf("\npatient's floor number\n");
    printf("%d",(*patientstructpointer)[*count].locationpatient.numFloor);
    fflush(stdin);
    printf("\npatient's room number\n");
    printf("%d",(*patientstructpointer)[*count].locationpatient.numRoom);
    fflush(stdin);
    printf("\npatient's location number\n");
//location
    int locationnumber;
        switch((*patientstructpointer)[*count].locationpatient.subLocation)
        {    
        case 1:
            locationnumber=1;
            break;
        case (1<<1):
            locationnumber=2;
            break;
        case (1<<2):
            locationnumber=3;
            break;
        case (1<<3):
            locationnumber=4;
            break;
        case (1<<4):
            locationnumber=5;
            break;
        case (1<<5):
            locationnumber=6;
            break;
        case (1<<6):
            locationnumber=7;
            break;
        case (1<<7):
            locationnumber=8;
            break;
        default:
            locationnumber=0;
            printf("you're fired");
        }
        printf("%d",locationnumber);
    fflush(stdin);
    printf("\npatient's description (less than 1023 characters please)\n");
    puts((*patientstructpointer)[*count].information);
    printf("\npress any key to continue\n");
    getchar();
}
 
 
 
 
 
 
 
void main()
{
    patientstruct patientstruct1[maxpatients];
    char entry;
    int count = 0;
    do
    {
        entry = menu();
        switch(entry)
        {        
        case '1':
 
            break;
        case '2':
 
            break;
        case '3':
            displaypatients();
            break;
        case '4':
 
            break;
        case '5':
            addpatient(&patientstruct1,&count);
            break;
        case '6':
 
            break;
        case '7':
 
            break;
        case '8':
 
            break;
        default:
            printf("you're fired");
        }
    }
    while (entry != '7');    
 
 
 
 
 
 
for(;;);
}
 
Last edited by admin II : 10-May-2008 at 20:40. Reason: Changed [CODE] to [CPP]
  #2  
Old 10-May-2008, 14:19
J-M J-M is offline
New Member
 
Join Date: Apr 2008
Posts: 14
J-M is on a distinguished road

Re: fwrite


Hi,

You open file with "w"-flag, before writing to it with that fwrite, which means according to http://www.cplusplus.com/reference/clibrary/cstdio/fopen.html, that existing file is erased from its contents and treated as empty file. You should open your file with "a"-flag for modifying existing file. If file does not exist it is created.

BR,
J-M
  #3  
Old 10-May-2008, 14:41
chopficaro chopficaro is offline
New Member
 
Join Date: May 2008
Posts: 5
chopficaro is on a distinguished road

Re: fwrite


May The Programming Gods Bless U
I Know How To Fix It Tytytyty
 

Recent GIDBlogNARMY by crystalattice

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Need help with fwrite kenkoh C Programming Language 8 17-Feb-2008 23:03

Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The

All times are GMT -6. The time now is 16:02.


vBulletin, Copyright © 2000 - 2008, Jelsoft Enterprises Ltd.