| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1575 人关注过本帖
标题:面对这个问题已经很多天就是解决不料 请指教一下
只看楼主 加入收藏
dream1101
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-6-29
收藏
得分:0 
修改以后的


void SaveRecord(List&SalaryList)
{
char name[20];
cout<<"请输入要保存的文件名:";
cin>>name;
ofstream in;
in.open(name,ios::binary|ios::app);
if(!in)
{
cout<<"数据文件打开错误,不能将数据保存到文件中!\n";
return;
}
Node *pnode;
Salary *psal;
pnode=SalaryList.GetListHead(); //取链表头指针
while(pnode)
{
//返回结点指向的数据指针
psal=(Salary*)pnode->GetData();
//写入数据
in.write((char*)psal,sizeof(Salary));
//in<<psal->Num<<psal->Name<<psal->BaseSalary<<' '<<psal->Bonus<<endl;
//取下一结点指针
pnode=SalaryList.GetListNextNode(pnode);
}
in.close();
}
/*******************************************************
*功能:主菜单选项操作
********************************************************/
void Menu(string& choice,List &SalaryList)
{
if(choice=="1")
AddRecord(SalaryList);
else if(choice=="2")
DisplayRecord(SalaryList);
else if(choice=="3")
LookUpRecord(SalaryList);
else if(choice=="4")
DeleteRecord(SalaryList);
else if(choice=="0")
SaveRecord(SalaryList);
else
cout<<"输入错误,请重新选择\n\n";
}

/***********************************************
*功能:读取文件。
***********************************************/
void LoadFile(List &SalaryList)
{

ifstream infile;
infile.open("SALARY.txt",ios::binary|ios::in);
if(!infile)
{
cout<<"没有数据文件!\n\n";
return;
}
Node *pnode;
Salary *psal;
while(!infile.eof())
{
//定义新的数据对象
psal=new Salary;
infile.read((char*)psal,sizeof(Salary));
pnode=new Node;
//将数据加入
pnode->InputData(psal);
SalaryList.AddNode(pnode);
//cout<<setw(10)<<psal->Num<<setw(10)<<psal->Name<<setw(12)<<psal->BaseSalary<<setw(8)<<psal->Bonus<<setw(12)<<(psal->BaseSalary+psal->Bonus)<<endl;
}//删除头结点
SalaryList.DeleteNode(pnode);
infile.close();
}

依然 始终 永远。
2006-06-29 11:17
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
你在读取文件时用的文件名是SALARY.txt,但是保存时却让用户自己输一个文件名,是不是应该保存时也用文件名SALARY.txt??不然用户保存的文件名不是SALARY.txt的话你去读SALARY.txt怎么可能读到数据

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-29 11:20
dream1101
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-6-29
收藏
得分:0 
可以不?

依然 始终 永远。
2006-06-29 11:20
dream1101
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-6-29
收藏
得分:0 
哦 对啊

依然 始终 永远。
2006-06-29 11:32
dream1101
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-6-29
收藏
得分:0 

我第二次添加数据的时候

它会重复显示一次上一次的数据

这个问题怎么解决啊?


依然 始终 永远。
2006-06-29 11:35
dream1101
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-6-29
收藏
得分:0 
把 in.open("SALARY.txt",ios::binary|ios::out);
这样改吗?

依然 始终 永远。
2006-06-29 11:38
dream1101
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-6-29
收藏
得分:0 
如果我不想把它用二进制保存
这样不运行程序,可以在文本文件直接读取
有没有什么方法啊?

依然 始终 永远。
2006-06-29 11:41
dream1101
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-6-29
收藏
得分:0 

原来是 ios::in和ios::out 真的不能乱用


依然 始终 永远。
2006-06-29 11:45
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用dream1101在2006-6-29 11:41:57的发言:
如果我不想把它用二进制保存
这样不运行程序,可以在文本文件直接读取
有没有什么方法啊?

你问题真多,那么你可以用原来的写入方式进行写入,但是读取时不能用二进制读,也是用文本方式读取,也就是说怎么写的就怎么读


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-29 11:58
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
推荐都用2进制
稳定

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-29 12:02
快速回复:面对这个问题已经很多天就是解决不料 请指教一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026370 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved