C++问题 删除后 显示全是烫

diango56 2017-07-03 08:18:10
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;

//读者信息及借阅情况
class Data
{
public:
Data();
Data(char newname[], char newbookname[], int phone, int btime, int rtime);
void setname(char newname[20]);
char* getname();
void setbookname(char newbookname[30]);
char* getbookname();
void setnum(int u);
int getnum();
void setphone(int n);
int getphone();
void setborrowtime(int i);
int getborrowtime();
void setreturntime(int k);
int getreturntime();
private:
char name[20];
char bookname[30];
int phone;
int borrowtime;
int returntime;
int num;
};

//操作类
class DataOperator
{
public:
DataOperator();
void createfile();
int funcchoice();
void printrec();
void updaterec();
void insertrec();
void deleterec();
void inquirerec();
void displine();
bool checkdata();
void accexit();
private:
Data acc;
fstream inout;
char filename[90];
};


int main()
{
DataOperator data;
int func;
while (1)
{
func = data.funcchoice();
switch (func)
{
case 1:data.createfile(); break;
case 2:data.printrec(); break;
case 3:data.updaterec(); break;
case 4:data.insertrec(); break;
case 5:data.deleterec(); break;
case 6:data.inquirerec(); break;
case 0:data.accexit(); break;
}
if (!func)
break;
}
return 0;
}

Data::Data()
{
}

Data::Data(char newname[], char newbookname[], int newphone, int newbtime, int newrtime)
{
name[20] = newname[20];
bookname[30] = newbookname[30];
phone = newphone;
borrowtime = newbtime;
returntime = newrtime;
}
void Data::setname(char newname[20])
{
strcpy_s(name, newname);
}
char* Data::getname()
{
return name;
}
void Data::setbookname(char newbookname[30])
{
strcpy_s(bookname, newbookname);
}
char* Data::getbookname()
{
return bookname;
}
void Data::setnum(int u)
{
num = u;
}
int Data::getnum()
{
return num;
}
void Data::setborrowtime(int i)
{
borrowtime = i;
}
int Data::getborrowtime()
{
return borrowtime;
}
void Data::setphone(int n)
{
phone = n;
}
int Data::getphone()
{
return phone;
}
void Data::setreturntime(int k)
{
returntime = k;
}
int Data::getreturntime()
{
return returntime;
}
DataOperator::DataOperator()
{
cout << "请输入要创建的存放读者资料及借阅情况的文件名及所在目录:" << endl;
cin.getline(filename, 100);
inout.clear(); //清除错误信息
inout.open(filename, ios::out | ios::app);
if (inout.fail())
{
cout << "文件创建失败" << endl;
exit(1);
}
cout << "资料文件:" << filename << "创建成功,可以进行后续操作" << endl;
inout.close();
}
void DataOperator::createfile() //创建账户文件,并连续输入多个读者资料
{
int accnum;
char name[20];
char bookname[30];
int phone;
int borrowtime;
int returntime;
inout.clear(); //清除错误信息
inout.open(filename, ios::out | ios::app);
if (inout.fail())
{
cout << "文件创建失败" << endl;
exit(1);
}
cout << "输入用户账号(1-500):";
cin >> accnum;
acc.setnum(accnum);
while (checkdata())
{
cout << "输入读者姓名:";
cin >> name;
acc.setname(name);
cout << "输入所借书籍名字:";
cin >> bookname;
acc.setbookname(bookname);
cout << "输入读者手机号:";
cin >> phone;
acc.setphone(phone);
cout << "输入借阅时间:";
cin >> borrowtime;
acc.setborrowtime(borrowtime);
cout << "输入归还时间:";
cin >> returntime;
acc.setreturntime(returntime);
inout.seekp((acc.getnum() - 1) * sizeof(Data), ios::beg);
inout.write((char*)&acc, sizeof(Data));
cout << "请输入用户账号(1-500):";
cin >> accnum;
acc.setnum(accnum);
}
inout.close();
}
int DataOperator::funcchoice() //选择功能按钮
{
cout << "=========================================================" << endl;
cout << "请输入功能选择数字(1,2,3,4,5,6,0)" << endl;
cout << "1--连续输入账户记录到二进制文件" << filename << "中" << endl;
cout << "2--显示文件中所有记录" << endl;
cout << "3--修改读者记录" << endl;
cout << "4--添加读者记录" << endl;
cout << "5--删除读者记录" << endl;
cout << "6--查询读者记录" << endl;
cout << "0--退出" << endl;
cout << "=============================================" << endl;
int choice;
cout << "请输入要选择的功能号:";
cin >> choice;
return choice;
}
void DataOperator::printrec()
{
inout.clear(); //清楚错误状态信息
inout.open(filename, ios::in);
if (inout.fail())
{
cout << "打开文件失败!" << endl;
exit(1);
}
cout << left << setw(10) << "读者姓名:";
cout << setw(16) << "读者电话";
cout << setw(16) << "所借书籍名称";
cout << setw(15) << "借阅时间";
cout << setw(15) << "归还时间";
inout.seekg(0, ios::beg);
inout.read((char*)&acc, sizeof(Data));
while (!inout.eof())
{
if (acc.getnum() != 0)
displine();
inout.read((char*)&acc, sizeof(Data));
}
inout.close();
}
void DataOperator::updaterec()
{
int accnum;
cout << "请输入要修改的记录号:";
cin >> accnum;
inout.clear(); //清楚错误状态信息
inout.open(filename, ios::in | ios::out);
if (inout.fail())
{
cout << "文件打开失败" << endl;
exit(1);
}
inout.seekg((accnum - 1) * sizeof(Data), ios::beg);
inout.read((char*)&acc, sizeof(Data));
if (acc.getnum() == accnum)
{
cout << "要修改记录的原始内容为:" << endl;
displine();
cout << "输入读者姓名为:" << endl;
char name[20];
cin >> name;
acc.setname(name);
cout << "输入所借书籍名字为:" << endl;
char bookname[30];
cin >> bookname;
acc.setbookname(bookname);
cout << "输入读者手机号为:" << endl;
int phone;
cin >> phone;
acc.setphone(phone);
cout << "输入借阅时间为:" << endl;
int btime;
cin >> btime;
acc.setborrowtime(btime);
cout << "输入归还时间为:" << endl;
int rtime;
cin >> rtime;
acc.setreturntime(rtime);
displine();
inout.seekp((acc.getnum() - 1) * sizeof(Data), ios::beg);
inout.write((char*)&acc, sizeof(Data));
}
else
cout << "对不起,未找到要修改的记录" << endl;
inout.close();
}
void DataOperator::insertrec()
{
int accnum;
char name[20];
char bookname[30];
int phone;
int btime;
int rtime;
cout << "请输入要添加的记录号:" << endl;
cin >> accnum;
inout.clear(); //清除错误状态信息
inout.open(filename, ios::in | ios::out);
if (inout.fail())
{
cout << "打开文件失败" << endl;

exit(1);
}
inout.seekg((accnum - 1) * sizeof(Data), ios::beg);
inout.read((char*)&acc, sizeof(Data));
if (acc.getnum() == accnum)
cout << "对不起,记录已经存在" << endl;
else
{
acc.setnum(accnum);
cout << "输入读者姓名:";
cin >> name;
acc.setname(name);
acc.getname();
cout << "输入所借书籍名字:";
cin >> bookname;
acc.setbookname(bookname);
acc.getbookname();
cout << "输入读者手机号:";
cin >> phone;
acc.setphone(phone);
acc.getphone();
cout << "输入借阅时间:";
cin >> btime;
acc.setborrowtime(btime);
acc.getborrowtime();
cout << "输入归还时间:";
cin >> rtime;
acc.setreturntime(rtime);
acc.getreturntime();
inout.seekp((acc.getnum() - 1) * sizeof(Data), ios::beg);
inout.write((char*)&acc, sizeof(Data));
}
inout.close();
}
void DataOperator::deleterec()
{
int accnum;
cout << "请输入要删除的记录号:" << endl;
cin >> accnum;
inout.clear(); //清楚错误状态信息
inout.open(filename, ios::binary |ios::in | ios::out);
if (inout.fail())
{
cout << "打开文件失败" << endl;
exit(1);
}
inout.seekg((accnum - 1) * sizeof(Data), ios::beg);
inout.read((char*)&acc, sizeof(Data));
if (acc.getnum() == accnum)
{
cout << "要删除记录的原始内容为:" << endl;
displine();
cout << "输入空白记录覆盖该处的记录" << endl;
Data data;
inout.seekp((accnum - 1) * sizeof(Data), ios::beg);
inout.write((char*)&data, sizeof(Data));
}
else
cout << "对不起,没有要删除的记录" << endl;
inout.close();
}
void DataOperator::inquirerec()
{
int accnum;
cout << "请输入要查询的记录号:" << endl;
cin >> accnum;
inout.clear(); //清楚错误状态信息
inout.open(filename, ios::binary | ios::in);
if (inout.fail())
{
cout << "打开文件失败" << endl;
exit(1);
}
inout.seekg((accnum - 1) * sizeof(Data), ios::beg);
inout.read((char*)&acc, sizeof(Data));
if (acc.getnum() == accnum)
{
cout << "要查询的记录的内容为:" << endl;
displine();
}
else
cout << "对不起,没有要查询的记录" << endl;
inout.close();
}
void DataOperator::accexit()
{
cout << "谢谢使用图书馆管理系统" << endl;
}
void DataOperator::displine()
{
cout << setw(8) << acc.getname();
cout << setw(8) << acc.getphone();
cout << setw(8) << acc.getbookname();
cout << setw(8) << acc.getborrowtime();
cout << setw(8) << acc.getreturntime() << endl;
}
bool DataOperator::checkdata()
{
if (acc.getnum() >= 1 && acc.getnum() <= 500)
return 1;
else
return 0;
}


deleterec()问题 以及 插入函数未插入文本

...全文
204 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-07-04
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
赵4老师 2017-07-04
  • 打赏
  • 举报
回复
windows里常见的内存填充数据含义
 * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory
漱 * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers
涵?  * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory
很?  * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger
撅饰 * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files
烫烫 * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory
屯屯 * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory
葺葺 * 0xDDDDDDDD : Used by Microsoft's free() or delete to mark freed heap memory
蕲蕲 * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash
 * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory
 * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory
yelinCoder 2017-07-04
  • 打赏
  • 举报
回复
关于显示字符串中第一个字母出现烫烫烫的问题 [urlhttps://www.baidu.com/s?wd=%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%85%A8%E6%98%AF%E7%83%AB&rsv_spt=1&rsv_iqid=0xe6536f8400000368&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_n=2&rsv_sug3=11&rsv_t=4fdaEwnXr3irhMcSVfjay7XZzw1RThdCd76mYGGzVaLQQq%2FGOzc24yJ%2FkO%2Fq7tEoqbcv&rsv_sug2=0&inputT=4385&rsv_sug4=4386]]百度[/url]sorry.
yelinCoder 2017-07-04
  • 打赏
  • 举报
回复
讲道理,大兄弟你贴这么多代码,我是拒绝的,看标题的话,网上有很多关于字符串显示“烫”的问题 关于显示字符串中第一个字母出现烫烫烫的问题 [urlhttps://www.baidu.com/s?wd=%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%85%A8%E6%98%AF%E7%83%AB&rsv_spt=1&rsv_iqid=0xe6536f8400000368&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_n=2&rsv_sug3=11&rsv_t=4fdaEwnXr3irhMcSVfjay7XZzw1RThdCd76mYGGzVaLQQq%2FGOzc24yJ%2FkO%2Fq7tEoqbcv&rsv_sug2=0&inputT=4385&rsv_sug4=4386]百度[/url]。可以先自己思考一下,我没有看代码的。。。。
xy_kok 2017-07-04
  • 打赏
  • 举报
回复
讲道理这么多代码真心没信心看下去,不如精简一下代码,再找问题吧。 提几点建议: 1. 代码写一点调一点,确保每多一个小功能,或修改一个下问题,程序是正常的; 2. 数组复制问题一定要把握精准; 3. 单步调试可以获取任何一个瞬间的运行状态,监测数据变化,磨刀不误砍柴工;
开心秋水 2017-07-04
  • 打赏
  • 举报
回复
烫烫烫是因为字符数组没有初始化
1、问题描述** 定义顾客类,属性有:会员卡号、姓名、性别、电话等信息和相关的对属性做操作的行为。 定义员工类:属性有:编号、姓名、性别、电话、美发项目(理发、发、洗发)等信 息和相关的对属性做操作的行为。 定义美发类:属性有各种美发项目的收费标准和相关的对属性做操作的行为。 **2、功能要求** (1)美发功能。根据顾客所要做的美发项目、服务的雇员、消费金额等将相应信息添 加到顾客类中指定顾客和员工类中指定员工信息里。 (2)简单管理功能。 添加功能:程序能够添加顾客信息和雇员信息,要求编号要唯一,如果添加了重复编号 的记录时,则提示数据添加重复并取消添加。 查询功能:可根据姓名、电话、卡号等信息对已添加的顾客信息进行查询,如果未找到, 给出相应的提示信息,如果找到,则显示相应的记录信息;还可以根据姓名、工种编号等信 息对雇员信息进行查询。 显示功能:可显示当前系统中所有顾客信息和雇员信息,每条信息占据一行。 编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 删除功能:主要实现对已添加的顾客和雇员记录进行删除。如果当前系统中没有相应的 人员记录,则提示“记录为空!”并返回操作。 保存功能:可将当前系统中顾客和雇员记录存入文件中,存入方式任意。 读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 (3)统计功能。能统计出顾客的消费总数、雇员的收入总数。都按从大到小排序。 **3、问题的解决方案 根据系统功能要求,可以将问题解决分为以下步骤:** (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告。
1、问题描述 定义顾客类,属性有:会员卡号、姓名、性别、电话等信息和相关的对属性做操作的行 为。 定义员工类:属性有:编号、姓名、性别、电话、美发项目(理发、发、洗发)等信 息和相关的对属性做操作的行为。 定义美发类:属性有各种美发项目的收费标准和相关的对属性做操作的行为。 定义一个管理类,完成对美发店的简单管理。 2、功能要求 (1)美发功能。根据顾客所要做的美发项目、服务的雇员、消费金额等将相应信息添 加到顾客类中指定顾客和员工类中指定员工信息里。 (2)简单管理功能。 添加功能:程序能够添加顾客信息和雇员信息,要求编号要唯一,如果添加了重复编号 的记录时,则提示数据添加重复并取消添加。 查询功能:可根据姓名、电话、卡号等信息对已添加的顾客信息进行查询,如果未找到, 给出相应的提示信息,如果找到,则显示相应的记录信息;还可以根据姓名、工种编号等信 息对雇员信息进行查询。 显示功能:可显示当前系统中所有顾客信息和雇员信息,每条信息占据一行。 编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 删除功能:主要实现对已添加的顾客和雇员记录进行删除。如果当前系统中没有相应的 人员记录,则提示“记录为空!”并返回操作。 保存功能:可将当前系统中顾客和雇员记录存入文件中,存入方式任意。 读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 (3)统计功能。能统计出顾客的消费总数、雇员的收入总数。都按从大到小排序。 3、问题的解决方案 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告。

64,639

社区成员

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

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