新手做的,大牛们指点

tomljr 2011-10-25 04:18:04
#ifndef _HEAD_H_
#define _HEAD_H_

#define LOW_YEAE 1900
#define MAX_YEAR 2100
#define MAX_MONTH 12
#define LOW_MONTH 1
#define LOW_DATE 1
#define MAX_DATE 31
#define STANDARD_YEAR 2010
#define STANDARD_WDAY 5
#define STANDARD_YEAR_DAYS 365
#define LEAP_YEAR_DAYS 366
#define A_WEEK_DAYS 7
#define CURR_STANDARD_YEAR 1970
#define CHANGE_TO_WORD 48
#define NUMBER_OF_ROW 6
#define CHINESE_TIME 8*3600
#define A_DAY_SECOND 86400
/*about Input*/
#define MAX_INPUT_NUMBER 64
#define MAX_YEAR_INUPT 4
#define MAX_MONTH_INPUT 2
/*ERROR*/
#define INPUT_ERROR 10
/**/
#define DATE_IS_LEAP(year) (0==(year)%400||(0!=(year)%100&&0==(year)%4))?true:false
#define DATE_IS_LEAP_DAYS(year) (0==(year)%400||(0!=(year)%100&&0==(year)%4))?LEAP_YEAR_DAYS:STANDARD_YEAR_DAYS

#endif
/*head.h*/

#pragma once
#include <iostream>
#include <time.h>
#include "Head.h"
using namespace std;
typedef unsigned long UINT;

class Calendar
{
public:
Calendar(void);
void OperateMenu(void);
public:
virtual ~Calendar(void);
private:
UINT GetAppointCale(void);
UINT SetDate(void);
UINT GetTheDate(void);
UINT GetDaysInAYear(UINT ulYear,UINT ulMonth);
private:
UINT GetCurrentCale(void);
UINT SetCurrentDate(void);
UINT GetMonth(int ulYear, int ulDay);
private:
void ShowCalendar(void);
private:
UINT ulAimYear; /*目的年份*/
UINT ulAimMonth; /*目的月份*/
UINT ulAimDate;
UINT ulTodayDate;
};
/*Calendar.h*/
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿尼小码 2011-10-25
  • 打赏
  • 举报
回复
都是NB人学的程序我们现在还在用int i,i++呢 英语不行,想用个词表达想半天
tomljr 2011-10-25
  • 打赏
  • 举报
回复

void Calendar::ShowCalendar(void)
{
const char strDate[2][3]={{-60,-22,0},{-44,-62,0}};
const char strWeek[7][3]={{"一"},{"二"},{"三"},{"四"},{"五"},{"六"},{"日"}};
UINT ulPutDays=0;
UINT i=0,ulTemp=0;
UINT ulDayOfMonth=0;
UINT ulForOutput[6][7];
memset(ulForOutput,0,sizeof(ulForOutput));
for(i=0;i<ulAimDate-1;++i)
{
ulForOutput[0][i]=1;//值为0输出,值为1不输出
}
system("cls");
printf("\t\t\t%d %s %d %s\n\n",ulAimYear,strDate[0],ulAimMonth,strDate[1]);
printf("\t\t %s %s %s %s %s %s %s\n",strWeek[0],strWeek[1],strWeek[2],strWeek[3],strWeek[4],strWeek[5],strWeek[6]);
ulTemp=GetDaysInAYear(ulAimYear,ulAimMonth);
ulDayOfMonth=GetDaysInAYear(ulAimYear,ulAimMonth+1);
ulDayOfMonth-=ulTemp;
/*输出部分*/
for(i=0;i<NUMBER_OF_ROW;++i)
{
printf("\t\t");
for(ulTemp=0;ulTemp<A_WEEK_DAYS;++ulTemp)
{
if(0==ulForOutput[i][ulTemp]&&ulPutDays!=ulDayOfMonth)
{
printf(" %2d ",++ulPutDays);
}
else
{
printf(" ");
}
}
printf("\n");
}
printf("\n");
}

