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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
kapriz0n
20 / 20 / 2
Регистрация: 26.10.2008
Сообщений: 77
#1

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

20.11.2008, 15:44. Просмотров 1416. Ответов 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 секунд
У администрации прошу прощение # нажимал в редакторе но чтото не зароботало.. И вообще можно ведь было зделать и подсказки на кнопочках в редакторе...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2008, 15:44     Помогите с бинарным файлом
Посмотрите здесь:

задача с бинарным файлом - C++
Помогите, пожалуйста, написать на C++. Нужно создать бинарный файл f и записать в него целые числа. Организовать просмотр бинарного файла...

Работа с бинарным файлом - C++
Доброго времени суток всем. Помогите пожалуйста доделать задачу: Создать класс для работы с бинарным файлом. В файл записать...

Работа с бинарным файлом - C++
Всем привет! есть тестовый пример в котором я пытаюсь записать в бинарный файл три переменных, а затем их считать. Все работает нормально...

Работа с бинарным файлом - C++
почему программа не выводит 16-ричный дамп бинарного файла? int main () { streamoff lSize; char *buffer; ifstream...

Проблемы с бинарным файлом - C++
Приветствую. Проблема заключается в следующем: не хочет открываться бинарный файл. #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include...

Работа со структурой и бинарным файлом - C++
Что может быть за ошибка в case 2? struct sport_complex{//Структура struct trainers{ char t_name; char t_surname; char...

Работа с бинарным файлом(Подсчет записей) - C++
void open_bin(l_lib *l, int lines_count) // функция для открытия bin файла { fstream b_file(&quot;data.bin&quot;, ios::binary | ios::in); //...

Выводится одна лишняя строка (работа с бинарным файлом) - C++
Буду благодарен за помощь. #include&lt;iostream&gt; #include &lt;fstream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &lt;cstring&gt; ...

Вынести часть кода работы с бинарным файлом в отдельную функцию - C++
Хочу написать функцию:void case_ofstream(); в case 1. Как она должна выглядеть? #include&lt;iostream&gt; #include&lt;fstream&gt; using...

Работа с бинарным файлом (Создать новый текстовый файл, в котором числа будут отсортированы в порядке возрастания.) - C++
Аларм! Срочно прошу помощи! Есть задача: Записать бинарный файл с массивом целых чисел. Создать новый текстовый файл, в котором числа...

Помогите кто может заделать задачку с бинарным деревом... - C++
Вершина бинарного дерева содержит ключ, строку и два указателя на потомков. Написать функцию, которая подсчитывает число ветвей от корня до...

работа с текстовым файлом помогите написать - C++
дан файл содержащий произвольный текст, проверить правильно ли в нем расставлены круглые скобки непойму как решить , думаю текст надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kapriz0n
20 / 20 / 2
Регистрация: 26.10.2008
Сообщений: 77
24.11.2008, 00:22  [ТС]     Помогите с бинарным файлом #2
Мда сложно видимо окозалось но я доделал... утром осенило вдруг кому поможет вот кусочек:
Код
 else if(g=='2')
{
	system("cls");
	int kod;
	int n,i=0;
	bool f=false;
	int del=0;
 do
 {	
    fseek(fo,0,SEEK_END);
	n=ftell(fo)/sizeof(inst);
	if(n==0)
	{
		cout<<"У вас нет ни одной записи"<<endl;getch();
		break;
	}
	cout<<"Введите код инструмента ";
        cin>>kod;
	fseek(fo,0,SEEK_SET);

//cout<<"n="<<n<<endl;

   for(i=0;i<n;i++)
	{   
		//cout<<"i="<<i<<endl;
		fread(&Del_inst[i],sizeof(inst),1,fo);
		//cout<<"Del_inst[i-1].nom="<<Del_inst[i-1].nom<<endl;
		//cout<<"Del_inst[i-1].name="<<Del_inst[i-1].name<<endl;
		//cout<<"Del_inst[i-1].kol="<<Del_inst[i-1].kol<<endl;
		//cout<<"Del_inst[i-1].cena="<<Del_inst[i-1].cena<<endl;
		//getch();
		if(Del_inst[i].nom==kod)  
		{
			++del;
			
			f=true;
			cout<<"Инструмент удален\n";
			if(n==1)break;
			if(i+1==n)break;
			i--;
		}
	}
   if(f==false)cout<<"Инструмента с таким кодом нет"<<endl<<endl;
   
  	fclose(fo);
	  fo=fopen("nyny.bat","w+b");
	  //cout<<"n="<<n<<endl;
	  //cout<<"i="<<i<<endl;
	  //cout<<"del="<<del<<endl;
   for(int j=0;j<n-del; j++) 
   {
     fwrite(&Del_inst[j],sizeof(inst),1,fo);
	
   }
   
   
   del=0;
   f=false;
	  cout<<"Для повтора нажмите (y)"<<endl;
   g=getch();
   system("cls");
 }while(g=='y');
 }
Вместо крассного...
Yandex
Объявления
24.11.2008, 00:22     Помогите с бинарным файлом
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru