标题:努力这么久了..晒一下自己写的日历,VC下通过
取消只看楼主
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
结帖率:0
 问题点数:0 回复次数:4 
努力这么久了..晒一下自己写的日历,VC下通过
程序代码:
#include "stdio.h"
#include "conio.h"
#include "time.h"
#include "stdlib.h"
#define LEFT 0x4b
#define RIGHT 0x4d
#define UP 0x48
#define DOWN 0x50
#define ESC 0x1b
struct get_time
{
    int year;
    int month;
    int date;
}days,days1;

int date_table[31]={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};
/*获取年月日*/
int get_date()
{
    struct tm *y;
    time_t s;
    time(&s);
    y=gmtime(&s);    
    days.date = y->tm_mday;
    days.month = y->tm_mon+1;
    days.year = y->tm_year+1900;
    days1=days;
    return 0;
}

/*判断闰年是否闰年*/
int get_leap(int _year)
{
    if( (_year%4==0) && (_year%100 != 0) || (_year%400 == 0))
        return 1;
    return 0;
}

/*求出该日期是该年的多少天*/
int get_days(int _year , int _mon , int _date)
{
    int day_table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},
        i=0,total=0;
    for(i=0;i<_mon;i++)
        total+=day_table[i];
    return total+_date+get_leap(_year);
}

/*获取星期*/
int get_week(int _year, int _month , int _date)   
{
    return ( (_year-1+(_year-1)/4-(_year-1)/100+
            (_year-1)/400+get_days(_year,_month,_date) )%7 );
}
/*获取该月份的天数*/
int month_of_day(int _y , int _d)
{
    switch(_d)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12: return 31;
    case 4:
    case 6:
    case 9:
    case 11:return 30;
    }
    return 28+get_leap(_y);
}    
//打印星期
void print_week()
{
    switch(get_week(days1.year, days1.month , days.date))
    {
    case 1:printf("星期一\n");break;
    case 2:printf("星期二\n");break;
    case 3:printf("星期三\n");break;
    case 4:printf("星期四\n");break;
    case 5:printf("星期五\n");break;
    case 6:printf("星期六\n");break;
    case 0:printf("星期日\n");break;
    }
}

/*打印日历*/  
void print_date(int year , int month, int date )
{    
    int k,i,j;    
    struct get_time *p;
    p=&days1;
    system("cls");    
    printf("\t\t%d年%d月%d日",year,month,p->date);
    print_week();
    printf("星期日  星期一  星期二  星期三  星期四  星期五  星期六\n");
    printf("-------------------------------------------------------\n");    
    k=month_of_day(year,month);
    j=get_week(year,month,1);    
    for(i=0;i<k;i++)
    {    
        while(j--> 0)
            printf("\t");
        printf("%4d\t",date_table[i]);
        if(get_week(year,month,date_table[i]) == 6)    
        {    
            printf("\n");
        }

    }
    printf("\n");
    printf("-------------------------------------------------------\n");
    printf("按方向键前进后退年月  退出按ESC\n");
}
    
int main()
{
    int key;
    int y=1;
    struct get_time *p,*p1;
    p=&days1;
    p1=&days;
    get_date();   //初始化
    print_date(p->year , p->month, p->date );
    do
    {        
        //key=bioskey(0);
        key=getch();
        switch(key)
        {
        case LEFT:         
                 p->month--;
                 p->month<1?p->month=12-p->month,p->year--:p->month;
                 print_date(p->year,p->month ,1);
                 printf("\n");
                 break;        
        case RIGHT:
                 p->month++;
                 p->month>12?p->month=p->month-12,p->year++:p->month;
                 print_date(p->year,p->month , 1);
                 printf("\n");
                 break;
        case UP:    
                 p->year++;
                 print_date(p->year,p->month , 1);
                 printf("\n");
                 break;        
        case DOWN:
                 p->year--;
                 print_date(p->year,p->month , 1);
                 printf("\n");
                 break;
        }
        
        
    }while(key != ESC);    
    system("cls");
    printf("\n\n\n\n\n\n\n\n\t\t\t\t谢谢使用");
    _sleep(1000);
    return 0;
}

有很多的不足..不知道怎么弄..前半个月以前写的

日历.rar (36.06 KB) 日历

搜索更多相关主题的帖子: int 日历 define get 
2008-05-10 13:17
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
得分:0 
由于VC下不能用bios.h
用的是getch();

欢迎长期在线的朋友加入此群:21135958
2008-05-10 13:17
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
得分:0 
以前发给你的是没有改过的

欢迎长期在线的朋友加入此群:21135958
2008-05-10 18:11
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
得分:0 
那是我们刚认识的时候..现在方法改了

欢迎长期在线的朋友加入此群:21135958
2008-05-10 18:50
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
得分:0 
汉....基本上算法是一样的..代码是自己写的.

欢迎长期在线的朋友加入此群:21135958
2008-05-10 20:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-213503-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.117797 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved