C语言课程设计万年历 完整版
C_课程设计说明书_万年历
数学与计算机学院课程设计说明书课程名称: 计算机科学与技术程序设计语言-课程设计课程代码: 8404091题目: 万年历系统年级/专业/班: 09级软件工程1班学生姓名: 易晓学号: 31200908061117 开始时间:2010 年12月24日完成时间:2011 年01月 06 日课程设计成绩:指导教师签名:年月日目录1 引言 (1)1.1问题的提出 (1)1.2国内外研究的现状 (1)1.3任务与分析 (1)2 程序的主要功能 (3)2.1显示功能 (3)2.2自动翻页功能 (3)2.3查询功能 (3)2.4帮助功能 (3)2.5退出功能 (3)3 程序运行平台 (4)4 总体设计图4.1流程图 (5)5 程序代码明细 (6)6 模块分析 (11)6.1系统日期模块 (11)6.2打印模块 (11)6.3闰年判断模块 (12)6.4查询模块 (12)6.5菜单模块 VOID MAIN M ENU(INT YEAR,INT MONTH,INT DAY)//主菜单 (12)6.6关键代码 (13)7 系统测试首先进入VC++6.0,打开工程PERSON.DSW,然后进入源程序,接着选择BUILD 下的EXECUTE PERSON.EXE即可,也可以不打开工程,直接双击PERSON文件夹下的DEBUG 或RELEASE子文件夹下的PERSON.EXE文件即可运行程序。
7.1 进入程序 (14)8 结论 (17)1 引言1.1 问题的提出万年历是我国古代传说中最古老的一部太阳历。
为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。
而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体的日期的年历,方便有需要的人查询使用。
怎样在电脑上显示万年历以便查询,是一个很普遍的需求。
附:万年历算星期几:只要随便说出公元几几年几月几日就可以马上算出是星期几。
只要计算出日的代码,月份代码,年份代码。
C语言课程设计 万年历
计算机基础课程设计C语言设计报告题目:万年历学院:电气与电子工程学院专业:自动化班级:070304姓名:于洋指导教师:周丽娟设计日期:一、设计题目及来源万年历,来自网上搜索。
二、功能isLeap()判断输入数据是否是闰年;maxDay()判断某年某月最多天数;eachYearTotal ()判断这一天是该年的第几天;week判断某年某月某日的编号;output()输出该天星期几;display()显示月历;check()检查有效性;display1()输出年历;display2()输出月历;display3()输出日历;getMenu()调菜单;三、流程图#include<stdio.h>#include<stdlib.h>int isLeap(int year);int maxDay(int year,int month);int eachYearTotal(int year,int month,int day); int week(int year,int month,int day);char *chineseWeek(int number);void output(int year,int month,int day);void display(int year,int month);int check(int year,int month,int day);void display1(int year);void display2(int year,int month);void display3(int year,int month,int day); void getMenu();void main(){int year,month,day,flag,select;while(1){getMenu();printf("shu ru xuan ze: ");fflush(stdin);scanf("%d",&select);fflush(stdin);switch(select){case 1:do{printf("shu ru nian: ");scanf("%d",&year);flag=check(year,1,1);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display1(year);break;case 2:do{printf("shu ru nian yue: ");scanf("%d%d",&year,&month);flag=check(year,month,1);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display2(year,month);break;case 3:do{printf("shu ru nian yue ri: ");scanf("%d%d%d",&year,&month,&day);flag=check(year,month,day);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display3(year,month,day);break;case 4:exit(0);default:printf("shu ru you wu!\n\n");}}}int isLeap(int year){if(year%4==0&&year%100!=0||year%400==0) return 1;elsereturn 0;}int maxDay(int year,int month){int a[]={31,28,31,30,31,30,31,31,30,31,30,31};if(isLeap(year))a[1]=29;return a[month-1];}int eachYearTotal(int year,int month,int day){int i,sum=0;for(i=1;i<month;i++){sum+=maxDay(year,i);}sum+=day;return sum;}int week(int year,int month,int day){intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachYearTotal(year,month,d ay);number%=7;return number;}char *chineseWeek(int number){switch(number){case 0:return "Sunday";case 1:return "Monday";case 2:return "Tuesday";case 3:return "Wednesday";case 4:return "Thursday";case 5:return "Friday";case 6:return "Saturday";default:return "error";}}void output(int year,int month,int day){int number=week(year,month,day);printf(" gong yuan%d nian%d ue%d ri%10s\n\n",year,month,day,chineseWeek(number)); }void display(int year,int month){int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf("%4s%4s%4s%4s%4s%4s%4s\n"," Sunday "," Monday "," Tuesday "," Wednesday "," Thursday "," Friday "," Saturday ");for(i=0;i<number;i++){printf(" ");}while(j<=max){printf("%4d",j);if(i%7==6){printf("\n");}i++;j++;}printf("\n\n");}int check(int year,int month,int day){if(year<0||month<1||month>12||day<1||day>maxDay(year,month))return 0;elsereturn 1;}void display1(int year){int i;printf("\n");for(i=1;i<=12;i++){printf(" gongyuan%d nian%d yue\n\n",year,i); display(year,i);}}void display2(int year,int month){printf("\n gongyuan%d nian%d yue\n\n",year,month); display(year,month);}void display3(int year,int month,int day){printf("\n");output(year,month,day);display(year,month);}void getMenu(){printf("1.nianli\t2.yueli\t3.rili\t4.tuiqu\n");}。
C语言课程设计万年历 完整版
目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。
学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。
我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。
C语言是近年在国内外得到迅速推广应用的一种语言。
C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。
因此,C语言特别适合于编写各种软件。
在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。
通过这个小小的日历可以实现很多功能。
在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。
在不断的调试中最终才获得最为完整的程序。
接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。
在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。
下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。
万年历系统——C语言完整版
实验十九:编写一个万年历系统1.设计目的:从实验的角度来看,这次课程设计一方面可以让自己巩固并加深对C语言程序设计知识的理解,掌握和提高C语言编程和程序的基本调试的基本技能,进一步理解和运用结构化程序的思想和方法;另一方面,可以让自己在面对一个全新的问题时,学会如何思考,如何寻找问题的关键,从而提升自己的能力。
2.总体设计:1.、当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几);2、当系统日期变到下一个月时,系统自动翻页到下一月。
3.调试与测试:4.源程序清单和执行结果:#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <time.h>int leap(int year ){if ((year %4 == 0) && (year % 100 != 0)|| (year % 400 == 0)){return 1;}return 0;}void show(int year,int month,int date,int sec,int mini,int hour) {const char month_str[][4]={"","Jan","Feb","Mar","Apl", "May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};const int month_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int i,j,wdays,mdays,days;for(i=1,days=0;i<year;i++){if(leap(i)){days += 366;}else{days += 365;}}for(i=1;i<month;i++){if(i==2 && leap(year)){days+=29;}else{days+=month_day[i];}}printf(" %s.%d.%d %d:%d:%d \n",month_str[month],date,year,hour,mini,sec);printf(" 一二三四五六日\n");wdays = days % 7;for( j = 0; j < wdays; j++){printf(" ");}if(month == 2 && leap(year)){mdays=29;}else{mdays= month_day[month];}for(i=1;i<=mdays;i++){if( i > 1 && days % 7 == 0 ){Printf(“\n”);printf("\n");}printf("%4d",i);days=days+1;}printf("\n---------------------------\n\n\n");}void main(){time_t rawtime;struct tm *info;int year,month,date,sec,mini,hour; char ch;time ( &rawtime );info = localtime ( &rawtime );year =info->tm_year + 1900; month =info->tm_mon + 1;date =info->tm_mday;hour =info->tm_hour;mini =info->tm_min;sec =info->tm_sec;while(1){show(year,month,date,sec,mini,hour); printf("↑......上一年\n\n");printf("↓......下一年\n\n");printf("←....前一个月\n\n");printf("→....后一个月\n\n");printf("Esc.......退出\n\n");ch=getch();switch(ch){case 27://Ecsexit(0);case -32://Navigatorch=getch();if(ch==77){//Rightyear+=(month==12)?1:0;month=month%12+1;}else if(ch==75){//Leftyear-=(month==1)?1:0;month=(month-2+12)%12+1;}else if(ch==72) {//Upyear--;}else if(ch==80) {//Downyear++;}system("cls"); }}}。
(完整版)C语言万年历
说明部分
在TC或VC6.0中编译程序,编译成功后,通过命令行向编译生成的可执行文件(.exe)传递参数,在命令行中输入该执行文件的路径名称,然后再输入传入的参数,回车,就会显示出运行结果,效果如图1.1所示。
图1.1万年历运行界面
代码部分
#include <stdio.h>
main(int a,char **date)
}
if (day<0||day>month)
{
printf ("\n ERROR! the entered DAY is invalid\n");
exit (0);
}
week=(dy+dm+day-1+6)%7;
if(week<0)
week+=7;
if (day>0) /***判定查看类型***/
{
if (d==-1) year=year*10+(date[1][i]-'0');
if (d==0) month=month*10+(date[1][i]-'0');
if (d==1) day=day*10+(date[1][i]-'0');
i++;
}
if (month<1||month>12)/*若月份传入错误数字*/
else
d=(year-2000)/4-(year-2000)/100+(year-2000)/400;
dy=(year-2000)+d; /***该年1月1号到2000年1月1号的"星期差" ***/
C语言课程设计 万年历
2.课程设计任务与要求:
任务 设计题目从任务书所列选题表中选取,每人 1 题。 要求: 1、在处理每个题目时,要求从分析题目的需求入手,进行合理的模块设计,定义正 确函数和自定义数据类型 (如结构体类型) 、 编制上机程序和上机调试等若干步骤完成题 目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的 效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、设计的题目要求达到一定工作量(200 行以上代码) ,并具有一定的深度。 3、 程序设计语言推荐使用 C, 程序书写规范, 源程序需加必要的注释并且缩进一致。 4、每位同学需提交可独立运行的程序; 5、每位同学需独立提交设计报告书(每人一份) ,要求编排格式统一、规范、内容 充实,不少于 10 页(代码不算) ; 6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 选题名称: 姓 名: 薛思雨 软件工程 计算机工程学院 2011.8.29~2011.9.9 软件工程实验室、教室 C 语言课程设计
万年历程序
学
号:
511020825 D 软件 101
专业班级: 系 (院) : 设计时间: 设计地点:
指导教师评语:
/*主函数*/
/*菜单选择 */
C 语言课程设计报告
第
3
页,共 14 页
scanf("%d",&select); system("cls"); switch(select) { case 1: /*当选择为 1 时显示年历*/ printf(" 年历显示:输入年(如 2011):"); scanf("%d",&year); if(year>0&&year<10000) /*显示年份从 0-10000 */ { display1(year); /*调用函数*/ printf(" 提示 按↑:上一年 按↓:下一年 按其他键:返回菜单\n\n"); setDay1( year,month, day); } else system("cls"); printf(" 输入无效,重新输入!\n"); break; case 2: /*当选择为 2 显示月历*/ printf(" 月历显示:输入年月(如 2011,9):"); scanf("%d,%d",&year,&month); if(year>0&&year<10000&&month>=1&&month<=12) { display2(year,month); printf(" 提示 按←:上个月 按→:下个月 按其他键:返回菜单\n\n"); setDay2( year,month, day); } else system("cls"); printf(" 输入无效,重新输入!\n"); break; case 3: /*当选择为 3 时显示日期*/ printf(" 日期显示:输入年月日(比如 2011,9,13):"); scanf("%d,%d,%d",&year,&month,&day); if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month)) { display3(year,month,day); printf(" 提示 按 PageUp: 前一天 按 PageDown: 后一天 按其他键: 返回菜单\n\n"); setDay3( year,month, day); } else system("cls"); printf(" 输入无效,重新输入!\n"); break; case 4: exit(0); default: /*当输入其他数字时,输入无效,重新输入*/
C语言---万年历(大一时的课程设计)
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<time.h>#define leap(i) (i%400==0||i%4==0&&i%100!=0) /*判断是否为闰年*/#define main_printf printf("'S':上一月'F':下一月'E':下一年'D':上一年\n'空格键':手动输入'Backspace':返回系统时间\n'ESC':退出\t '回车键':开启日历\n")/*操作提示*/#define days(year,month)((month==4||month==6||month==9||month==11)?30:( (month!=2)?31:(year%400 ==0||year%4==0&&year%100!=0)?29:28))/*判断一个月有多少天*/#define head_place((timeinfo->tm_wday-(timeinfo->tm_mday%7-1)>=0)?(timeinfo->tm_wday -(timeinfo->tm_mday%7-1)):(timeinfo->tm_wday+(7-timeinfo->tm_mday% 7+1)))/*计算当月的头一天为星期几*/#define type_time time_t nowtime;struct tm *timeinfo;/*定义时间类型*/#define get_time (time( &nowtime ),timeinfo = localtime( &nowtime ))/*获得时间信息*/#define update_time ( now.day=timeinfo->tm_mday ,now.month=timeinfo->tm_mon+1 , now.year=timeinfo->tm_year+1900)/*更新当前时间*/struct date /*时间结构体*/{short year;short month;short day;}now, /*当前的时间*/check; /*查看的时间*/char move_relate[13]={0, 3,0,3, 2,3,2, 3,3,2, 3,2,3}; //每个月的头一天与下个月的头一天的水平距离//################################################### #################################################### ###//################################################### #################################################### ###voidinput()//----------------------------------------------------------------------------输入需要查看的月份{char inspect; //用于检查是否正确录入printf( "-----请输入需要查看的日期: '4位年份-2位月份' \n""\n""-----例如: %04d-%02d\n\n",now.year,now.month );//==================================================== ==================//====================循环,直到正确录入为止=============================while( rewind(stdin),(scanf("%4d-%2d%c",&check.year,&check.month,&inspect)!=3)||(check.year<0||check.year>10000)||(check.month<0||check.month>12)||inspect!=10)printf("请以正确的格式输入,如:%04d-%02d ( 0<=年份<=9999 , 0<月份<=12 )\n",now.year,now.month);}//################################################### #################################################### ######//################################################### #################################################### ######intcount()//---------------------------------------------------------------------------计算查看月份的头一天位置{int months= ( check.year - now.year )*12 + ( check.month - now.month ); /*月份之差*/int tally=0; /*计算两年份间的闰年数*/int i=0;int move=0; /*累计每个月头一天的偏移量*/type_time; //定义时间类型get_time; //获得时间信息//==================================================== =============================//=============================所查看日期在系统时间之后============================if(months>0){for(i=now.year;i<=check.year;i++) /*计算两年份间的闰年数*/{if(leap(i)) tally++;}if(check.month<=2&&leap(check.year)) tally--; //减去未涉及2月份的闰年if( now.month>2&&leap(now.year) ) tally--;move=(1)*(months/12) + tally; //每过一个非闰年,同一个月的头一天向后移一位for(i=0;i<months%12;i++){move+=move_relate[(i+now.month<=12)?i+now.month:i+now.month-12];//计算剩余各月份头一天的偏移总和}}//==================================================== ==============================//==============================所查看日期在系统时间之前============================else if(months<0){months=-months;for(i=check.year;i<=now.year;i++) /*计算两年份间的闰年数*/{if(leap(i)) tally++;}if(check.month>2&&leap(check.year)) tally--;//减去未涉及2月份的闰年,每包含一个闰年需向前推进一位if( now.month<=2&&leap(now.year) ) tally--;move=(-1)*(months/12) - tally; //每回移一个非闰年,同一个月的头一天向前移一位for(i=months%12;i>0;i--){move-=move_relate[ (now.month-i>=1)?now.month-i:12+(now.month-i) ];//计算剩余各月份头一天的偏移总和}}move+=head_place;move%=7;return (move>=0)?move:7+move;}//################################################### #########################################################//################################################### #################################################### #####void output(intstart_place)//-----------------------------------------------------------//输出需要查看的月份{int i,j,n,under_n;int record=7;int day=days(check.year,check.month); //判断该月所含有的天数;type_time; //定义时间类型get_time; //获得时间信息//==================================================== =======================================//======================================标题&logo========================================== system("cls");printf("万年历。
C语言课程设计报告-万年历1
课程设计题目:万年历实验题目:万年历程序的编写实验目的:综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用,使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自己的编程能力并逐步培养编程思维,进而不断提高同学们解决问题的能力,并为以后的语言学习打下良好的基础。
实验要求:万年历设计主要功能包括:1、查询某年某月每一天对应星期几。
2、可以查询某年某月的上个月或是下个月的日历情况。
3、查询某年某月某日是这一年的第几天,并查询改天是星期几。
4、判断该年是闰年还是平年,判断这一年的生肖。
实现思路(要求有文字描述,并画出流程图):实现过程(要求有文字说明实现的过程,并对相应的代码添加注释):见程序(程序见后)后的解析。
运行时只要你输入年月日,你要的星系都会显示出来;如果想继续输入日期的话,只需按y就可以,祥结束按n就可以结束。
实验总结(分析程序的得与失):得:通过这次程序设计,更使我了解了编程序的严谨性,每个问题,每个不走都得有依据,不得盲目乱造,同时也让我获得了一点编写简单程序的能力,使自己平时在理论课中很多部明白的东西明白了好多,学会了好多语句的用法,比如会用‘y’or‘n’来决定程序是否要继续;怎么控制输出格式等等。
总之在这次程序设计中我学到了很多。
失:在编程序过程中有些函数的用法不怎么会用,偶尔会落下写简单的东西。
如‘,’‘;’等;同时在编写输出上下个情况及判断程序是否要继续的程序上花费了好多时间;函数的声明、调用既然不清楚,感到很惭愧。
实验的过失就是成功的阶梯,在过失中我也学到很多。
心得体会:我体会到了编程序的严谨性,也觉得如果我们要是熟悉课本所讲的内容,不怕麻烦,坚持不懈,我们一定可以将它实现的。
要有耐心,有时候很多的错误就是一个地方引起的,只要认真检查,一定能突破的,所以在以后的编程序是要细心,有耐心,人不断调试程序,直至最后成功。
#include<stdio.h>struct //定义包含年月日数组结构体{int year;int month;int day;}date;int main() //主函数{void print(int,int); //函数的声明int dobb(int); //函数的声明int date1(int,int,int); //函数的声明int rili(); //函数的声明rili(); //函数的调用return 0;}int rili() //定义函数{int days; //定义整型变量int a,b; //定义整型变量char z; // 定义字符变量printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++\n \n"); // 输出头的格式printf(" 万年历\n\n");printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++\n ");printf("功能有:\n"); printf("\t");printf("1.查询某年某月某天对应星期几;\n\t2.查询某年某月上下个月情况;\n\t3.显示该日子是该年的第几天,并查询改天星期几;\n\t4.判断该年是平年还是闰年以及生肖等。
c语言课程设计--万年历
万年历系统题目:万年历系统姓名:黄炼军学号:20070810505学院:计算机与通信学院专业:计算机科学与技术0705班指导老师:何英完成时间:2009年11月10日一、问题描述模仿Windwos的日历.1)日历显示功能。
能根据系统日期进行初始化,如果没有任何输入,则显示系统日期所在月份的月历。
2)日历查询、闰年判断功能。
输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份是否为闰年。
3)参数检查功能。
如果输入日期不合法,查询将被拒绝,并显示提示信息。
4)选做:通过键盘操作(如:光标上、下、左、右移动键,pageup、pagedown键)调整年份、月份和日期,并显示调整后的日期及月历。
二、问题分析对于要求1:难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查询的年份nday:从该年的一月一日起到该天的天数w:得出的星期数,w==0表示星期天。
在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。
对于初始输入当前月历,可以通过<time.h>中的time 和localtime函数取出系统时间进行初始化。
time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一个时间结构体,可以从中取出年月日。
对于要求2:闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。
日期的查询,就是直接打印改天所在月份的月历。
对于要求3:判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。
c语言课程设计万年历范例
C语言课程设计计算机科学与技术专业****班学号:******姓名:******目录序言 (1)说明 (2)流程图 (3)源代码 (4)小结 (5)序言1. 经过上一个学期对《C程序设计》的学习,同学们都认为真正的学到了有用知识,可能有一些人学的不够理想,但无论如何,这些知识都为我们的下一步学习打下了坚实的基础。
做这么一个课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
本程序是一个万年历程序,可以输出公元一年一月以后任意月份的天数及每一天是星期几,只要在运行程序时按照要求输入年份再输入和月份,程序就会把这一月份的日历显示在屏幕上,使人一目了然。
该程序能与目前天文学研究中所采用的各种日历程序所能计算的范围相一致。
2 . 课程设计题目:万年历要求:输入年份和月份,自动输出该月的日历,清楚的显示每一天是星期几。
指导老师:翟海霞说明一.算法分析说明:1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为355。
然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。
2. 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。
3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
二.要用到的函数和语句1.<stdio.h>,<conio.h>,<math.h> /*头文件*/2.main() /*主函数*/3.printf(),4.scanf()5.textbackground(),textcolor() /*定义背景和字体颜色*/6.if 语句7.for 语句8.printstar() /*调用函数*/9.int day_year() /*定义函数*/10.goto /*循环语句*/流程图1.图一输入的年份判断从定义年到输入的年份中每个年份是否为闰年是否每年为366天每年为365天返回该年的天数2.图二输入的年月判断输入年是否为定义年是否总天数S=1 总天数S为定义年到输入年的总天数把S加上该年一月到输入月份的天数,再加1判断输入的月份是否为闰年中的月份是否该月是否大于二月是否把S加上该年一月到输入月份的天数把S再加上该把S加上该年年一月到输入一月到输入月的月份的天数份的天数再加1总天数为S判断S的最后一天为星期几从这一天起依次输出输入月份的天数直到该月底为止源代码#include<conio.h>#include<stdio.h>#include <math.h>main(){long s=1;int a[14]={0,0,31,28,31,30,31,30,31,31,30,31,30,31}; int y,m,p,i,j,k,n,leap;int day_year(int y);textbackground(RED);textcolor(YELLOW);clrscr();printf("please input the year:");scanf("%d",&y);printf("\n");printf("please input the month:");scanf("%d",&m);printf("\n");textbackground(3);clrscr();printf("\tYear:%d Month:%d\n",y,m);printf("\n");if(y==1)s=1;for(i=1;i<y;i++)s=s+day_year(y-1);if(y%4==0&&y%100!=0||y%400==0)leap=1;else leap=0;for(i=0;i<=m;i++)s=s+a[i];if(leap==1&&m>2)s=s+1;else s=s+0;p=s%7+3;printf(" Sun Mon Tue Wed Thu Fri Sat\n"); printstar();if(p<=7)n=4*(p-1);else n=4*(p-8);for(j=1;j<=n;j++)printf(" ");if(leap==1&&m==2)a[3]=a[3]+1;else a[3]=a[3]+0;for(j=1;j<=a[m+1];j++){printf("%4d",j);if((j+n/4)%7==0)printf("\n");}printf("\n");printstar();printstar();s=1;printf("do you want contintue(y/n)");scanf("%c",&q);for(;;){int k;k=bioskey(0);if(k==0x316e) break;if(k==0x1579) goto loop;}}printstar(){printf("******************************\n"); }int day_year(int y){if(y%4==0&&y%100!=0||y%400==0)return(366);else return(365);}小结经历了这次课程设计的设计和制作的整个过程,我才发现我知识的贫乏和知识面的狭窄,原本以为不就是一个小小的课程设计,小case,很容易就可以搞定,可是到了后来实际的操作的时候可是花费了我九牛二虎之力,不说其他的,只说时间上面,我在宿舍里面熬了三个通宵,更不用说白天的时间了。
C语言课程设计万年历打印
C语言课程设计万年历打印This model paper was revised by the Standardization Office on December 10, 2020温馨提示程序语言:C、C++、C#、Python(红色字体表示本课设使用的程序设计语言)图形功能选项:Win32控制台程序(黑框、文本界面)、Win32程序、MFC、WinForm、DirectX10(黑体标明表示本课设的程序图形类别,默认为非图形界面Win32控制台程序)数据结构:基础类型、数组、链表、双向链表、搜索树(非平衡二叉树)、平衡二叉树、链表与平衡二叉树相结合、堆栈、队列、串、图(黑体标明表示本课设使用的数据结构)C++语言项:STL库(黑体标明表示使用C++的STL库)编译环境:Windows 7 64位旗舰版(Linux及其他环境请谨慎下载)集成开发环境:Visual C++ 、DEVC++、CodeBlocks、Visual Studio 2015均可通过编译。
(若无法通过编译运行,则会用浅蓝色字体表示)分多头文件编译:否(所有代码基本都包含在一个文件内,如需试验头文件功能,请自行参考相关文献)内容说明:1、课设题目及预览内容将在第二页开始展示。
2、代码行数:333行3、目录所示内容,本文基本涵盖,如无内容,会在本页进行说明。
4、附录绝对包含用户使用手册及程序完整源代码和详细注释。
5、如需下载其他头文件(例如DirectX需另行配置),本文会在此进行说明。
6、本文撰写内容仅供学习参考,另外,由于本人水平有限,编写之处难免存在错误和纰漏,恳请各位老师或同学批评指正。
题目:万年历显示功能要求:(1)输入一个年份,输出是在屏幕上显示该年的日历。
假定输入的年份在1940-2040年之间。
(2)输入年月,输出该月的日历。
(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。
运行截图:功能(一):功能(二):功能(三):课程设计报告课题:学院:专业:学生姓名:学号:指导老师 :20XX年XX月XX日目录摘要万年历的主要功能是通过C语言编程实现查询某年的日历情况,并且可以查询某年月的日历情况,还可以对某年月日进行计算距今的天数和判断是否为公历节日,其功能和代码满足人性化设计和良好的编程规范要求。
C语言课程设计实验报告(万年历)
C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。
假定输入的年份在1-9999年之间。
2、输入年月,输出该月的月历。
3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。
:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。
即:当前若正在显示2011年的年历,按下键盘“←”方向键后,年历变为2010年的。
二、使用的所有变量的说明变量说明:(以下均为整型变量)year 表示年份的变量month 表示月份的变量day 表示日期的变量select 表示菜单选择的变量i 表示月份的变量j 表示一个月中的某一天的变量sum 判断某天是一年中的第几天的变量number判断某天离公元1年1月1日还有几天的变量a[] 表示每月天数的数组变量year1 系统时间年份的变量month1 系统时间月份的变量day1 系统时间日期的变量三、程序清单及其说明#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/{int year,month,day,select;while(1){getmenu();printf(" 请输入相应数字:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" 年历显示:输入年(如2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 2: /*当选择为2显示月历*/printf(" 月历显示:输入年月(如2011,6):");if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 3: /*当选择为3时显示日期*/printf(" 日期显示:输入年月日(比如2011,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month) ){display3(year,month,day);printf(" 提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");setDay3( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 4:exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" 输入无效,重新输入!\n");}}}int isleap(int year) /*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;int maxDay(int year,int month) /*每月的天数*/{int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))a[1]=29; /*闰年2月份有29天*/ return a[month-1];}int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ {int i,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;return sum;}int week(int year,int month,int day) /*对天数进行判断确定是星期几*/ {int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7 ;return number;}void display(int year ,int month) /*输出年月*/{int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");for(i=0;i<number;i++)printf(" "); /*1号前的星期补空格*/ while(j<=max){printf("%6d",j);if (i%7==6)printf("\n"); /* 每7格换一行*/i++;j++;printf("\n\n");}void display1(int year) /*输出年历*/{int i;printf("\n");for(i=1;i<=12;i++){printf("%d 年%d 月\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d 年%d 月\n ",year,month);display(year,month);}void display3(int year,int month,int day) /*输出日历*/{whatweek( year,month,day);jieri(month,day);counterdays(year,month, day);}int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/{int year1, days0,days1,month1,days, day1;time_t timep;struct tm *p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year) ;month1=(1+p->tm_mon) ;day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,daydays=days0-days1; /*计算出两个日期之间的时间差*/printf("\n 今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);return days;}void whatweek(int year,int month,int day) /*判断是星期几*/{int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); number=number%7 ;switch( number){case 0:printf( "\n %d年%d月%d日是星期日",year,month,day);break;case 1:printf( "\n %d年%d月%d日是星期一",year,month,day);break;case 2:printf( "\n %d年%d月%d日是星期二",year,month,day);break;case 3:printf( "\n %d年%d月%d日是星期三",year,month,day);break;case 4:printf( "\n %d年%d月%d日是星期四",year,month,day);break;case 5:printf( "\n %d年%d月%d日是星期五",year,month,day);break;case 6:printf( "\n %d年%d月%d日是星期六",year,month,day);break;default:system("cls");printf(" 出现错误!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/{if(month==1)switch(day){case 1:printf(",这天是元旦");}if(month==2)switch(day){case 14:}if(month==3)switch(day){case 8:printf(",这天是妇女节");break;case 12:printf(",这天是植树节");}if(month==4)switch(day){case 1:printf(",这天是愚人节");}if(month==5)switch(day){case 1:printf(",这天是劳动节");break;case 4:printf(",这天是青年节");}if(month==6)switch(day){case 1:printf(",这天是儿童节");}if(month==7)switch(day){case 1:printf(",这天是建党节");}if(month==8)switch(day){case 1:printf(",这天是建军节");}if(month==9)switch(day){printf(",这天是教师节");}if(month==10)switch(day){case 1:printf(",这天是国庆节");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/ { char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/ if(year<2){system("cls");printf(" 警告!超出范围!\n");break;}year--;display1(year);setDay1(year,month,day);break;case KEYNUMDown:/*“↓”年份变大*/ year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/char k;getch();k=getch();switch(k){case KEYNUMLeft: /*“←”月份变小*/if(month<2){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}month--;display2(year , month);setDay2(year,month,day);break;case KEYNUMRight:/*“→”月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year , month);setDay2(year,month,day);break;default:system("cls");;}}void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/{char k;getch();switch(k){case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2){month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}day--;display3(year , month,day);setDay3(year,month,day);break;case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;}if(year<10000);display3(year , month,day);setDay3(year,month,day);break;default:system("cls");;}}{printf(" ************主菜单************\n\n");printf(" * 欢迎进入万年历系统*\n\n");printf(" * 1、年历显示*\n\n");printf(" * 2、月历查询*\n\n");printf(" * 3、日期查询*\n\n");printf(" * 4、退出系统*\n\n");printf(" ******************************\n\n"); }四、运行结果清单打开软件,进入如下菜单界面,输入数字进行选择1年历的显示(1)输入数字1进入年历的显示(2)输入年份2011,显示2011年的年历如下(3)按↑键盘显示上一年(2010年)的年历,显示如下(4)按↓键盘显示上一年(2012年)的年历,显示如下2、月历的显示(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下(2)按←键盘显示上一个月(5月)的月历,显示效果如下(3)按→键盘显示上上个月(7月)的月历,显示效果如下3、日历的显示(1)输入选择3进入日历的显示,如图输入2011,10,1显示这天的星期,是否为公历节日,距离现在还有多少天(2)按PagDown显示前一天的日历,显示如下(3)按PagUp显示后一天的日历,显示如下4 退出程序输入选择4,显示如下界面,按任意键退出程序五、总结和体会。
c万年历课程设计
c 万年历课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日之间的关系。
2. 学生能够运用数学知识,进行日期的计算和推算。
3. 学生能够了解不同历法的起源和发展,认识我国农历的特色。
技能目标:1. 学生能够运用所学知识,制作简单的万年历。
2. 学生能够通过观察、分析、推理等方法,解决日期计算问题。
3. 学生能够运用信息技术,查找历法相关资料,提高信息处理能力。
情感态度价值观目标:1. 学生培养对时间观念的尊重,养成珍惜时间的良好习惯。
2. 学生通过学习万年历,增强对我国传统文化的认同感。
3. 学生在学习过程中,培养合作意识,提高团队协作能力。
课程性质:本课程为数学学科拓展课程,结合实际生活,培养学生的实际应用能力。
学生特点:四年级学生具有较强的观察、分析、推理能力,对新鲜事物充满好奇心。
教学要求:注重理论与实践相结合,鼓励学生主动探究,充分调动学生的学习积极性。
在教学过程中,关注学生的个体差异,因材施教,确保每个学生都能达到课程目标。
通过课程学习,使学生能够将所学知识运用到实际生活中,提高综合素养。
二、教学内容1. 年、月、日的基本概念及关系- 介绍公历、农历的年份、月份、日期的表示方法。
- 讲解平年、闰年的判断方法及其意义。
2. 日期的计算与推算- 掌握日期推算的基本方法,如加减法、乘除法等。
- 引导学生运用所学知识,解决实际问题,如计算某人生日是星期几。
3. 历法的起源与发展- 简要介绍世界主要历法的发展历程。
- 着重讲解我国农历的起源、特点及其在生活中的应用。
4. 制作简单万年历- 教授制作方法,引导学生运用所学知识,动手制作属于自己的万年历。
- 选取合适的教学案例,展示万年历在实际生活中的应用。
5. 教学内容的安排与进度- 第一章节:年、月、日的基本概念及关系(1课时)- 第二章节:日期的计算与推算(2课时)- 第三章节:历法的起源与发展(1课时)- 第四章节:制作简单万年历(2课时)教学内容与教材关联性:本教学内容紧密围绕课程目标,结合教材相关章节,确保教学内容的科学性和系统性。
c语言课程设计简易万年历
/**湖北师范学院信息工程1203班朱文峰**简易万年历* 1、输入年份,判断是否为闰年*2、输入年月日,判断改日为星期几*3、输入年份,打出12个月历,输入月份,打出该月的日历* 4、要求用多个函数实现*/#include<stdio.h>#include<stdlib.h>#include<windows.h>//每月的天数,闰年二月要加1int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};//判断是否位闰年int isLeapYear(int year){if(year%4 == 0 && year%100 != 0 || year%400 == 0)return 1;elsereturn 0;}//判断某天为星期几int whichWeekday(int year, int month, int day){int weekday;//公式中要把1月和2月换成是上一年的13月和14月if (month == 1 || month == 2){month += 12;year -= 1;}//公式weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;return weekday+1;}//打印某年某月的月历void yearMonth(int year, int month){int i,j=0;int weekday;//计算这个月第一天是星期几weekday = whichWeekday(year, month, 1);printf("\n%d年%d月\n",year,month);printf("------------------------------------------------\n");printf("星期一星期二星期三星期四星期五星期六星期天\n");if(isLeapYear(year) && month == 2)days[1] = days[1] + 1;printf("");for(i = 1; i < weekday; i ++)printf(" ");for(i = 0; i < 8 - weekday; i ++){printf("%6d", i+1);printf(" ");}printf("\n");for(i = 9-weekday; i <= days[month-1]; i ++,j++){if(j == 7){j = 0;printf("\n");}printf("%6d ", i);}printf("\n------------------------------------------------\n");}//输入年份,打出12个月历,输入月份,打出该月的日历void monthDay(int year){int i;char c;int month;for(i = 0; i < 12; i ++)yearMonth(year,i+1);printf("\n\n");printf("是否查看日历(y/n):");getchar();scanf("%c",&c);if(c == 'y'){printf("请输入月份:");scanf("%d", &month);yearMonth(year,month);}elseexit(0);}//主菜单void menu(){printf("-----------------------------------------------\n");printf(" ");printf("c语言课程设计-万年历\n\n");printf("***********************************************\n\n");printf("1、输入年份,判断是否为闰年\n");printf("2、输入年月日,判断该日为星期几\n");printf("3、输入年份,打出12个月历,输入月份,打出该月的日历\n\n");printf("***********************************************\n\n");}//判断是否继续void isContinue(){char c;printf("是否继续(y/n):");getchar();scanf("%c", &c);if(c == 'y')return;else{printf("");exit(0);}}//主函数void main(){int num;int year;int month;int day;int weekday;while(1){system("CLS");//清屏menu();printf("请输入对应操作:");scanf("%d", &num);switch(num){case 1:{printf("请输入年份:");scanf("%d", &year);if(isLeapYear(year))printf("%d年是闰年\n",year);elseprintf("%d年不是闰年\n");isContinue();break;}case 2:{printf("请输入年月日,以空格隔开:");scanf("%d%d%d", &year,&month,&day);weekday = whichWeekday(year, month, day);printf("这天是星期%d\n",weekday);isContinue();break;}case 3:{printf("请输入年份:");scanf("%d", &year);monthDay(year);isContinue();break;}default:{printf("您的输入有误");Sleep(1000);//延时一秒钟break;}}}}。
C语言课程设计万年历打印(20191225204701)
void thirdFun( int year , int month , int day ); // 第三功能
各程序流程图如下:
4
firstFun() 函数 开始
判断是否打印了 6
是
和 12 月份的日历
否 打印某月日历
结束
图 2.1 程序流程图(一)
secondFun() 函数 开始
判断是否月末的
打印某年某月
提示信息
日历模块
计算距今天数和 判断节日模块
图 1.2 功能模块图
3
2 详细设计
2.1 数据结构
建立日历信息结构体,结构体成员变量包括月末、月初星期几、屏幕信息左半边日历是 否打印完毕。
typedef struct calendar {
int month_end; int first_day;
1.1 需求分析 ............................................................................................................................2.... 1.2 功能流程图 .........................................................................................................................2... 1.3 功能模块图 .........................................................................................................................3... 2 详细设计 .......................................................................................................................................4.... 2.1 数据结构 ............................................................................................................................4.... 2.2 函数功能设计 .....................................................................................................................4... 3 调试分析 .......................................................................................................................................7.... 3.1 程序测试 ............................................................................................................................7.... 3.2 程序缺陷 ............................................................................................................................9... 4 总结与体会 .................................................................................................................................1..0.. 参考文献 ........................................................................................................................................1..1.. 附录 ................................................................................................................................................1..2..
c语言课程设计--万年历
一设计目的熟练应用c语言设计程序掌握一定的c语言编程能力二设计原理1:基本使用了<stdio.h>,<time.h>,<stdlib.h>等头文件中的一些函数。
2:使用的函数有:printf. Scanf. Return. 等函数。
3:使用的语句有:do{}while循环语句,switch表达式{case 表达式1:语句1case表达式2: 语句2……case 表达式n: 语句n}for循环语句三功能1:输入年份,判断是否为闰年2:输入年月日,,判断该日为星期几3:输入年份,打出12个月历,打出该月的日历四设计体会这是上大学以来的第一次课程设计,我们共花了几天的时间用来编写和调试程序。
在这个过程中,我们感觉很吃力,这主要是由于平时段练太少,认真程度太低所造成的,以至于需要不停的看书。
设计完成的那天,我们自己感觉很有成就感,虽然这过程中我参考了很多这方面的书,但确实掌握了一定的编程能力。
另外在检查的过程中,我也学到了很多知识,虽然我很想拿优,但在我拿优的过程中体会到的,要远远比拿个优,更感到满足。
这次设计给我的只是鼓励,我会继续的努力,争取早日成为一名程序员。
感谢老师的教导!五:参加设计程序的组员名单:程鹏李健魏欣宇李迅泽万年历程序源代码#include <stdio.h>#include <time.h>#include <stdlib.h>#include <conio.h>#include <ctype.h>#define CURU 72#define CURD 80#define CURL 75#define CURR 77#define ESC 27void printWNL(int, int);void printWNL2(int, int);int Week(int,int,int);int getDays(int, int);int isRunNian(int);void main(){int year,month;struct tm t;char ch;_getsystime(&t);year = t.tm_year + 1900;month = t.tm_mon + 1; /do {system("cls");printWNL(year,month);ch = getch();if(ch == ESC)break;else if(ch == 0)ch = getch();switch(ch) {case CURL: year--; break;case CURR: year++; break;case CURU: month--; if(month == 0){month = 12;year--;}break;case CURD:month++;if(month == 13){month = 1;year++;}break;default:;}}while(1);printf("\n\n\t谢谢使用,欢迎常来!再见。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。
学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。
我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。
C语言是近年在国内外得到迅速推广应用的一种语言。
C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。
因此,C语言特别适合于编写各种软件。
在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。
通过这个小小的日历可以实现很多功能。
在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。
在不断的调试中最终才获得最为完整的程序。
接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。
在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。
下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。
其中days[1]=28,是将闰年二月的天数28天作为初始元素存入。
在经过theWeek函数后就可以给days[1]中存入正确的月天数。
②char *weeks[7] ={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};char *months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November","DeCember"};这两组数据都设计利用了指针定义的。
这两个数组的作用是存入每个月,每个星期的地址。
利用指针可以提高程序的可读性,可以更方便使用。
三程序总体设计及流程图(一)应用到的C语言头文件:stdio.h /**/conio.h /**/stdlib.h /**/采用指针形式定义了*weeks和*months两组数组指针变量在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。
其中有:isLeap/*判断是否为闰年*/theLeap/*输入输出改年是否为闰年的信息*/Zeller/*判断星期的自定义函数*/theWeek()/*对于输入的日期输出该天是星期几*/printCalendar()/*输出日期详情及表格*/details /*月历详情函数*/theCalendar/*打开相应的详情*/Menu()/*程序的主菜单*/Select()/*按键的控制函数*/这些函数的定义极其相应的内部程序共同构筑起了这个万年历总程序。
其中的isLeap函数是用来判断输入的年份是否为闰年,实现了预计功能的第一个方面;theWeek函数则是为了实现判断星期而编写的;printCalendar , details ,theCalendar这三个函数的共同使用就能够完成第三个功能。
(二)程序的总框架四功能模块函数设计和调试一).算法说明1. 总天数的算法:isLeap和theLeap函数的共同使用,一起判断出了输入年份是否为闰年的信息。
判断一年是否为闰年的方法是:该年分而能被四整除但不能被100整除,或者是能被400整除。
流程图二:是否为闰年的判断2. 计算输入日期是星期几:利用Zeller函数可以判断出星期,然后对于输入的日期可以通过theWeek()函数对Zeller进行一次调用然后就可以输出相应的星期数。
①int Zeller(int year, int month, int day) //by theWeek(); printCalendar();/*判断星期的函数*/{int C, y, m, d, w;if( month < 3) { year -= 1; month += 12; }c = year / 100;y = year % 100;m = month;d = day;w = y + y/4 + C/4 - 2*C + 26*(m+1)/10 + d - 1;w %= 7;return (w >= 0 ? w : w+7);}②void theWeek() //by Select();/*对于输入的日期输出该天是星期几*/{int year, month, day, w;printf("\n");do{printf("Please input the date(YYYY-MM-DD): ");scanf("%d-%d-%d", &year, &month, &day);if( isLeap( year ) ) days[1] = 29; //是否闰年else days[1] = 28;}while(!( (month > 0 && month < 13) && (day > 0 && day <= days[month - 1]) ) );w = Zeller(year, month, day);printf("\nThis day %d-%02d-%02d is %s.", year, month, day,weeks[w]);getch();}3. 对输入信息的汇总:theCalendar/*打开相应的详情*/ ,details /*月历详情函数*/ ,printCalendar /*输出日期详情及表格*/,通过这三个函数可以将输入数据的具体信息通过完整日历的形式表示出来。
①void printCalendar(int year, int month) //by details(); theCalendar();/*输出日期详情及表格*/{int w, d;w = Zeller(year, month, 1);printf("%28s", months[month - 1]);printf("\n -%02d-\n", month);printf(" SUN MON TUE WED THU FRI SAT\n");for(d = 0; d < w; d++) { printf(" "); }for(month--, d = 1; d <= days[month]; d++){printf("%4d", d);if( (d + w)%7 == 0 && d != days[month]) printf("\n");}printf("\n============================\n");}例:1946, JanuarySUN MON JUE WED THU FRI SAT1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31============================================②void details(int year) //by theCalendar();/*月历详情函数*/{int month;while(true){do{system("cls");printf("Press '0' to exit.\n");printf("Please input the month: ");scanf("%d", &month);}while(!(month >=0 && month <= 12));if(month != 0){printf("\n");printf("Calendar %d\n", year);printCalendar(year, month);if( getch() == '0') break;}else break;}}③void theCalendar() //by Select();{int year, month;printf("\nPlease input the year: "); scanf("%d", &year);if( isLeap( year ) ) days[1] = 29; //是否闰年 else days[1] = 28; system("cls");printf("Calendar %d\n", year); for(month = 1; month <= 12; month++) {printCalendar(year, month); }printf("More details of each month ?[Y/N]"); if( tolower(getch()) == 'y' ) details( year ); }4.界面的控制:主要体现在主菜单的选择功能上。