C++ 万年历
来源:互联网 发布:知净利润求利润总额 编辑:程序博客网 时间:2024/06/06 18:24
这是一个课程作业,也没有什么算法的内容,但是对编程风格的要求比较高,经过2个小时,写了200行左右的代码,可以大致实现控制台下的万年历功能。不过由于没有图形界面,看上去还是比较挫……
声明:由于课程作业的截止时间尚未到,所以严禁抄袭,否则后果自负……
/*author: lwfcgzstudentID: ********environment: Dev-C++ 4.9.2time: 2012-10-1*/#include<iostream>#include<string>#include<iomanip> using namespace std;//存储表示月份的字符串const string months[13]={"", "January","February","March","April","May","June","July","August","September","October","November","December"};//存储表示每个月天数的整数const int daysNumber[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//存储表示一周各天的字符串const string dayString[7]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};//Month类用来为Date类提供基本服务class Month{public://返回月份对应的英语单词string getMonth(int monthNumber);//返回月份所对应的天数int getDaysNumber(int yearNumber, int monthNumber);//返回从公元0年到这一个月开始的总天数int getTotalDays(int yearNumber,int monthNumber);//判断一年是否为闰年bool isLeapYear(int yearNumber);};//日期类用来获取输入、显示日历class Date{private://年份int year;//月份int month;//天数计数器int daysCounter;//month月份的天数int daysNumberOfMonth;//Month类的实例Month monthInstance;//判断输入是否合法bool isValidInput();public://获取输入void getInput();//显示日历void showCalendar();};//主函数的执行入口int main(){Date date;while(1){//获取输入date.getInput();//显示日历date.showCalendar();system("pause");system("cls");}return 0;}//返回月份对应的英语单词string Month::getMonth(int monthNumber){if(monthNumber<0 ||monthNumber>12)return "out of range!";return months[monthNumber];}//返回月份所对应的天数int Month::getDaysNumber(int yearNumber, int monthNumber){if(monthNumber<0 ||monthNumber>12)return -1;//需要对2月进行单独讨论if(monthNumber!=2)return daysNumber[monthNumber];//闰年则返回29天if(isLeapYear(yearNumber)==true)return 29;//平年则返回28天else return 28;}//判断一年是否为闰年bool Month::isLeapYear(int yearNumber){if(yearNumber%4!=0)return false;if(yearNumber%100==0 && yearNumber%400!=0)return false;return true;}//返回从公元0年到这一个月开始的总天数int Month::getTotalDays(int yearNumber, int monthNumber){int counter=0;//从公元元年开始加for(int i=0;i<yearNumber;i++){if(isLeapYear(i)==true)counter+=366;else counter+=365;}//对当前年份进行计算for(int i=1;i<monthNumber;i++){counter+=getDaysNumber(yearNumber,i);}return counter;}//获取输入void Date::getInput(){while(1){cout<<"请输入年月(格式为“年 月”): ";cin>>year>>month;//检验有效则继续进行if(isValidInput()==true)break;//输入为无效年月则重新输入else{cout<<"输入数据无效!"<<endl;system("pause");system("cls");continue;}}}//显示日历void Date::showCalendar(){//无效输入不会进行月份显示if(isValidInput() == false)return;//获取从公元元年开始的总天数daysCounter=monthInstance.getTotalDays(year,month);daysCounter+=5;daysCounter%=7;//获取该月的总天数daysNumberOfMonth=monthInstance.getDaysNumber(year,month);//初始化计数器,保证每七个显示结果后面跟一个换行int tmpCounter=0;cout<<monthInstance.getMonth(month)<<endl;//输出表示星期几的字符串for(int i=0;i<7;i++){cout<<setw(4)<<dayString[i];}cout<<endl;//先填充空白的区域for(int i=0;i<daysCounter;i++){cout<<setw(4)<<" ";tmpCounter++;}//显示日历for(int i=0;i<daysNumberOfMonth;i++){if(tmpCounter%7==0 && tmpCounter!=0)cout<<endl;cout<<setw(4)<<i+1;tmpCounter++;}cout<<endl;return;}//判断输入是否有效bool Date::isValidInput(){if((this->year)<0 || (this->month)<=0 ||(this->month)>12)return false;return true;}
有不对的地方还请大家多多指正。。。。
- c万年历
- [c++]万年历
- 【C】万年历
- 【c++】万年历
- C语言万年历.c
- c/c++ 万年历(公历)
- c语言部分万年历
- C语言实现:万年历
- c语言万年历
- c语言 万年历!!
- C语言万年历
- 万年历C语言代码
- C语言之万年历
- 万年历C语言代码
- 万年历 C语言
- C语言万年历
- C语言打印万年历
- C语言实现万年历
- 《影响力》读书笔记,第一章 影响力的武器
- 用if-else输出"hello world"
- DEDE织梦标签dede:arclist 详解
- apache无限二级域名配置方案
- 操作系统
- C++ 万年历
- 《影响力》读书笔记,第二章 互惠
- HPL-AMD Configuration
- git使用详细介绍
- MSC VLR HLR 简介
- 技术成长路线
- 系统抖动
- Dolphin.Integration.Smash.v5.19.1-Lz0
- Address already in use JVM_Bind8080类似问题解决方法