Студопедия

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника



Приведемо текст програми роботи зі структурами з використанням інформації по дискам.




Читайте также:
  1. B.6.4.1. Способы выделения текста.
  2. HTML- язык разметки гипертекста
  3. II. Работа над текстом и его оформление
  4. Lt;variant> текстовую числовую графическую музыкальную комбинированную.
  5. Quot;Підручні" засоби захисту інформації
  6. Quot;Понимание" текста на естественном языке
  7. VI. Методичні вказівки до виконання курсової роботи.
  8. Автоматичне регулювання режиму роботи очисного комбайна 1Г405.
  9. Автоматичне регулювання режиму роботи очисного комбайна 1Г405.
  10. Актуальное членение предложения. Виды связи между предложениями текста.

 

//Програма роботи зі структурами

//з використанням диску

 

#include <iostream>

#include <fstream>

#include <iomanip>

using namespace std;

 

#include <conio.h>

 

#include <windows.h>

 

fstream pp;

 

struct inf_d //Визначення структури

{

long int ob; //число оборотів

int vr; //час доступу до диску

long int kod;//код виробу

double cena; //ціна виробу

char firma[20]; //назва фірми

};

 

int menu(void); //Оголошення функцій: меню,

void v_dan(void); //перегляду,

void readst(int nom = 0); //читання структури

int vib_struct(void); // вибір елемента структури

// переведення символів із кодировки Windows у кодировку DOS

char* recode(char *TXT);

// перевірка символів на числа

bool IsNumeric(char *str, bool dr);

 

//Функція очищення екрану

void cls()

{

system("cls");

}

 

//Функція переходу у точку з координатами X,Y для виведення даних

void GotoXY(int X, int Y)

{

COORD coord = { X, Y };

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);

}

 

// Головна функція програми

void main ()

{

 

int nom_menu;

pp.open("Ot.txt",(ios::in)|(ios::out)

|(ios::app)|(ios::binary));

 

while(1)

{

cls();

nom_menu = menu();

if (nom_menu == 1) v_dan();

if (nom_menu == 2) readst();

if (nom_menu == 3) readst(vib_struct());

if (nom_menu == 4) break;

}

 

pp.close(); //Закриття файла

}

//**************МЕНЮ*********************

 

//Визначення функції меню

int menu()

{

char s[50];

int nom_menu;

long kol_st;

pp.seekg(0L,ios::end);

kol_st = pp.tellg()/sizeof(inf_d);

 

while(1)

{

nom_menu = 0;

 

cls();

GotoXY(27,4);

cout<<recode("Всего структур ")<<kol_st;

GotoXY(20,6);

cout<< "====================================";

GotoXY(20,7);

cout<<recode("| 1 - Ввод данных по дисководу |");

GotoXY(20,8);

cout<<recode("| 2 - Отображение всех данных |");

GotoXY(20,9);

cout<<recode("| 3 - Просмотр заданной структуры |");



GotoXY(20,10);

cout<<recode("| 4 - Выход |");

GotoXY(20,11);

cout<< "====================================\n";

 

 

GotoXY(27,13);

cout << recode("Введите пункт меню ");

gets(s);

 

if (IsNumeric(s, 0))nom_menu = atoi(s);

if ((nom_menu < 1 )||(nom_menu > 4))

{

GotoXY(18,18);

cout<< "----------------------------------------";

GotoXY(18,19);

cout<<recode("| Ошибка! Пункт меню должен быть 1 - 4 |");

GotoXY(18,20);

cout<<recode("| Нажмите любую клавишу |");

GotoXY(18,21);

cout<< "----------------------------------------";

getch();

GotoXY (44,13);

cout << " ";

continue;

}

return nom_menu;

}

}

// Функція вибору номера структури

int vib_struct()

{

char s[50];

int nom_st;

long kol_st;

pp.seekg(0L,ios::end);

kol_st = pp.tellg()/sizeof(inf_d);

 

if(!kol_st)return 0;

 

while(1)

{

nom_st = 0;

cls();

 

GotoXY(1,2);

cout<<recode("Введите номер структуры -> ");

gets(s);

if(IsNumeric(s, 0))nom_st=atoi(s);



if(nom_st<1) continue;

if(nom_st<=kol_st)break;

 

GotoXY(18,10);

cout<< "------------------------------------------";

GotoXY(18,11);

cout<<recode("| Внимание!!! |");

 

GotoXY(18,12);

cout<< recode("| В файле нет")<<setw(3)<<nom_st;

cout<<recode("-й структуры |");

 

GotoXY(18,13);

cout<< recode("| Файл содержит только")<<setw(3)<<kol_st;

cout<<recode(" структур(ы) |");

 

GotoXY(18,14);

cout<<recode("| Нажмите любую клавишу |");

GotoXY(18,15);

cout<< "------------------------------------------";

 

getch();

}

 

return nom_st;

}

 

