2015-01-03 74 views
-2

我正在使用turbo C++ 3.5中的二進制文件,我想創建一個庫程序。我想在二進制文件中添加有關書籍的信息,並執行如下功能:搜索和替換,刪除記錄等。C++二進制文件添加記錄,搜索並替換

我這樣做的功能,但我有2個問題:1.例如,當我添加6關於要存檔的書籍的記錄,BooksReport功能不能顯示所有記錄,例如只顯示4或5條記錄,以及當我從5條記錄中搜索記錄時,例如我剛剛找到3條或2條記錄。 2.當我搜索並替換文件上的單詞時,此編輯記錄之前的所有記錄將被刪除。

#include <conio.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void add(); 
void search(); 

struct { 
    char name[20]; 
    char id[2]; 
    char publisher[20];} books, listbooks[100]; 

void main(){ 
    add(); 
    // search(); 
    getch(); 
} 

//Add 
void add(){ 
    FILE *pt; 
    pt=fopen("books.dat","a"); 
    clrscr(); 
    printf("\t Please Enter Data for new book"); 
    printf("\n Please enter Name:"); 
    scanf("%s", &books.name); 
    printf("Please enter ID:"); 
    scanf("%s", &books.id); 
    printf("Please enter Publisher:"); 
    scanf("%s", &books.publisher); 

    fwrite(&books, sizeof(books), 1,pt); 
    fclose(pt); 
} 
void search(){ 
//Search and replace 
    pt=fopen("books.dat","w+"); 
    char replaceName[20]; 
    char searchName[20]; 
    rewind(pt); 
    found=0; 
    printf("Please enter search word \n"); 
    scanf("%s", &searchName); 
    printf("Please enter replace word \n"); 
    scanf("%s", &replaceName); 
    i=0; 
    do{ 
     i++; 
     fread(&books, sizeof(books), i,pt); 
     if(strcmp(searchName,books.name)==0){ 
      found=1; 
      strcpy(books.name,replaceName); 
      fwrite(&books, sizeof(books), i,pt); 
      break;} 
    }while(!feof(pt)); 

    clrscr(); 
    if(found==1){ 
     printf("Replace successful!"); 
    } 
    if(found==0){ 
     printf("Not Found"); 
    } 
    fclose(pt); 
} 
+4

你想知道爲什麼沒人回答嗎?因爲你使用了一個22歲的編譯器,非標準的代碼,沒有縮進,並... – deviantfan

+0

請幫助我。我是學生,應該使用turbo C++。我的代碼中存在什麼問題? –

+0

如果您想使用正確的C++,那麼在不使用新軟件的情況下可能無法提供幫助。 G ++/MinGW(和其他)是最新的免費軟件。關於你的代碼問題:a)它看起來像你想製作一個C程序,而不是C++。 b)conio.h c)不完整(沒有主,沒有功能頭...)d)... – deviantfan

回答

0

在閱讀一本書fread文件指針已經指向下一本書,稱只是fwrite更新它是不正確的。

無論如何,您需要在freadfwrite之間切換之前使用fseek

要知道fseek的位置,您可以使用index * sizeof(books)

而且你的文件應該的,否則你會寫一個可能包含在未初始化部分\n字符二進制數據時有問題使用「二進制模式」(標誌b)被打開。