用基姆拉尔森计算公式做一个课表

因为最近上网课,我大部分时间是用电脑上课,课程APP得在手机上打开,我觉得麻烦,就写了一个可以看当天有什么课的程序。

既然要写课表,我们就得创建一个7天循环,并每7天更改一次单双周的判断。这里我用的是基姆拉尔森公式(你不必纠结他的原理,只有能合理的使用就行),用它来获取年月日。

然后我设定了开学的那一天为起始天,每过7天改变单双周课表,这样就完成了啦!。

 大概可以实现的功能就是这样,当然也可以用QT再去写一些界面来美化程序,或者用easyX可以,但是代码就是这些了。

写完发现这个根本没什么卵用。。。。。。又丑又臭,也是我闲着无聊。

最后,修改图标,注入灵魂,就可以了

#include<iostream>
#include<time.h>
#include<fstream>
#include<string>
#include<windows.h> 
using namespace std;
int year,month,day,weeks,yday,result;
int CaculateWeekDay(int y, int m, int d)
{
    if (m == 1 || m == 2) {
        m += 12;
        y--;
    }
    //基姆拉尔森计算公式:
    int iWeek = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
    switch (iWeek)
    {
    case 0: return 0;break;
    case 1: return 1;break;
    case 2: return 2;break;
    case 3: return 3;break;
    case 4: return 4;break;
    case 5: return 5;break;
    case 6: return 6;break;
    }
}

void search(int weeks,int danshuang)
{
    HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄
    SetConsoleTextAttribute(hout, 64 + 15);
    ifstream fin;
    char buf[100]; 
    int chose;
    cout<<"今天是北京时间:"<<year<<""<<month<<""<<day<<""<<"星期"<<weeks+1<<endl;
      if(danshuang==1)cout<<"本周是单周"<<endl;
      else cout<<"本周是双周"<<endl;
      while(chose!=-1)
{ 
      SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
    if(weeks==0) fin.open("monday.txt");
    if(weeks==1) fin.open("tuesday.txt");
    if(weeks==2) fin.open("wednesday.txt");
    if(weeks==3) fin.open("thurday.txt");
    if(weeks==4) fin.open("friday.txt");
    if(weeks==5) cout<<"周末啦,好好休息啦,怎么想上课?"<<endl;
    if(weeks==6) cout<<"这么想上课?明天周一有你上的"<<endl;
     string s;
    while(getline(fin,s)) //逐行读取,直到结束
    {
        if(danshuang==0)
        {
        
        for(int i=0;i<s.length();i++)
        {
            if(s[0]=='2'||s[0]=='3')
            {cout<<s[i+1];    
            }
        }
        if(s[0]=='2')
        cout<<endl<<endl;
        if(s[0]=='3')
        cout<<endl;
    }
    else{
        for(int i=0;i<s.length();i++)
        {
            cout<<s[i+1];
        }
        cout<<endl;
    }
    }
    
    fin.close();
    cout<<"输入:"<<endl; 
    cout<<"1.查看前一天课表"<<" "<<"2.查看后一天课表"<<" "<<"<<3.退出"<<endl;
    cin>> chose;
    if(chose==1) {if(weeks>0) weeks--;
                    if(weeks==0) {(weeks+7)-1;danshuang=(danshuang-1)%2;}
    }
    if(chose==2) {
        if(weeks<6) weeks++;
        if(weeks==6) {weeks=(weeks-7)+1; danshuang=(danshuang+1)%2;}
    }
    if(chose==3) chose=-1;
}

}

int main()
{
      time_t tt = time(NULL);//这句返回的只是一个时间cuo
      tm* t= localtime(&tt);
      yday=t->tm_yday+1;
      year=t->tm_year + 1900;
      month=t->tm_mon + 1;
        day=t->tm_mday;
      weeks=CaculateWeekDay(year, month, day);//获取今天星期几
      //判断单双周
      int begining=48;//开学第一天是本年的多少天
      result=yday-begining;//得到差值
      if(result==0){result=(yday+1)-begining;}
      result/=7;
      if(result%2!=0){result=0;}//
      else {result=1;} //单周 
          if(weeks==0) search(0,result);
          if(weeks==1) search(1,result);
          if(weeks==2) search(2,result);
          if(weeks==3) search(3,result);
          if(weeks==4) search(4,result);
          if(weeks==5) search(5,result);
          if(weeks==6) search(6,result);
      system("pause");
      return 0;
}
原文地址:https://www.cnblogs.com/Truedragon/p/12389240.html