c扫雷课程设计报告和c万年历课程设计_第1页
c扫雷课程设计报告和c万年历课程设计_第2页
c扫雷课程设计报告和c万年历课程设计_第3页
c扫雷课程设计报告和c万年历课程设计_第4页
c扫雷课程设计报告和c万年历课程设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

青岛理工大学C++面向对象课程设计报告院(系):专业:学生姓名:学号:班级:______题目:起迄日期:设计地点:指导教师:完成日期:20年7月5日目录一、题目概述 1二、设计内容 2三、调试分析 5四、设计总结 12五、参考文献 13六、附录 13一、题目概述(一):选课题目:题目:游戏—《扫雷》设计内容:扫雷程序将要实现类似windows系统自带的扫雷程序功能即可以显示附近雷区雷的个数,同时在游戏成功和失败的时候能跳出新的对话框,并配有相对应的表情,还可以记录玩家玩耍的时间和剩余雷区雷的个数等基本功能。(二):选做次项目的意义:意义:随着科学技术突飞猛进,知识经济初见端倪,特别是信息技术和网络技术的迅速发展和广泛应用,对社会的政治、经济、军事、科技和文化等领域产生越来越深刻的影响,也正在改变这人们的工作、生活、学习和文化交流方式。尤其在游戏方面更是影响甚大,各种网络游戏随处可见。尤其可以借助C++实现很多简单游戏的制作,其中扫雷就是一款适合单机玩耍的游戏。扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。不久之后,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆·安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。1981年,微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师在Windows3.1系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。这款游戏的玩法是在一个9*9(初级),16*16(中级),16*30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。本课程设计实现类似于Windows操作系统自带的扫雷游戏。在课程设计中,系统开发平台为WindowsXP/windows7,程序设计语言采用VisualC++,程序运行平台为WindowsXP/windows7。在程序设计中,把整个雷区看成一个二维数组,把雷方块定义为具有所在雷区二维数组的行和列、当前状态、方块属性、历史状态的结构体。整个游戏程序包括了布雷、扫雷过程和结果三个阶段,在处理鼠标响应事件中伴随着GDI绘图。程序通过调试运行,实现了设计目标,能够同时满足扫雷游戏初学者和高手的需要。(三):程序所实现的功能:本系统是使用VisualC++在C++的基础上创建的,并用MFC实现程序可视化,程序功能不是太多,但基本功能都可以实现,主要功能包括:(1)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。(2)用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。(3)如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。(4)扫雷胜利后,显示游戏胜利,失败后显示再来一局。(5)用户可以改变游戏界面的颜色外观。(6)游戏中用户可以通过菜单重新开始新游戏。(四):本程序所使用的开发运行环境主要包括:开发工具:VC++6.0运行环境:Windowswin7、windowsxp(五):本程序设计要达到的最终目的:将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握面向对象程序设计的方法。(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。二、设计内容(一):系统总体流程图:开始开始依照使用者初始设定等待按键左键键右键第一次按下方块显示方块布置地雷启动计时器按下方块是否为地雷显示分数是否再玩玩结束延按下方块周围展开非地雷方块计时器时间到否否是是否否是是否图1.系统整体流程图(二):系统结构图:扫雷扫雷窗体类模块背景音乐英雄榜级别选择鼠标开始窗体加载鼠标函数递归函数重开函数画图函数音乐函数图2.系统结构图(三):布雷函数流程图开始开始生成随机的雷方块的坐标(x,y)判断(x,y)区域是否已经布下雷在(x,y)区域布雷,修改状态数据据。。。。。。。。。。。。。。。。。。。。。。。。。。。。。判断是否布下所有雷结束否是是否图3.布雷函数流程图三、调试分析(一):游戏设计过程中所需窗体设计图4游戏选择界面设计图5帮助界面设计图6自定义雷区界面设计图7英雄榜界面设计(二):游戏过程中所出现的重要界面:图8.低级水平时游戏界面图9.中级水平时游戏界面图10.高级水平时游戏界面图11.破纪录时界面图12.游戏失败时界面(二):关键代码及功能显示:(1)游戏自定义雷区:voidCDlgCustom::OnOK()//设置长和宽{ UpdateData(); if(m_uWidth<9)m_uWidth=9; if(m_uWidth>30)m_uWidth=30; if(m_uHeight<9)m_uHeight=9; if(m_uHeight>24)m_uHeight=24; if(m_uNumber<10)m_uNumber=10; if(m_uNumber>m_uWidth*m_uHeight)m_uNumber=m_uWidth*m_uHeight-1; CMineWnd*pMine=(CMineWnd*)AfxGetMainWnd(); pMine->SetCustom(m_uWidth,m_uHeight,m_uNumber); CDialog::OnOK();}voidCDlgCustom::InitData(UINTxNum,UINTyNum,UINTmNum){ m_uWidth=xNum; m_uHeight=yNum; m_uNumber=mNum;}(2)点中雷区时:BOOLCMineWnd::IsInMineArea(UINTrow,UINTcol){ return(row>=0&&row<m_uYNum&&col>=0&&col<m_uXNum);}////失败处理//voidCMineWnd::Dead(UINTrow,UINTcol){ //按钮所在的区域 CRectrcBtn(m_uBtnRect[1],15,m_uBtnRect[2],39); //雷区所在的区域 CRectrcMineArea(MINE_AREA_LEFT,MINE_AREA_TOP, MINE_AREA_LEFT+m_uXNum*MINE_WIDTH, MINE_AREA_TOP+m_uYNum*MINE_HEIGHT); UINTi,j; if(m_pMines[row][col].uAttrib==ATTRIB_MINE) {//失败--点中雷 for(i=0;i<m_uYNum;i++) { for(j=0;j<m_uXNum;j++) { m_pMines[row][col].uState=STATE_BLAST; m_pMines[row][col].uOldState=STATE_BLAST; if(m_pMines[i][j].uAttrib==ATTRIB_MINE &&m_pMines[i][j].uState!=STATE_FLAG) { m_pMines[i][j].uState=STATE_MINE; m_pMines[i][j].uOldState=STATE_MINE; } } } } else{//失败--错误雷 for(i=0;i<m_uYNum;i++) { for(j=0;j<m_uXNum;j++) { m_pMines[row][col].uState=STATE_ERROR; m_pMines[row][col].uOldState=STATE_ERROR; if(m_pMines[i][j].uAttrib==ATTRIB_MINE &&m_pMines[i][j].uState!=STATE_FLAG) { m_pMines[i][j].uState=STATE_MINE; m_pMines[i][j].uOldState=STATE_MINE; } } } } //失败处理 InvalidateRect(rcMineArea); m_uBtnState=BUTTON_DEAD; InvalidateRect(rcBtn); m_uGameState=GS_DEAD; if(m_uTimer!=0) {//将定时器去激活 KillTimer(ID_TIMER_EVENT); m_uTimer=0; } if(m_bSoundful) {//失败声音播放 sndPlaySound((LPCTSTR)LockResource(m_pSndDead),SND_MEMORY|SND_ASYNC|SND_NODEFAULT); }}(3)游戏胜利时声音代码:BOOLCMineWnd::Victory(){ UINTi,j; CRectrcBtn(m_uBtnRect[1],15,m_uBtnRect[2],39); //检测是否胜利 for(i=0;i<m_uYNum;i++) { for(j=0;j<m_uXNum;j++) { if(m_pMines[i][j].uState==STATE_NORMAL)returnFALSE; if(m_pMines[i][j].uState==STATE_DICEY)returnFALSE; } } //胜利则作胜利处理 m_uBtnState=BUTTON_VICTORY; m_uGameState=GS_VICTORY; Invalidate(); if(m_uTimer!=0) {//将定时器去激活 KillTimer(ID_TIMER_EVENT); m_uTimer=0; } //胜利声音 if(m_bSoundful) { sndPlaySound((LPCTSTR)LockResource(m_pSndVictory), SND_MEMORY|SND_ASYNC|SND_NODEFAULT); }(4)绘制笑脸和数字图形代码: voidCMineWnd::DrawButton(CPaintDC&dc){ CDCcdc; cdc.CreateCompatibleDC(&dc); cdc.SelectObject(m_bmpButton); dc.StretchBlt(m_uBtnRect[0],16,24,24,&cdc,0,24*m_uBtnState,24,24,SRCCOPY); dc.Draw3dRect(m_uBtnRect[1],15,26,26,m_clrDark,m_clrDark); }voidCMineWnd::DrawNumber(CPaintDC&dc){ CDCdcMemory; dcMemory.CreateCompatibleDC(&dc); dcMemory.SelectObject(m_bmpNumber); dc.Draw3dRect(16,15,41,25,m_clrDark,COLOR_WHITE); dc.Draw3dRect(m_uNumRect[0],15,41,25,m_clrDark,COLOR_WHITE); intnum; //drawremainingminenumbers num=(m_nLeaveNum<0)?11:m_nLeaveNum/100; dc.StretchBlt(17,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); num=(m_nLeaveNum<0)?-(m_nLeaveNum-num*100)/10:(m_nLeaveNum-num*100)/10; dc.StretchBlt(30,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); num=(m_nLeaveNum<0)?-m_nLeaveNum%10:m_nLeaveNum%10; dc.StretchBlt(43,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); //drawtakeseconds num=m_uSpendTime/100; dc.StretchBlt(m_uNumRect[0],16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); num=(m_uSpendTime-num*100)/10; dc.StretchBlt(m_uNumRect[0]+13,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY); num=m_uSpendTime%10; dc.StretchBlt(m_uNumRect[0]+26,16,13,23,&dcMemory,0,276-23*(num+1),13,23,SRCCOPY);}(5):获取某个小方块区域相邻8个区域的雷个数:}UINTCMineWnd::GetAroundNum(UINTrow,UINTcol){ UINTi,j; UINTaround=0; UINTminRow=(row==0)?0:row-1; UINTmaxRow=row+2; UINTminCol=(col==0)?0:col-1; UINTmaxCol=col+2; for(i=minRow;i<maxRow;i++) { for(j=minCol;j<maxCol;j++) { if(!IsInMineArea(i,j))continue; if(m_pMines[i][j].uAttrib==ATTRIB_MINE)around++; } } returnaround;}四、设计总结短学期的课程设计是一次非常珍贵的机会,这是一次可以让我们所学的理论与实际相结合的机会。我们选择了游戏扫雷这一题目。通过这次比较完整的一个程序的设计,我走出了纯理论的学习,从一种全新的角度去学习。并且在小团队实现的MFC过程中,除去知识的大量更新,我学到了很多东西。其实个人而言,我体会较深的一点是团队互相帮助学习的过程,自己看书学习的经验,以及从网上以及其他各种途径获得信息和知识的经验。理论与实际相结合的设计,锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,我的各方面经验都得到了极大的丰富。经过一个假期,没有近距离接触C++,因而一开学对进行MFC课程设计这一还算陌生的领域感到有些吃力。在同组的同学有着很强的C++实力,在进行编程的过程中,我向她学到了MFC的很多知识,交流中也总结出比书本上更精髓生动的语言。在自己琢磨MFC各种陌生知识的时候,队友的耐心与任性,对于知识的渴求,对于工作的专注,极大程度上鼓舞了我。我们在交流中,迸发出了很多设计灵感,互相建议改进的过程中,我们分别从各个方面共同改进着,这个已经不能仅仅称作课程设计的作品。从知识获得方面来说,各种已经学习到的C++知识以及各种从网上搜索来的案例,我们都是随着设计的不断深入而不断熟悉的。和老师以及同学的沟通交流更使我对程序整体的规划与设计有了新的认识,也对自己提出了新的要求。提高是有限的但提高也是全面的。正是这一次设计让我积累了许多实际经验。也必然会让我在未来的工作学习中表现出更高的耐力、理解力、实践力。顺利如期的完成本次课程设计给了我很大的信心,但是也为我指出很多不足的地方。学习其实就是一个不断完善的过程,正视自己的不足之处。在以后的工作和学习中不断的弥补这些不足之处,在以后的生活中也要保持同样的态度,不断地完善自己。为期二周不到的MFC课程设计就要这样画上一个句号了。从这不长不短的二周中,我获得了知识,学到了研究的坚持与韧性,这四周不仅仅是交出了一份作业,还对自己有了新的认识,实在是难得的机遇与经历。五、参考文献[1]《C++面向对象程序设计》.任凤华、李兰.西安电子科技大学出版社[2]《C++面向对象程序设计实验指导及习题解析》.任凤华、李兰。西安电子科技大学出版社[3].《C++程序设计实践教程(第2版)》.吴乃陵、李海文.高等教育出版社[4]《VisualC++课程设计与系统开发实例(第4版)》.伍俊良.清华大学出版社[5]《深入浅出MFC(附光盘)》.侯俊杰.华中科技大学出版社六附录 UINT m_uXNum; //X方向小方块个数 UINT m_uYNum; //Y方向小方块个数 UINT m_uMineNum; //总的雷个数 int m_nLeaveNum; //剩余的雷个数 UINT m_uSpendTime; //游戏开始击到目前所花费的时间 UINT m_uGameState; //游戏状态 UINT m_uTimer; //定时器标识 UINT m_uNewState; //当前选中的小方块的状态 UINT m_uLevel; //当前游戏等级 UINT m_uPrimary; //初级记录 UINT m_uSecond; //中级记录 UINT m_uAdvance; //高级记录 CString m_szPrimary; //初级记录保持者 CString m_szSecond; //中级记录保持者 CString m_szAdvance; //高级记录保持者 BOOL m_bLRBtnDown; //是否为左右键同时按下 BOOL m_bClickBtn; //左键按下的时候鼠标是否位于按钮区域内 BOOL m_bMarkful; //是否能显示标记 BOOL m_bColorful; //是否彩色显示 BOOL m_bSoundful; //是否有声音 CMenu* m_pSubMenu; //子菜单 CBitmap m_bmpMine; //雷区背景图像 CBitmap m_bmpNumber; //数字背景图像 CBitmap m_bmpButton; //笑脸按钮背景图像 CBrush m_brsBG; //背景画刷对象 COLORREF m_clrDark; //各按钮的深色调 RECT m_rcClient; //客户区域 UINT m_uBtnRect[3]; //按钮框区域坐标数组 UINT m_uBtnState; //按钮状态 UINT m_uNumRect[3]; //数字框区域坐标数组(包括时间和雷个数) UINT m_uShellRcX[2]; //内框以及边界的坐标X方向 UINT m_uShellRcY[2]; //内框以及边界的坐标Y方向 MINEWND m_pMines[100][100]; //表示雷区内的所有小方块的二维数组 MINEWND* m_pNewMine; //当前选中的小方块 MINEWND* m_pOldMine; //上次选中的小方块 void* m_pSndDead; //失败提示音 void* m_pSndVictory; //胜利提示音 void* m_pSndClock; //时钟提示音《高级语言程序设计》课程设计报告万年历程序设计信息技术工程学院软件1102张锦琪2012/6/15

课程设计名称:C++万年历设计使用工具软件:MicrosoftvisualC++课程设计内容简介1、以开关语句进行执行功能的选择,这些功能分别是:判断闰年;判断某天是星期几;判断某年的隶属生肖;输出某年的日历;输出某月的日期;退出系统;2、建立类wnl,定义类的成员函数; voidisleapyear(); //判断闰年,用于输出判断结果,以流的形式boolisleap(intyear); //判断闰年,返回判断结果,用于计算天数intgetdays(intyear,intmonth,intday); //获取据第一天天数voidweekdays(intyear,intmonth,intday);//获取星期几voidprintyear(intyear); //输出年的日历voidprintyearmonth(intyear,intmonth);//输出某年某月的日历voidanimal(intyear); //判断某年的生肖intgetyear(){returnYear;} //返回私有成员的值 intgetmonth(){returnMonth;} intgetday(){returnDay;}3、定义私有成员: intYear,Month,Day;4、定义类的对象:_wnl;5、为类的成员函数填写代码,满足功能实现;6、运行环境:控制台应用程序的源程序;得意之处:可以满足多功能实现,可以循环执行功能;可以选择每行输出的月份数;有欢迎界面;客户输入错误会有提示;使用了C语言的流的形式,判断闰年,提高执行速度;使用I/O流控制头文件iomanip.h控制月份日历的输出,更加整齐;创意的技术实现主函数流程判断某天是周几判断某天是周几判断闰年获取天数输出年份课程设计中目前存在的问题:无法在欢迎页面插入字符画;设计实践过程中的自我感受这是我第一次编写如此长的代码,从网上如同大海捞针似的寻找编写方法,看铺天盖地的长代码,还有的程序是错的。输入的时候,没有小工具。在看着自己熬通宵打出的代码,一大串的错误,真的有些泄气。改对了执行输出结果还是错的,只好重新思考算法。不过通过这次编程我真的学会了好多,比如其他的头文件的功能;setfil(‘’)设置填充字符;setw()定义字段长度……也让我真正体会到了编程的作用,爱上了编程。参考文献:[1]吕凤翥,《C++语言程序设计》,清华大学出版社。实验代码://万年历#include<iostream.h>#include<stdio.h>#include<iomanip.h>intdayofmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//整形数组用于储存每月的天数charmonthname[13][5]={"","Jan","Feb","Mar","Apr","May","June","July","Aug","Seb","Oct","Nov","Dec"};//字符型数组用于储存月份名第一个数字用于表示字符串数(相当于行)第二个用于表示字符串长度(相当于列)classwnl{public: voidisleapyear(intyear);//判断闰年,用于输出判断结果,以流的形式 boolisleap(intyear);//判断闰年,返回判断结果,用于计算天数 intgetdays(intyear,intmonth,intday); //获取据第一天天数 voidweekdays(intyear,intmonth,intday); //获取星期几 voidprintyear(intyear); //输出年的日历 voidprintyearmonth(intyear,intmonth); //输出某年某月的日历 voidanimal(intyear); //判断某年的生肖 intgetyear(){returnYear;}//返回私有成员的值 intgetmonth(){returnMonth;} intgetday(){returnDay;}private: intYear,Month,Day;}_wnl;voidmain(){ intchoice,year,month,day; cout<<"~~欢迎来到万年历查询系统~~"<<endl<<endl; cout<<"设计人:"<<endl; cout<<"天津职业技术师范大学\n\t\t\t设计人:张锦琪\n\n"; loop: cout<<"╱请按序号输入您要做的工作:╲"<<endl; cout<<"▏判断闰年请按1;▕"<<endl; cout<<"▏判断某天是星期几请按2;▕"<<endl; cout<<"▏判断某年的隶属生肖请按3;▕"<<endl; cout<<"▏输出某年的日历请按4;▕"<<endl; cout<<"▏输出某月的日期请按5;▕"<<endl; cout<<"╲如果您要退出系统请按0;╱"<<endl; cin>>choice; switch(choice) { case0:return; case1: cout<<"输入一个年份格式如:xxxx"; cin>>year; _wnl.isleapyear(year);break; case2: { cout<<"请输入您要查询的天数格式如xxxxxxxx"; cin>>year>>month>>day; _wnl.weekdays(year,month,day); }break; case3: { cout<<"请输入您要查询的年份格式如xxxx:"; cin>>year; _wnl.animal(year); }break; case4: { cout<<"请输入你要输出的年份xxxx:"; cin>>year; _wnl.printyear(year); }break; case5: { cout<<"请输入您要输出的年月,形如xxxxxx:"; cin>>year>>month; _wnl.printyearmonth(year,month); }break; default:cout<<"输入错误"<<endl; } cout<<"继续查询请输1"<<endl<<"退出查询请输入字符"<<endl; intx; cin>>x; if(x==1) gotoloop;}voidwnl::isleapyear(intyear){ if(year>=1000&&year<=9999) printf("%s\n",year%(year%100?4:400)?"no":"yes");//以C语言流的形式判断会更快一些,节省内存 else printf("%s\n","没有按格式输入"); }boolwnl::isleap(intyear){ if(year%400==0||(year%100!=0&&year%4==0)) return1; else return0; }voidwnl::weekdays(intyear,intmonth,intday){ if(year>=1000&&year<=9999) { if(month<=12&&month>=1) { intmax=dayofmonth[month]; if(day>0&&day<max) { ints=getdays(year,month,day)%7; switch(s) { case0:cout<<"Sunday"<<endl;break; case1:cout<<"Monday"<<endl;break; case2:cout<<"Tuesday"<<endl;break; case3:cout<<"Wednesday"<<endl;break; case4:cout<<"Thursday"<<endl;break; case5:cout<<"Friday"<<endl;break; case6:cout<<"Saturday"<<endl; } } } } else cout<<"没有按格式输入"<<endl;}intwnl::getdays(intyear,intmonth,intday){ inti,sum=0; for(i=1;i<year;i++) { if(isleap(i))sum+=366; elsesum+=365; } if(isleap(year))dayofmonth[2]=29; for(i=1;i<month;i++)sum+=dayofmonth[i]; sum+=day; returnsum;}voidwnl::animal(intyear){ if(year>=1000&&year<=9999) { intn=year%12; switch(n) { case0:cout<<"该年是猴年"<<endl;break; case1:cout<<"该年是鸡年"<<endl;break; case2:cout<<"该年是狗年"<<endl;break; case3:cout<<"该年是猪年"<<endl;break; case4:cout<<"该年是鼠年"<<endl;break; case5:cout<<"该年是牛年"<<endl;break; case6:cout<<"该年是虎年"<<endl;break; case7:cout<<"该年是兔年"<<endl;break; case8:cout<<"该年是龙年"<<endl;break; case9:cout<<"该年是蛇年"<<endl;break; case10:cout<<"该年是马年"<<endl;break; case11:cout<<"该年是羊年"<<endl;break; } } else cout<<"没有按格式输入"<<endl;}voidwnl::printyear(intyear){ if(year>=1000&&year<=9999) { cout<<"输入一行输出的月份数:"; intchoice; cin>>choice; ints; inta[3],b[3];//b数组用来储存每月的天数a数组用来临时储存那一月输出到的日期 cout<<"year:"<<year<<endl; inti=1; for(i=1;i<=12/choice;i++)//计算纵向输出几个月 { for(inth=1;h<=choice;h++)//该循环用于输出横向月份名 { intm=choice*(i-1)+h;//计算月份 cout<<""<<monthname[m]<<""; } cout<<endl; for(h=1;h<=choice;h++) cout<<""; cout<<endl; for(intj=0;j<choice;j++) { cout<<"Su"<<"Mo"<<"Tu"<<"We"<<"Th"<<"Fr"<<"Sa"<<""; } cout<<endl; for(j=0;j<choice;j++)//这个循环是为了输出第一行,第一行都是单数,所以提出来输 { intmonth; month=choice*(i-1)+j+1;//计算月份 s=getdays(year,month,1); s=s%7;//获取每月第一天 for(intm=0;m<s;m++) cout<<"";//输出月前的空 if(isleap(year))dayofmonth[2]=29; b[j]=dayofmonth[month];//月份天数b数组储存一个月的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论