c++文件流输出-C++从文件中输出类时重复输出的问题

问题描述

C++从文件中输出类时重复输出的问题
#ifndef CLASSDEF_H
#define CLASSDEF_H

class MoneyData
{
public:
int year;
int month;
int day;
char remark[80];
char PI[40];
char BankAccount[20];
char form[15];
char direction[5];
double Change;
double Cash;
double Saving;
static double TotalCash;
static double TotalSavings;
static double TotalChange;
};

#endif

#include
#include
#include
#include""ClassDef.h""
using namespace std;

void Inquire(const char *filename)
{
char choice;
MoneyData money;
int m d;
char pi[40];
char bankaccount[20];
cout << "" ●财务信息管理系统●n"";
cout << ""●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●n"";
cout << ""● 账目查询 ●n"";
cout << ""●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●n"";
fstream fdat(filename ios::in);
if (!fdat)
{
cout << ""账目不存在,请进行初始化操作!"" << endl;
return;
}
while (1)
{
fdat.seekg(0 ios::beg);
cout << ""请选择需要查询的信息:"" << endl;
cout << ""1:按月查询t"" << ""2:按日查询t""<< ""3:按订单查询t""<<""4:按银行账号查询t""<<""5:按现金查询t""<<""6:查询总额t"" << ""Q:返回"" << endl;
cin >> choice;
cout << ""====================================================================="" << endl;
switch (choice)
{
case'1':
{
int work = 0;
fdat.seekg(0 ios::beg);
cout << ""请输入月份:"";
cin >> m;
cout << ""====================================================================="" << endl;
do
{
fdat.read((char *)&money sizeof(MoneyData));
if (money.month == m)
{
cout << money.year << ""."" << money.month << ""."" << money.day << ""nPI:""
<< money.PI << ""nForm:"" << money.form << ""nBankaccount:"" << money.BankAccount << ""nDirection:""
<< money.direction << ""nMoney:"" << money.Change << ""nRemark:"" << money.remark << endl;
work = 1;
}
} while (fdat.peek() != EOF); //这里是循环的判定
if (work=0)
{
cout << ""当月没有款项变动"" << endl;
continue;
}
break;
}
case'2':
{
int work = 0;
fdat.seekg(0 ios::beg);
cout << ""请输入月份和日期:"";
cin >> m >> d;
cout << ""====================================================================="" << endl;
do
{
fdat.read((char *)&money sizeof(MoneyData));
if (money.month == m&&money.day==d)
{
cout << money.year << ""."" << money.month << ""."" << money.day << ""nPI:""
<< money.PI << ""nForm:"" << money.form << ""nBankaccount:"" << money.BankAccount << ""nDirection:""
<< money.direction << ""nMoney:"" << money.Change << ""nRemark:"" << money.remark << endl;
work = 1;
}
} while (fdat.peek() != EOF);
if (work = 0)
{
cout << ""当日没有款项变动"" << endl;
continue;
}
break;
}
case'3':
{
int work = 0;
fdat.seekg(0 ios::beg);
cout << ""请输入订单号:"";
cin >> pi;
cout << ""====================================================================="" << endl;
do
{
fdat.read((char *)&money sizeof(MoneyData));
if (!strcmp(money.PI pi))
{
cout << money.year << ""."" << money.month << ""."" << money.day << ""nPI:""
<< money.PI << ""nForm:"" << money.form << ""nBankaccount:"" << money.BankAccount << ""nDirection:""
<< money.direction << ""nMoney:"" << money.Change << ""nRemark:"" << money.remark << endl;
work = 1;
}
} while (fdat.peek() != EOF);
if (work = 0)
{
cout << ""没有该订单相关信息"" << endl;
continue;
}
break;
}
case'4':
{
int work = 0;
fdat.seekg(0 ios::beg);
cout << ""请输入银行账号:"";
cin >> bankaccount;
cout << ""====================================================================="" << endl;
do
{
fdat.read((char *)&money sizeof(MoneyData));
if (!strcmp(money.BankAccount bankaccount))
{
cout << money.year << ""."" << money.month << ""."" << money.day << ""nPI:""
<< money.PI << ""nForm:"" << money.form << ""nBankaccount:"" << money.BankAccount << ""nDirection:""
<< money.direction << ""nMoney:"" << money.Change << ""nRemark:"" << money.remark << endl;
work = 1;
}
} while (fdat.peek() != EOF);
if (work = 0)
{
cout << ""没有该银行账号的存款变动信息"" << endl;
continue;
}
break;
}
case'5':
{
int work = 0;
fdat.seekg(0 ios::beg);
cout << ""现金变动信息如下:"";
do
{
fdat.read((char *)&money sizeof(MoneyData));
if (!strcmp(money.formCash""))
{
cout << money.year << ""."" << money.month << ""."" << money.day << ""nPI:""
<< money.PI << ""nForm:"" << money.form << ""nBankaccount:"" << money.BankAccount << ""nDirection:""
<< money.direction << ""nMoney:"" << money.Change << ""nRemark:"" << money.remark << endl;
work = 1;
}
} while (fdat.peek() != EOF);
if (work = 0)
{
cout << ""没有现金变动信息"" << endl;
continue;
}
break;
}
case'6':
{
fdat.seekg(0 ios::end);
fdat.read((char *)&money sizeof(MoneyData));
cout << ""总现金变动:"" << MoneyData::TotalCash << endl;
cout << ""总存款变动:"" << MoneyData::TotalSavings << endl;
cout << ""总款额变动:"" << MoneyData::TotalChange << endl;
break;
}
case'q':
case'Q':cout << ""返回主菜单"" << endl; return;
default:cout << ""没有该操作选项,请重新输入"" << endl;
}
}
}

