#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
using namespace std;
class use
{
public:
void write();
void cal();
void save();
void judge();
private:
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//平年每个月的天数
int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年每个月的天数
int x,y,z;//客户输入的年月日
int d;//记录客户输入日期距离2010年1月1日的天数
int flag;//表示判断结果
};
//客户录入日期至“in.txt”
void use::write()
{
FILE *fp;//创建一个可以指向文件的指针
fp=fopen("in.txt","w");//向文件”in.txt“中写入信息
cout<<"请输入年:";
cin>>x;
while(x<2010)//判断输入日期是否合理
{
cout<<"输入日期不合理,请重新输入\n";
cin>>x;
}
cout<<"请输入月:";
cin>>y;
while(y==0||y>12)//判断输入日期是否合理
{
cout<<"输入日期不合理,请重新输入\n";
cin>>y;
}
cout<<"请输入日:";
cin>>z;
if((x%4==0&&x%100!=0)||x%400==0)//判断输入日期是否合理
{
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
while(z=0||z>31)
{
cout<<"输入日期不合理,请重新输入\n";
cin>>z;
}
if(y==4||y==6||y==9||y==11)
while(z=0||z>30)
{
cout<<"输入日期不合理,请重新输入\n";
cin>>z;
}
if(y==2)
while(z=0||z>29)
{
cout<<"输入日期不合理,请重新输入\n";
cin>>z;
}
}
else
{
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
while(z=0||z>31)
{
cout<<"输入日期不合理,请重新输入\n";
cin>>z;
}
if(y==4||y==6||y==9||y==11)
while(z=0||z>30)
{
cout<<"输入日期不合理,请重新输入\n";
cin>>z;
}
if(y==2)
while(z=0||z>28)
{
cout<<"输入日期不合理,请重新输入\n";
cin>>z;
}
}
fprintf(fp,"\n%d %d %d",x,y,z);
fclose(fp);
}
//计算天数
void use::cal()
{
int i;
for(i=2010;i<x;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)//判断i是闰年还是平年
{
d+=366;
}
else
{
d+=365;
}
}
for(i=1;i<y;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
d+=b[i];
}
else
{
d+=a[i];
}
}
d+=z;
}
//判断当日是打鱼还是晒网
void use::judge()
{
if(d%5<=3&&d%5!=0)
{
flag=1;
}
else
{
flag=0;
}
}
//保存结果至“out.txt”
void use::save()
{
ofstream myfile("out.txt",ios::out);//定义一个输出流对象myfile,就是可以向out.txt这个文件写数据
if(flag)//判断今天是在做什么
{
cout<<"今天在打鱼" ;
myfile<<"今天在打鱼" ; //向文件”out.txt“输入内容
}
else
{
cout<<"今天在晒网" ;
myfile<<"今天在晒网" ;//向文件”out.txt“输入内容
}
}
int main()
{
use user;
user.write();
user.cal();
user.judge();
user.save();
return 0;
}
这个代码运行后操纵者输入当前的日期可得到在打鱼还是晒网。作为刚起步不久的学生,我的代码很繁杂,不够简洁,就比如检查数据异常返回重新输入的那段代码。还有我对文件的操作并不熟悉,可以说是刚接触,所以代码顺序很乱。如果有什么建议或能改进的地方希望能多多指点。