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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 02:46   #1
Troi666
Пользователь
 
Регистрация: 01.12.2008
Сообщений: 58
По умолчанию [C++] Структуры, файлы

Подскажите плиз, оставит ли эта функция поток открытым в других функциях?

Цитата:
Задание:Необходимо создать программу для работы с собственной базой данных, в которой следует предусмотреть создание меню со следующими пунктами:
-newFile (создание нового файла);
-viewFile (просмотр файла);
-addFile (добавление новой записи);
-runFile (выполнение программы);
Список включает следующие поля:
-название начального пункта назначения;
-название конечного пункта назначения;
-номер маршрута;
Написать программу, выполняющие следующие действия:
-ввод с клавиатуры данных в массив, записи должны быть упорядочены по номерам маршрутов;
-вывод на дисплей информации о маршруте, номер которого введён с клавиатуры;
-вывод на экран информации о маршрутах, которые начинаются или оканчиваются в пункте, название которого введено с клавиатуры;
-если таких маршрутов нет, вывести соответствующее сообщение.
Код:
void openFile()
{
   char imya_faila[20];
   do
   {
      cout<<"Otkrivaem fail.....\nVvedite imya!\n";
      cin>>imya_faila;
      ifstream fin(imya_faila);
      if (!fin.is_open())
      {
         cout<<"Ne mogu otkrit` fail! Poprobui drugoe imya!\n";
         fin.clear();
         continue;
      }
      else break;
   }
   while (true);
}
Остальное то, что пока готово:

Код:
#include <iostream>
#include <conio>
#include <fstream>
using namespace std;

struct marshrut
{
   char pt_nach[20];
   char pt_kon[20];
   int n_marsh;
};

void newFile();
void openFile();
void viewFile();
void addFile();

void newFile()
{
   char imya_faila[20];
   cout<<"Sozdaetsya fail.....\nVvedite imya!\n";
   cin>>imya_faila;
   ofstream fout(imya_faila);
}

void openFile()
{
   char imya_faila[20];
   do
   {
      cout<<"Otkrivaem fail.....\nVvedite imya!\n";
      cin>>imya_faila;
      ifstream fin(imya_faila);
      if (!fin.is_open())
      {
         cout<<"Ne mogu otkrit` fail! Poprobui drugoe imya!\n";
         fin.clear();
         continue;
      }
      else break;
   }
   while (true);
}

void viewFile()
{
}

void addFile()
{
}

void main()
{
   int vibor;
   do
   {
      cout<<"======Viberite punkt menu======\n"
      <<"1-newFile\n2-openFile\n3-viewFile\n4-addFile\n5-runFile\n6-EXIT\a\n";
      cin>>vibor;
      switch (vibor)
      {
         case 1: newFile();break;
         case 2: openFile();break;
         case 3: viewFile();break;
         case 4: addFile();break;
         case 5: break;
         case 6: break;
         default: cout<<"\nTrevoga! Narushenie tselostnosti sistemi!\n\n";break;
      }
   }
   while(vibor!=6);
}
Troi666 вне форума Ответить с цитированием
Старый 09.05.2009, 21:03   #2
Troi666
Пользователь
 
Регистрация: 01.12.2008
Сообщений: 58
По умолчанию

Прога стала рабочей, но напрягает то, что приходится каждый раз запрашивать имя файла... Можно ли её как-нить переделать так, чтобы оно меньше раз запрашивалось (допустим с возвратом функции openFile [есть в первом посте])? Можете проверить прогу на утечку памяти и на возможность уменьшения кода? Есть подозрения, что в addFile я налепил лишнего... Если что непонятно - скажите - откомментирую! Спасибо!

Код:
#include <iostream>
#include <conio>
#include <fstream>
#include <iomanip>
using namespace std;

struct marshrut
{
   char pt_nach[15];
   char pt_kon[15];
   int n_marsh;
};

void newFile();
void viewFile();
void addFile();
void runfile();

void newFile()
{
   cout<<"Sozdaetsya fail.....\nVvedite imya!\n";
   char imya_faila[20];
   cin.getline(imya_faila,20);
   ofstream fn(imya_faila, ios_base::out | ios_base::trunc | ios_base::binary);
   cout<<"OK!\n\n";
   fn.close();
}

