史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   出題-寫萬年曆程式,不限語言 (http://forum.slime.com.tw/thread194737.html)

飛鳥 2006-12-30 01:03 PM

出題-寫萬年曆程式,不限語言
 
http://netgames123.googlepages.com/year.JPG

像上圖的形式,就是會出現這個用在中間,左邊是上個月,右邊是下個月

或許可以,只要給任何一個日期,就會出現前後上個月,本月,下個月的完整月曆

上圖是我使用php寫的,歡迎大家使用別的語言寫出^^

snoopy 2006-12-30 07:19 PM

一年級剛學 C 時寫的
大概三年多了
現在看看以前寫的東西還真濫 orz
執行完之後案任一鍵結束

萬年曆會輸出到C槽
C:\萬年歷.txt

語法:

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

int m_days(int,int);  // 回傳月份有幾天-28
int first_mon(int);  // 每年的一月一號是星期幾
int first_day(int,int);  // 回傳某個月份的一號是星期幾


main()
{
        FILE *fptr ;
        fptr = fopen ("C:\\萬年歷.txt","w");
        int y , m=1  ;  // y 年份, m 月份
        int i , j=1 ;  // 計數器
        int d , e  ;  // 一個月有days天 第一行個e格
        printf("執行完請至 C:\\萬年曆.txt\n") ;
        cout << "請輸入年份 " ;
    cin >> y ;
        do{

        i=1,j=1;

        fprintf(fptr,"\n\t\t\t\t\t%d年%d月\n",y,m) ;
        for(i=0;i<=48;i++)
                fprintf(fptr,"_");
        fprintf(fptr,"\n");

    e = first_day(y,m); // 每個月第一天
        d = m_days(y,m)+28; // 每個月有幾天

        fprintf(fptr,"\n日\t一\t二\t三\t四\t五\t六\n");

        // 第一行空白
        for(i=1;i<=e;i++)
                fprintf(fptr,"\t");

        // 第一行數字
        for(i=1;i<=7-e;i++)
                fprintf(fptr,"%d\t",i);
        fprintf(fptr,"\n");
       
        // 剩餘數字
        for(i;i<=d;i++)
        {
                if(j%7==0)
                {
                        fprintf(fptr,"%d\t\n",i);
                        j++ ;
                }
                else
                {
                        fprintf(fptr,"%d\t",i);
                        j++ ;
                }
        }
        fprintf(fptr,"\n");
        m++;
        }while(m<=12);
    cout << endl ;
        system("pause");
}

int first_mon(int y)  //每年的一月一號是星期幾
{
        int i , j=2 ;
        for(i=1;i<=(y-1980);i++)
        {
                if(i%4==1)
                        j+=2;
                else
                        j++ ;
        }
        return j%7;
}

int m_days(int y,int m)  //回傳月份有幾天-28
{
        switch(m)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
                return 3;
        break;

        case 2 :
       
                        if (y%4==0)
                                return 1 ;
                        else
                                return 0 ;
               
        break ;

        default :
        return 2;
        break ;
        }
}

int first_day(int y,int m) // 每月的一號是星期幾
{
        int i ,sum=0;
        for(i=1;i<=m-1;i++)
                sum+=m_days(y,i);
    sum=(sum+first_mon(y))%7;
        return sum ;
}

語法:


                                        2007年1月
_________________________________________________

日        一        二        三        四        五        六
        1        2        3        4        5        6       
7        8        9        10        11        12        13       
14        15        16        17        18        19        20       
21        22        23        24        25        26        27       
28        29        30        31       

                                        2007年2月
_________________________________________________

日        一        二        三        四        五        六
                                1        2        3       
4        5        6        7        8        9        10       
11        12        13        14        15        16        17       
18        19        20        21        22        23        24       
25        26        27        28       

                                        2007年3月
_________________________________________________

日        一        二        三        四        五        六
                                1        2        3       
4        5        6        7        8        9        10       
11        12        13        14        15        16        17       
18        19        20        21        22        23        24       
25        26        27        28        29        30        31       
.
.
.


飛鳥 2007-01-04 04:58 PM

以下是我的php寫法
PHP 語法:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>萬年曆</title>
<!--不要給proxy cache圖片-->
<meta http-equiv="expires" content="0"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="pragma" content="no-cache">
<!--不要給proxy cache圖片結束-->
<base target="_self">
</head>

<body topmargin="0" leftmargin="0">
<div align="left">

<table border="0" width="95%" id="table3" cellspacing="0" cellpadding="0" bgcolor="#78AEFF">
<tr>
<td width="100%" align="center">
<?
if(isset($_GET['year'])){$year=$_GET['year'];}else{$year=date("Y");}
if(isset($_GET['mon'])){$mon=$_GET['mon'];}else{$mon=date("m");}
$mon=$mon;
if ($mon == 1 ||$mon == 3 ||$mon == 5||$mon == 7||$mon == 8||$mon == 10||$mon == 12){ $stop=31;
        }elseif($mon == 4||$mon == 6||$mon == 9||$mon == 11){ $stop=30;
        }else{
            if ($year % 4 > 0){$stop=28;}else{$stop=29;}
        }
        
for ($i=1;$i<=$stop;$i++){
    //計算星期開始
        if ($mon == 1){$mm=0;}
        if ($mon == 2){$mm=31;}
        if ($mon == 3){$mm=59;}
        if ($mon == 4){$mm=90;}
        if ($mon == 5){$mm=120;}
        if ($mon == 6){$mm=151;}
        if ($mon == 7){$mm=181;}
        if ($mon == 8){$mm=212;}
        if ($mon == 9){$mm=243;}
        if ($mon == 10){$mm=273;}
        if ($mon == 11){$mm=304;}
        if ($mon == 12){$mm=334;}
        $mmod=($year - 1) / 4;
        $yyod=($year - 1) * 365;
        $eeee=($mm+$mmod+$yyod+$i);
        $PPP=$eeee % 7;
        //$textt是要顯示的顏色,六日都是顯示灰色
        
        if ($PPP == 1){$week[$i]=$PPP;}//星期日
        elseif($PPP == 2){$week[$i]=$PPP;}//星期一
        elseif($PPP == 3){$week[$i]=$PPP;}//星期二
        elseif($PPP == 4){$week[$i]=$PPP;}//星期三
        elseif($PPP == 5){$week[$i]=$PPP;}//星期四
        elseif($PPP == 6){$week[$i]=$PPP;}//星期五
        elseif($PPP == 0){$week[$i]=$PPP;}//星期六
        else{$week[$i]='';}
        }
while($i<=42){$week[$i]='';$i++;}
        $j=1;
        for ($i=1;$i<=42;$i++){
        
            if (($i)%7 == $week[$j]){
            if($j<=$stop){
                $where[$i]=$j;
                $j++;
            }else{
                $where[$i]='';
                }
            
            }else{
            $where[$i]='';
            
            }
            
        }
?>


<? print "<a href=\"xx.php?year=$year&mon=$mon";
    if (isset($_GET['edit'])){print "&edit=";}
    print "\"><b>$year 年$mon 月</b></a><br>";
    ?>
<table border="1"  id="table4" cellspacing="1" cellpadding="0">
    <tr>
        <td><b><font size="4">日 </font></b> </td>
        <td><b><font size="4">一 </font></b> </td>
        <td><b><font size="4">二 </font></b> </td>
        <td><b><font size="4">三 </font></b> </td>
        <td><b><font size="4">四 </font></b> </td>
        <td><b><font size="4">五  </font></b>  </td>
        <td><b><font size="4">六  </font></b>  </td>
    </tr>
<?
$wk=1;
for($k=0;$k<=5;$k++){
print "<tr>";
    for($m=1;$m<=7;$m++){
        print "<td>";
    if (isset($_GET['edit'])){print "&edit=";}
    print "$where[$wk]</td>\n\t";$wk++;}
print    "</tr>";
}
?>
    </table>
                    </td>


snoopy 2007-01-04 06:39 PM

換我出個題目

寫ㄧ支程式

可以讓機器一直吐錢 Orz

superxboy 2007-01-04 08:09 PM

引用:

作者: snoopy
換我出個題目

寫ㄧ支程式

