儿童节啦~贡献源代码

 

 

祝我们这些表面风光,内心彷徨;容颜未老,心已沧桑;似乎有才,实为江郎;成就难有,郁闷经常;比骡子累,比蚂蚁忙 ,比鸡起的早,比狗睡的晚;比驴干的多,比猪吃的差;比岳飞忠良,比赖昌星紧张的老中青年六一快乐

 

呵呵 今天无聊贴点代码

开始是用java写的 输入7为数字获取年月日 7为数字是太阳日的表示方法

有常规的 输入校验 比较详细的逻辑分析 后来又用cobol写了下来 贴出来看看  霍霍

 

 

java代码如下 

 

 

package arithmeticForCobol;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Test {
 BufferedReader br;
 String str;
 final int MAX_YEAR = 3000;
 final int MIN_YEAR = 1000;
 final int MAX_DAY_Y = 366;
 final int MAX_DAY_NY = 365;
 final int MIN_DAY = 1;
 final int IMPORTANT_P_WHOLE_DAY = 335;
 final int IMPORTANT_Y_WHOLE_DAY = 336;
 int a[] = new int[] { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,
   365 };
 int b[] = new int[] { 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335,
   366 };

 // public Test() {
 // }

 // the constructor function start the whole program
 public Test() {
  try {
   br = new BufferedReader(new InputStreamReader(System.in));
   System.out
     .println("this application is just for the year between 1000 to 3000");
   System.out.println("input data");
   for (;;) {
    str = br.readLine();
    if (checkLength(str)) {
     if (allNumeral(str)) {

      if (yearMatch(str)) {
       if (isYunnian(str)) {
        System.out.println("yun nian");
        if (day_y_Match(str)) {
         System.out.println(" yun nian day match");
         int realDay = getDays(str);
         System.out.println("month is : "
           + getMonth(realDay,
             IMPORTANT_Y_WHOLE_DAY, b)
           + " day is : "
           + getDay(realDay,
             IMPORTANT_Y_WHOLE_DAY, b));

        }
       } else {
        System.out.println("pin nian");
        if (dayMatch(str)) {
         System.out.println("pin nian day match");
         int realDay = getDays(str);
         System.out.println("month is : "
           + getMonth(realDay,
             IMPORTANT_P_WHOLE_DAY, a)
           + " day is : "
           + getDay(realDay,
             IMPORTANT_P_WHOLE_DAY, a));

        }
       }
      }
     }
    }
   }

  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 // check the length which the data you input, whether it's length is 7
 boolean checkLength(String str) {
  if (str.trim().length() != 7) {
   System.out.println("lenth error,input again");
   return false;
  }
  return true;
 }

 // check the whole data are numeric
 boolean allNumeral(String str) {
  char[] chararray = str.toCharArray();
  for (int i = 0; i < chararray.length; i++) {
   if ((int) (chararray[i]) < 48 || (int) (chararray[i]) > 57) {
    System.out.println("you put the unallow character,input again");
    return false;
   }
  }
  return true;
 }

 // check the year is between 1000 to 3000 ,this simple prgram is just for
 // the year between 1000 to 3000
 boolean yearMatch(String str) {
  String ys = str.substring(0, 4);
  int ysday = Integer.parseInt(ys);
  if (ysday < 1000 || ysday > 3000 || str.substring(0, 1).equals("0")) {
   System.out
     .println("the year must between 1000 to 3000,input again");
   return false;
  }
  return true;
 }

 // check when it's ping year, whether the day match to 1 to 365
 boolean dayMatch(String str) {
  int days = getDays(str);

  if (days < 1 || days > 365) {
   System.out
     .println("days error,this year is pin nian , day must between 1 to 365,input again");
   return false;
  }
  System.out.println("day ok");
  return true;
 }

 // check when it's yun year, whether the day match to 1 to 366
 boolean day_y_Match(String str) {
  int days = getDays(str);

  if (days < 1 || days > 366) {
   System.out
     .println("days error,this year is yun nian , day must between 1 to 366,input again");
   return false;
  }
  System.out.println("day ok");
  return true;
 }

 // check when it's ping year,whether the day match to 1 to 365
 int getDays(String str) {
  int location = getTheLocationNotFirstZero(str);
  String daystring = str.substring(location);
  int days = Integer.parseInt(daystring);
  return days;
 }

 // get the last three character form the data, then get the first place
 // which it's not zero, then
 // I can get the real day.
 int getTheLocationNotFirstZero(String str) {

  String s = str.substring(4);
  char[] c = s.toCharArray();
  for (int i = 0; i < c.length; i++) {
   if (c[i] != '0') {
    return i + 4;
   }
  }
  return 1;
 }

 // check the data input of year , whether is's a yun nian.
 boolean isYunnian(String str) {
  int yearnumber = Integer.parseInt(str.substring(0, 4));
  if ((yearnumber % 4 == 0 && yearnumber % 100 != 0)
    || yearnumber % 400 == 0) {
   System.out.println("input year is ren nian");
   return true;
  }
  System.out.println("input year is not ren nian");
  return false;
 }

 // get the correct month from the last three character
 int getMonth(int day, int importantWholeDay, int[] m) {

  if (day <= 31) {
   return 1;
  } else if (day >= importantWholeDay) {
   return 12;
  } else {
   for (int i = 0; i < m.length; i++) {
    if (m[i] < day && m[i + 1] >= day) {
     return i + 2;
    }
   }
   return 1;
  }
 }

 // get the correct day from the last three character
 int getDay(int day, int importantWholeDay, int[] m) {
  if (day >= 1 && day <= 31) {
   return day;
  }
  int whichMonth = getMonth(day, importantWholeDay, m);
  int whichDay = day - m[whichMonth - 2];
  return whichDay;
 }

 public static void main(String[] args) {
  new Test();
 }
}

 

 

 

然后下面就是 用cobol实现同样作用的cobol代码 了 

 

 

 


 ==MSG> -Warning- The UNDO command is not available until you change           
 ==MSG>           your edit profile using the command RECOVERY ON.             
 000001        IDENTIFICATION             DIVISION.                            
 000002        PROGRAM-ID.                TEST4.                               
 000003        AUTHOR.                    GLANCER.                             
 000004        ENVIRONMENT                DIVISION.                            
 000005        DATA                       DIVISION.                            
 000006        WORKING-STORAGE            SECTION.                             
 000007        01  S-DATA.                                                     
 000008            05                     S-YUN-SUB    PIC Z9.                 
 000009            05                    S-PING-SUB    PIC Z9.                 
 000010        01  W-SIGN                 PIC X VALUE 'N'.                     
 000011        01  S-SIGN                 PIC X VALUE 'N'.                     
 000012        01  SOURCE-DATA            PIC X(30).                           
 000013        01  PART-SOURCE-DATA       PIC X(7).                            
 000014        01  DATA-REAL-LENGTH       PIC 99.                              
                             
 000015        01  ERR-MSG                PIC X(60).                           
 000016        01  MSG-DATA.                                                   
 000017            05  MONTH-MSG          PIC X(20).                           
 000018            05    DAY-MSG          PIC X(20).                           
 000019            05    TIP-SIGN         PIC 9       VALUE ZERO.              
 000020        01  TIME-DATA.                                                  
 000021            05   YEAR-SIGN         PIC X VALUE 'N'.                     
 000022            05  SYEAR-DATA         PIC X(4).                            
 000023            05   SDAY-DATA         PIC X(3).                            
 000024            05   YEAR-DATA         PIC 9(4).                            
 000025            05    DAY-DATA         PIC 9(3).                            
 000026            05    MONTH-DAY-DATA   PIC 9(3).                            
 000027            05    S-MONTH-DAY-DATA PIC ZZ9.                             
 000028            05  S-DAY-DATA         PIC ZZ9.                             
 000029        01  INPUT-TABLE.                                                
 000030            05   INPUT-ITEMS       PIC X OCCURS 30 TIMES.  
 
 000031            05   INPUT-ITEMS-SUB   PIC 99 USAGE IS COMP.                
 000032        01   PING-YEAR-DATA VALUE                                       
 000033             '031059090120151181212243273304334365'.                    
 000034            05   PING-YEAR-ITEMS   PIC 9(3) OCCURS 12 TIMES.            
 000035            05   PING-SUB PIC 99.                                       
 000036        01    YUN-YEAR-DATA VALUE                                       
 000037             '031060091121152182213244274305335366'.                    
 000038            05    YUN-YEAR-ITEMS   PIC 9(3) OCCURS 12 TIMES.            
 000039            05    YUN-SUB          PIC 99.                              
 000040        01  REM-TEST-DATA.                                              
 000041            05   TEST-DATA1        PIC 9(4).                            
 000042            05   TEST-DATA2        PIC 9(4).                            
 000043            05   TEST-DATA3        PIC 9(4).                            
 000044            05   TEST-DATA11       PIC 9(4).                            
 000045            05   TEST-DATA22       PIC 9(4).                            

 000046            05   TEST-DATA33       PIC 9(4).                            
 000047        PROCEDURE                  DIVISION.                            
 000048            PERFORM 000-PERFORM-SEQUENCE.                               
 000049            STOP    RUN.                                                
 000050        000-PERFORM-SEQUENCE.                                           
 000051            PERFORM 100-ACCEPT-DATA.                                    
 000052            PERFORM 200-CHECK-LENGTH.                                   
 000053            PERFORM 400-CHECK-ALPHANUM.                                 
 000054            PERFORM 500-SHOW-SPECIFIC-DATA.                             
 000055            PERFORM 700-CHECK-YEAR.                                     
 000056            PERFORM 800-CHECK-DAY.                                      
 000057            PERFORM 1000-GET-INFO.                                      
 000058        100-ACCEPT-DATA.                                                
 000059            IF       TIP-SIGN = ZERO                                    
 000060            DISPLAY 'PLS INPUT THE DATA'                                
 000061            END-IF.                                                     
 
 000062            ACCEPT   SOURCE-DATA.                                       
 000063            MOVE     SOURCE-DATA   TO INPUT-TABLE.                      
 000064            PERFORM  VARYING INPUT-ITEMS-SUB FROM 1 BY 1                
 000065                     UNTIL   W-SIGN = 'Y'                               
 000066                     IF INPUT-ITEMS (INPUT-ITEMS-SUB) = SPACE           
 000067                     MOVE 'Y' TO W-SIGN                                 
 000068                     END-IF                                             
 000069                     IF      W-SIGN = 'N'                               
 000070                     ADD     1         TO DATA-REAL-LENGTH              
 000071                     END-IF                                             
 000072            END-PERFORM.                                                
 000073        200-CHECK-LENGTH.                                               
 000074            IF       DATA-REAL-LENGTH NOT = 7                           
 000075                     MOVE 'INPUT ERROR ,LENGTH SHOULD BE 7,INPUT AGAIN' 
 000076                           TO    ERR-MSG                                
 000077                     DISPLAY ERR-MSG                                    
 
 000078                     MOVE 'N' TO W-SIGN                                 
 000079                     MOVE ZERO TO DATA-REAL-LENGTH                      
 000080                     MOVE 1    TO TIP-SIGN                              
 000081                     GO TO 000-PERFORM-SEQUENCE                         
 000082            END-IF.                                                     
 000083        300-SHOW-ERR-MSG.                                               
 000084            DISPLAY ERR-MSG.                                            
 000085            STOP    RUN.                                                
 000086        400-CHECK-ALPHANUM.                                             
 000087            MOVE  SOURCE-DATA (1:7) TO     PART-SOURCE-DATA.            
 000088            IF    PART-SOURCE-DATA  IS NOT NUMERIC                      
 000089                   MOVE 'YOU PUT IS NOT NUMERIC,INPUT AGAIN'  TO ERR-MSG
 000090                     DISPLAY ERR-MSG                                    
 000091                   MOVE ZERO TO DATA-REAL-LENGTH                        
 000092                   MOVE 'N'  TO W-SIGN                                  
 000093                     GO TO 000-PERFORM-SEQUENCE                         
 
 000094            END-IF.                                                     
 000095        500-SHOW-SPECIFIC-DATA.                                         
 000096            MOVE  PART-SOURCE-DATA (1:4)            TO SYEAR-DATA.      
 000097            MOVE  PART-SOURCE-DATA (5:3)            TO  SDAY-DATA.      
 000098            COMPUTE  YEAR-DATA = FUNCTION NUMVAL (SYEAR-DATA).          
 000099            COMPUTE   DAY-DATA = FUNCTION NUMVAL  (SDAY-DATA).          
 000100            PERFORM   600-CHECK-TIMEDATA.                               
 000101        600-CHECK-TIMEDATA.                                             
 000102            IF       YEAR-DATA > 3000 OR YEAR-DATA < 1000               
 000103               MOVE 'YEAR SHOULD BETWEEN 1000 TO 3000 ,INPUT AGAIN '    
 000104                     TO ERR-MSG                                         
 000105               DISPLAY ERR-MSG                                          
 000106               MOVE  ZERO             TO DATA-REAL-LENGTH               
 000107               MOVE  'N'              TO W-SIGN                         
 000108               GO    TO  000-PERFORM-SEQUENCE                           
 000109            END-IF.                                                     
 
 000110        700-CHECK-YEAR.                                                 
 000111               DIVIDE  YEAR-DATA BY 4 GIVING TEST-DATA1                 
 000112                           REMAINDER  TEST-DATA11.                      
 000113               DIVIDE  YEAR-DATA BY 100 GIVING TEST-DATA2               
 000114                           REMAINDER  TEST-DATA22.                      
 000115               DIVIDE  YEAR-DATA BY 400 GIVING TEST-DATA3               
 000116                           REMAINDER  TEST-DATA33.                      
 000117               IF      TEST-DATA11 = 0 AND TEST-DATA22 NOT = 0          
 000118                       MOVE 'Y'        TO YEAR-SIGN                     
 000119               END-IF.                                                  
 000120               IF      TEST-DATA33 = 0                                  
 000121                       MOVE 'Y'        TO YEAR-SIGN                     
 000122               END-IF.                                                  
 000123        800-CHECK-DAY.                                                  
 000124               IF      YEAR-SIGN = 'Y'                                  
 000125                       IF DAY-DATA > 366 OR DAY-DATA = 0                
 
 000126                       MOVE 'THE MAX DAY OF THIS YEAR IS 366,INPUT AGAIN'
 000127                             TO ERR-MSG                                 
 000128                       DISPLAY ERR-MSG                                  
 000129                       MOVE  ZERO        TO DATA-REAL-LENGTH            
 000130                       MOVE  'N'         TO W-SIGN                      
 000131                       MOVE  'N'         TO YEAR-SIGN                   
 000132                       GO    TO          000-PERFORM-SEQUENCE           
 000133                       END-IF                                           
 000134               END-IF.                                                  
 000135               IF      YEAR-SIGN = 'N'                                  
 000136                       IF DAY-DATA > 365 OR DAY-DATA = 0                
 000137                       MOVE 'THE MAX DAY OF THIS YEAR IS 365,INPUT AGAIN'
 000138                             TO ERR-MSG                                 
 000139                       DISPLAY  ERR-MSG                                 
 000140                       MOVE     ZERO     TO DATA-REAL-LENGTH            
 000141                       MOVE     'N'      TO W-SIGN                      
 000142                       GO       TO       000-PERFORM-SEQUENCE    

 000143                       END-IF                                           
 000144               END-IF.                                                  
 000145        1000-GET-INFO.                                                  
 000146               IF YEAR-SIGN = 'Y'                                       
 000147                        IF DAY-DATA <= 31                               
 000148                           MOVE 'MONTH IS 1' TO MONTH-MSG               
 000149                           MOVE  DAY-DATA    TO S-DAY-DATA              
 000150                           STRING 'DAY   IS' S-DAY-DATA DELIMITED BY SIZE
 000151                                   INTO     DAY-MSG                     
 000152                           PERFORM 1100-SHOW-MSG                        
 000153                        END-IF                                          
 000154                        IF DAY-DATA >= 336                              
 000155                           MOVE 'MONTH IS 12' TO MONTH-MSG              
 000156                 COMPUTE  MONTH-DAY-DATA = DAY-DATA - YUN-YEAR-ITEMS (11)
 000157                           MOVE  MONTH-DAY-DATA TO S-MONTH-DAY-DATA     

 000158                         STRING 'DAY   IS ' S-MONTH-DAY-DATA DELIMITED BY
 000159                              SIZE INTO DAY-MSG                         
 000160                           PERFORM 1100-SHOW-MSG                        
 000161                        END-IF                                          
 000162                        IF DAY-DATA > 31 AND DAY-DATA < 336             
 000163                           PERFORM VARYING YUN-SUB FROM 1 BY 1 UNTIL    
 000164                                   S-SIGN = 'Y'                         
 000165                              IF DAY-DATA > YUN-YEAR-ITEMS(YUN-SUB)     
 000166                              AND DAY-DATA <= YUN-YEAR-ITEMS(YUN-SUB + 1)
 000167                              MOVE 'Y' TO S-SIGN                        
 000168                              COMPUTE YUN-SUB = YUN-SUB + 1             
 000169                              MOVE    YUN-SUB   TO  S-YUN-SUB           
 000170                              STRING 'MONTH IS ' S-YUN-SUB DELIMITED BY 
 000171                                 SIZE INTO MONTH-MSG                    
 000172                    COMPUTE  MONTH-DAY-DATA                             
 000173                     = DAY-DATA - YUN-YEAR-ITEMS (YUN-SUB - 1)          
 
 000174                              MOVE  MONTH-DAY-DATA  TO S-MONTH-DAY-DATA 
 000175                    STRING  'DAY   IS' S-MONTH-DAY-DATA DELIMITED BY SIZE
 000176                              INTO    DAY-MSG                           
 000177                              PERFORM 1100-SHOW-MSG                     
 000178                              END-IF                                    
 000179                           END-PERFORM                                  
 000180                        END-IF                                          
 000181               MOVE 'APPLICATION OVER ,THANK YOU !'   TO ERR-MSG        
 000182               PERFORM 300-SHOW-ERR-MSG                                 
 000183               END-IF.                                                  
 000184               IF YEAR-SIGN = 'N'                                       
 000185                  IF DAY-DATA <= 31                                     
 000186                     MOVE 'MONTH IS 1 ' TO MONTH-MSG                    
 000187                     MOVE DAY-DATA      TO S-DAY-DATA                   
 000188                     STRING 'DAY   IS ' S-DAY-DATA DELIMITED BY SIZE INTO
 000189                             DAY-MSG                                    
 
 000190                     PERFORM 1100-SHOW-MSG                              
 000191                  END-IF                                                
 000192                  IF DAY-DATA >= 335                                    
 000193                     MOVE 'MONTH IS 12 ' TO MONTH-MSG                   
 000194             COMPUTE MONTH-DAY-DATA = DAY-DATA - PING-YEAR-ITEMS (11)   
 000195                     MOVE MONTH-DAY-DATA TO S-MONTH-DAY-DATA            
 000196                     STRING 'DAY   IS' S-MONTH-DAY-DATA DELIMITED BY    
 000197                            SIZE INTO DAY-MSG                           
 000198                     PERFORM 1100-SHOW-MSG                              
 000199                  END-IF                                                
 000200                  IF DAY-DATA > 31 AND DAY-DATA < 335                   
 000201                     PERFORM VARYING PING-SUB FROM 1 BY 1 UNTIL         
 000202                             S-SIGN = 'Y'                               
 000203                     IF DAY-DATA > PING-YEAR-ITEMS(PING-SUB)            
 000204                        AND DAY-DATA <= PING-YEAR-ITEMS(PING-SUB + 1)   
 000205                        MOVE 'Y' TO S-SIGN                              
 
 000206                        COMPUTE PING-SUB = PING-SUB + 1                 
 000207                        MOVE    PING-SUB   TO  S-PING-SUB               
 000208                        STRING  'MONTH IS ' S-PING-SUB DELIMITED BY     
 000209                          SIZE INTO MONTH-MSG                           
 000210                        COMPUTE MONTH-DAY-DATA                          
 000211                         = DAY-DATA - PING-YEAR-ITEMS (PING-SUB - 1)    
 000212                         MOVE MONTH-DAY-DATA TO S-MONTH-DAY-DATA        
 000213                     STRING 'DAY  IS ' S-MONTH-DAY-DATA DELIMITED BY SIZE
 000214                      INTO DAY-MSG                                      
 000215                        PERFORM 1100-SHOW-MSG                           
 000216                        END-IF                                          
 000217                     END-PERFORM                                        
 000218                   END-IF                                               
 000219               MOVE 'APPLICATION OVER, THANK YOU !'    TO ERR-MSG       
 000220               PERFORM 300-SHOW-ERR-MSG                                 
 000221               END-IF.                                                  
 
 000222        1100-SHOW-MSG.                                                  
 000223               DISPLAY  '****************' .                            
 000224               DISPLAY '*  ' MONTH-MSG      .                           
 000225               DISPLAY '*  ' DAY-MSG      .                             
 000226               DISPLAY  '****************'.                             
 
    

 

 

 

第一次在博客里面贴代码 。。。  呵呵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值