Цель работы: Изучить возможности модульного программирования в С++.
Задание:
Выполнить упражнения из лабораторной работы №5, разместив описание структуры в заголовочном файле, а определение функций и главную функцию программы – в двух отдельных файлах.
Теоретические сведения:
Модульность в С++ реализуется посредством операторов препроцессора:
1 |
#include <ИМЯ ФАЙЛА> |
Встретив такую директиву компилятор вставляет указанный файл в это место.
Текст программы:
Файл «LAB5.CPP»:
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 |
#include <stdio.h> #include <fstream.h> #include <conio.h> #include <process.h> #include "STRUCT.H" #include "MYFUNC.H" void main() { ifstream InputFile; fstream f; int aaaa=0; f.open("result.bin",ios::in|ios::out|ios::binary); f.write((char *)&aaaa,sizeof(aaaa)); if (f.fail()) {printf("ERROR WRITING FILE.");exit(1);} InputFile.open("note.txt",ios::binary | ios::in,ios::trunc); if (InputFile.fail()) printf("Ошибка открытия файла \"note.txt\"."); while ((!InputFile.eof())&&(!InputFile.fail())) { ReadNotebook(InputFile); if (d>11) { WriteNotebook(f); getch(); } } InputFile.close(); f.seekp(0); f.write((char*)&c,sizeof(c)); f.close(); } |
Файл «MYFUNC.CPP»:
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 |
#include "MYFUNC.H" #include "STRUCT.H" int ReadNotebook(ifstream &InputFile) { InputFile.read((char *)Notebook.model,20); const MAX=1000; char* str1=new char[MAX]; char c; InputFile>>Notebook.price; InputFile>>Notebook.w; InputFile>>Notebook.size.x; InputFile>>c; InputFile>>Notebook.size.y; InputFile>>c; InputFile>>Notebook.size.z; InputFile>>d; InputFile>>d; InputFile>>d; InputFile.getline((char*)str1,MAX); printf("%s\n",Notebook.model) ; printf("Цена=%i\n",Notebook.price); printf("Вес=%f\n",Notebook.w); printf("Габариты: %f,%f,%f\n",Notebook.size.x,Notebook.size.y,Notebook.size.z); printf("Диагональ: %f",d); delete str1; return 1; } void WriteNotebook(fstream &f) { if (f.fail()) {printf("Не удалось открыть выходной файл");exit(1);} c++; // if (f.fail()) {printf("Проихошла ошибка при попытке перемещения указателя.");exit(1);} f.write((char*)&Notebook,sizeof(Notebook)); if (f.fail()) printf("ошибка вывода к \"RESULT.BIN\""); } |
Файл «MYFUNC.H»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#if !defined(AFX_MYFUNC_H__0EE9BFBD_2D61_4610_828C_AEE4D0FC619C__INCLUDED_) #define AFX_MYFUNC_H__0EE9BFBD_2D61_4610_828C_AEE4D0FC619C__INCLUDED_ #include <stdio.h> #include <fstream.h> #include <conio.h> #include <process.h> #include "STRUCT.H" int ReadNotebook(ifstream &InputFile); void WriteNotebook(fstream &f); #endif // !defined(AFX_MYFUNC_H__0EE9BFBD_2D61_4610_828C_AEE4D0FC619C__INCLUDED_) |
Файл «STRUCT.H»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#if !defined(AFX_STRUCT_H__11722BEA_97A3_40C5_ABE0_A9092EE9F540__INCLUDED_) #define AFX_STRUCT_H__11722BEA_97A3_40C5_ABE0_A9092EE9F540__INCLUDED_ struct NOTEBOOK{ char model[21];//наименование struct SIZE{//габаритные размеры float x; float y; float z; }size; float w;//вес int price;//цена }; NOTEBOOK Notebook; float d; int c; #endif // !defined(AFX_STRUCT_H__11722BEA_97A3_40C5_ABE0_A9092EE9F540__INCLUDED_) |
Содержимое файла «note.txt»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Aser Note Light 2699 5.6 02.0x11.8x08.3 100 40 10.4 1 1024x0768 60 0.774 ASW ND5123T 3489 7.2 02.3x11.8x10.1 133 32 12.1 2 1024x0768 70 1.300 ARMNote TS80CD 3699 7.2 02.3x11.5x08.8 133 64 11.3 1 1024x0768 75 1.300 AST Ascentia P50 4499 7.5 02.3x11.3x09.0 133 40 11.3 1 0800x0600 70 0.774 BSI NP8657D 2605 8.0 02.3x11.8x09.3 133 40 11.3 1 1024x0768 60 0.810 BSI NP5265A 3765 8.2 02.5x12.0x09.0 150 32 12.1 2 1024x0768 70 1.300 Dell Xpi P100SD 3459 6.0 02.3x11.0x08.0 100 40 10.3 1 1024x0768 60 0.773 Digital HiNote 4799 4.0 01.3x11.0x08.8 120 40 10.4 1 0800x0600 56 1.000 Gateway Solo S5 4499 5.6 02.0x11.9x08.8 133 40 11.3 2 1024x0768 60 0.686 Hert Z-Optima NB 3995 8.0 02.3x11.9x09.0 150 40 11.2 2 1024x0768 75 1.000 HP OmniBook 5500 6120 7.1 02.0x11.5x09.0 133 64 11.4 1 1024x0768 75 1.300 IBM ThinkPad 560 3749 4.1 01.3x11.8x08.8 120 40 12.1 2 1024x0768 85 0.774 NEC Versa 4080H 4180 6.6 02.3x11.8x09.5 120 48 10.4 1 0800x0600 70 0.776 Polywell Poly 500 3300 7.9 02.3x11.9x09.0 120 40 10.4 1 1024x0768 72 1.000 Samsung SENS 810 3667 8.7 02.3x11.5x09.5 100 32 11.4 2 1024x0768 75 0.773 Twinhead Slimnote 2965 7.4 02.0x11.5x08.0 075 64 10.4 1 1024x0768 70 0.772 |
Вывод: Была составлена программа реализующая указанные действия. Были изучены возможности модульного программирования в С++.