可以讓機器一直吐錢 Orz

跟高鐵拷貝一下...而且要丟50塊進去...吐500萬出來:n7:

wenneng 2007-02-16 12:31 AM

如果將 NowDate = Date 改為 NowDate = DateSerial(某年, 某月, 某日) 會得到某年某月某日的月曆
以下是用VB寫的在表單載入的時候會在即時運算視窗印出月曆

語法:

Private Sub Form_Load()
  Dim NowDate As Date, L_Date As Date, N_Date As Date
  Dim NowYear As Integer, NowMonth As Integer, NowDay As Integer
  NowDate = Date '取得目前的日期資訊
  NowYear = year(NowDate)  '取出年份
  NowMonth = Month(NowDate) '取出月份
  NowDay = Day(NowDate)    '取出日
 
  L_Date = getLFirstDate(NowYear, NowMonth) '傳入目前的年月取得上個月的第一天
  N_Date = getNFirstDate(NowYear, NowMonth) '傳入目前的年月取得下個月的第一天
  Debug.Print CalendarTable(L_Date)                          '印出上個月的月曆
    Debug.Print CalendarTable(DateSerial(NowYear, NowMonth, 1)) '印出這個月的月曆
    Debug.Print CalendarTable(N_Date)                          '印出下個月的月曆

 
End Sub
 
Private Function CalendarTable(MonthFirstDay As Date) As String '產生月曆的表單
  Dim DayAmount As Integer, DayOfWeek As VbDayOfWeek
  Dim C_Year As Integer, C_Month As Integer, C_Day As Integer
  Dim i As Integer
  Dim TableBuff As String
  C_Year = year(MonthFirstDay)  '取得月曆年份
  C_Month = Month(MonthFirstDay) '取得月曆月份
  C_Day = 1 '設定起始日期為 1 日
  Rem 月曆表頭
  TableBuff = " ---------------------------- " & vbCrLf
  TableBuff = TableBuff & "|    西元 " & C_Year & " 年 "
  If C_Month < 10 Then TableBuff = TableBuff & " "
  TableBuff = TableBuff & C_Month & " 月    |" & vbCrLf
  TableBuff = TableBuff & " ---------------------------- " & vbCrLf
  TableBuff = TableBuff & "| 日  一  二  三  四  五  六 |" & vbCrLf
  TableBuff = TableBuff & " ---------------------------- " & vbCrLf
  TableBuff = TableBuff & "|"
 
  DayOfWeek = Weekday(MonthFirstDay) '取得此月第一天為星期幾
  Rem 填充上一月份的空白日期
  i = vbSunday
  While i < DayOfWeek
      TableBuff = TableBuff & "    "
      i = i + 1
  Wend
  DayAmount = getDayAmount(C_Year, C_Month) '取得此月份的日期數
  Rem 將表單填入全部日期
  While (C_Day <= DayAmount)
      If DayOfWeek = vbSunday Then TableBuff = TableBuff & "|" '每星期行的最前面加上 | 當外框
      If C_Day < 10 Then TableBuff = TableBuff & " "          '當日期小於10時最前面填充一個空白
      TableBuff = TableBuff & " " & C_Day & " "                '填入日期
      C_Day = C_Day + 1
      DayOfWeek = DayOfWeek + 1
      Rem 每星期行的結尾加上 | 當外框
      If DayOfWeek > vbSaturday Then
          DayOfWeek = vbSunday
          TableBuff = TableBuff & "|" & vbCrLf
      End If
  Wend
  Rem 填充下一月份的空白日期
  If DayOfWeek > vbSunday Then '當最後一天不為星期六時填充至星期六
      For i = DayOfWeek To vbSaturday
          TableBuff = TableBuff & "    "
      Next
      TableBuff = TableBuff & "|" & vbCrLf '加上最後的外框
  End If
  TableBuff = TableBuff & " ---------------------------- " & vbCrLf '加上底框
  Rem 回傳產生的表單
  CalendarTable = TableBuff
End Function
Private Function getLFirstDate(NowYear As Integer, NowMonth As Integer) As Date '取得上個月第一天的日期
  Dim L_Year As Integer, L_Month As Integer
  L_Year = NowYear      '年份設為與這個月同年
  L_Month = NowMonth - 1 '月份設為這個月減一個月
  Rem 當月份為上一年的時候要調整月份為 12 月且年份要減 1
  If L_Month < 1 Then
      L_Month = 12
      L_Year = L_Year - 1
  End If
  getLFirstDate = DateSerial(L_Year, L_Month, 1)
End Function
Private Function getNFirstDate(NowYear As Integer, NowMonth As Integer) As Date '取得下個月第一天的日期
  Dim N_Year As Integer, N_Month As Integer
  N_Year = NowYear      '年份設為與這個月同年
  N_Month = NowMonth + 1 '月份設為這個月加一個月
  Rem 當月份為下一年的時候要調整月份為 1 月且年份要加 1
  If N_Month > 12 Then
      N_Month = 1
      N_Year = N_Year + 1
  End If
  getNFirstDate = DateSerial(N_Year, N_Month, 1)
End Function
Private Function getDayAmount(YearVal As Integer, MonthVal As Integer) As Integer '取得某年某月的天數
  If MonthVal = 2 Then
      getDayAmount = 28 + ((((YearVal Mod 4) = 0) And ((YearVal Mod 100) <> 0)) Or ((YearVal Mod 400) = 0) And &H1) '月份為 2 檢查是否為閏年並做調整
  Else
      getDayAmount = 30 + ((((MonthVal And &H1) = &H1) Xor (MonthVal > 7)) And &H1)                              '不為 2 月則天數在 7 月前奇數月為 31 天,在 7 月後偶數月為 31 天
  End If
End Function

輸出結果大概像下面那樣
語法:

----------------------------
|    西元 2007 年  1 月    |
 ----------------------------
| 日  一  二  三  四  五  六 |
 ----------------------------
|      1  2  3  4  5  6 |
|  7  8  9  10  11  12  13 |
| 14  15  16  17  18  19  20 |
| 21  22  23  24  25  26  27 |
| 28  29  30  31            |
 ----------------------------

----------------------------
|    西元 2007 年  2 月    |
 ----------------------------
| 日  一  二  三  四  五  六 |
 ----------------------------
|                  1  2  3 |
|  4  5  6  7  8  9  10 |
| 11  12  13  14  15  16  17 |
| 18  19  20  21  22  23  24 |
| 25  26  27  28            |
 ----------------------------

----------------------------
|    西元 2007 年  3 月    |
 ----------------------------
| 日  一  二  三  四  五  六 |
 ----------------------------
|                  1  2  3 |
|  4  5  6  7  8  9  10 |
| 11  12  13  14  15  16  17 |
| 18  19  20  21  22  23  24 |
| 25  26  27  28  29  30  31 |
 ----------------------------



ancle 2007-02-25 01:13 PM

在此討論區中沒有列出LabVIEW這個程式語言,但是我也來分享一下相關程式碼,以下使用ActiveX控制項來達成相關功能
執行結果
http://img83.imageshack.us/img83/2531/calender1du4.th.jpg
程式碼
http://img83.imageshack.us/img83/7385/calender2ku4.jpg

飛鳥 2007-02-26 09:20 AM

引用:

作者: ancle
在此討論區中沒有列出LabVIEW這個程式語言,但是我也來分享一下相關程式碼,以下使用ActiveX控制項來達成相關功能
執行結果
http://img83.imageshack.us/img83/2531/calender1du4.th.jpg
程式碼
http://img83.imageshack.us/img83/7385/calender2ku4.jpg

這個喔,labview我也用過,覺得功能比較偏硬體的,是圖示化的寫程式介面:on_07: :on_32:

目前應該還是7.1的開發版本吧

ancle 2007-03-04 09:42 PM

引用:

作者: 飛鳥 (文章 1668716)
這個喔,labview我也用過,覺得功能比較偏硬體的,是圖示化的寫程式介面:on_07: :on_32:

目前應該還是7.1的開發版本吧

labview最早是被拿來做研發工具,其實它也是一種程式語言,與其他語言並沒有多大不同,
目前最新的版本是8.2版


所有時間均為台北時間。現在的時間是 10:37 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1