#include<iostream>
#include<fstream>
#include<iomanip>
#include<string>
using namespace std;
const int noOfSalesPerson=6;
struct salesPersonRec//定义结构体
{
string ID;
double saleByQuarter[4];
double totalSale;
};
void initialize(ifstream& indata,salesPersonRec list[],int listSize);
void getData(ifstream& infile,salesPersonRec list[],int listSize);
void saleByQuarter(salesPersonRec list[],int listSize,double totalByQuarter[]);
void totalSaleByPerson(salesPersonRec list[],int listSize);
void printReport(ofstream& outfile,salesPersonRec list[],int listSize,double saleByQuarter[]);
void maxSaleByPerson(ofstream& outData,salesPersonRec list[],int listSize);
void maxSaleByQuarter(ofstream& outData,double saleByQuarter[]);
int main()
{
ifstream infile;//申明变量
ofstream outfile;
string inputFile;
string outputFile;
double totalSaleByQuarter[4];
salesPersonRec salesPersonList[noOfSalesPerson];//申明结构体变量salesPersonList
cout<<"Enter the salesperson ID file name:";
cin>>inputFile;//读入输入文件名
cout<<endl;
infile.open(inputFile.c_str());//打开输入文件
if(!infile)
{
cout<<"Cannot open the input file."<<endl;
return 1;
}
initialize(infile,salesPersonList,noOfSalesPerson);//调用函数初始化数据
infile.close();
infile.clear();
cout<<"Enter the sales data file name:";
cin>>inputFile;
cout<<endl;
infile.open(inputFile.c_str());//打开输入文件
if(!infile)
{
cout<<"Cannot open the input file."<<endl;
return 1;
}
cout<<"Enter the output file name:";
cin>>outputFile;
cout<<endl;
outfile.open(outputFile.c_str());
outfile<<fixed<<showpoint<<setprecision(2);
getData(infile,salesPersonList,noOfSalesPerson);//处理销售数据
saleByQuarter(salesPersonList,noOfSalesPerson,totalSaleByQuarter);//计算季度销售额
totalSaleByPerson(salesPersonList,noOfSalesPerson);//计算每个销售员的总销售额
printReport(outfile,salesPersonList,noOfSalesPerson,totalSaleByQuarter);//按表格打印结果
maxSaleByPerson(outfile,salesPersonList,noOfSalesPerson);//最大销售额员工
maxSaleByQuarter(outfile,totalSaleByQuarter);//最大销售季度
infile.close();
outfile.close();
return 0;
}
void initialize(ifstream& indata,salesPersonRec list[],int listSize)
{
int index;
int quarter;
for (index=0;index<listSize;index++)
{
indata>>list[index].ID;
for(quarter=0;quarter<4;quarter++)
list[index].saleByQuarter[quarter]=0.0;
list[index].totalSale=0.0;
}
}
void getData(ifstream& infile,salesPersonRec list[],int listSize)
{
int index;
int quarter;
string sID;
int month;
double amount;
infile>>sID;
while(infile)
{
infile>>month>>amount;
for(index=0;index<listSize;index++)
if(sID==list[index].ID)
break;
if(1<=month&&month<=3)
quarter=0;
else if(4<=month&&month<=6)
quarter=1;
else if(7<=month&&month<=9)
quarter=2;
else
quarter=3;
if(index<listSize)
list[index].saleByQuarter[quarter]+=amount;
else
cout<<"Invalid salesperson's ID."<<endl;
infile>>sID;
}
}
void saleByQuarter(salesPersonRec list[],int listSize,double totalByQuarter[])
{
int quarter;
int index;
for (quarter=0;quarter<4;quarter++)
totalByQuarter[quarter]=0.0;
for(quarter=0;quarter<4;quarter++)
for(index=0;index<listSize;index++)
totalByQuarter[quarter]+=list[index].saleByQuarter[quarter];
}
void totalSaleByPerson(salesPersonRec list[],int listSize)
{
int index;
int quarter;
for(index=0;index<listSize;index++)
for(quarter=0;quarter<4;quarter++)
list[index].totalSale+=list[index].saleByQuarter[quarter];
}
void printReport(ofstream& outfile,salesPersonRec list[],int listSize,double saleByQuarter[])
{
int index;
int quarter;
outfile<<"--------Annual Sales Report------------"<<endl;
outfile<<endl;
outfile<<"ID QT1 QT2 QT3 QT4 Total"<<endl;
outfile<<"____________________________________________________"<<endl;
for(index=0;index<listSize;index++)
{
outfile<<list[index].ID<<" ";
for(quarter=0;quarter<4;quarter++)
outfile<<setw(10)<<list[index].saleByQuarter[quarter];
outfile<<setw(10)<<list[index].totalSale<<endl;
}
outfile<<"Total ";
for(quarter=0;quarter<4;quarter++)
outfile<<setw(10)<<saleByQuarter[quarter];
outfile<<endl<<endl;
}
void maxSaleByPerson(ofstream& outData,salesPersonRec list[],int listSize)
{
int maxIndex=0;
int index;
for(index=1;index<listSize;index++)
if(list[maxIndex].totalSale<list[index].totalSale)
maxIndex=index;
outData<<"Max sale by salesperson:ID="<<list[maxIndex].ID<<",Amount=$"<<list[maxIndex].totalSale<<endl;
}
void maxSaleByQuarter(ofstream& outData,double saleByQuarter[])
{
int quarter;
int maxIndex=0;
for(quarter=0;quarter<4;quarter++)
if(saleByQuarter[maxIndex]<saleByQuarter[quarter])
maxIndex=quarter;
outData<<"Max sale by quarter:quarter="<<maxIndex+1<<",Amount=$"<<saleByQuarter[maxIndex]<<endl;
}
C++基础教程第11章程序/debug了
最新推荐文章于 2024-05-26 14:07:25 发布