/*----1----*/
UINT Calendar::GetCurrentCale(void)
{
SetCurrentDate();
GetTheDate();
ShowCalendar();
ulAimDate+=ulTodayDate-1;
ulAimDate=(0==ulAimDate%A_WEEK_DAYS)?7:ulAimDate%A_WEEK_DAYS;
printf("\t\t今天是%d年%d月%d日,星期",ulAimYear,ulAimMonth,ulTodayDate);
switch(ulAimDate)
{
case 0:printf("日\n\n\n\n");break;
case 1:printf("一\n\n\n\n");break;
case 2:printf("二\n\n\n\n");break;
case 3:printf("三\n\n\n\n");break;
case 4:printf("四\n\n\n\n");break;
case 5:printf("五\n\n\n\n");break;
case 6:printf("六\n\n\n\n");break;
default:return 1;
}
return 0;
}

/*----1----*/
UINT Calendar::SetCurrentDate(void)
{
UINT ulNow=0;
UINT ulYear=0,ulMonth=0;
UINT i=0,ulTemp=0;
UINT ulDays=0;
ulNow=(UINT)time(0);
ulDays=ulNow/A_DAY_SECOND;
for(i=CURR_STANDARD_YEAR;ulDays>=STANDARD_YEAR_DAYS;++i)
{
ulDays-=DATE_IS_LEAP_DAYS(i);
}
ulYear=i;
ulMonth=(UINT)GetMonth((int)i,(int)ulDays);
ulAimYear=ulYear,ulAimMonth=ulMonth;
return 0;
}

/*----1----*/
UINT Calendar::GetMonth(int ulYear, int ulDay)
{
bool ifLeap=false;
int iTemp=0;
int i=0;
UINT ulMonthDays=0;
ulTodayDate=ulDay;
ifLeap=DATE_IS_LEAP(ulYear);
for(i=1;i<=12;++i)
{
switch(i)
{
case 1 : iTemp+=0;break;
case 2 : iTemp+=31;break;
case 3 : iTemp+=ifLeap?29:28;break;
case 4 : iTemp+=31;break;
case 5 : iTemp+=30;break;
case 6 : iTemp+=31;break;
case 7 : iTemp+=30;break;
case 8 : iTemp+=31;break;
case 9 : iTemp+=31;break;
case 10 :iTemp+=30;break;
case 11 :iTemp+=31;break;
case 12 :iTemp+=30;break;
default: return -1;
}

if(ulDay-iTemp<0)
{
ulMonthDays=(UINT)iTemp-ulMonthDays;
return i-1;
}
ulMonthDays=iTemp;
ulTodayDate=ulDay-iTemp+1;
}
return -1;
}
tomljr 2011-10-25
  • 打赏
  • 举报
回复
#include "Calendar.h"
UINT gChoose=0;

Calendar::Calendar(void)
{
ulAimYear=ulAimMonth=ulAimDate=ulTodayDate=0;
}

