Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2011, 19:46   #1
maxim43k
Новичок
Джуниор
 
Регистрация: 07.09.2011
Сообщений: 7
Вопрос Структура

Суть проблемы такова: надо ввести данные с клавиатуры в структуру (имя, фамилия, возраст (лет), результат: мин. сек.) в файл F1.txt, затем прочитать этот файл, обработать по заданию и сохранить результат в бинарный файл + проверить, что записалось в бинарный файл. Вот как примерно требуется сделать:

Код:
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
 
typedef struct
{char name[20]; //имя сотрудника
 char fam[30];  //фамилия
 int index;     //индекс детали
 int cena;      //цена детали
 int koldet;    //деталей за смену
}BRIGADA;
 
BRIGADA *poisk(int n, char *f1_name, char *f2_name);
 
int size_d=sizeof(BRIGADA);
 
 void main()
{BRIGADA *pt;
 int n;
 char f1_name[20], f2_name[20];
 clrscr();
 cout<<"Введите имя файла Ф1: ";
 cin>>f1_name;
 cout<<"Введите имя файла Ф2 (бинарный): ";
 cin>>f2_name;
 cout<<"Введите число рабочих в бригаде: ";
 cin>>n;
 pt=poisk(n,f1_name,f2_name);
 cout << "Бригадир " << pt->fam << " " << pt->name << " - Передовик";
 getch();
}
 
 BRIGADA *poisk(int n, char *f1_name, char *f2_name)
{char str[100]; 
 BRIGADA mas[100], *k;
 int i, pro;
 fstream f1(f1_name, ios::in | ios::out);
 if (f1.fail())
   {
    cout<<"Ф1 Ошибка!"<<f1.rdstate()<<endl;
   }
 fstream f2(f2_name, ios::in | ios::binary | ios::out);
 if (f2.fail())
    {
     cout<<"Ф2 Ошибка!"<<f2.rdstate()<<endl;
    }
 for(i=0;i<n;i++)
    {
      cout<<"Введите Фамилию: ";
      cin>>mas[i].fam;
      f1<<mas[i].fam<<" ";
      cout<<"Введите Имя: ";
      cin>>mas[i].name;
      f1<<mas[i].name<<" ";
      cout<<"Введите индекс: ";
      cin>>mas[i].index;
      f1<<mas[i].index<<" ";
      cout<<"Введите цену: ";
      cin>>mas[i].cena;
      f1<<mas[i].cena<<" ";
      cout<<"Введите количество деталей: ";
      cin>>mas[i].koldet;
      f1<<mas[i].koldet<<" "<<endl;
    }
  f1<<"\nПроверка считывания из Ф2: \n";
  f2.seekg(0,ios::beg);
  for(i=0;i<n;i++)
  f2.write((char *)&mas[i],size_d);
  f2.seekp(0, ios::beg);
  for(i=0;i<n;i++)
    {
      f2.read((char *)&mas[i],size_d);
      f1<<mas[i].fam<<" ";
      f1<<mas[i].name<<" ";
      f1<<mas[i].index<<" ";
      f1<<mas[i].cena<<" ";
      f1<<mas[i].koldet<<" "<<endl;
    }
  pro=mas[0].cena*mas[0].koldet;
  for(int j=1;j<n;j++)
    {if ((mas[j].cena*mas[j].koldet) > pro)
        {
          pro=mas[j].cena*mas[j].koldet;
          k=&mas[j];
        }
     else k=&mas[0];
    }
  return k;
  f1.close();
  f2.close();
}
А вот как у меня получается:

Код:
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
 
struct time_s
{int min;
 int sec;
};
 
struct athlete
{char name [20];
 char f_name [20];
 int age;
 time_s time;
};
 
void input(athlete* &all, int);
int  process(athlete* &all, int);
void output(athlete* &all, int);
 
void main()
{athlete *all = NULL;
 int count, min;
 count = min = 0;
 cout << "Введите количество спортсменов\n";
 cin >> count;
 input(all, count);
 min = process(all, count);
 output(all, min);
 getch();
}
 
void input(athlete* &all, int count)
{int i;
 all = new athlete[count];
 cout << "Введите данные о спортсменах"
 " (имя, фамилия, возраст, результат в мин. и сек. через пробел):\n";
 for (i = 0; i < count; ++i)
  {cout << i + 1 << ". ";
   cin >> all[i].name;
   cin >> all[i].f_name;
   cin >> all[i].age;
   cin >> all[i].time.min;
   cin >> all[i].time.sec;
  }
}
 
int process(athlete* &all, int count)
{int min = 0;
 for (int i = 0; i < count; i++)
 if (i == 0) min = i;
 else if (all[i].age < all[min].age) min = i;
 return min + 1;
}
 
void output(athlete* &all, int min)
{cout << "\nСамый юный участник:\n";
 cout << "Порядковый номер в реестре: " << min << "\nИмя: "
 << all[min - 1].name << "\nФамилия: " << all[min - 1].f_name
 << "\nВозраст: " << all[min - 1].age << "\nРезультат: "
 << all[min - 1].time.min << " мин. " << all[min - 1].time.sec << " сек. ";
 ofstream file("F2.bin", ios::out | ios::binary);
 file.write((char *)&all[min], sizeof(athlete));
}
Как сделать так, чтобы всё нормально работало и записывалось/считывалось в файлы?
maxim43k вне форума Ответить с цитированием
Старый 08.09.2011, 20:24   #2
Ak1ra
 
Аватар для Ak1ra
 
Регистрация: 19.02.2009
Сообщений: 9
По умолчанию

Цитата:
file.write((char *)&all[min], sizeof(athlete));
А заменить на:
Код:
file << "Порядковый номер в реестре: " << min
<< "\nИмя: " << all [min-1].name
<< "\nФамилия: " << all [min-1].f_name
<< "\nВозраст: " << all [min-1].age
<< "\nРезультат: "
<< all [min-1].time.min << " мин. "
<< all [min-1].time.sec << " сек. ";
file.close ();
Не?

Ну или, если хочешь так извращённо, как у тебя, то добавь в структуру athlete оператор преобразования в char*. Но file.close (); всё равно добавь. =)
Ak1ra вне форума Ответить с цитированием
Старый 08.09.2011, 20:53   #3
maxim43k
Новичок
Джуниор
 
Регистрация: 07.09.2011
Сообщений: 7
По умолчанию

Не, мне не надо извращённо. Как можно проще, а то я совсем ничего уже не соображаю с этим программированием. Можно код в конечном виде?
maxim43k вне форума Ответить с цитированием
Старый 09.09.2011, 12:13   #4
Ak1ra
 
Аватар для Ak1ra
 
Регистрация: 19.02.2009
Сообщений: 9
По умолчанию

Замени последнюю строчку (перед "}") в твоём коде на то, что я написал, и будет тебе в конечном виде. Хотя.. там по условию нужно сначала записать и считать данные с файла F1.txt, но у тебя в коде его в принципе нету. =)

Последний раз редактировалось Ak1ra; 09.09.2011 в 12:18.
Ak1ra вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура С++ Defender42 Помощь студентам 9 09.04.2011 12:45
Структура. Си Usefur Помощь студентам 0 25.12.2010 16:53
Структура Telec Помощь студентам 2 20.01.2010 12:46
Структура Superlotles Помощь студентам 5 14.09.2009 23:29
структура cr1mson Общие вопросы C/C++ 3 14.01.2009 18:08