Такое уже было - смотрел в поиске, но ничего не подошло.
| Цитата | #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"; } 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::del2() (временно запуск стоит в инт_мейне на 5. выход из программы) есть, но он у меня удаляет все строки из файла, а мне нужно только определенную строку, найденную по одному из столбцов. Я уже делал такое, но немного иначе был подход к самомой программе, в этом случае этот же метод не работает правильно.
Хелп |