| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 651 人关注过本帖
标题:文件打开与关闭问题
只看楼主 加入收藏
呜呜1
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2013-9-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
文件打开与关闭问题
编写程序实现以下功能:
1按职工号由小到大的顺序将5个员工的数据(包括号码、姓名、年龄、工资)输出到磁盘文件中保存;
2 从键盘输入两个员工的数据(职工号大于已有的职工号),增加到文件的末尾;
 3输出文件中全部职工的数据;
 4从键盘输入一个号码,从文件中查找有无此职工号,如有则显示此职工是第几个职工,以及此职工的全部数据。如没有,及输出“无此人”。可以反复多次查询,如果输入查找的职工号为0,就结束查询。
 5要求给出用户相应的提示信息。

#include <iostream>
#include <fstream>
using namespace std;
struct staff
{int num;
 char name[20];
 int age;
 double  pay;
};
int main()
{staff staf[7]={2101,"Li",34,1203,2104,"Wang",23,674.5,2108,"Fun",54,778,
                  3006,"Xue",45,476.5,5101,"Ling",39,656.6},staf1;
 fstream iofile("staff.dat",ios::in|ios::out|ios::binary);
 if(!iofile)
  {cerr<<"open error!"<<endl;
   abort();
  }
 int i,m,num;
 cout<<"Five staff :"<<endl;
 for(i=0;i<5;i++)
   {cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;
    iofile.write((char *)&staf[i],sizeof(staf[i]));}
 cout<<"please input data you want insert:"<<endl;
 for(i=0;i<2;i++)
   {cin>>staf1.num>>staf1.name>>staf1.age>>staf1.pay;
    iofile.seekp(0,ios::end);
    iofile.write((char *)&staf1,sizeof(staf1));}
  iofile.seekg(0,ios::beg);
  for(i=0;i<7;i++)
   {iofile.read((char *)&staf[i],sizeof(staf[i]));
    cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;
   }
 bool find;
 cout<<"enter number you want search,enter 0 to stop.";
 cin>>num;
 while(num)
 {find=false;
  iofile.seekg(0,ios::beg);
  for(i=0;i<7;i++)
   {iofile.read((char *)&staf[i],sizeof(staf[i]));
    if(num==staf[i].num)
     {m=iofile.tellg();
      cout<<num<<" is No."<<m/sizeof(staf1)<<endl;
      cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;
      find=true;
      break;
     }
   }
  if(!find)
    cout<<"can't find "<<num<<endl;
  cout<<"enter number you want search,enter 0 to stop.";
  cin>>num;
 }
  iofile.close();
  return 0;
  cin.get();
}
我一运行程序就报错:abnormal    programm   termination  不懂哈
搜索更多相关主题的帖子: 编写程序 include 提示信息 键盘 姓名 
2013-11-21 22:45
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:5 
代码好龊。。。不想看。你先对代码排版吧。在分分函数
2013-11-22 09:00
左手拉一只猫
Rank: 4
来 自:杭州
等 级:业余侠客
帖 子:70
专家分:250
注 册:2013-10-27
收藏
得分:5 
以下是引用blueskiner在2013-11-22 09:00:37的发言:

代码好龊。。。不想看。你先对代码排版吧。在分分函数

同上!

我能帮你的只能到这里了。。。
2013-11-22 10:10
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
CB的自动排版效果
程序代码:
#include <iostream>
#include <fstream>

using namespace std;

struct staff
{
    int num;
    char name[20];
    int age;
    double  pay;
};

int main()
{
    staff staf[7]= {2101,"Li",34,1203,2104,"Wang",23,674.5,2108,"Fun",54,778,
                    3006,"Xue",45,476.5,5101,"Ling",39,656.6
                   },staf1;
    fstream iofile("staff.dat",ios::in|ios::out|ios::binary);
    if(!iofile)
    {
        cerr<<"open error!"<<endl;
        abort();
    }
    int i,m,num;
    cout<<"Five staff :"<<endl;
    for(i=0; i<5; i++)
    {
        cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;
        iofile.write((char *)&staf[i],sizeof(staf[i]));
    }
    cout<<"please input data you want insert:"<<endl;
    for(i=0; i<2; i++)
    {
        cin>>staf1.num>>staf1.name>>staf1.age>>staf1.pay;
        iofile.seekp(0,ios::end);
        iofile.write((char *)&staf1,sizeof(staf1));
    }
    iofile.seekg(0,ios::beg);
    for(i=0; i<7; i++)
    {
        iofile.read((char *)&staf[i],sizeof(staf[i]));
        cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;
    }
    bool find;
    cout<<"enter number you want search,enter 0 to stop.";
    cin>>num;
    while(num)
    {
        find=false;
        iofile.seekg(0,ios::beg);
        for(i=0; i<7; i++)
        {
            iofile.read((char *)&staf[i],sizeof(staf[i]));
            if(num==staf[i].num)
            {
                m=iofile.tellg();
                cout<<num<<" is No."<<m/sizeof(staf1)<<endl;
                cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;
                find=true;
                break;
            }
        }
        if(!find)
        {
          cout<<"can't find "<<num<<endl;
        }
        cout<<"enter number you want search,enter 0 to stop.";
        cin>>num;
    }
    iofile.close();
    return 0;
    cin.get();
}



DO IT YOURSELF !
2013-11-22 10:17
华子hear
Rank: 3Rank: 3
来 自:陕西西安
等 级:论坛游侠
帖 子:57
专家分:104
注 册:2013-6-3
收藏
得分:0 
一字不差的书上例题啊~
咱不能自己写一下,对照给出的例题找差距吗?
abort();把这个语句删了再试试。codeblocks编译通过执行正常。
2013-11-25 20:16
快速回复:文件打开与关闭问题
数据加载中...
 
   



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

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