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