标题:一个C++中文件的问题?
只看楼主
bcypxl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-18
结帖率:25%
 问题点数:0 回复次数:3 
一个C++中文件的问题?
谁能帮我解决下面的问题,辛辛苦苦写出来的,功能上有缺陷,找不出错在那里,很纠结。
对于大家的帮助我会很感激的。




同学通信录程序,编写一个程序,将下面的同学信息存储到文件中。
name:具有21个字符空间的数组
age:一个整形变量
address:具有51个空间的字符数组
phone:具有14个空间的字符数组
email:具有51个空间的字符数组
该程序具有一个菜单,便于用户完成如下操作:
1)向文件中增加记录。
2)显示文件中的所有记录。
3)修改任意一个记录。
4)按照姓名查找一个同学的记录。
5)删除某个同学的记录。
输入有效性检验:输入的年龄不能为负,也不能大于200.

#include"iostream"
using namespace std;
#include"fstream"
#include"iomanip"

struct Info
{
char name[21];
int age;
char address[51];
char phone[14];
char email[51];
};

int i=0; //用来记录读指针到底几个位置了

void AddFile(fstream &);
void ShowFile(fstream &);
void EditFile(fstream &);
void SearchFile(fstream &);
void DeleteFile(fstream &);

int main()
{
fstream people("Info.dat",ios::in|ios::out|ios::binary);
int choice;

if(people.fail())
{
cout << "文件打开失败!\n";
exit(0);
}
while(true)
{
cout << "\n\t1: Add 2: Show 3: Edit 4: Search 5: Delete 6: Exit\n";
cin >> choice;
switch(choice)
{
case 1:
AddFile(people);
break;
case 2:
ShowFile(people);
break;
case 3:
EditFile(people);
break;
case 4:
SearchFile(people);
break;
case 5:
DeleteFile(people);
break;
case 6:
exit(0);
}
}
return 0;
}
//向文件中增加记录
void AddFile(fstream &file) //问:第一次添加时可以,但第二次添加时加不上啊?
{
Info person;

cout << "请输入下面的新信息:\n";
cout << "姓名:";
cin >> person.name;
cout << "年龄:";
cin >> person.age;
cin.ignore();
cout << "地址:";
cin.getline(person.address,51);
cout << "电话:";
cin.getline(person.phone,14);
cout << "E-mail:";
cin.getline(person.email,51);
file.seekp(0L,ios::end);//每次输入时,读指针都在文件尾,前面的数据不会被冲掉
file.write((char *)&person,sizeof(person));
file.flush();
}
//显示文件中的所有记录
void ShowFile(fstream &file)   
{
Info person;

file.clear();
file.seekg(0L,ios::beg);
while(!file.eof())
{
file.read((char *)&person,sizeof(person));
if(file.fail())
break;
cout << "姓名:" << person.name;
cout << setw(20) << "年龄:" << person.age;
cout <<setw(20) << "地址:" << person.address << endl;
cout << "电话:" << person.phone;
cout << setw(21) << "E-mail" << person.email << endl;
cout << "**********************************************************";
cout << endl;
}
}
//修改任意一个记录
void EditFile(fstream &file)
{
Info person;

   
cout << "输入要修给信息的同学姓名并显示原信息" << endl;
cout << "**********************************************************" << endl;
i = 0;
SearchFile(file);

cout << "下面请输入新的信息:" << endl;
cout << "姓名:";
cin >> person.name;
cout << "年龄:";
cin >> person.age;
cin.ignore();
cout << "地址:";
cin.getline(person.address,51);
cout << "电话:";
cin.getline(person.phone,14);
cout << "E-mail:";
cin.getline(person.email,51);

file.seekp(i * sizeof(person),ios::beg); //使读指针直接指向要修改记录的地方
file.write((char *)&person,sizeof(person));
  file.flush();

}
//按照姓名查找一个记录
void SearchFile(fstream &file) //可以正常的查找信息
{
Info person;
char compt[21];
 

  file.clear();
cout << "请输入要查找的同学姓名:";
cin >> compt;
cin.ignore();
while(!file.eof())
{
file.seekg(i * sizeof(person),ios::beg);
file.read((char *)&person,sizeof(person));
if(file.fail())
break;
if(strcmp(compt,person.name) == 0)   
{
cout << "姓名:" << person.name;
cout << setw(20) << "年龄:" << person.age;
cout << setw(20) << "地址:" << person.address << endl;
cout << "电话:" << person.phone;
cout << setw(21) << "E-mail" << person.email << endl;
cout << "**********************************************************";
cout << endl;
break;
}
i++;
}
}
//删除某个同学的记录
void DeleteFile(fstream &file) //问:想删除的记录删不掉啊?
{
Info person;
char choice;
int j;

cout << "请输入要删除信息同学的名字并显示其信息" << endl;
cout << "**********************************************************" << endl;
i = 0;
SearchFile(file);
j = i;

cout << "你确定要删除该同学信息吗!(输入Y或N)" << endl;
cin >> choice;
if(toupper(choice) == 'Y')
{
while(!file.eof())
{
file.seekg((j+1) * sizeof(person),ios::beg); //使读指针指向要修改数据的下一个位置
file.read((char *)&person,sizeof(person)); //读取数据
if(file.fail())
break;
file.seekp(j * sizeof(person),ios::beg); //使写指针直接指向要修改记录的地方
file.write((char *)&person,sizeof(person));
  file.flush();
j ++;
}
}
else  
cout << "信息未删除!" << endl;
}
搜索更多相关主题的帖子: 记录 空间 address email 
2011-11-17 20:11
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
功能上有缺陷,找不出错在那里?
问题是,哪里功能上有缺陷?你都不明白,别人就更不明白了。

我们都在路上。。。。。
2011-11-18 12:40
bcypxl
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-18
得分:0 
回复 2楼 hellovfp
删除记录是删不掉,写记录时第二次添加不上去。
2011-11-18 17:37
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
得分:0 
编程方式有问题,不要直接对文件一直读读写写的。
用结构数组保存用户的输入,程序运行的时候从文件中读取到该结构数组,结束前一次性写入文件中。
删除,添加,查找都在内存中进行。
看看别人是怎么写这种类型的程序的。。。重新写吧。

我们都在路上。。。。。
2011-11-19 18:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-355528-1-1.html




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

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