Code:
/*
Program Class date · Date: 10/01/2007
-------------------------------------------------------------
VU THANH NAM - CONG NGHE THANG LONG
MA SV: A0707
Copyright (C) 2007 - All Rights Reserved
***************************************************************
*/
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <windows.h>
int songay(int m,int y);
void chaychu()
{
int i;
char GioiThieu[100] = "Toi la Vu Thanh Nam day la Lop date cua toi\n";
for(i = 0; i < 2; i++) cout<<"\n";
for(i = 0; i < 5; i++) cout<<" ";
for(i = 0; i < 50; i++)
{
cout<<GioiThieu[i];
Sleep(60);
cout.flush();
}
}
class date
{
private:
int d;
int m;
int y;
public:
void setdate(int ngay);
int getdate();
void setmonth(int thang);
int getmonth();
void setyear(int nam);
int getyear();
int sosanh(date s)const;
date cong1ngay()const;
int tinhsongay(date);
};
void date::setdate(int ngay) ////////////////////
{
d = ngay;
};
int date::getdate() ////////////////
{
return d;
};
void date::setmonth(int thang) ///////////////////
{
m = thang;
};
int date::getmonth() ////////////////////
{
return m;
};
void date::setyear(int nam) /////////////////////////
{
y = nam;
}
int date::getyear()//////////////////////
{
return y;
};
int date::sosanh(date s)const// ham so sanh /////////////////
{
if(y < s.y || (y == s.y && m < s.m )||(y == s.y && m == s.m && d < s.d))
return -1;
else
{
if(y > s.y ||(y == s.y && m > s.m) ||(y == s.y && m == s.m && d > s.d))
return 1;
else
return 0;
}
};
date date::cong1ngay()const //ham cong mot ngay/////////////////
{
date kq;
if(d == songay(m,y))
{
kq.d = 1;
if(m == 12)
{
kq.y = y + 1;
kq.m = 1;
}
else
{
kq.m = m +1;
kq.y = y;
}
}
else
{
kq.d = d + 1;
kq.m = m;
kq.y = y;
}
return kq;
};
int date::tinhsongay(date t2) // ham tinh so ngay///////////////////////
{
date t1;
date min,max;
int date,month,year;
cout<<"\nNhap vao ngay thang nam cua moc thu 1: ";
do
{
cout<<"\n\tNhap vao ngay: ";
cin>>date;
t2.setdate(date);
}while(date < 1 || date> 31);
do
{
cout<<"\tNhap vao thang: ";
cin>>month;
t2.setmonth(month);
}while(month < 1 || month>12);
cout<<"\tNhap vao nam: ";
cin>>year;
t2.setyear(year);
cout<<"\nNhap vao ngay thang nam cua moc thu 2: ";
do
{
cout<<"\n\tNhap vao ngay: ";
cin>>date;
t1.setdate(date);
}while(date < 1 || date> 31);
do
{
cout<<"\tNhap vao thang: ";
cin>>month;
t1.setmonth(month);
}while(month < 1 || month>12);
cout<<"\tNhap vao nam: ";
cin>>year;
t1.setyear(year);
if(t1.sosanh(t2) == -1)
{
min = t1;
max = t2;
}
else
{
max = t1;
min = t2;
}
int dem = 0;
double snam;
int sthang, sngay ;
while(min.sosanh(max)== -1)
{
min = min.cong1ngay();
dem++;
}
if(t2.getyear() < t1.getyear())//////////////////////////////////////////////
{ //tinh so ngay so thang so nam da qua
if( t2.getmonth() > t1.getmonth() ) //////////////////////
{
if( t2.getdate() == t1.getdate())
{
sthang = t1.getmonth() + 12 - t2.getmonth();
sngay = 0;
snam = t1.getyear() - t2.getyear() - 1;
}
if( t2.getdate() > t1.getdate() ) //
{
sthang = t1.getmonth() + 11 - t2.getmonth();
if(t1.getmonth() == 1)
sngay = 31 - t2.getdate() + t1.getdate();//?????????????????????????????????
else
sngay = songay((t1.getmonth() - 1),t1.getyear()) - t2.getdate() + t1.getdate();
snam = t1.getyear() - t2.getyear() - 1;
}
if( t2.getdate() < t1.getdate() )
{
sthang = t1.getmonth() + 12 - t2.getmonth();
sngay = t1.getdate() - t2.getdate();
snam = t1.getyear() - t2.getyear() - 1;
}
}
if( t2.getmonth() < t1.getmonth() ) ////////////////////////////////////
{
if( t2.getdate() == t1.getdate())
{
sthang = t1.getmonth() - t2.getmonth();
sngay = 0;
snam = t1.getyear() - t2.getyear();
}
if( t2.getdate() > t1.getdate() )
{
sthang = t1.getmonth() - t2.getmonth() - 1;
sngay = songay((t1.getmonth() - 1),t1.getyear()) - t2.getdate() + t1.getdate();
snam = t1.getyear() - t2.getyear();
}
if( t2.getdate() < t1.getdate() )
{
sthang = t1.getmonth() - t2.getmonth();
sngay = t1.getdate() - t2.getdate();
snam = t1.getyear() - t2.getyear();
}
}
if(t2.getmonth() == t1.getmonth()) ///////////////////////////////////////
{
if( t2.getdate() == t1.getdate())
{
sthang = 0;
sngay = 0;
snam = t1.getyear() - t2.getyear();
}
if( t2.getdate() > t1.getdate() ) //
{
sthang = 11;
sngay = songay((t1.getmonth() - 1),t1.getyear()) - t2.getdate() + t1.getdate();
snam = t1.getyear() - t2.getyear() - 1;
}
if( t2.getdate() < t1.getdate() )
{
sthang = 0;
sngay = t1.getdate() - t2.getdate();
snam = t1.getyear() - t2.getyear() ;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
if(t2.getyear() > t1.getyear()) /////////////////////////////////////////////
{ //tinh so ngay so thang so nam da qua
if( t1.getmonth() > t2.getmonth() ) ///////////////////////////
{
if( t1.getdate() == t2.getdate())
{
sthang = t2.getmonth() + 12 - t1.getmonth();
sngay = 0;
snam = t2.getyear() - t1.getyear() - 1 ;
}
if( t1.getdate() > t2.getdate() ) //
{
sthang = t2.getmonth() + 11 - t1.getmonth();
if(t2.getmonth() == 1)
sngay = songay(12,t1.getyear()) - t1.getdate() + t2.getdate(); //????????????????????
else
sngay = songay((t2.getmonth() - 1),t2.getyear()) - t1.getdate() + t2.getdate();
snam = t2.getyear() - t1.getyear() - 1;
}
if( t1.getdate() < t2.getdate() )
{
sthang = t2.getmonth() + 12 - t1.getmonth();
sngay = t2.getdate() - t1.getdate();
snam = t2.getyear() - t1.getyear() - 1;
}
}
if( t1.getmonth() < t2.getmonth() ) ////////////////////////////
{
if( t1.getdate() == t2.getdate())
{
sthang = t2.getmonth() - t1.getmonth();
sngay = 0;
snam = t2.getyear() - t1.getyear();
}
if( t1.getdate() > t2.getdate() )
{
sthang = t2.getmonth() - t1.getmonth() - 1;
sngay = songay((t2.getmonth() - 1),t2.getyear()) - t1.getdate() + t2.getdate();
snam = t2.getyear() - t1.getyear();
}
if( t1.getdate() < t2.getdate() )
{
sthang = t2.getmonth() - t1.getmonth();
sngay = t2.getdate() - t1.getdate();
snam = t2.getyear() - t1.getyear();
}
}
if(t1.getmonth() == t2.getmonth()) //////////////////////////////////
{
if( t1.getdate() == t2.getdate())
{
sthang = 0;
sngay = 0;
snam = t2.getyear() - t1.getyear();
}
if( t1.getdate() > t2.getdate() )
{
sthang = 11;
sngay = songay((t2.getmonth() - 1),t2.getyear()) - t1.getdate() + t2.getdate();
snam = t2.getyear() - t1.getyear() - 1;
}
if( t1.getdate() < t2.getdate() )
{
sthang = 0;
sngay = t2.getdate() - t1.getdate();
snam = t2.getyear() - t1.getyear();
}
}
}
if(t2.getyear() == t1.getyear()) /////////////////////////////////////////////
{ //tinh so ngay so thang so nam da qua
if( t1.getmonth() > t2.getmonth() ) ///////////////////////
{
if( t1.getdate() == t2.getdate())
{
sthang = t1.getmonth() - t2.getmonth();
sngay = 0;
snam = 0 ;
}
if( t1.getdate() > t2.getdate() )
{
sthang = t1.getmonth() - t2.getmonth() ;
sngay = t1.getdate() - t2.getdate();
snam = 0;
}
if( t1.getdate() < t2.getdate() )
{
sthang = t1.getmonth() - t2.getmonth() - 1;
sngay = songay((t1.getmonth()-1),t1.getyear()) - t2.getdate() + t1.getdate(); //////////
snam = 0;
}
}
if( t1.getmonth() < t2.getmonth() ) ///////////////////////////////
{
if( t1.getdate() == t2.getdate())//
{
sthang = t2.getmonth() - t1.getmonth();
sngay = 0;
snam = 0;
}
if( t1.getdate() > t2.getdate() ) //
{
sthang = t2.getmonth() - t1.getmonth() - 1 ;
sngay = songay((t2.getmonth() - 1),t2.getyear()) - t1.getdate() + t2.getdate();
snam = 0;
}
if( t1.getdate() < t2.getdate() )
{
sthang = t2.getmonth() - t1.getmonth() ;
sngay = t2.getdate() - t1.getdate();
snam = 0;
}
}
if(t1.getmonth() == t2.getmonth()) /////////////////////////////////
{
if( t1.getdate() == t2.getdate())
{
sthang = 0;
sngay = 0;
snam = 0;
}
if( t1.getdate() > t2.getdate() )
{
sthang = 0;
sngay = t1.getdate() - t2.getdate();
snam = 0;
}
if( t1.getdate() < t2.getdate() )
{
sthang = 0;
sngay = t2.getdate() - t1.getdate();
snam = 0;
}
}
}
cout<<"\nVay da duoc "<<snam<<" nam "<<sthang<<" thang "<<sngay<<" ngay";
cout<<"\nVa so ngay tu "<<t2.getdate()<<"/"<<t2.getmonth()<<"/"<<t2.getyear();
cout<<" den ngay "<<t1.getdate()<<"/"<<t1.getmonth()<<"/"<<t1.getyear()<<" la: ";
return dem;
};
int songay(int m,int y) //ham tinh so ngay trong 1 thang trong 1 nam bat ky
{
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 2:
if((y%4==0&&y%100!=0)||(y%400==0))
return 29;
else
return 28;
case 4:
case 6:
case 9:
case 11:
return 30;
}
return 0;
}
void main()
{
system("color 3a");
date d;
chaychu();
char chon;
do
{
cout<<d.tinhsongay(d);
cout<<" ngay ";
cout<<"\n\nBan co muon tiep tuc khong (y/n) : ";
cin>>chon;
system("cls");
}while(chon == 'y');
cout<<"\nThanh Nam thank you used program (Press Enter to exit)";
getch();
} //Phu` cuoi cung` cung da~ song met qua
Đấy là chương trình tính số ngày ( bao nhiêu ngày bao nhiêu tháng bao nhiêu năm và tổng số ngày).
Mình làm từ mấy tháng trước chưa tối ưu lại mã nguồn. Nhưng cái vấn đề của cậu thì có cả trong này đấy.
Trong này mình có sử dụng một hàm chạy chữ khá hay.