用基姆拉尔森计算公式做一个课表
Posted TrueDZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用基姆拉尔森计算公式做一个课表相关的知识,希望对你有一定的参考价值。
因为最近上网课,我大部分时间是用电脑上课,课程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; }
以上是关于用基姆拉尔森计算公式做一个课表的主要内容,如果未能解决你的问题,请参考以下文章