代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
万年历
作者:
Dezai.CN
/ 发布于
2013/1/8
/
682
原代码如下: 一,非打印版(:即只能输出到屏幕,不可输出到文件) /*万年历全集:程序可以实现如下三种功能: 求某个日期对应的星期 求某年某月有的天数 输出某年的日历 #include<stdlib.h> #include<stdio.h> struct mon { int maxdata; int data; }; void SeekWeekDay(void); //求某个日期对应的星期函数 int WeekDay(int year, int month, int day); //根据输入的日期,返回对应的星期 void HowManyDays(void);//求某年某月有的天数函数 int MonthDays(int year, int month);//根据输入的年号和月份,返回该月的天数 void PrintWeek(int weekday);//打印星期几 void PrintMonth(int month); //打印月份 void PrintData(); //打印日历 int main(void) { int choice; while(1) { puts("------------------------------------------"); puts("请输入您的选择:"); puts("输入1求某个日期对应的星期"); puts("输入2求某年某月有的天数"); puts("输入3输出某年的日历"); puts("输入4结束程序"); puts("------------------------------------------"); scanf("%d", &choice); fflush(stdin); switch(choice) { case 1: SeekWeekDay(); break; case 2: HowManyDays(); break; case 3: PrintData(); break; case 4: return 0; default: puts("输入错误,请重新输入"); break; } printf("/n"); printf("/n"); } system("pause"); return 0; } void HowManyDays(void) //求某年某月有的天数函数 { int year, month, days; puts("请输入年号和月份:"); scanf("%d%d", &year, &month); fflush(stdin); printf("你的输入为 %d年%d月,", year, month); days = MonthDays(year, month); //根据输入的年号和月份,返回该月的天数 printf(" %d年%d月有%d天/n", year, month, days); } void SeekWeekDay(void) //求某个日期对应的星期函数 { int year, month, day, weekday; puts("请输入年,月, 日:"); scanf("%d%d%d", &year, &month, &day); fflush(stdin); printf("你的输入为 %d年%d月%d日/n", year, month, day); weekday = WeekDay(year, month, day); //根据输入的日期,返回对应的星期 printf("这天是 "); PrintWeek(weekday); //打印星期几 } void PrintWeek(int weekday)//打印星期几 { switch(weekday) { case 0 : printf("%s","周日 "); break; case 1 : printf("%s","周一 "); break; case 2 : printf("%s","周二 "); break; case 3 : printf("%s","周三 "); break; case 4 : printf("%s","周四 "); break; case 5 : printf("%s","周五 "); break; case 6 : printf("%s","周六 "); break; } } void PrintMonth(int month) //打印月份 { switch(month) { case 1 : printf("%s","一 月 "); break; case 2 : printf("%s","二 月 "); break; case 3 : printf("%s","三 月 "); break; case 4 : printf("%s","四 月 "); break; case 5 : printf("%s","五 月 "); break; case 6 : printf("%s","六 月 "); break; case 7 : printf("%s","七 月 "); break; case 8 : printf("%s","八 月 "); break; case 9 : printf("%s","九 月 "); break; case 10: printf("%s","十 月 "); break; case 11: printf("%s","十一 月 "); break; case 12: printf("%s","十二 月 "); break; } } int WeekDay(int year, int month, int day) //根据输入的日期,返回对应的星期 { int i; int run=0, ping=0; long sum; for(i=1; i<year; i++) //累积闰年和平年 { if(i%4==0 && i%100!=0 || i%400==0) run++; else ping++; } sum = 366*run + 365*ping; for(i=1; i<month; i++) sum += MonthDays(year, i); sum += day; //计算总天数 return (int)sum%7; } sum = 366*run + 365*ping; for(i=1; i sum += MonthDays(year, i); sum += day; //计算总天数 return (int)sum%7; } int MonthDays(int year, int month)//根据输入的年号和月份,返回该月的天数 { switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if(year%4==0 && year%100!=0 || year%400==0) return 29; else return 28; default: puts("这是一个错误的月份!"); system("pause"); return 0; } } void PrintData(void)//打印日历,对输出格式的控制较复杂 { struct mon month[13]; int i, j, k; int year, mon, week; puts("请输入年号:"); scanf("%d", &year); for(i=1; i<13; i++) //存储该年每个月的总天数和初始日期 { month[i].data = 1; month[i].maxdata = MonthDays(year, i); } for(i=0; i<6; i++) //总共输出6排 { for(j=1; j<=2; j++) //每排输出2个月 { mon = 2*i + j; printf("%15s", " "); PrintMonth(mon); //第一行打印月份 printf("%15s", " "); if(j==1) printf("/t"); } printf("/n"); printf("/n"); for(j=1; j<=2; j++) { for(k=0; k<7; k++) { PrintWeek(k); //第2行打印星期 } printf("/t"); } printf("/n"); for(j=1; j<=2; j++) { mon = 2*i + j; week = WeekDay(year, mon, 1);//根据输入的日期,返回对应的星期 printf("%*d ", week*5+2, month[mon].data++); //控制输出格式,把每月的1日打印在对应星期的下面 week++; while(week < 7) //接着在该行打印该周剩余的日期 { printf("%2d ", month[mon].data++); week++; } if(j==1) printf("/t"); } printf("/n"); printf("/n");//从第4行起打印该月剩余的日期,每7个一行;直至该月日期打印完毕 while(month[2*i+1].data<=month[2*i+1].maxdata || month[2*i+2].data<=month[2*i+2].maxdata) { for(j=1; j<=2; j++) { mon = 2*i + j; for(k=0; k<7; k++) { //如果该月日期未打印完,打印该日期 if(month[mon].data<=month[mon].maxdata) printf("%2d ", month[mon].data++); else //否则输出空格 printf(" "); } if(j==1) printf("/t"); } printf("/n"); printf("/n"); } printf("/n"); } } 二,打印版(:即既能输出到屏幕,又可输出到文件) /*万年历全集:程序可以实现如下三种功能: 求某个日期对应的星期 求某年某月有的天数 输出某年的日历 */ /*2006-1-2 梁见斌*/ #include #include struct mon { int maxdata; int data; }; void SeekWeekDay(void); //求某个日期对应的星期函数 int WeekDay(int year, int month, int day); //根据输入的日期,返回对应的星期 void HowManyDays(void);//求某年某月有的天数函数 int MonthDays(int year, int month);//根据输入的年号和月份,返回该月的天数 void PrintWeek(int weekday, FILE *fp);//打印星期几 void PrintMonth(int month, FILE *fp); //打印月份 void PrintData(); //打印日历 int main(void) { int choice; while(1) { puts("------------------------------------------"); puts("请输入您的选择:"); puts("输入1求某个日期对应的星期"); puts("输入2求某年某月有的天数"); puts("输入3输出某年的日历"); puts("输入4结束程序"); puts("------------------------------------------"); scanf("%d", &choice); fflush(stdin); switch(choice) { case 1: SeekWeekDay(); break; case 2: HowManyDays(); break; case 3: PrintData(); break; case 4: return 0; default: puts("输入错误,请重新输入"); break; } printf("/n"); printf("/n"); } system("pause"); return 0; } void HowManyDays(void) //求某年某月有的天数函数 { int year, month, days; puts("请输入年号和月份:"); scanf("%d%d", &year, &month); fflush(stdin); printf("你的输入为 %d年%d月,", year, month); days = MonthDays(year, month); //根据输入的年号和月份,返回该月的天数 printf(" %d年%d月有%d天/n", year, month, days); } void SeekWeekDay(void) //求某个日期对应的星期函数 { FILE *fp; int year, month, day, weekday; if ( (fp=fopen("wnlweek.txt","w+")) == NULL) { fprintf(stderr,"/nError opening file/n"); exit(1); } puts("请输入年,月, 日:"); scanf("%d%d%d", &year, &month, &day); fflush(stdin); printf("你的输入为 %d年%d月%d日/n", year, month, day); weekday = WeekDay(year, month, day); //根据输入的日期,返回对应的星期 printf("这天是 "); PrintWeek(weekday, fp); //打印星期几 } void PrintWeek(int weekday, FILE *fp)//打印星期几 { switch(weekday) { case 0 : fprintf(stdout, "%s","周日 "); fprintf(fp, "%s","周日 "); break; case 1 : fprintf(stdout, "%s","周一 "); fprintf(fp, "%s","周一 ");break; case 2 : fprintf(stdout, "%s","周二 "); fprintf(fp, "%s","周二 ");break; case 3 : fprintf(stdout, "%s","周三 "); fprintf(fp, "%s","周三 ");break; case 4 : fprintf(stdout, "%s","周四 "); fprintf(fp, "%s","周四 "); break; case 5 : fprintf(stdout, "%s","周五 "); fprintf(fp, "%s","周五 ");break; case 6 : fprintf(stdout, "%s","周六 "); fprintf(fp, "%s","周六 ");break; } } void PrintMonth(int month, FILE *fp) //打印月份 { switch(month) { case 1 : fprintf(stdout, "%s","一 月 "); fprintf(fp, "%s","一 月 ");break; case 2 : fprintf(stdout, "%s","二 月 "); fprintf(fp, "%s","二 月 ");break; case 3 : fprintf(stdout, "%s","三 月 "); fprintf(fp, "%s","三 月 ");break; case 4 : fprintf(stdout, "%s","四 月 "); fprintf(fp, "%s","四 月 ");break; case 5 : fprintf(stdout, "%s","五 月 "); fprintf(fp, "%s","五 月 ");break; case 6 : fprintf(stdout, "%s","六 月 "); fprintf(fp, "%s","六 月 ");break; case 7 : fprintf(stdout, "%s","七 月 "); fprintf(fp, "%s","七 月 ");break; case 8 : fprintf(stdout, "%s","八 月 "); fprintf(fp, "%s","八 月 ");break; case 9 : fprintf(stdout, "%s","九 月 "); fprintf(fp, "%s","九 月 ");break; case 10: fprintf(stdout, "%s","十 月 "); fprintf(fp, "%s","十 月 ");break; case 11: fprintf(stdout, "%s","十一 月 "); fprintf(fp, "%s","十一 月 "); break; case 12: fprintf(stdout, "%s","十二 月 "); fprintf(fp, "%s","十二 月 "); break; } } int WeekDay(int year, int month, int day) //根据输入的日期,返回对应的星期 { int i; int run=0, ping=0; long sum; for(i=1; i { if(i%4==0 && i%100!=0 || i%400==0) run++; else ping++; } sum = 366*run + 365*ping; for(i=1; i sum += MonthDays(year, i); sum += day; //计算总天数 return (int)sum%7; } int MonthDays(int year, int month)//根据输入的年号和月份,返回该月的天数 { switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if(year%4==0 && year%100!=0 || year%400==0) return 29; else return 28; default: puts("这是一个错误的月份!"); system("pause"); return 0; } } void PrintData(void)//打印日历,对输出格式的控制较复杂 { FILE *fp; struct mon month[13]; int i, j, k; int year, mon, week; if ( (fp=fopen("wnldata.txt","w+")) == NULL) { fprintf(stderr,"/nError opening file/n"); exit(1); } puts("请输入年号:"); scanf("%d", &year); fprintf(stdout, "--------------------------------------------------------------------------/n"); fprintf(fp, "--------------------------------------------------------------------------/n"); fprintf(stdout, "%35d %s/n", year, "年"); fprintf(fp, "%35d %s/n", year,"年"); fprintf(stdout, "--------------------------------------------------------------------------/n"); fprintf(fp, "--------------------------------------------------------------------------/n"); for(i=1; i<13; i++) //存储该年每个月的总天数和初始日期 { month[i].data = 1; month[i].maxdata = MonthDays(year, i); } for(i=0; i<6; i++) //总共输出6排 { for(j=1; j<=2; j++)//每排输出2个月 { mon = 2*i + j; fprintf(stdout, "%15s", " "); fprintf(fp, "%15s", " "); PrintMonth(mon, fp); //第一行打印月份 fprintf(stdout, "%15s", " "); fprintf(fp, "%15s", " "); if(j==1) { fprintf(stdout, "/t"); fprintf(fp, "/t"); } } fprintf(stdout, "/n"); fprintf(stdout, "/n"); fprintf(fp, "/n"); fprintf(fp, "/n"); for(j=1; j<=2; j++) { for(k=0; k<7; k++) { PrintWeek(k, fp); //第2行打印星期 } fprintf(stdout, "/t"); fprintf(fp, "/t"); } printf("/n"); fprintf(fp, "/n"); for(j=1; j<=2; j++) { mon = 2*i + j; week = WeekDay(year, mon, 1); //根据输入的日期,返回对应的星期 //控制输出格式,把每月的1日打印在对应星期的下面 fprintf(stdout, "%*d ", week*5+2, month[mon].data); fprintf(fp, "%*d ", week*5+2, month[mon].data); month[mon].data++; week++; while(week < 7) //接着在该行打印该周剩余的日期 { fprintf(stdout, "%2d ", month[mon].data++); fprintf(fp, "%2d ", month[mon].data++); week++; } if(j==1) { fprintf(stdout, "/t"); fprintf(fp, "/t"); } } fprintf(stdout, "/n"); fprintf(stdout, "/n"); fprintf(fp, "/n"); fprintf(fp, "/n"); //从第4行起打印该月剩余的日期,每7个一行;直至该月日期打印完毕 while(month[2*i+1].data<=month[2*i+1].maxdata || month[2*i+2].data<=month[2*i+2].maxdata) { for(j=1; j<=2; j++) { mon = 2*i + j; for(k=0; k<7; k++) { if(month[mon].data<=month[mon].maxdata) { //如果该月日期未打印完,打印该日期 fprintf(stdout, "%2d ", month[mon].data); fprintf(fp, "%2d ", month[mon].data); month[mon].data++; } else //否则输出空格 { fprintf(stdout, " "); fprintf(fp," "); } } if(j==1) { fprintf(stdout, "/t"); fprintf(fp, "/t"); } } fprintf(stdout, "/n"); fprintf(stdout, "/n"); fprintf(fp, "/n"); fprintf(fp, "/n"); } fprintf(stdout, "/n"); fprintf(fp, "/n"); } fclose(fp); }
试试其它关键字
万年历
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3