请各位大神相助!这里按我现在的判定语句是会重复输出的。我尝试过其他的方法判定,例如直接fdat>>...>>...但是这样不知道为什么连正常输出都不行。
请各位高手帮我修改一下,感激不尽!!!!

解决方案

你这样贴代码还不如贴图的方式,这样很难有人看得清楚,而且你也没有把打印的结果贴出来,
很难一下定位出问题的地方在哪里。
其实debug也是程序员的一种综合技能,学会了也能提高你的能力。
具体到你这个程序。你这里的问题是if (work = 0),这样判断无效,所以会重复。
这是对work进行赋值,应该改成if (work == 0)。

望采纳,希望能帮到你。

解决方案二:
debug,然后看判定条件是否正确。你这样直接贴代码,没人会看的

时间: 2024-11-01 05:20:47

c++文件流输出-C++从文件中输出类时重复输出的问题的相关文章

ASP.NET 文件流下载多个文件问题

问题描述 开发一个新功能,点击导出按钮,去数据库查询然后导出5个excel文件:我采用的是NPOI导出:代码如下,点击导出的时候,页面增加查询动画.现在遇到俩个问题,第一:我循环导出2个以上文件无效,只导出一个:第二:调用js脚本隐藏界面查询动画无效:(去掉下面循环导出就没有问题)CFReportExportServiceCFES=newCFReportExportService();List<DataTable>list=CFES.GetCFReport("","

详解C++编程中的文件流与字符串流_C 语言

C++文件流类与文件流对象 文件流是以外存文件为输入输出对象的数据流.输出文件流是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据.每一个文件流都有一个内存缓冲区与之对应. 请区分文件流与文件的概念,不用误以为文件流是由若干个文件组成的流.文件流本身不是文件,而只是以文件为输入输出对象的流.若要对磁盘文件输入输出,就必须通过文件流来实现. 在C++的I/O类库中定义了几种文件类,专门用于对磁盘文件的输入输出操作. 除了标准输入输出流类istream.ostream和iostream

java中IO操作 利用文件流 过滤流对文件进行读写操作

/* 两种基本的流是:输入流(Input Stream)和输出流(Output Stream) .可从中读出一系列字节的对象称为输入流. 而能向其中写入一系列字节的对象称为输出流. System.out.println   中的 out 是 PrintStream 类对象   System类的静态成员可以向 输出流写入数据 System.in.read()     in 是InputStream类的成员 可以从键盘等输入设备读取字节数据  利用FileInputStream   FileOutp

android从资源文件中读取文件流并显示的方法_Android

本文实例讲述了android从资源文件中读取文件流并显示的方法.分享给大家供大家参考.具体如下: 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private void doRaw(){ InputStream is = this.getResources().openRawResource(R.raw.ziliao); try{ doRead(is); }catch(IOException e){ e.printStackTrace(

C++文件流例子

题目: 1.创建文件名为textfile的文本文件,先向该文件写入如下信息:       C++实验!       输入输出流操作!      创建文本文件成功! 然后关闭文件,再以输入模式打开textfile文件读取数据,并从计算机屏幕输出文件内容. 代码: //********************************/// #include<iostream> #include<fstream> #include<cstdlib> #include<c

xml-XML大文件流解析 线程终止

问题描述 XML大文件流解析 线程终止 最近开发一个xml文件流解析项目(web) 对方发送xml格式文件流 我方获取并进行解析入库 我写了2中方案 去获取文件流并解析 第一种 Stream m_Stream = Request.InputStream; if (m_Stream.Length > 0){ XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(m_Stream); XmlElement xmlRoot = xmlDoc.Docum

Visual C#如何实现文件流式读写。

问题描述 VisualC#在System.IO命名空间中提供了一段文件读写控制的源代码:if(File.Exists(path)){//Createafiletowriteto.using(StreamWritersw=File.CreateText(path)){sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");}} //Openthefiletoreadfrom

C语言读取文件流的相关函数用法简介_C 语言

C语言fread()函数:读文件函数(从文件流读取数据) 头文件: #include <stdio.h> 定义函数: size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream); 函数说明:fread()用来从文件流中读取数据. 参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值

求思路,我怎么把以下的htm代码中的table输出一个Excel文件

问题描述 <TableBorder=1cellspacing=0cellpadding=1bordercolorlignt=000000bordercolordark=ffffffclass=9PIX><Tr><Td>开始时间</Td><Td>结束时间</Td><Td>主叫号码</Td><Td>被叫号码</Td><Td>时长(秒)</Td><Td>话费