|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-12-30, 01:03 PM | #1 |
協調管理員
|
討論 - 出題-寫萬年曆程式,不限語言
像上圖的形式,就是會出現這個用在中間,左邊是上個月,右邊是下個月 或許可以,只要給任何一個日期,就會出現前後上個月,本月,下個月的完整月曆 上圖是我使用php寫的,歡迎大家使用別的語言寫出^^ |
__________________ |
|
送花文章: 11706,
|
2006-12-30, 07:19 PM | #2 (permalink) |
註冊會員
|
一年級剛學 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 . . . |
送花文章: 623,
|
向 snoopy 送花的會員:
|
飛鳥 (2006-12-31)
感謝您發表一篇好文章 |
2007-01-04, 04:58 PM | #3 (permalink) |
協調管理員
|
以下是我的php寫法
PHP 語法:
|
送花文章: 11706,
|
2007-02-16, 12:31 AM | #6 (permalink) |
註冊會員
|
如果將 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 | ---------------------------- |
送花文章: 2,
|
向 wenneng 送花的會員:
|
飛鳥 (2007-02-16)
感謝您發表一篇好文章 |