-
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
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153
본 자료는 10페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.

-
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
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153


목차
1. 포인터변수
2. 다차원배열
3. C++ 프로토타입
4. C++ 스트림 I/O
5. void 포인터
6. new, delete
7. 레퍼런스에 의한 전달
8. 함수 오버로딩
9. 추상 데이터 형
10. 데이터 멤버와 멤버 함수
11. 프렌드 함수
12. 연산자 오버로드
13. 출력을 위한 << 오버로딩
14. 생성자와 소멸자
15. 상속성의 구조
16. 복합과 상속
17. 초기 바인딩과 지연 바인딩
18. 순차 파일
2. 다차원배열
3. C++ 프로토타입
4. C++ 스트림 I/O
5. void 포인터
6. new, delete
7. 레퍼런스에 의한 전달
8. 함수 오버로딩
9. 추상 데이터 형
10. 데이터 멤버와 멤버 함수
11. 프렌드 함수
12. 연산자 오버로드
13. 출력을 위한 << 오버로딩
14. 생성자와 소멸자
15. 상속성의 구조
16. 복합과 상속
17. 초기 바인딩과 지연 바인딩
18. 순차 파일
본문내용
#include
class Item
{
public:
char partCode[5];
char descript[20];
int num;
float price;
Item() {}
Item(char P[], char D[], int N, float PR) : num(N), price(PR)
{
strcpy(partCode, P);
strcpy(descript, D);
}
};
class Inventory
{
Item parts[50];
public:
Inventory() {}
void prData();
void fromDisk();
};
void Inventory::prData()
{
int ctr = 0;
cout << setprecision(2) << setiosflags(ios::showpoint) << setiosflags(ios::fixed);
while (parts[ctr].partCode[0])
{
cout << "Part number: " << parts[ctr].partCode;
cout << "\tDescription: " << parts[ctr].descript << "\n";
cout << "Number in stock: " << parts[ctr].num;
cout << "\tPrice: $" << parts[ctr].price << "\n\n";
ctr++;
}
}
void Inventory::fromDisk()
{
ifstream invIn("INV.DAT");
if (!invIn)
{
cerr << "File doesn't exit!\n";
exit(1);
}
invIn.read((char *)this, sizeof(*this));
// read() 함수는 기록될 데이터의 바이트 수를 알아야 하는데, sizeof() 인수가 그것이다
}
void main()
{
Inventory parts;
parts.fromDisk();
parts.prData();
}
출력
---------------------------------------------------------------------------------
Part number: 3WI Description: Widgets
Number in stock: 14 Price: $2.34
Part number: 1BOL Description: Large Bolts
Number in stock: 36 Price: $0.45
Part number: 7WN Description: Wing Nuts
Number in stock: 109 Price: $0.17
◇ 랜덤-액세스 파일 ◇
☞ 파일 포인터는 항상 파일에서 액세스할 수 있는 다음 위치를 가리킨다. 파일 포인터를 이동시 키기 위해서는 seekg() 멤버 함수를 사용한다. 다음은 seekg() 멤버 함수의 형식이다.
seekg(offset, FileLoc);
offset은 FileLoc으로부터 액세스하고자 하는 바이트가 얼마나 되는지 알려주는 long integer로 표현된다. FileLoc은 ios::beg, ios::cur, ios::end의 세가지 위치 가운데 하나일 수 있다.
ios::beg는 파일에서 시작 바이트를 참조하며, ios::cur는 파일의 현재 위치를 참조한다. 그리고 ios::end는 파일의 마지막 바이트를 참조한다.
#include
class Item
{
public:
char partCode[5];
char descript[20];
int num;
float price;
void prData(int I)
{
cout << "Record number " << I << ":\n";
cout << "Part: " << partCode;
cout << "\tDescription: " << descript;
cout << "\nNumber: " << num;
cout << "\tPrice: " << price << "\n\n";
}
};
main()
{
fstream ioFile;
Item invItem;
ioFile.open("INV.DAT", ios::in | ios::out);
ioFile.seekg(0, ios::beg);
ioFile.read((char *)&invItem, sizeof(invItem));
invItem.prData(1);
ioFile.seekg(2 * sizeof(invItem), ios::beg);
ioFile.read((char *)&invItem, sizeof(invItem));
invItem.prData(3);
ioFile.seekg(sizeof(invItem), ios::beg);
ioFile.read((char *)&invItem, sizeof(invItem));
invItem.prData(2);
ioFile.seekg(0, ios::beg);
ioFile.read((char *)&invItem, sizeof(invItem));
ioFile.seekg(0, ios::beg);
invItem.price = 0.0;
ioFile.write((char *)&invItem, sizeof(invItem));
ioFile.seekg(0, ios::beg);
ioFile.read((char *)&invItem, sizeof(invItem));
invItem.prData(1);
return 0;
}
출력
---------------------------------------------------------------------------------
Record number 1:
Part: 3WI Description: Widgets
Number: 14 Price: 2.34
Record number 3:
Part: 7WN Description: Wing Nuts
Number: 109 Price: 0.17
Record number 2:
Part: 1BOL Description: Large Bolts
Number: 36 Price: 0.45
Record number 1:
Part: 3WI Description: Widgets
Number: 14 Price: 0
소개글