Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в файле... Нужна помощь... 
:(
    Опции темы
hen
Дата 11.4.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.4.2009

Репутация: нет
Всего: нет



Плиз.. помогите доработать код, мне необходимо было создать программу которая читатет файл 'd:\file.txt' , создает и копирует всё его содержимое в типизированный файл 'd:\out.dat'. 
А теперь мне необходимо создать функцию 'void opt()', т.е. которая работает по типу вводишь число равное 500 если оптовая цена какого-либо монитора равна 500 то нужно вывести на экран всю строку с этим монитором(название, оптовую и розничную цены)
Программа должна содержать меню:
1 Запись в файл
2 Вывод на экран
3 Очистка файла //очистка файла 'out.dat'
4 Поиск
5 Выход

Код

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

struct mon {
  char type[20];
  int opt, rozn;
  char comm[40];
};
int kol=0;
void WriteFile()
{
    FILE *fi,*fo;
     clrscr();
     if ((fi=fopen("D:\\file.txt", "r"))==0){
      cout << "Error open input file!!!" ;
      return;}
     if ((fo=fopen("D:\\out.dat","w+b"))==0){
      cout << "Error open output file!!!";
      return;}
     const int dl=80;
     char s[dl];
    mon a;
    while(fgets(s,dl,fi)){
    strncpy(a.type,s,19);
    a.type[19]='\0';
    a.opt=atoi(&s[20]);
    a.rozn=atoi(&s[25]);
    strncpy(a.comm,&s[30],40);
    fwrite(&a,sizeof(mon),1,fo);
    kol++;
    };
    fclose(fi);
    fclose(fo);

    return;
}

void out()
{
    FILE *fo;
    clrscr();
    if ((fo=fopen("D:\\out.dat","rb"))==0){
      cout << "Error open output file!!!";
      return ;}
    int i;
    cout<<"Input number of Zapisi ";
    cin >>i;//после ввода i не забываем нажать Enter
    if (i>kol) {
      cout << "Zapisi net!!!";
      return;}

    mon a;
    fseek(fo,sizeof(mon)*(i-1),SEEK_SET);
    fread(&a,sizeof(mon),1,fo);
    cout << "Tip: " << a.type << " opt.: " << a.opt << " rozn: " << a.rozn << endl;
    fclose(fo);
}

void ClearFile()
{
    FILE *fo;
    clrscr();
    if ((fo=fopen("D:\\out.dat","wb"))==0){
    cout << "Error open output file!!!"<<endl;
      return ;}
    fclose(fo);
}

void Search()
{
 char menu_2;
 clrscr();
 do
 {
   cout <<endl<< " Optovaya" << endl <<"4 Vozvrat v gl. menu"<< endl;
   menu_2=getch();
   switch(menu_2)
   {
     case '1':
       WriteFile();
       break;
     case '2':
       out();
       break;
     case '3':
       ClearFile();
       break;
      };
   if (menu_2=='4') break;
 }
 while(1);
clrscr();
}

void main()
{
 char menu;
 int i;
 kol=0;
 clrscr();
 do
 {
   cout <<endl<< "1 Zapis' v file" << endl <<"2 Vivod na ekran" << endl << "3 Ochistka file" << endl << "4  Search..."<< endl << "5 Vichod" << endl;
   menu=getch();
   switch(menu)
   {
     case '1':
       WriteFile();
       break;
     case '2':
       out();
       break;
     case '3':
       ClearFile();
       break;
     case '4':
       Search();
       break;
         };
   if (menu=='5') break;
 }
 while(1);
}

Сам текстовый файл содержит информацию о мониторах...
Код

Huindai             350  400  plohoi                                  l
Samsung             500  550  norma                                   l
Sony                300  400  rtye                                    l
Acer                200  350  hgfak                                   l

вот в поиске как раз осуществляется поиск из файла по оптовой цене...
оптовая цена это вторая колонка...
если расценивать по строкам на название отводится 20 символов, на оптовую и розничную цены по 5 символов, на комментарии 40 символов...
Плиз помогите составить данную функцию..
PM MAIL   Вверх
Dmi3ev
Дата 12.4.2009, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



берешь свою структуру
Код

struct mon {
  char type[20];
  int opt, rozn;
  char comm[40];
};

только в файле у тебя еще есть l на конце, поэтому модифицирую твой код
Код

struct mon {
  char type[20];
  int opt, rozn;
  char comm[40];
  char l;
};

и читаешь из файла в нее, при этом при условии совпадения цены мы выводим на экран... вот пример проги...
Код

#include <iostream>
#include <fstream>
using namespace std;

struct mon {
  char type[20];
  int opt, rozn;
  char comm[40];
  char l;
};

int my_query(int price)
{
    ifstream fi;
    mon buf;
    fi.open("D:\\1.txt");
    if (!fi)
    {
        cout<<"error"<<endl;
        return -1;
    }
    while (!fi.eof())
    {
        fi>>buf.type>>buf.opt>>buf.rozn>>buf.comm>>buf.l;
        if (buf.opt==price)
        {
            cout<<buf.type<<" "<<buf.opt<<" "<<buf.rozn<<" "<<buf.rozn<<" "<<buf.comm<<" "<<buf.l<<endl;
        }
    }
    fi.close();
    return 0;
}
int main()
{
    int p;
    cout<<"Enter price:"<<endl;
    cin>>p;
    my_query(p);
    system ("pause");
    return 0;
}


Это сообщение отредактировал(а) Dmi3ev - 12.4.2009, 00:37


--------------------

PM MAIL   Вверх
hen
Дата 12.4.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.4.2009

Репутация: нет
Всего: нет



спс, объясни пожалуйста некоторые места в этом коде, а можно его как-нибудь полегче оформить, а то мы половину мест не изучали..
Код

int my_query(int price)
{
    ifstream fi;  // ??
    mon buf;
    fi.open("D:\\1.txt"); // это тоже самое что fi=fopen("D:\\1.txt") 
    if (!fi) // ??
    {
        cout<<"error"<<endl;
        return -1; // что значит '-1'
    }
    while (!fi.eof()) // в скобках while что за условие записано??
    {
        fi>>buf.type>>buf.opt>>buf.rozn>>buf.comm>>buf.l;
        if (buf.opt==price)
        {
            cout<<buf.type<<" "<<buf.opt<<" "<<buf.rozn<<" "<<buf.rozn<<" "<<buf.comm<<" "<<buf.l<<endl;
        }
    }
    fi.close();
    return 0;
}
int main()
{
    int p;
    cout<<"Enter price:"<<endl;
    cin>>p;
    my_query(p);
    system ("pause");
    return 0;
}

PM MAIL   Вверх
ilyuha
Дата 12.4.2009, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 10.7.2007

Репутация: нет
Всего: нет



PM MAIL   Вверх
zim22
Дата 12.4.2009, 11:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Код

int my_query(int price)
{
    ifstream fi;  // в этой переменной будет содержимое файла храниться
    mon buf;
    fi.open("D:\\1.txt"); // это тоже самое что fi=fopen("D:\\1.txt") . да, тоже самое.
    if (!fi) // если файл открылся НЕ успешно
    {
        cout<<"error"<<endl;
        return -1; // что значит '-1' - значит выйти из функции с кодом возврата -1
    }
    while (!fi.eof()) // пока до конца файла не прочитали
    {
        fi>>buf.type>>buf.opt>>buf.rozn>>buf.comm>>buf.l;
        if (buf.opt==price)
        {
            cout<<buf.type<<" "<<buf.opt<<" "<<buf.rozn<<" "<<buf.rozn<<" "<<buf.comm<<" "<<buf.l<<endl;
        }
    }
    fi.close();
    return 0;
}
int main()
{
    int p;
    cout<<"Enter price:"<<endl;
    cin>>p;
    my_query(p);
    system ("pause");
    return 0;
}



--------------------
PM MAIL   Вверх
Dmi3ev
Дата 12.4.2009, 11:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

!fi.eof()

fi.eof()
eof - end of file
fi - через нее мы организуем работу с файлом
!- не
получается условие
while(!fi.eof())=пока(не конец файла ...)
потом в цикле построчно читаем файл (в структуру), и смотрим выполняется ли условие  buf.opt==price, если да, то тогда выводим на экран...


--------------------

PM MAIL   Вверх
hen
Дата 12.4.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.4.2009

Репутация: нет
Всего: нет



попробовал сделать эту функцию сам, но чтото не работает, помогите её исправить, а то выше представленная функция далеко не для моего уровня знаний...
в моем варианте коде она называется 'void Opt()' пожалуйста  поправьте эту функцию в моем коде

Код

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

struct mon {
  char type[20];
  int opt, rozn;
  char comm[40];
};
int kol=0;
void WriteFile()
{
    FILE *fi,*fo;
     clrscr();
     if ((fi=fopen("D:\\file.txt", "r"))==0){
      cout << "Error open input file!!!" ;
      return;}
     if ((fo=fopen("D:\\out.dat","w+b"))==0){
      cout << "Error open output file!!!";
      return;}
     const int dl=80;
     char s[dl];
    mon a;
    while(fgets(s,dl,fi)){
    strncpy(a.type,s,19);
    a.type[19]='\0';
    a.opt=atoi(&s[20]);
    a.rozn=atoi(&s[25]);
    strncpy(a.comm,&s[30],40);
    fwrite(&a,sizeof(mon),1,fo);
    kol++;
    };
    fclose(fi);
    fclose(fo);

    return;
}

void out()
{
    FILE *fo;
    clrscr();
    if ((fo=fopen("D:\\out.dat","rb"))==0){
      cout << "Error open output file!!!";
      return ;}
    int i;
    cout<<"Input number of Zapisi ";
    cin >>i;//после ввода i не забываем нажать Enter
    if (i>kol) {
      cout << "Zapisi net!!!";
      return;}

    mon a;
    fseek(fo,sizeof(mon)*(i-1),SEEK_SET);
    fread(&a,sizeof(mon),1,fo);
    cout << "Tip: " << a.type << " opt.: " << a.opt << " rozn: " << a.rozn << endl;
    fclose(fo);
}

void ClearFile()
{
    FILE *fo;
    clrscr();
    if ((fo=fopen("D:\\out.dat","wb"))==0){
    cout << "Error open output file!!!"<<endl;
      return ;}
    fclose(fo);
}

void Opt()
{
  mon a;
  FILE *fo;

  if ((fo=fopen("D:\\out.dat","r"))==0){
    cout << "Error open output file!!!";
    return;}
  fseek(fo,0,SEEK_SET);
   int res;
   int p;
   do
   {
   res=fread(&a,sizeof(mon),1,fo);
    if (a.opt==p)
    {
      cout<<a.type<<" "<<a.opt<<" "<<a.rozn<<" "<<a.comm<<" "<<endl;
    }
   }
   while(res==1);
  fclose(fo);
   return;
}
void Search()
{
 char menu_2;
 clrscr();
 int p;
 do
 {
   cout <<endl<< "1 Nazvanie" << endl <<"2 Optovaya" << endl << "3 Roznica" << endl << "4 Vozvrat v gl. menu"<< endl;
   menu_2=getch();
   switch(menu_2)
   {
    // case '1':
      // Nazv();
     //  break;
     case '2':
       cout << "Vvedite optovuy cenu: " << endl;
       cin >> p;
       Opt();
       break;
    // case '3':
      // Rozn();
     //  break;
      };
   if (menu_2=='4') break;
 }
 while(1);
clrscr();
}

void main()
{
 char menu;
 int i;
 kol=0;
 clrscr();
 do
 {
   cout <<endl<< "1 Zapis' v file" << endl <<"2 Vivod na ekran" << endl << "3 Ochistka file" << endl << "4  Search..."<< endl << "5 Vichod" << endl;
   menu=getch();
   switch(menu)
   {
     case '1':
       WriteFile();
       break;
     case '2':
       out();
       break;
     case '3':
       ClearFile();
       break;
     case '4':
       Search();
       break;
         };
   if (menu=='5') break;
 }
 while(1);
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0887 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.