C语言计算日期,有人会吗?

从键盘上输入一个日期,请输出该日期的前一天、后一天的日期,该日期是该年的第几天,该日期是星期几等信息。

我之前给的程序有问题吗

#include <stdio.h>
#include <stdlib.h>
int  year,month,date,sumDate;
int checkYear(int a){
      if((a%4==0&&a%100!=0)||(a%400==0)){
            return 1;
      }else{
            return 0;
      }
}
void sum(int a,int b,int c){
      int arr[]={31,28,31,30,31,30,31,31,30,31,30,31};
      int arr1[]={31,29,31,30,31,30,31,31,30,31,30,31};
      int count=0; //计算闰年的数量
      int curSumDate=0;
      int i;
      int week;
      for(i=1970;i<a;i++){
            if( checkYear(i)){
                  count++;  //计算这期间所有的闰年数
            }
      }
      sumDate=365*(a-1970)+count;  //将本年以前所有的天数计算出来
      if(checkYear(a)){//当年是闰年
            for(i=0;i<b-1;i++){
                  sumDate+=arr1[i];   //将本年当月之前的所有月份加起来
                  curSumDate+=arr1[i];//计算当年月份,用来输出位于当年的多少天
            }
      }else{
            for(i=0;i<b-1;i++){
                  sumDate+=arr[i];
                  curSumDate+=arr[i];
            }
      }
      sumDate+=c;  //将本年本月的天数加起来
      curSumDate+=c;
      switch((sumDate+3)%7){  //由于197011日是星期四所以整除要+3天
      case 0:week=7;break;
      case 1:week=1;break;
      case 2:week=2;break;
      case 3:week=3;break;
      case 4:week=4;break;
      case 5:week=5;break;
      case 6:week=6;break;
      }
      printf("%d年%d月%d日是%d年的第%d天,星期%d\n",a,b,c,a,curSumDate,week);
      
}
int main(void) {
aa:    printf("请输入年月日,之间用空格隔开\n");
       scanf("%d%d%d",&year,&month,&date);
       if(year<1970){
             printf("年份不合法,请重新输入\n");
             system("pause");  
             goto aa;
       }else{
             if(month<1||month>12){
                   printf("月份不合法,请重新输入\n");
                   system("pause");  
                   goto aa;
             }else{
                   if(date<1||date>31){
                         printf("日期不合法,请重新输入\n");
                         system("pause");  
                         goto aa;
                   }
             }
       }
       
       
       //   printf("\n%d此年是闰年\n",year);
       switch(month){
       case 4:;
       case 6:;
       case 9:;
       case 11:
             if(date>30){
                   printf("日期不合法,请重新输入\n");
                   system("pause");  
                   goto aa;
             }else{
             }
             ;
       case 2: 
             if((year%4==0&&year%100!=0)||(year%400==0)){
                   if(date>29){
                         printf("日期不合法,请重新输入\n");
                         system("pause");  
                         goto aa;
                   }
             }else{
                   if(date>28){
                         printf("日期不合法,请重新输入\n");
                         system("pause");  
                         goto aa;
                   }
             }
             
       }
       sum(year,month,date);
       
       if(date-1==0){
             switch(month){
             case 1:
                   sum(year-1,12,31);
                   break;
                   ;
             case 2:;
             case 4:;
             case 6:;
             case 8:;
             case 9:
           
                   sum(year,month-1,31);
                   ;
             case 5:;
                   case 7:;
             case 10:;
             case 12:
                   sum(year,month-1,30);
                   break;
             case 3:if(checkYear){
                   sum(year,month-1,29);
                    }else{
                          sum(year,month-1,28);
                    }
                    break;
                    
                    
                    
             }
             
       }else{
             sum(year,month,date-1);
       }

       switch(month){
       case 1:;
             //date+1的代码自己参考date-1
       default:
             sum(year,month,date+1);
       }
       
       
       
       
       
       
       
       
       return 0;
}


date-1的已经写了,+1的你按照这个思路,自己写一下