Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Помогите с бинарным файлом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удалить из массива все максимальные элементы http://www.cyberforum.ru/cpp-beginners/thread16372.html
Всем здравствуйте!!! Помогите плиз заочнику неуспевающему с контрольными из-за работы. Учусь на первом курсе. Я конечно понимаю, что позорю свою будующую профессию, но ничего не остаётся. Нужно...
C++ Пачка вопросов по C++ 1. Какая функция в консольном приложении для создания файла? 2. Какая функция в консольном приложении для открытия файла? 3. Как в WinApi нарисовать квадрат? http://www.cyberforum.ru/cpp-beginners/thread16360.html
C++ Поворот матрицы вокруг главной диагонали
Собственно, сама задача, я её сделал методом индексации, указатели только начали изучать, только вот не пойму как матрицу транспонировать не используя другую матрицу при помощи указателей? товарищи,...
C++ Теоретический вопрос по наследованию вложенных класов
Уважаемые, такой вопрос. Есть класс(матрёшка), внутри него другой класс создан. При наследовании матрёшки, внутренний наследуется вместе с ним целиком? Т.Е. в случае наследования, конструктор...
C++ Тестовые файлы: преобразовать строку, удалив из нее все четырехбуквенные слова http://www.cyberforum.ru/cpp-beginners/thread16333.html
помогите пожалуйста разобраться, нужно преобразовать строку , удалив из нее все четырехбуквенные слова, подпрограмму обработки строки оформить в виде функции, использовать 2 разных файла для ввода и...
C++ Массив в С++ Ввести массив А6. Сформировать массив по формуле В6, Вi=cosi. Условие задания: В массиве А переставить местами элементы, имеющие чётные и нечётные номера (массив А1). Массив В упорядочить в порядке... подробнее

Показать сообщение отдельно
kapriz0n
20 / 20 / 2
Регистрация: 26.10.2008
Сообщений: 77

Помогите с бинарным файлом - C++

20.11.2008, 15:44. Просмотров 1431. Ответов 1
Метки (Все метки)

Есть задачка звучит так:
Вы являетесь владельцем склада металлических изделий и нуждаетесь в инвентаризации, которая сказала бы вам, сколько всего различных изделий вы имеете, какое количество каждого Жиз них у вас на руках и стоимость каждого из них. Напишите программу, которая бы создавала файл произвольного доступа «hardware.dat» на сотню пустых записей, позволяла бы вводить данные по каждому изделию, давала бы вам возможность получать список всех изделий, удалять записи по изделиям, которых у вас уже нет, и позволяла бы обновлять любую информацию в файле.
Задача не сложная,я не могу реализовать удаление, может кто подскажет алгоритм хоть буду очень признателен Задача написана, но само удаление нет(там наработка выделена красным, она не доделана просто мысли были) написание программы следующее:
Код
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <iomanip>
using namespace std;

const int l_name=15;
//const int r=100;
struct magazin{
    int    nom;
    char   name[l_name+1];
    int    kol;
    double cena;
};

void main()
{
    setlocale (LC_CTYPE,"rus"); // подключение русского языка
    magazin inst;

    FILE* fo;
    int g;

    if((fo=fopen("nyny.bat","r+b"))==NULL)
    {
        cout<<"Создан файл для записи данных"<<endl;
         if((fo=fopen("nyny.bat","w+b"))==NULL) cout<<"ERROR!!!!!!!!!!!!!!"<<endl;
         getch();system("cls");
    }
    

do
{
    cout<<"       МЕНЮ нажмите:\n";
    cout<<"1 - Добавить к перечню"<<endl;
    cout<<"2 - Удалить из перечня"<<endl;
    cout<<"3 - Просмотр перечня"<<endl;
    cout<<"4 - Для выхода"<<endl;

g=getch();

 if(g=='1')
{
    system("cls");
  fseek(fo,0,SEEK_END);
 //int size=ftell(fo);
 while(1)
 {
     if(ftell(fo)/sizeof(inst)>5) { cout<<"Лимит деталей"<<endl; getch(); break;}
 
     cout<<"Введите номер инструмента"<<endl;
     cin>>inst.nom;
     cout<<"Введите название инструмента"<<endl;
     cin>>inst.name;
     cout<<"Введите количество инструмента"<<endl;
     cin>>inst.kol;
     cout<<"Введите цену инструмента"<<endl;
     cin>>inst.cena;
     fwrite(&inst,sizeof(inst),1,fo);
     cout<<"Для продолжения ввода (y)"<<endl;
     g=getch();
     if(g!='y')
     {
         system("cls");
         break;         
     }
     system("cls");
 }
}


 [COLOR=Red]else if(g=='2')
{
    esystem("cls");
    int kod;
    int n,i=0;
    bool f=false;
 do
 {
     cout<<"Введите код инструмента ";
        cin>>kod;
    fseek(fo,0,SEEK_END);
    n=ftell(fo)/sizeof(inst);
    if(n==0)
    {
        cout<<"У вас нет ни одной записи"<<endl;
        break;
    }
    fseek(fo,0,SEEK_SET);

   while((++i)<=n)
    {

        fread(&inst,sizeof(inst),1,fo);
        if(inst.nom==kod) 
        {   
            //fread(&inst,sizeof(inst),1,fo);
            fseek(fo, (i)*sizeof(inst),SEEK_SET);
             

            fwrite(&inst,sizeof(inst),1,fo);
            f=true;
            cout<<"Инструмент из базы удален"<<endl<<endl;
            break;
        }
        
    }
   if(f==false)cout<<"Инструмента с таким кодом нет"<<endl<<endl;
      cout<<"Для повтора нажмите (y)"<<endl;
   g=getch();
   system("cls");
 }while(g=='y');
 }[/COLOR]


    


 else if(g=='3')
{ 
    system("cls");
    int i=0;
    fseek(fo,0,SEEK_END);
    int n=ftell(fo)/sizeof(inst);
    
    
    fseek(fo,0,SEEK_SET);
    
    cout<<"Просмотр перечня"<<endl<<endl;
    cout<<"Номер"<<setw(10)<<"Название"<<setw(12)<<"Количество"<<setw(8)<<"Цена"<<endl;
    while((n--)!=0)
    {   
        
        fread(&inst,sizeof(inst),1,fo);
        
        cout<<inst.nom<<setw(10)<<inst.name<<setw(10)<<inst.kol<<setw(10)<<inst.cena<<endl;
    }
    
    getch();
    system("cls");
}


system("cls");
}while(g!='4');
fclose(fo);

}
Добавлено через 2 минуты 26 секунд
У администрации прошу прощение # нажимал в редакторе но чтото не зароботало.. И вообще можно ведь было зделать и подсказки на кнопочках в редакторе...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru