c ++函数删除一行

时间:2016-04-22 17:29:11

标签: c++ function file

你好我们试图从" .txt"删除整行。用户输入图书ID时的文件

我的文本文件如下所示:

  

[BOOK INFO]%Book Id:1%title:面向对象编程%[PUBLISHER   INFO]%发布者名称:misr发布house%puplisher地址   :adfaf%[AUTHOR(s)INFO]%作者姓名:ahmed%国籍:   egyptian%作者姓名:eter%国籍:美国%[更多   INFO]%已公布截止日期:3/3/2006%状态:6。

     

[BOOK INFO]%Book Id:2%title:automate%[PUBLISHER INFO]%publisher   name:misr%puplisher address:nasr city%[AUTHOR(s)INFO]%作者姓名   :ahmed khaled%国籍:egyptian%作者姓名:ohammed   adel%国籍:埃及%[更多信息]%已发布时间:2005年3月8日%状态   :15

该行从[书信息]开始到(。) 我应该能够在用户输入id时删除整行 但我不知道如何使用或使用什么功能

我的代码是:

/*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);

}

我尝试使用get line并搜索匹配ID如果匹配但删除该行但无法完成 我是c ++的初学者

1 个答案:

答案 0 :(得分:0)

将整个文件读入内存缓冲区。删除你不想要的东西。使用内存缓冲区的内容覆盖现有文件。 您现在已经从文件中删除了您不想要的内容。