void viewFile()
{
   cout<<"Proizvodim vskritie...\n Chto vskrivaem?\n";
   char imya_faila[20];
   cin.getline(imya_faila,20);
   ifstream fn(imya_faila, ios_base::in | ios_base::binary);
   if (!fn.is_open())
   {
      cout<<"Fail ne naiden!\n\n";
      fn.clear();
      return;
   }
   cout<<setfill(' ')<<setw(20)<<"PUNKT OTPRAVLENIYA"
   <<setw(22)<<"PUNKT NAZNACHENIYA"
   <<setw(19)<<"NOMER MARSHRUTA\n";
   marshrut temp;
   while (fn.read((char*)&temp, sizeof temp))
   {
      cout<<setw(20)<<setfill('.')<<temp.pt_nach
      <<setw(2)<<setfill(' ')<<" "<<setw(20)<<setfill('.')<<temp.pt_kon
      <<setw(2)<<setfill(' ')<<" "<<setw(17)<<setfill('.')<<temp.n_marsh<<"\n";
   }
}

void addFile()
{
   cout<<"Kuda dobavlyaem?\n";
   char imya_faila[20];
   cin.getline(imya_faila,20);
   ifstream fin(imya_faila, ios_base::in | ios_base::binary);
   if (!fin.is_open())
   {
      cout<<"Fail ne naiden!\n\n";
      fin.clear();
      return;
   }
   marshrut temp;
   int n=0;
   while (fin.read((char*)&temp,sizeof temp) && ++n);
   marshrut *yk=new marshrut[n+1];
   fin.clear();
   fin.seekg(0,ios_base::beg);
   for(int i=0;i<n;i++)
   {
      fin.read((char*)&temp,sizeof temp);
      yk[i]=temp;
   }
   fin.close();
   cout<<"Dobavlyaem strukturu...\nVvedite punkt otpravleniya:\n";
   cin.getline(temp.pt_nach,15);
   cout<<"Vvedite punkt naznacheniya:\n";
   cin.getline(temp.pt_kon,15);
   cout<<"Vvedite nomer marshruta:\n";
   cin>>temp.n_marsh;
   yk[n]=temp;
   for (int i=0;i<n;i++)
      if (yk[n].n_marsh<yk[i].n_marsh)
      {
         temp=yk[n];
         yk[n]=yk[i];
         yk[i]=temp;
      }
   ofstream fout(imya_faila, ios_base::out | ios_base::binary);
   for (int i=0;i<n+1;i++)
      fout.write((char*)&(yk[i]),sizeof *(yk+i));
   delete []yk;
}

void runfile()
{
   cout<<"Imya faila?\n";
   char imya_faila[20];
   cin.getline(imya_faila,20);
   ifstream fin(imya_faila, ios_base::in | ios_base::binary);
   if (!fin.is_open())
   {
      cout<<"Fail ne naiden!\n\n";
      fin.clear();
      return;
   }
   cout<<"Vvedite punkt, po kotoromu hotite poluchi` informatsiyu:\n";
   char punkt[15];
   cin.getline(punkt,15);
   marshrut temp;
   bool flag=false;
   while (fin.read((char*)&temp,sizeof temp))
      if (!strcmp(punkt,temp.pt_nach) || !strcmp(punkt,temp.pt_kon))
      {
         cout<<setw(20)<<setfill('.')<<temp.pt_nach
         <<setw(2)<<setfill(' ')<<" "<<setw(20)<<setfill('.')<<temp.pt_kon
         <<setw(2)<<setfill(' ')<<" "<<setw(17)<<setfill('.')<<temp.n_marsh<<"\n";
         flag=true;
      }
   if (!flag)
      cout<<"Takih marshrutov net!\n";
}

void main()
{
   int vibor;
   do
   {
      cout<<"======Viberite punkt menu======\n"
      <<"1-newFile\n2-viewFile\n3-addFile\n4-runFile\n5-EXIT\a\n";
      (cin>>vibor).get();
      switch (vibor)
      {
         case 1: newFile();break;
         case 2: viewFile();break;
         case 3: addFile();break;
         case 4: runfile();break;
         case 5: break;
         default: cout<<"\nTrevoga! Narushenie tselostnosti sistemi!\n\n";break;
      }
   }
   while(vibor!=5);
}
Troi666 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры masha.dongyz Помощь студентам 2 19.12.2011 20:29
Структуры и файлы С Nina+ Помощь студентам 5 16.04.2009 22:20
Структуры и файлы. Проблема с сохранением. Hacker19_90 Общие вопросы C/C++ 2 20.03.2009 17:35
Пишу программу которая ищет файлы на компьютере ! Как лучше организовать структуры данных ? asked86 Общие вопросы Delphi 13 14.12.2008 19:33
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53