这几句代码是什么意思啊???
我是一名C++初学者,以下是一个图书管理系统的部分源代码,其中有几句看不明白:
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
struct BookRecord //图书记录
{
char BookSerial[9]; //图书编号
char BookName[40]; //图书书名
char publishingHouseOfBook[50]; //图书出版社
bool enableUse; //是否可借
};
//输入图书记录
void Input(BookRecord& record)
{
cout << "请输入图书编号:" << endl;
cin >> record.BookSerial;
cout << "请输入图书名:" << endl;
cin >> record.BookName;
cout << "请输入图书出版社:" << endl;
cin >> record.publishingHouseOfBook;
cout << "请输入图书使用状态(1 或 0):" << endl;
cin >> record.enableUse;
}
//增加图书记录
bool AddBookRecord()
{
fstream file("D:\\Book.txt", ios::binary | ios::out | ios::app);
if(!file)
{
cout << "打开文件Book.dbf失败" << endl;
return false;
}
BookRecord record;/*定义一个变量record
Input(record) ------调用函数Input参数 为
record */
Input(record);
file.write((const char*) &record, sizeof BookRecord);
file.close();
return true;
}
//删除图书记录
bool DeleteBookRecord()
{
fstream file("D:\\Book.txt", ios::in | ios::out | ios::binary);
if(!file)
{
cout << "打开文件Book.txt失败" << endl;
return false;
}
++++++++++++++++++++++++++++++++++++++
BookRecord record;
cout << "请输入要删除的图书编号:" << endl;
cin >> record.BookSerial;
fstream tempfile("D:\\temp.rzr", ios::out | ios::binary);
if(!tempfile)
{
cout << "文件操作失败" << endl;
return false;
}
BookRecord temprecord;
while(file.read((char*)&temprecord, sizeof BookRecord))
{
if(strcmp(temprecord.BookSerial, record.BookSerial))
{
tempfile.write((const char*) &temprecord, sizeof sizeof BookRecord
}
}
++++++++++++++++++++++++++++++++++++++
file.close();
tempfile.close();
remove("D:\\Book.txt");
rename("D:\\temp.txt", "D:\\Book.txt");
return true;
}
//编辑图书状态
bool EditBookRecord()
{
fstream file("D:\\Book.txt", ios::in | ios::out | ios::binary);
if(!file)
{
cout << "打开文件Book.dbf失败" << endl;
return false;
}
BookRecord record;
cout << "请输入要编辑、查询的图书编号:" << endl;
cin >> record.BookSerial;
BookRecord temprecord;
while(file.read((char*)&temprecord, sizeof BookRecord))
{
if(!strcmp(record.BookSerial, temprecord.BookSerial))
{
cout << "图书编号:";
cout << temprecord.BookSerial << endl;
cout << "图书名:";
cout << temprecord.BookName << endl;
cout << "图书出版社:";
cout << temprecord.publishingHouseOfBook << endl;
cout << "图书可借状态:";
cout << temprecord.enableUse << endl;
temprecord.enableUse ? cout << "图书可借!" << endl : cout << "图书不可借!" <<endl;
cout << "是否要对该记录进行编辑(y/n): " << endl;
char ch;
cin >> ch;
if(ch == 'y' || ch == 'Y')
{
Input(temprecord);
file.seekp((long)file.tellg() - (long) sizeof(temprecord), ios::beg);
file.write((const char*) &temprecord, sizeof BookRecord);
return true;
}
}
}
return false;
}
bool Exit()
{
exit(1);
}
struct MenuItem
{
int number;
bool (*pf)();
};
int main()
{
MenuItem Menu[4] = {{1, AddBookRecord}, {2, DeleteBookRecord}, {3, EditBookRecord}, {4, Exit}};
cout << "图书管理系统1.00" << endl;
cout << "1.增加图书记录" << endl;
cout << "2.删除图书记录" << endl;
cout << "3.编辑、查询图书状态" << endl;
cout << "4.退出" << endl;
cout << endl;
cout << "请输入要进行的操作(1--4):" << endl;
int flag;
while(cin >> flag)
{
if(flag < 1 || flag > 4)
{
cout << "输入错误!" << endl;
continue;
}
for(int i = 0; i < 4; i++)
{
if(Menu[i].number == flag)
{
if(Menu[i].pf())
{
cout << "操作成功!" << endl;
}
else
cout << "操作不成功" << endl;
}
}
}
return 0;
}
+++++以内的看不明白,不是语法什么看不明白,关键是不明白这个“算法”,为什么比较一下字符串,然后重新命名,就可以实现图书的删除呢???