zoukankan      html  css  js  c++  java
  • 用基姆拉尔森计算公式做一个课表

    因为最近上网课,我大部分时间是用电脑上课,课程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;
    }
  • 相关阅读:
    第四次实验报告
    第三次实验报告
    第五章 循环结构课后反思
    第二次实验报告
    第一次实验报告
    第一次作业
    第九章实验报告(构造数据类型)
    第八章实验报告(指针实验)
    第七章实验报告(数组实验)
    第六章 函数和宏定义实验(2)
  • 原文地址:https://www.cnblogs.com/Truedragon/p/12389240.html
Copyright © 2011-2022 走看看