用C语言怎么写个简单的日历

代码库 2009-07-08 11:38:56
我想用C语言写个简单的日历,比如今天是7月8日,那么运行以后屏幕上就出现7月份的日历表,并且在将8号做个简单的标记,以显示今天是8日
...全文
217 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kouwenlong 2009-07-12
  • 打赏
  • 举报
回复
花了好久,弄出来拉.几乎可以满足要求

#include <stdio.h>
#include <stdlib.h>
#define Sunday 0
#define Monday 1
#define Tuesday 2
#define Wednesday 3
#define Thursday 4
#define Friday 5
#define Saturday 6

void GiveInstructions(void);
void PrintCalendar(int Year, int Month, int Day);
char *MonthName(int Month);
void IndenFirstLine(int weekday);
int MonthDays(int Month,int Year);
bool IsLeapYear(int Year);
int FirstDayOfMonth(int Month,int Year);
bool Right(int Year,int Month, int Day);

void main()
{

int Data, Year, Month, Day;//定义变量

GiveInstructions();
while (true)
{
printf("Enter the data like the xxxxxxxx");
scanf("%d", &Data); //输入8位日期格式
Day = Data % 100; // 日期
Data = Data / 100;
Month = Data % 100;//月份
Year = Data / 100;// 年份
if ( Right(Year, Month, Day))//Right函数判断日期的格式是否正确
{
PrintCalendar(Year, Month, Day); //打印日历
break;
}
else
{}
}
getchar();
getchar();
}

void GiveInstructions() //提示信息
{
printf("This program display a calender \n");
}

void PrintCalendar(int Year, int Month, int Day)
{
int nDays,weekday,day;
printf(" %s %d\n",MonthName(Month),Year);
printf(" Su Mo Tu We Th Fr Sa\n");
nDays=MonthDays(Month,Year); //那一年,那一月的天数
weekday=FirstDayOfMonth(Month,Year);// 那一年,那一月的第一天是星期几
IndenFirstLine(weekday); //找到第一天在日历中的位置

for(day=1;day<=nDays;day++)
{
if (day == Day) //做标记
{
printf("|");
printf("%2d", day);
printf("|");

}
else
{
printf("%4d",day);
}

if(weekday==Saturday)printf("\n"); //如果是星期六,则换行显示
weekday=(weekday+1)%7;
}
if(weekday!=Sunday)printf("\n");
}

char *MonthName(int Month) //返回月份的英文表示
{
switch(Month)
{
case 1:return "January";
case 2:return "February";
case 3:return "March";
case 4:return "April";
case 5:return "May";
case 6:return "June";
case 7:return "July";
case 8:return "August";
case 9:return "September";
case 10:return "October";
case 11:return "November";
case 12:return "December";
default: "Error";
}
}

void IndenFirstLine(int weekday)//找到第一天在日历中的位置
{
int i;

for (i=0;i<weekday;i++)
{
printf(" ");
}
}

int MonthDays(int Month,int Year) //返回某一月份的天数
{
switch (Month)
{
case 2:
{
if(IsLeapYear(Year))return (29);
return (28);
}
case 4:
case 6:
case 9:
case 11:
{
return (30);
}
default:
{
return (31);
}
}
}

bool IsLeapYear(int Year) //判断是否为闰年
{
return(((Year%4==0)&&(Year%100!=0))||(Year%200==0));
}

int FirstDayOfMonth(int Month,int Year)// 那一年,那一月的第一天是星期几
{
int weekday,i;
weekday=Monday;

for(i=1900;i<Year;i++)
{
weekday=(weekday+365)%7;
if(IsLeapYear(i))weekday=(weekday+1)%7;
}

for(i=1;i<Month;i++)
{
weekday=(weekday+MonthDays(i,Year))%7;
}

return (weekday);
}

bool Right(int Year,int Month, int Day) //Right函数判断日期的格式是否正确
{
if (Year < 1900) return false;
if (Month >12 || Month < 1) return false;
if (Day > MonthDays(Month, Year) || Day < 1) return false;
return true;
}
输入正确的8位日期,应该都会得到正确的日历显示。
你可以参考《C语言的科学与艺术》的第五章,书上有相应的例子,我这是从他那里变化的。[/code]
kouwenlong 2009-07-12
  • 打赏
  • 举报
回复
楼上写的简练啊,学习下.
blh 2009-07-12
  • 打赏
  • 举报
回复
http://blog.csdn.net/blh/archive/2009/07/12/4342248.aspx
我写的一个,经供参考,呵呵
armstrong1225 2009-07-12
  • 打赏
  • 举报
回复
LS的好强 啊 支持
yangyunzhao 2009-07-09
  • 打赏
  • 举报
回复
晕,给具体的详细代码?
代码库 2009-07-09
  • 打赏
  • 举报
回复
能帮忙把具体的详细代码告诉我吗
challenge99 2009-07-08
  • 打赏
  • 举报
回复
计算出一个月的第一天是星期几,网上有计算任意一天是星期几的算法
大前置 2009-07-08
  • 打赏
  • 举报
回复
主要是日期运算和日期的规则问题,
BILLG08B08100132 2009-07-08
  • 打赏
  • 举报
回复
CTime::GetCurrentTime()可以获得系统当前时间
Wolf0403 2009-07-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cj_gameboy 的回复:]
unix上直接date不就可以了嘛,如果是win就得好好编程了,也就是了解下time的几个函数吧
[/Quote]

``cal'', not ``date''
luc_cj 2009-07-08
  • 打赏
  • 举报
回复
unix上直接date不就可以了嘛,如果是win就得好好编程了,也就是了解下time的几个函数吧

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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