Whats wrong with the following File Handling program?

Ok.... I have made this c++ program that writes the records on a file and can modify it.

The following modify isn't working.

What's wrong with it? The program might be a bit big but its easy to trace the modify function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include<iostream>
#include<fstream>
#include<cstdio>

using namespace std;

class student
{
        int rno;
        char name[80];
        public:
        void getdetails()
        {
            cout<<"\nEnter Roll Number:-";
            cin>>rno;
            cout<<"\nEnter name:-";
            cin>>name;
        }

        void putdetails()
        {
            cout<<"Roll Number:"<<rno<<"\nName:"<<name<<endl<<endl;
        }

        int returnrno(){return rno;}
};

void addrecord()
{
    ofstream ofile;
    ofile.open("c:\\student.txt",ios::app|ios::binary);
    student s1;
    s1.getdetails();
    ofile.write((char *)&s1,sizeof(s1));
}

void searchrecord()
{
    int query;
    cout<<"\nEnter the record to be searched for:-";
    cin>>query;
    student s1;
    ifstream ifile;
    ifile.open("c:\\student.txt",ios::binary);
    while(ifile.read((char *)&s1,sizeof(s1)))
    {
        if(query==s1.returnrno())
        {
            cout<<"\nRecord found!\n";
            s1.putdetails();
            return;
        }
    }
    cout<<"\nRecord Not Found!\n\n";
}

void modifyrecord()
{
    ifstream ifile;
    ifile.open("c:\\student.txt",ios::binary);
    ofstream ofile;
    ofile.open("c:\\temp.txt",ios::binary);
    int query;
    cout<<"\nEnter the record to be modified:-";
    cin>>query;
    student s1;
    ifile.seekg(0);
    while(ifile.read((char *)&s1,sizeof(s1)))
    {
        if(query==s1.returnrno())
        {
            s1.getdetails();
            ofile.write((char *)&s1,sizeof(s1));
        }
        else
        {
            ofile.write((char *)&s1,sizeof(s1));
        }
    }
    remove("c:\\student.txt");
    rename("c:\\temp.txt","c:\\student.txt");
}

void deleterecord()
{}

void printrecord()
{
    ifstream ifile;
    ifile.open("c:\\student.txt",ios::binary);
    student s1;
    while(ifile.read((char *)&s1,sizeof(s1)))
    {

        cout<<endl;
        s1.putdetails();
    }
    cout<<endl<<endl<<endl;
}


int main()
{
    int ch;
    do
    {
        cout<<"\nMenu\n1.)Add Record\n2.)Search Record\n3.)Modify Record\n4.)Delete Record\n5.)Print Record\n6.)Exit\nEnter choice:-";
        cin>>ch;
        cout<<endl<<endl;
        switch(ch)
        {
            case 1:
                addrecord();
                break;
            case 2:
                searchrecord();
                break;
            case 3:
                modifyrecord();
                break;
            case 4:
                deleterecord();
                break;
            case 5:
                printrecord();
                break;
            case 6:
                break;
            default:
                cout<<"\nInvalid choice!";
        }
    }while(ch!=6);
}
Last edited on
When you say modify isn't working, what exactly isn't working?

Does it find the record it's looking for?

Is the temp file the same content as the data file?

You can help yourself by reading:
http://www.cplusplus.com/forum/articles/1295/
Topic archived. No new replies allowed.