问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C程序高手请进

发布网友 发布时间:2022-06-09 17:43

我来回答

1个回答

热心网友 时间:2024-11-23 18:49

//-----头文件包含-------------------------
#include <windows.h>
#include <winnt.h>
#include<iostream>
#include<iomanip>
using namespace std;
//-----函数声明-------------------------
int week(int,int,int); //根据年月日判断星期几
int leap_year(int); //判断闰年
void display_year(int ); //显示某年日历
void demand_day(int,int,int); //查询某天
//-----主函数-------------------------
int main()
{
int y,m,d,es=1;// y→year|m →month|d→day
while(es)//设置一个永真循环,不断处理用户输入
{
HANDLE consolehwnd; //创建句柄,详细句柄知识,请百度一下或查MSDN
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); //实例化句柄
SetConsoleTextAttribute(consolehwnd,10); //设置控制台文本属性,值不同,显示不同
//菜单输出,这个你可以随便改
cout<<"请选择操作:\n1→显示某年日历\
\n2→查询某天\n0→退出"<<endl;
char tp[20];cin>>tp;//接受用户选择
if(tp[1]!='\0'||tp[0]>'2'||tp[0]<'0'){cout<<"输入有误"<<endl;continue;}//判断用户选择
switch(tp[0]-48)//根据用户选择执行对应处理函数
{/*system("cls");清除屏幕所有文本,俗称清屏函数,cls 即CLear Screen*/
case 1:{cout<<"请输入年份:";cin>>y;system("cls");display_year(y);break;}
case 2:{cout<<"请输入年、月、日,以空格分开:";cin>>y>>m>>d;system("cls");
demand_day(y,m,d);break;}
case 0:{es=0;break;}
}
}
return 0;
}
//-----根据年月日判断星期几-------------------------
int week(int y,int m, int d)
{
int week1,yy=y;
if(m==1) {m=13;yy--;}
if(m==2) {m=14;yy--;}
week1=(d+2*m+3*(m+1)/5+yy+yy/4-yy/100+yy/400)%7; //利用一个既有公式
/*
求某年某月某日是星期几的公式
W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1
其中,W是所求日期的星期数.如果求得的数大于7,可以减去7的倍数,直到余数小于7为止.
c是公元年份的前两位数字,y是以知公元年份的后两位数字;m是月数,d是日数.
方括[ ]表示只截取该数的整数部分.还有一个特别要注意的地方:所求的月份如果是1月或2月,
则应视为前一年的13月或14月.所以公式中m 的取值范围不是1-12,而是3-14.
*/
int s;
switch (week1)
{
case 0: s=1; break;
case 1: s=2; break;
case 2: s=3; break;
case 3: s=4; break;
case 4: s=5; break;
case 5: s=6; break;
case 6: s=0; break;
}
return s;
}
//----判断闰年-------------------------------------
int leap_year(int y)
{
int i;
if((y%4==0&&y%100!=0)||y%400==0)i=1;
else i=0;
return i;
}
//--------显示某年日历------------------------
void display_year(int y)
{
int n1,n2,i,j,a[13],c,d;
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehwnd,5);
cout<<setw(38)<<y<<"年"<<endl;
cout<<setw(28)<<"*********";
for(i=1;i<=27;i++)cout<<'*';
cout<<endl;
a[1]=a[3]=a[5]=a[7]=a[8]=a[10]=a[12]=31;//
a[4]=a[6]=a[9]=a[11]=30; //确定每月天数
if(leap_year(y))a[2]=29;
else a[2]=28; //
for(i=1;i<=11;i+=2) //六次循环
{
SetConsoleTextAttribute(consolehwnd,1);
cout<<setw(14)<<i<<"月"<<setw(42)<<i+1<<"月"<<endl;
SetConsoleTextAttribute(consolehwnd,2);
cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
<<"四"<<setw(4)<<"五"<<setw(4)<<"六";
cout<<setw(16)<<' ';
cout<<setw(4)<<"日"<<setw(4)<<"一"<<setw(4)<<"二"<<setw(4)<<"三"<<setw(4)\
<<"四"<<setw(4)<<"五"<<setw(4)<<"六"<<endl;
SetConsoleTextAttribute(consolehwnd,7);
n1=week(y,i,1);n2=week(y,i+1,1);
if(n1) //-----------
{
for(j=1;j<=n1;j++) //
cout<<setw(4)<<' ';
}
for(j=1;j<=7-n1;j++)
cout<<setw(4)<<j;
cout<<setw(16)<<' ';
if(n2)
{ //-----输出每次循环的第一行---
for(j=1;j<=n2;j++)
cout<<setw(4)<<' ';
}
for(j=1;j<=7-n2;j++)
cout<<setw(4)<<j;
cout<<endl; //--------------
c=8-n1;d=8-n2;
for(int m=1;m<6;m++) //每月日历最多占六行
{
if(c>a[i])cout<<setw(4*7)<<' ';//若c>a[i],则该月的这一行全部输出空格
for(j=c;j<=a[i];j++)
{
cout<<setw(4)<<j;
if((j-c+1)%7==0){c=j+1;break;}
if(j==a[i]){cout<<setw((6-week(y,i,a[i]))*4)<<' ';c=j+1;break;}
//如果j是该月最后一天,该行剩下的全部补空格
}
cout<<setw(16)<<' ';
if(d>a[i+1])cout<<setw(4*7)<<' ';
for(j=d;j<=a[i+1];j++)
{ //
cout<<setw(4)<<j;
if((j-d+1)%7==0){d=j+1;break;}
if(j==a[i+1]){cout<<setw((6-week(y,i+6,a[i+1]))*4)<<' ';d=j+1;break;}
}
cout<<endl;
}
cout<<endl;
}
cout<<endl;
}
//--------查询某天------------
void demand_day(int y,int m,int d)
{
int n;
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehwnd,5);
n=week(y,m,d);//这是核心,几乎就是把week函数包装下
switch(n)
{
case 1:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期一"<<endl;break;
case 2:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期二"<<endl;break;
case 3:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期三"<<endl;break;
case 4:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期四"<<endl;break;
case 5:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期五"<<endl;break;
case 6:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期六"<<endl;break;
case 0:cout<<y<<"年"<<m<<"月"<<d<<"日"<<","<<"星期日"<<endl;break;
default:break;
}
cout<<endl;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 东风风神ax7保养里程怎么归零 东风风神ax4保养灯归零 TP-LINK Web Smart Switch 默认帐户 密码是多少 我有-台TP-LINK460+和-台交换机NwaySwitch怎样组建一个8台机的局网而... 公司前几天,买了社保.我想查一下,是从什么时间开始买的,好清楚自己应该... 东风风神AX7的保养灯如何归零? TP-LINK Web Smart Switch 是什么啊 win8.1怎么安装mtk手机驱动 thinkphp volist switch嵌套错误 thinkphp switch标签嵌套问题 thinkPHP 3.2 模板赋值中嵌套switch... case 时,value值为什么不能... 2k20现在外区也不能下载了吗 mtk红米手机驱动的一些问题 需要的朋友进来 nba2k2022为啥只能打对战 电动摩托车 充电方式 我买了个单反相机的橡胶保护套,抓起来有点滑,有没有办法让它不滑呢... 为什么我的联想平板电脑只要打开保护套的盖子屏幕就会亮,怎么调回去... iPad air 屏幕右端排斥保护套(保护套右端可能磁极相反弹起来了,与屏... 中国联通5G升级包以后,显示5G的图标吗? 我是联通的用户,如果使用5g有没有标志? 东风风神a60保养灯怎样归零? 2个TP交换机不设置有一个里面设备都不通 风神ax7怎么样清除保养公里数 东风风神ax4保养提示怎样清除 NVIDIA GeForce G620 2GB 是什么英伟达型号 没见过啊性能怎麽样_百度知 ... 如何切换到nvidia geforce g620显卡 NVIDIA GeForce G620能不能运行3D-MAX 风神A30里程表怎么清零 微星NVIDIA GeForce 210与G620可以搭配吗 快手发作品都是一千左右播放量不涨粉 ...G620 @ 2.60GHz 内存2 GB 显卡NVIDIA GeForce GT 620 ( 1 GB /... g620 cpu能玩守望先锋吗 英特尔 Pentium G620的CPU配上NVIDIA GTX960 4G 显卡性能会有损耗吗... 奔腾g620可以推NVIDIA GEFORCE GT630吗??打算换卡~ ...吗?CPU.G620@2.60GHZ.1.96GB内存 显卡NVIDIAgeforcf GT430 其他的... 显卡NVIDIA Geforce GT 430(1.00GB) CPU G620 2.6GHz 玩无双大蛇z为什么... ...P67H ;CPU是: G620 ;显卡是:Nvidia GeForce GTS 450 显卡NVIDIA GeForce GT 220 ,能玩虐杀原形么 八字喜神 忌神 帮我看看 英伟达gt520的显卡和索泰gt620的显卡哪个好?