Calendar::~Calendar(void)
{
}
/*menu*/
void Calendar::OperateMenu(void)
{
char sOpNumber[MAX_INPUT_NUMBER];
system("cls");
do
{
printf("可用操作:\n查看当前日历-------------------------- ‘1’\n");
printf("指定日历日期-------------------------- ‘2’\n");
printf("退出日历------------------------------ ‘0’\n");
gets_s(sOpNumber,MAX_INPUT_NUMBER);
if('0'>sOpNumber[0]||'9'<sOpNumber[0])
return;
system("cls");
switch(sOpNumber[0])
{
case '1': gChoose=1;GetCurrentCale();break;//查当前
case '2': gChoose=2;GetAppointCale();break;//查指定
case '0': return ;
default: ;
}
}while(1);
}
/*----2----*/
UINT Calendar::GetAppointCale(void)
{
SetDate();
GetTheDate();
ShowCalendar();
return 0;
}
/*----2----*/
UINT Calendar::GetTheDate(void)
{
UINT ulTotalDays=0;/*指定日到标准日的时间差*/
UINT i=0,ulTemp=0;
if(0==ulAimYear||0==ulAimMonth)
{
SetDate();
}
if(ulAimYear>=STANDARD_YEAR)
{
for(i=STANDARD_YEAR;i<ulAimYear;++i)
{
ulTotalDays+=DATE_IS_LEAP_DAYS(i);
}
ulTotalDays+=GetDaysInAYear(i,ulAimMonth);
ulTemp=ulTotalDays%A_WEEK_DAYS;
ulAimDate=(0==ulTemp)?A_WEEK_DAYS:ulTemp;
ulTemp=ulAimDate+STANDARD_WDAY;
ulAimDate=(A_WEEK_DAYS<ulTemp)?ulTemp-A_WEEK_DAYS:ulTemp;
}
else
{
for(i=ulAimYear+1;i<STANDARD_YEAR;++i)
{
ulTotalDays+=DATE_IS_LEAP_DAYS(i);
}
UINT ulBaseDay=0;
ulBaseDay+=GetDaysInAYear(ulAimYear,ulAimMonth);
ulTotalDays+=((DATE_IS_LEAP(ulAimYear))?LEAP_YEAR_DAYS-ulBaseDay:STANDARD_YEAR_DAYS-ulBaseDay);
ulTemp=ulTotalDays%A_WEEK_DAYS;
ulAimDate=(0==ulTemp)?A_WEEK_DAYS:ulTemp;
ulTemp=STANDARD_WDAY+A_WEEK_DAYS-ulAimDate;
ulAimDate=(7<ulTemp)?ulTemp-7:ulTemp;
}
return 0;
}
/*----2----*/
UINT Calendar::GetDaysInAYear(UINT ulYear, UINT ulMonth)
{
bool ifLeap=false;
UINT uldays=0;
ifLeap=DATE_IS_LEAP(ulYear);
switch(ulMonth)
{
case 12: uldays+=30;
case 11: uldays+=31;
case 10: uldays+=30;
case 9 : uldays+=31;
case 8 : uldays+=31;
case 7 : uldays+=30;
case 6 : uldays+=31;
case 5 : uldays+=30;
case 4 : uldays+=31;
case 3 : uldays+=ifLeap?29:28;
case 2 : uldays+=31;
case 1 : uldays+=0;break;
default: return 0xffffffff;
}
return uldays;
}
/*----2----*/
UINT Calendar::SetDate(void)
{
UINT i=0;
char sInputItem[MAX_INPUT_NUMBER]={0};
system("cls");
cout<<"输入年份."<<endl;
gets_s(sInputItem,MAX_INPUT_NUMBER);
if('\0'!=sInputItem[MAX_YEAR_INUPT])
return INPUT_ERROR;
for(i=0;i<MAX_YEAR_INUPT;++i)
{
if(sInputItem[i]>'9'||sInputItem[i]<'0')
return INPUT_ERROR;
}
sInputItem[MAX_YEAR_INUPT]='\0';
ulAimYear=atoi(sInputItem);

system("cls");
cout<<"输入月份."<<endl;
gets_s(sInputItem,MAX_INPUT_NUMBER);
if('1'==sInputItem[0])
{
if('0'!=sInputItem[1]&&'1'!=sInputItem[1]&&'2'!=sInputItem[1])
return INPUT_ERROR;
sInputItem[3]='\0';
}
else if(sInputItem[0]>'9'||sInputItem[0]<'0')
{
return INPUT_ERROR;
sInputItem[2]='\0';
}
ulAimMonth=atoi(sInputItem);
return 0;
}
/*----Public----*/
luciferisnotsatan 2011-10-25
  • 打赏
  • 举报
回复
什么情况?
一堆define加一个类的声明,没有实现

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