用C语言写的万年历---亲手写的。好累哦
#include <stdlib.h>
#include <string.h>
#define str " SUN MON TUE WED THU FRI SAT "
void menu(); //操作菜单
int leap(int year); //判断某年是不是闰年
int days_month(int year,int month); //返回某月的天数
int someday(int year,int month,int day); //计算某天是星期几
void search_month(int year,int month); //输出某月的日历
void search_someday(int year,int month,int day); //查询某日是星期几
int main()
{
int i,year,month,day;
int k1,k2,k3,k4; //用于判断输入的数据和操作是否正确,1代表正确,0代表错误
int a = 1;
menu();
do
{
printf("请输入你要进行的操作(1-4):");
scanf("%d",&i);
getchar();
switch(i)
{
case 1:
printf("请输入你要查询的年份:");scanf("%d",&year);
for(a;a<=12;a++)
{
printf("\n\n---------******* %d *******------------\n",a);
search_month(year,a);
}
printf("---------*********************------------\n\n\n");
break;
case 2:
printf("请输入您所要查询的相关信息.\n");
printf("年份:");scanf("%d",&year);
printf("月份:");scanf("%d",&month);
k1=1;
while(k1)
{
if(month>12||month<1)
{
printf("你输入的月份有误,请重新输入!\n");
printf("月份:");
scanf("%d",&month);
if(month<1||month>12) k1=1;
}
else k1=0;
}
search_month(year,month);
printf("---------*********************------------\n\n\n");
break;
case 3:
printf("请输入你要查询的日期\n");
printf("年份:");scanf("%d",&year);
printf("月份:");scanf("%d",&month);
k2=1;
while(k2)
{
if(month>12||month<1)
{
printf("你输入的月份有误,请重新输入!\n");
printf("月份:");
scanf("%d",&month);
if(month<1||month>12) k2=1;
}
else k2=0;
}
// printf("%d年%d月有%d天\n",year,month,days_month(year,month)); 调试观察输入的日期是否有误,可忽略
printf("日期:");scanf("%d",&day);
k3=1;
while(k3)
{
if(day>days_month(year,month)||day<1)
{
printf("你输入的日期有误,请重新输入!\n");
printf("日期:");
scanf("%d",&day);
if(day>days_month(year,month)||day<1) k3=1;
}
else k3=0;
}
search_someday(year,month,day);
printf("---------*********************------------\n\n\n");break;
case 4:exit(0);
printf("---------*********************------------\n\n\n");break;
default:
k4=1;
while(k4)
{
printf("你输入的数据有误,请重新输入你要进行的操作(1-4):");
scanf("%d",&i);
if(i<1||i>4) k4=1;
else k4=0;
}
break;
}
}while(i>0&&i<5);
return 0;
}
void menu()
{
int i=1;
printf("\n\n\t\t----------------------------------------\n");
printf("\t\t|--------------------------------------|\n");
printf("\t\t| %d. 输出某年的日历 |\n",i);
printf("\t\t| %d. 输出某月的日历 |\n",i+1);
printf("\t\t| %d. 查询某日是星期几 |\n",i+2);
printf("\t\t| %d. 退出系统 |\n",i+3);
printf("\t\t|--------------------------------------|\n");
printf("\t\t----------------------------------------\n\n");
}
int leap(int year)
{
if((year%4==0&&year%100!=0)||year%400==0) return 1;
else return 0;
}
int days_month(int year,int month)
{
int days_month;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days_month = 31;break;
case 4:
case 6:
case 9:
case 11:days_month = 30;break;
case 2:
if(leap(year)==1)
{
days_month = 29;break;
}
else days_month = 28;break;
}
return days_month;
}
int someday(int year,int month,int day)
{
//该函数运用了特殊的计算公式,详细可参见 http://blog.163.com/hexin_mars_blog/blog/static/248215040201571351115699/
int someday,m,n,i; //someday表示查询的日子是星期几
m=year-year/1000*1000;
n=m-m/100*100-1; //用于获得年份的后两位数
int days=0;
for(i=1;i<month;i++) days = days + days_month(year,i);
days =days + day;
someday = (n + n/4 - n/100 + n/400 + days)%7;
return someday;
}
void search_someday(int year,int month,int day)
{
char weekname[20];
switch(someday(year,month,day))
{
case 0:strcpy(weekname,"星期天") ;break;
case 1:strcpy(weekname,"星期一") ;break;
case 2:strcpy(weekname,"星期二") ;break;
case 3:strcpy(weekname,"星期三") ;break;
case 4:strcpy(weekname,"星期四") ;break;
case 5:strcpy(weekname,"星期五") ;break;
case 6:strcpy(weekname,"星期六") ;break;
}
printf("你所要查询的日期是%s\n",weekname);
}
void search_month(int year,int month)
{
int i=0,j,k=0,m; //j用于记录某月的第一天是星期几 m用于记录某月的天数 k用于换行提示
char x[10]=" ";
m=days_month(year,month);
j=someday(year,month,1);
//输出某月的日历
printf("------------------------------------------\n");
printf("%s\n",str);
for(;i<j;i++)
{
printf("%s",x);k++;
}
for(i=1;i<=m;i++)
{
k++;
if(k%7==0)
{
if(i<10)
{
printf(" %d ",i);
printf("\n");
}
else if(i>=10)
{
printf(" %d ",i);
printf("\n");
}
}
else
{
if(i<10)
{
printf(" %d ",i);
}
else if(i>=10)
{
printf(" %d ",i);
}
}
}
printf("\n------------------------------------------\n");
}
void exit()
{
exit(0);
}
用C语言写的万年历---亲手写的。好累哦的更多相关文章
- C语言用面向对象的思想写贪吃蛇
大概一年前这时候,接触C语言一个月,那时候知之甚少,对面向对象只觉”可远观而不可亵玩“,而且会看到很多言论说C语言就是面向过程的语言,C++就是面向对象的语言.不过,不记得什么时候在网上看到过一篇博文 ...
- 学了C语言,如何利用cURL写一个程序验证某个网址的有效性?
在<C程序设计伴侣>以及这几篇关于cURL的文章中,我们介绍了如何利用cURL写一个下载程序,从网络下载文件.可是当我们在用这个程序下载文件时,又遇到了新问题:如果这个网址是无效的,那么我 ...
- 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...
- c语言的函数可以这样写,你见过吗?
c语言的函数可以这样写,你见过吗?真的可以编译通过的.
- 使用java语言基于SMTP协议手写邮件客户端
使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...
- Markdown: 用写代码的思维写文档
作者:吴香伟 发表于 2014/08/07 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 本文不讲解Markdown的语法规则,只关注它带来的好处以及我使用的方 ...
- IntelliJ下使用Code/Live Template加快编码速度:程序员的工作不是写程序,而是写程序解决问题
程序员的工作不是写程序,而是写程序解决问题. --- 某不知名程序员 我们每天都在写代码,有些代码有结构性的相似,但不是所有的代码都可以被抽成方法.在这种情况下,我们应该考虑使用template的方式 ...
- 会写网页 就会写手机APP -- Hybrid Mobile Apps for ASP.NET Developers
您好,这篇文章是我的BLOG发出,原始出处在此: 会写网页 就会写手机APP -- Hybrid Mobile Apps for ASP.NET Developers http://www.dotbl ...
- hql中不能写count(1)能够写count(a.id)
hql中不能写count(1)能够写count(a.id)里面写详细的属性 String hql="select new com.haiyisoft.vo.entity.cc.repo.Bu ...
随机推荐
- SQL2012还原数据库操作在本地服务器上操作和用别的电脑远程连接到服务器进行操作的文件路径差异
在数据库服务器上想还原一个数据库到某个备份文件时期的,服务器的数据库文件本身是保存在 D:\DEVDB目录 通过开发电脑上的MS manager来连接数据库服务器操作还原 虽发现文件卡项上,原始文件名 ...
- iOS Storyboard适配问题
通用的Storyboard 通用的stroyboard文件是通向自适应布局光明大道的第一步.在一个storyboard文件中适配iPad和iPhone的布局在iOS8中已不再是梦想.我们不必再为不 ...
- [python]什么是生成器
看理论硬是看的抓狂,然后去百度贴吧看到了一句话,什么叫python生成器,简直秒懂
- jQuery的拾色器
代码如下 1.js <link href="css/farbtastic.css" rel="stylesheet" /> <script t ...
- 矩阵求逆的几种方法总结(C++)
矩阵求逆运算有多种算法: 伴随矩阵的思想,分别算出其伴随矩阵和行列式,再算出逆矩阵: LU分解法(若选主元即为LUP分解法: Ax = b ==> PAx = Pb ==>LUx = Pb ...
- OC中extern,static,const的用法
1.const的作用: const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p). 例如 NSString *const SIAlertViewWillDismissNotification; ...
- BZOJ 1004: [HNOI2008]Cards(群论)
好吧我就是蒟蒻根本没听说过群论(虽说听叉姐说几万年都不会考) 我也讲不太来,直接戳VFK大神的blog啦 = = http://vfleaking.blog.163.com/blog/static/1 ...
- css模拟Bootstrap响应式布局——栅格
做作业的时候遇见用css模拟Bootstrap的栅格布局,学习了一下.发现这个很有用,用来在不同的平台上得到很好地用户体验,比如Phone.Pad.大屏幕显示器.小屏幕显示器.自己模拟用css写了一下 ...
- lxc.conf解析&lxc容器能力
lxd启动容器实际是生成lxc.conf.剩下的就是LXC对容器进行控制了.所以可认为lxc.conf就是lxd和lxc之间主要的接口.lxc.conf详细属性参考: http://manpages. ...
- Eclipse打JAR包的使用
编译Java代码你当然可以直接使用Javac,但对于大多同学还是使用Eclipse编辑器来得快捷.这篇文章来说说我使用Eclipse编译后的执行之路,走路许多弯路,看我一一道来. 演示系统的架构 首先 ...