日历加备忘

#include "stdio.h"

typedef struct da    //定义备忘的结构
{
 char dat[20];
 char beiwang[100];
 struct da *next;

}TT;
void putoutclause(void);   //函数声明
void scanclause(void);
long int f(int year,int month);
long int g(int month);
long int n(int year,int month,int day);
int w(int year,int month,int day);
void a1(void);
void a2(void);
void cai(void);

long int f(int year,int month)   
{
 if(month < 3)
  return year - 1;
 else
  return year;
}

long int g(int month)
{
 if(month < 3)
  return month + 13;
 else
  return month + 1;
}

long int n(int year,int month,int day)
{
 return 1461L * f(year,month) / 4 + 153L * g(month) / 5 + day;
}

int w(int year,int month,int day)
{
 return(int)((n(year,month,day) % 7 - 621049l % 7) % 7);
}


int data[12][6][7];   //定义三维数组用来计算日期

int day_n[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},
     {31,29,31,30,31,30,31,31,30,31,30,31}}; //统计所有年份一个月的天数


void a1(void)
{
 int sw,leap,i,j,k,wd,day,year;
 char title[] = "SUN MON TUE WED THU FRI STA";
 printf("输入想要查询的年份:");
 scanf("%d",&year);   //输入年份

 sw = w(year,1,1);
 leap = year % 4 == 0 && year % 100 || year % 400 == 0;//判断是否为闰年
 for(i = 0;i < 12;i ++)
  for(j = 0;j < 6;j++)
   for(k = 0;k < 7; k ++)
    data[i][j][k] = 0;  //日期表置零

 for(i = 0;i < 12;i++)
  for(wd = 0,day = 1;day <= day_n[leap][i]; day++)
  {
   data[i][wd][sw] = day;
   sw = ++ sw % 7;    //一周的统计
   if(sw == 0)
    wd++;
  }
  printf("======================输入的年份是:%d======================/n",year);

  for(i = 0;i < 6;i++)
  {
   for(wd = 0,k = 0;k < 7;k ++)
    wd += data[i][5][k] + data[i + 6][5][k];

   wd = wd ? 6 : 5;

   printf("%2d  %s  %2d  %s/n",i + 1,title,i + 7,title);
  

  for(j = 0;j < wd;j++)
  {
   printf("  ");  //输出空白符
   for(k = 0;k < 7;k++)  //左栏为i+1月
    if(data[i][j][k])
     printf("%4d",data[i][j][k]);
    else
     printf("   ");
    printf("      ");
   for(k = 0;k < 7;k++)  //右栏为i+7月
    if(data[i + 6][j][k])
     printf("%4d",data[i + 6][j][k]);
    else
     printf("   ");  //输出空白字符
    printf("/n");
  }
  printf("/n=========================================================/n");
  }
  cai();
}


void a2(void)   //子菜单
{
 int a;
 printf("*************************************************/n");
 printf("*-------------------备忘菜单--------------------*/n");
 printf("*************************************************/n");
 printf("*         1. 查询备忘                           */n");
 printf("*         2. 添加备忘                           */n");
 printf("*         3. 退出系统                           */n");
 printf("*************************************************/n");
 printf("请输入选项号(1-3):[ ]/b/b");
 scanf("%d",&a);
 switch(a)
 {
 case 1:     putoutclause();  break;
 case 2:  scanclause();   break;
 case 3:  exit(0);    break;
 default: exit(0); 
 }

}


void cai(void)  //主菜单
{
 int a;
 printf("*************************************************/n");
 printf("*-------------------系统主菜单------------------*/n");
 printf("*************************************************/n");
 printf("*         1. 查询日历                           */n");
 printf("*         2. 备忘管理                           */n");
 printf("*         3. 退出系统                           */n");
 printf("*************************************************/n");
 printf("请输入选项号(1-3):[ ]/b/b");
 scanf("%d",&a);
 switch(a)
 {
 case 1:     a1();  break;
 case 2:  a2();   break;
 case 3:  exit(100);    break;
 default: cai(); 
 }

}
void scanclause(void)   //录入备忘
{
 FILE *p = NULL;     //定义文件指针
 TT *temp = (TT*)malloc(sizeof(TT));  //用结构指针申请动态内存
 if((p = fopen("data.txt","a")) == NULL) //判断文件打开情况
  printf("文件打开错误或不存在!/n");

 printf("输入日期:(格式:xxxx-yy-dd)");
 scanf("%s",temp ->dat);  //输入日期
 printf("/n输入备忘(无空格输入):");
 scanf("%s",temp ->beiwang); //输入备忘
 fprintf(p,"%c%s%c%s",' ',temp ->dat,' ',temp ->beiwang); //将其存入文件
 free(temp);   //释放内存
 fclose(p);   //关闭文件
 
 a2();

 

}
void putoutclause(void)    //输出备忘
{
 char a = ' ';
 FILE *p = NULL;   //申请文件指针
 
 TT *temp = (TT*)malloc(sizeof(TT)); //申请动态内存
 TT *temp1 = temp;
 
 if((p = fopen("data.txt","r+")) == NULL) //判断文件打开情况
  printf("文件打开错误或不存在!/n");
 while(!feof(p))  //将文件中的数据读到链表中
 {
  
  fscanf(p,"%s%s",temp1->dat,temp1 ->beiwang);

  temp1->next = (TT*)malloc(sizeof(TT));
  temp1 = temp1 ->next;
  temp1 ->next = NULL;
 }

 while(temp ->next!= NULL)  //通过链表输出备忘
 {
   printf("日期:%s%c备忘:%s/n",temp ->dat,' ',temp ->beiwang);
   temp = temp ->next;
 }
 fclose(p); //关闭文件

 a2();
}

void main()
{
 cai();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值