2016-04-22 3 views
-2

Привет, ребята я пытаюсь удалить полную строку из файла «.txt», когда пользователь вводит книгу идентификаторC++ функция удаления линии

мой текстовый файл выглядит следующим образом:

[BOOK INFO]% Идентификатор книги: 1% title: Объектно-ориентированное программирование% [PUBLISHER INFO]% название издателя: misr publish house% адрес: puplisher адрес : adfaf% [АВТОР (ы)]% Авторы Название: ahmed% Национальность: egyptian% Имя автора: eter Национальность: american% [MORE INFO]% ОпубликованоО: 3/3/2006% статус: 6.

[BOOK INFO]% Книга Id: 2% название: автоматизировать% [ИЗДАТЕЛЬ INFO]% издатель название: Миср% puplisher Адрес: Наср город% [АВТОР (s) INFO]% Авторы Имя : Ahmed Khaled% Национальность: egyptian% Имя автора: ohammed adel% Национальность: egyptian% [ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ]% ОпубликованоAt: 3/8/2005% status : 15.

линия начинается с [книги] Информация к (.) я должен быть в состоянии удалить всю строку, когда пользователь вводит идентификатор , но я не знаю, как и какую функцию использовать

мой код:

/*password is admin*/ 
#include <iostream> 
#include <fstream> 
#include <algorithm> 
#include <string> 
#include<stdlib.h> 
#include<iomanip> 
#include<conio.h> 

#define F1  59 
#define ESC  27 

using namespace std; 

void list_all_books_1(); 
void list_available_books_2(); 
void borrow_books_3(); 
void search_for_abook_4(); 
void add_new_book_5(); 
void delete_books_6(); 

fstream d_base; 
char path[] = "library books.txt"; 

void output(){ 
//this function for displaying choices only 
cout << setw(77) << "***********************************" << endl; 
cout << setw(71) << "1. List all books in library" << endl; 
cout << setw(77) << "2. List available books to borrow " << endl; 
cout << setw(72) << "3. Borrow a Book from library" << endl; 
cout << setw(63) << "4. Search For a Book" << endl; 
cout << setw(59) << "5. Add New Books" << endl; 
cout << setw(59) << "6. Delete a Book" << endl; 
cout << setw(62) << "7. EXIT The Library" << endl; 
cout << setw(77) << "***********************************" << endl; 
} 

//===================================================================================================================================================== 

struct books{ 
//identfying books with all needed things 
string id, status; 
string title, p_name, p_address; 
string date; 
}; 
struct author{ 
string aut_name; 

string aut_nationality; 
}; 

//===================================================================================================================================================== 

//function for choice 1 showing the books 

void list_all_books_1(){ 

ifstream show; 
char all; 
show.open(path, ios::in | ios::app); 
while (!show.eof()){ 
    show >> std::noskipws; 
    show >> all; 
    if (all == '%') 
     cout << "\n"; 

    else if (all == '.') 
     cout << "\n\n\n"; 

    else 
     cout << all; 
} 
cout << endl; 
show.close(); 
} 

//===================================================================================================================================================== 

void list_available_books_2(){ 


ifstream available_books; 
char x; 
available_books.open(path, ios::in | ios::app); 
while (!available_books.eof()){ 
    available_books >> std::noskipws; 
    available_books >> x; 
    if (x == '%') 
     cout << "\n"; 

    else if (x == '.') 
     cout << "\n\n\n"; 

    else 
     cout << x; 

} 
cout << endl; 
available_books.close(); 
} 

//===================================================================================================================================================== 

void borrow_books_3(){ 

} 

//===================================================================================================================================================== 

void search_for_abook_4(){ 

string idx; 
int offset, i = 0; 
string line; 

cout << "enter the ID of the book you're looking for"; 
cin >> idx; 

d_base.open(path, ios::in | ios::app); 

while (!d_base.eof()){ 
    getline(d_base, line); 
    if (((offset = line.find(idx, 0))) != string::npos){ 
     cout << "Book found" << endl; 
     i++; 
     d_base.close(); 
    } 
} 
if (i == 0){ 
    cout << "couldn't find book" << endl << endl; 
} 

} 


//===================================================================================================================================================== 