//*****************ВВЕДЕННЯ**********************

 

// Визначення функції введення даних

void v_dan()

{

 

inf_d dis;

int i;

char s[50];

cls();

 

for(i=0;i<4;i++)

while(1)

{

GotoXY(1,2+2*i);

if(i==0)cout<<recode("Введите число оборотов диска ->");

if(i==1)cout<<recode("Введите время доступа к диску ->");

if(i==2)cout<<recode("Введите код товара ->");

if(i==3)cout<<recode("Введите цену дисковода ->");

 

GotoXY(35,2+2*i);

gets(s);

if(IsNumeric(s,(i==3)?1:0))

{

if(i==0)dis.ob=atoi(s);

if(i==1)dis.vr=atoi(s);

if(i==2)dis.kod=atoi(s);

if(i==3)dis.cena=atof(s);

break;

}

 

GotoXY(35,2+2*i);

cout<<" ";

}

 

GotoXY(1,10);

cout << recode("Введите название фирмы ->");



 

GotoXY(35,10);

gets(dis.firma);

 

//переведення курсору на кінець файла

pp.seekg(0L,ios::end);

pp.write((char*)&dis,sizeof(dis));//Запис на диск

}

 

//****************ЧИТАННЯ*********************

//Функція читання даних з диску

void readst(int nom_st)

{

inf_d od;

long kol_st, ch_b = 0;

cls();

 

pp.seekg(ch_b,ios::end);

 

kol_st = pp.tellg()/sizeof(inf_d);

 

if(!kol_st)

{

GotoXY(18,10);

cout<< "-----------------------------------------";

GotoXY(18,11);

cout<<recode("| Внимание! В файле нет информации |");

GotoXY(18,12);

cout<<recode("| Для ввода используйте пункт 1 меню |");

GotoXY(18,13);

cout<<recode("| Нажмите любую клавишу |");

GotoXY(18,14);

cout<< "-----------------------------------------";

getch();

return;

}

 

 

if(nom_st > 0)ch_b = sizeof(od)*(nom_st-1);

pp.seekg(ch_b,ios::beg);//Відкриття файла

//Читання файла з диска

 

cout<<recode("\n Данные по дискам:\n");

 

while(1)

{

pp.read((char *)&od, sizeof(od));

// Очистка біту помилки (clear()) та вихід з циклу

if(pp.eof()){pp.clear();break;}

cout<<"\n";

cout<<recode(" обороты-")<<setw(3)<<od.ob;

cout<<recode(" время-")<< setw(5)<<od.vr;

cout<<recode(" код-") << setw(3)<<od.kod;

cout<<recode(" цена-")<< setw(7)<<od.cena;

cout<<recode(" фирма- ")<< od.firma;

if(nom_st)break;

}

getch();

}

 

// Функція переведення кодировки із Windows у DOS

char* recode(char *TXT)

{

 

static char buf[257];

strcpy(buf,TXT);

 

unsigned int i,kol;

kol = strlen(buf);

 

for(i=0;i<kol;i++)

{

if (buf[i]>='А'&&buf[i]<='п')buf[i]-=64;

if (buf[i]>='р'&&buf[i]<='я')buf[i]-=16;

}

 

return buf;

}

 

// Функція перевірки символів на числа

// Вхід:

// str - строка символів;

// dr = false (0) - перевірка на ціле число;

// dr = true (1) - перевірка на дробове число;

// Повертання:

// true - перевірка пройшла успішно

// false - введено не числове значення, або число не задовільняє умовам.

 

Bool

IsNumeric(char *str, bool dr)

{

int i;

if (!strlen(str) || str[0] == '.')return false ;

for (i = 0; i < (int)strlen(str); i++ )

{

if (i == 0 && (str[0] == '+' || str[0] == '-')) continue;

if ((str[i] >= '0' && str[i] <='9') ||

str[i]=='.') continue;

return false;

}

int pos = 0;

for (i = 0; i < (int)strlen(str);i++)

if (str[i]=='.')pos++;

if ( (!dr && pos) || (pos > 1)) return false ;

return true;

}

Контрольні питання

 

1. Що таке структура? Опис структури.

2. Наведіть приклади ініціалізації структури.

3. Як записати структуру до файлу?

4. Як зчитати структуру з файлу?

5. Розкрийте сутність вкладених структур.

6. Розкрийте сутність масивів структур.

7. Наведіть приклад запису на диск масиву структур.

8. Наведіть приклад зчитування з диску масиву структур.

9. Розкрийте сутність функції перекодування рядків із Windows у DOS – recode ().

10. Розкрийте сутність функції контролю числових даних IsNumeric().

 


Дата добавления: 2014-12-30; просмотров: 22; Нарушение авторских прав







lektsii.com - Лекции.Ком - 2014-2021 год. (0.037 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты