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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2009, 16:07   #1
umnik90
Новичок
Джуниор
 
Регистрация: 11.06.2009
Сообщений: 2
По умолчанию [C++] Программа-справочник, Функция удаления записи из файла

Такое уже было - смотрел в поиске, но ничего не подошло.

Код:
#include <iostream.h>
#include <conio.h>    
#include <string.h>
#include <iomanip.h> 
#include <fstream.h>
#include <windows.h> 

ostream & operator<<(ostream & out,char *s)
{
    char bufer[512], *p=bufer;
    CharToOem(s, bufer);
    while(*p)              //Функция CharToOem преобразует  
  out<<*p++;         //строку в набор символов ОЕМ.  
    return out;
} 

class sprav_video {
private:
    char manuf;
    char charact;
    int price;
    friend ostream & operator<<(ostream &stream, sprav_video &o1);
    friend void shapka();
    friend void linebuild();
public:
    int n;
    void add();
    void del();
  void del2();
};
class Database: public sprav_video {
    char title[40];
    sprav_video *rows[15];
    int col;
    int sorted;
public:
    Database(char *q) {strcpy(title,q); col=0; sorted=0;}
    ~Database() {if (col) for (int i=0; i<col; i++) delete rows[i];}
    friend ostream & operator<<(ostream &stream, Database &temp);
};


ostream & operator<<(ostream &stream, Database &o1) {
    stream<<o1.title<<endl;
    shapka();
    if (!o1.col) stream<<"База заполнена.";
    else {
  for (int i=0; o1.col; i++) {
    stream<<*o1.rows[i];
  }
    }
return stream;
 {
    int i;
    for (i=0; i<5; i++) {
     stream<<*o1.rows[i];
    }
  }
return stream;
}
ostream & operator<<(ostream &stream, sprav_video &o1) {
    stream<<"|"<<setw(10)<<o1.manuf<<"  |  ";
    stream<<setw(30)<<o1.charact<<"|";
    linebuild();
    return stream;
}

/*************Удаление данных из базы*************/

void sprav_video::del()
{
    ofstream outfile("videocards.txt");
    cout<<"\nДанные удалены...\n";
}

/*************Добавление данных в базу************/

void sprav_video::add()
{   n++; 
    ofstream file("videocards.txt",ios::app);
    char a[20], b[20];
    int num;
    int pr;
    {
  cout<<"\nВведите порядковый номер модели: "; 
  cin>>num;
  cout<<"\nВведите название производителя: ";
  cin>>a;
  cout<<"\nПеречислите технические характеристики устройства: ";
  cin>>b;
  cout<<"\nУкажите цену в долларах США: ";
  cin>>pr;
  file<<num<<" "<<a<<" "<<b<<" "<<pr<<endl;
    }
}

void shapka(void)
{
    cout<<"|-------------------------------------------------------------------------|\n";
    cout<<"|                            *** СПРАВОЧНИК ***                           |\n";
    cout<<"|           Современные модели видеокарт, их характеристики и цены        |\n";
    cout<<"|-------------------------------------------------------------------------|\n";
    cout<<"|   №   |   Производитель    |    Характеристики    |   Розничная цена,$  |\n";
    cout<<"|-------------------------------------------------------------------------|\n";
}

void linebuild(void) {
    cout<<"|-------------------------------------------------------------------------|";
}

void sprav_video::del2(){

ofstream doc ("videocards.txt");
int f_num;
cout<<" - ";
cin>>f_num;
for(int i=0;i<=n;i++){ 
if(num==f_num){i++;fl=1;}
doc<<num<<" "<<a<<" "<<b<<" "<<pr<<endl;}
if(fl=1)cout<<"\nЗапись удалена\n";
else cout<<"\nЗапись не удалена\n";}


int main()
{
    Database *abs = new Database("\nБаза данных:\n");
    sprav_video videocards;
    for (int a=0; !a;){
  cout<<"\nЭто справочник по современным моделям видеокарт.";
  cout<<"\nПожалуйста, выберите желаемое действие:";
  cout<<"\n1. Вход в качестве администратора, добавление и удаление записей.";
  cout<<"\n2. Добавить запись по видеокарте.";
  cout<<"\n3. Удалить запись.";
  cout<<"\n4. Вывести базу на экран.";
  cout<<"\n5. Выход из программы.\n";
  cout <<"Ваш выбор: ";
  int q;
  cin>>q;
  switch(q) {
    case 1:
    int z,o;
    cout <<"\n Введите пароль для входа в качестве администратора: ";
    cin>>z;
    if (z==1234){
     o=1;
     cout<<"\n Вы зашли как администратор.\n";
umnik90 вне форума Ответить с цитированием
Старый 11.06.2009, 16:07   #2
umnik90
Новичок
Джуниор
 
Регистрация: 11.06.2009
Сообщений: 2
По умолчанию

ПРОДОЛЖЕНИЕ
Код:
    }
    else {
     cout<<"\n Пароль неверен. Доступ ограничен.\n";
     o=0;
    }
    break;
    case 2: 
    {
     if (o==1)
      videocards.add();
     else
      cout<<"\n Вы не зарегистрированы!\n";
     getch();
     break;
    }
    case 3:
    {
     if (o==1){
      cout<<"Вы действительно хотите удалить данные? (y/n): ";
      char d;
      cin>>d;
      switch(d){
      case 'Y'|'y':
       videocards.del();
        break;
       }
      case 'N'|'n':
       {
        break;
       }
     }
     else{
      cout<<"\n Вы не зарегистрированы!";
      o=0;
      } 
     break;
    } 
    case 4:
    {
     cout<<"\n Для просмотра базы данных нажмите любую клавишу: ";
     cout<<*abs;
     getch();
     char filename[]="videocards.txt";
     int num;
     char manuf[20],charact[20];
     int pr;
     fstream file_show;
     file_show.open("videocards.txt",ios::in | ios::nocreate);
     for(;;)
     {
      file_show>>num;
      if (file_show.eof())break;
      file_show>>manuf>>charact>>pr;
      cout<<endl;
      cout<<"|"<<setw(4)<<setiosflags(ios::right)<<num
       <<setw(4)<<setiosflags(ios::right)<<"|"
          <<setw(7)<<setiosflags(ios::right)<<manuf
       <<setw(8)<<setiosflags(ios::right)<<"|"
          <<setw(5)<<setiosflags(ios::right)<<charact
       <<setw(5)<<setiosflags(ios::right)<<"|"
       <<setw(10)<<pr;
      cout<<"\n";
      linebuild(); 
     }
     break;
    }
    case 5:
    {
      videocards.del2();
    //    cout<<"\n Всего хорошего! ";
    //    a=1;
    //  break;
    }
    default:
    {
     cout <<"\n Неверный выбор.\n";  
     getch();
     break;
    }
  }
    }
  return 0;
}




Метод void sprav_video:el2() (временно запуск стоит в инт_мейне на 5. выход из программы) есть, но он у меня удаляет все строки из файла, а мне нужно только определенную строку, найденную по одному из столбцов. Я уже делал такое, но немного иначе был подход к самомой программе, в этом случае этот же метод не работает правильно.

Хелп
umnik90 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена удаления записи Хитрец БД в Delphi 2 12.04.2009 23:14
Программа для удаления AutoRun вирусов pomoshnic Помощь студентам 1 01.04.2009 04:57
Errorka 1.0 - это программа-справочник по ошибкам синего экрана mihali4 Компьютерное железо 2 10.10.2008 12:49
Нужна программа для удаления содержимого папки DNK1980 Фриланс 6 11.02.2008 16:52
Удаление записи с файла werser Помощь студентам 8 27.06.2007 06:25