//for choice 5 to fill books 
void add_new_book_5(){ 

int aut_number, booksnumber; 
books newbook[1000]; 
author aut[100]; 
cout << "how many books you want to add ? "; 
cin >> booksnumber; 
cout << "what books you want to add :" << endl; 
d_base.open(path, ios::out | ios::app); 
for (int i = 0; i < booksnumber; i++){ 

    cout << "id please : "; cin >> newbook[i].id; 
    cout << "title : ";    cin.ignore(); getline(cin, newbook[i].title); 
    cout << "publisher name :";      getline(cin, newbook[i].p_name); 
    cout << "publisher address : ";     getline(cin, newbook[i].p_address); 

    d_base << "[BOOK INFO]" << "%Book Id : " << newbook[i].id << "%title : " << newbook[i].title; 
    d_base << "%[PUBLISHER INFO]" << "%publisher name : " << newbook[i].p_name << "%puplisher address :" << newbook[i].p_address; 
    d_base << "%[AUTHOR(s) INFO]"; 

    cout << "how many authors for the books"; 
    cin >> aut_number; 

    for (int j = 0; j < aut_number; j++){ 
     cout << "author" << j + 1 << " name : "; cin.ignore(); getline(cin, aut[j].aut_name); 
     cout << "Nationality : ";         getline(cin, aut[j].aut_nationality); 

     d_base << "% Authors Name : " << aut[j].aut_name << "% Nationality : " << aut[j].aut_nationality; 
    } 

    cout << "Publish date :";          getline(cin, newbook[i].date); 
    cout << "How many copies of " << newbook[i].title << " ";  cin >> newbook[i].status; 

    d_base << "%[MORE INFO]"; 
    d_base << "%PublishedAt : " << newbook[i].date << "%status :" << newbook[i].status << "." << endl; 
} 
d_base.close(); 
cout <<setw(76)<< "Books Have Been Saved Sucessfully" << endl; 

} 

//===================================================================================================================================================== 

void delete_books_6(){ 
//deleting a book 
} 


//===================================================================================================================================================== 

int main(){ 
char choice; 

cout << "\n\n" << setw(76) << "{ welcome to FCIS library }\n\n"; 

do{ 
    output(); 
    cout << "- what do you want to do ? "; 
    cin >> choice; 

    if (choice == '1'){ 
     system("cls"); 

     list_all_books_1(); 
    } 

    //this one for list available books 
    else if (choice == '2'){ 
     system("cls"); 

     list_available_books_2(); 

    } 

    //this one for borrow a book 
    else if (choice == '3'){ 
     system("cls"); 

     borrow_books_3(); 

    } 
    else if (choice == '4'){ 
     system("cls"); 

     search_for_abook_4(); 

    } 

    //this one is for adding new books to the list 
    else if (choice == '5'){ 
     system("cls"); 

     string pass; 

     do{ 

      cout << "you must be an admin to add new books." << endl <<  "please enter passowrd (use small letters) : "; 
      cin >> pass; 

      if (pass == "b") 
       break; 

      else if (pass == "admin"){ 
       system("cls"); 

       cout << "ACCESS GAINED WELCOME " << endl; 

       add_new_book_5(); 
      } 
      else{ 
       cout << "Wrong password try again or press (b) to try another choice"; 
       continue; 
      } 

     } while (pass != "admin"); 
    } 

    //this one for deleteing a book 
    else if (choice == '6'){ 
     system("cls"); 

     //not completed yet 

    } 
    else if (choice == '7'){ 
     system("cls"); 

     cout << "\n\n\n"<<setw(76) << "Thanks for Using FCIS LIBRARY" << endl; 
     break; 

    } 
    else 
     cout << "\nwrong choice please choose again\n\n"; 

} while (_getch()!=27); 

} 

я пытался использовать ПОЛУЧИТЬ линию и поиск соответствия И.Д. удалить строку, если есть совпадение, но не смог выполнить это я новичок в C++, кстати

+1

Не могли бы вы поделиться с нами тем, что вы пробовали до сих пор? –

+0

Вы могли бы поделиться кодом, который вы написали до сих пор .. так что мы можем проверить, что происходит не так? – Tejendra

+0

Я добавил свой код, и я новичок в C++, еще не знаю о буфере памяти –

ответ

0

Прочитайте весь файл в буфер памяти. Удалите то, чего вы не хотите. Перезапишите существующий файл с содержимым вашего буфера памяти. Теперь вы удалили то, чего не захотели из файла.

+0

Остерегайтесь «вы можете отправить пример». – Joel

+0

Давай, чувак, мы можем сделать лучше, чем это .... пока он что-то не разделяет, он будет продолжать спрашивать о примерах – Tejendra

Смежные вопросы