发电厂工作票管理制度:编程:要求输入某一年月日,判断其为该年的第几天?

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 14:30:49
要判断其输入的合法性,如年,月,日大于0,11月没有31日,二月有28,29 两种,最好用C++语言编写...
急,强烈建议用C++语言
这个还是不行啊...如11月没有31日,年为负数等都检验不了...

晕!~C到C++,轻微改一下不就得了,C++的补在C的后下面了

很简单,用C写的,可以用数组,我没用,代码也可以更简单,不过这样便于你理解,我没有调试,你看一下有没有错误

main ()
{int year,moon=13,week=0,day=32,c=0,
m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;
while(moon>12 || moon<1 || day>31 || day<1) {
printf("请输入年,月,日:");
scanf("%d,%d,%d",&year,&moon,&day);
} /* 检验输入数据的合法性 */
printf("\n* %d \\ %d \\ %d\n",year,moon,day);
if (year%4==0 && year%100!=0 || year%400==0) /* 检验输入年份是否为闰年 */
m2=29;
else
m2=28;

m1=m3=m5=m7=m8=m10=m12=31;
m4=m6=m9=m11=30;
switch(moon) {
case 1:
c=0;
break;
case 2:
c=m1;
break;
case 3:
c=m1+m2;
break;
case 4:
c=m1+m2+m3;
break;
case 5:
c=m1+m2+m3+m4;
break;
case 6:
c=m1+m2+m3+m4+m5;
break;
case 7:
c=m1+m2+m3+m4+m5+m6;
break;
case 8:
c=m1+m2+m3+m4+m5+m6+m7;
break;
case 9:
c=m1+m2+m3+m4+m5+m6+m7+m8;
break;
case 10:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9;
break;
case 11:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10;
break;
case 12:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10+m11;
break;
default:
printf("Error");
break;
}
printf("这日为该年的第 %d 天",c+day);
}

==================================
C++的

#include <iostream>
using namespace std;

void main ()
{int year,moon=13,week=0,day=32,c=0,
m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12;
while(moon>12 || moon<1 || day>31 || day<1) {
cout<<"请输入年,月,日:";
cin >> year >> moon >> day;
} // 检验输入数据的合法性
if (year%4==0 && year%100!=0 || year%400==0) // 检验输入年份是否为闰年
m2=29;
else
m2=28;

m1=m3=m5=m7=m8=m10=m12=31;
m4=m6=m9=m11=30;
switch(moon) {
case 1:
c=0;
break;
case 2:
c=m1;
break;
case 3:
c=m1+m2;
break;
case 4:
c=m1+m2+m3;
break;
case 5:
c=m1+m2+m3+m4;
break;
case 6:
c=m1+m2+m3+m4+m5;
break;
case 7:
c=m1+m2+m3+m4+m5+m6;
break;
case 8:
c=m1+m2+m3+m4+m5+m6+m7;
break;
case 9:
c=m1+m2+m3+m4+m5+m6+m7+m8;
break;
case 10:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9;
break;
case 11:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10;
break;
case 12:
c=m1+m2+m3+m4+m5+m6+m7+m8+m9+m10+m11;
break;
default:
cout<<"Error";
break;
}
cout<<"是这一年的第"<<c+day<<"天"<<endl;
}

'我用VB写的程序
'新建一个窗体,画一个命令按钮(Command1)
'然后粘贴下列代码

Private Sub Command1_Click()
Dim A As String '定义字符串A,整个程序通过判断A的各个部分来确定输出结果
Dim Ye(1 To 12)'定义一个数组,用来放每个月的天数
For i = 1 To 12
If i = 1 Or i = 3 Or i = 5 Or i = 7 Or i = 8 Or i = 10 Or i = 12 Then '定义每个月的天数
Ye(i) = 31
Else
Ye(i) = 30
End If
Next i
A = InputBox("输入年月日,用空格隔开." & vbCrLf & "月份和天数要用双位数输入" & vbCrLf & "比如2005年1月1日,输入 2005 01 01"): If A = "" Then Exit Sub
If Len(A) <> 10 Then
MsgBox "输入有误,请从新输入"
Exit Sub
ElseIf Val(Mid(A, 6, 2)) > 12 Then '校对月份输入
MsgBox "月份输入有误"
Exit Sub
ElseIf Val(Mid(A, 9, 2)) > 31 Then '校对日期输入
MsgBox "日期输入有误"
Exit Sub
Else
If Val(Mid(A, 1, 4)) Mod 400 = 0 Or (Val(Mid(A, 1, 4)) Mod 4 = 0 And Val(Mid(A, 1, 4)) Mod 100 <> 0) Then '判断是否是闰年
Ye(2) = 29
Else
Ye(2) = 28 '定义二月的天数
End If

If Ye(2) = 28 And Mid(A, 6, 2) = 02 And Val(Mid(A, 9, 2)) > 28 Then
MsgBox "日期输入有误"
Exit Sub
ElseIf Ye(2) = 29 And Mid(A, 6, 2) = 02 And Val(Mid(A, 9, 2)) > 29 Then '校对二月天数
MsgBox "日期输入有误"
Exit Sub
End If

If Val(Mid(A, 1, 4)) = 0 Or Val(Mid(A, 6, 2)) = 0 Or Val(Mid(A, 9, 2)) = 0 Then '检查输入是否有0
MsgBox "输入有误,请重新输入"
Exit Sub
End If

'从这里真正开始计算天数,前面的都是判断过程
For H = 1 To Val(Mid(A, 6, 2)) - 1
Moon = Moon + Ye(H)
Next H

Days = Moon + Mid(A, 9, 2)
End If
'计算结束

Print Days '最终输出结果
End Sub

'***********************************
'其实整个程序就是对字符串A的操作,通过A里的前4位数判断是否是闰年,判断第六、七位确定月份,判断九、十位确定日期。
'这段程序在WinXp、VB6下调试通过 (嘻嘻嘻 好多软件都有这句话)