这几句代码是什么意思啊???

brightnox 2005-04-08 12:27:27
我是一名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;
}



+++++以内的看不明白,不是语法什么看不明白,关键是不明白这个“算法”,为什么比较一下字符串,然后重新命名,就可以实现图书的删除呢???
...全文
359 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightnox 2005-04-08
  • 打赏
  • 举报
回复
我也不知道该怎么解释!首先要说的是我是第一次到我个论坛,这个论坛的各种功能还不是很熟悉,这个论坛做的比较好。我也是前几天刚刚在这个论坛上注册ID的(以前也没有上过这种类型的论坛)我当时也是第一次结贴,在加上结贴的时候是晚上,我准备结贴后就睡觉的,当时很匆忙!所以无意之种就把分给了别人,真是对不起!我会在论坛上给你说对不起的!真心希望姐姐你不要把这件事放在心上!!!

我真心希望longlijun(风之力) 能原谅我!我不是故意的!我现在心里不好受,不知道该怎么办!
我真的不是故意的。那几个人我跟本就不认识,在说他们回答的也不好!真的,我不是故意的!希望你能原谅我这个无知的弟弟!
brightnox 2005-04-08
  • 打赏
  • 举报
回复
ding
du51 2005-04-08
  • 打赏
  • 举报
回复
longlijun(风之力)大哥不要误
会呀.我只是就是事论事..昨天很晚了才看见,大体看看.觉得有问题就跟上来了.没想是这样.呵呵
另,也别气.至少炼自己水平嘛.呵呵.
guyaguya 2005-04-08
  • 打赏
  • 举报
回复
做人要厚道
liujinxing 2005-04-08
  • 打赏
  • 举报
回复

做人要厚道……
firstdreamer 2005-04-08
  • 打赏
  • 举报
回复
楼主应该受到BS!!!!!!
jitian81411 2005-04-08
  • 打赏
  • 举报
回复
longlijun(风之力) ( ) 信誉:100 2005-04-08 07:47:00 得分: 0


楼主在我的QQ上, 私底下, 应该说我帮他解决了不少问题。
我想楼主应该要承认这个事实。

非常灰心, 以后这种事还是少做,唉!


其实也应该讨论一下这个话题
有些人开了帖为什么就不揭贴呢?
sharkabc 2005-04-08
  • 打赏
  • 举报
回复
学习交流
zhousqy 2005-04-08
  • 打赏
  • 举报
回复
mark
chunhai12 2005-04-08
  • 打赏
  • 举报
回复
这样啊,那就BS一下楼主!
kobefly 2005-04-08
  • 打赏
  • 举报
回复
longlijun(风之力) ( ) 信誉:100 2005-04-08 07:47:00 得分: 0


楼主在我的QQ上, 私底下, 应该说我帮他解决了不少问题。
我想楼主应该要承认这个事实。

非常灰心, 以后这种事还是少做,唉!



大哥不要生气,分乃身外之物,对于某些事情,是会让人比较难过

毕竟帮助别人已经不索取什么报酬,只是这样一个虚拟的分而已
还有大量得人不结贴

这确实.......
不过自己想开点,不给大不了不做啊
富莱工作室 2005-04-08
  • 打赏
  • 举报
回复
楼主在我的QQ上, 私底下, 应该说我帮他解决了不少问题。
我想楼主应该要承认这个事实。

非常灰心, 以后这种事还是少做,唉!
富莱工作室 2005-04-08
  • 打赏
  • 举报
回复
声明, 这个代码是我写的, 但有我很失望,

tempfile.write((const char*) &temprecord, sizeof sizeof BookRecord
像这样的语句错误在原文中是没有,

du51(郁郁思扬) 程序有问题.你不错试试.假设有十本书.你删一个,就全没了.
这个问题是没有的, 经过测试后才发给他。

原贴在这里, http://community.csdn.net/Expert/topic/3911/3911542.xml?temp=.1161005
当时由于他的要求不明, 所以给他写了个最简单,

我今天很生气, 其一, 楼主自已改后的代码贴上来,不是原来的。让人认为这代码本身就有问题!
其二。楼主的结贴,bigmouse2002 (50)、 longlijun (20)、 我不知道为什么,人家一句简单的话
“c++ primer 整本书就讲这个” 可以加50分。
lizzlizz 2005-04-08
  • 打赏
  • 举报
回复
#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.txt", 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(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;
}
上面的代码是我修改后的结果,调试后OK,那段的意思就是搜索系统内与需要删除的记录不同的记录,把这些不同的记录挪到TEMP.TXT文件里,然后把原来的BOOK.TXT文件删除,再将TEMP改为BOOK。
du51 2005-04-08
  • 打赏
  • 举报
回复
首先说,你帖的这程序有问题...好几处的sizeof都不对.改好后.
程序有问题.你不错试试.假设有十本书.你删一个,就全没了.


你问那一段的意思是这样的.作者本意是:
把文件中,和输入不同的全部挎进D:\\temp.rzr里面.同时,D:\\Book.txt中该书最消去......
最后把D:\\temp.rzr里面的文件全部挎进D:\\Book.txt里.
可惜作者忘了.没挎回来.所以会出现你删一本,全部书都没了.
我没看出来重命名.

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