C++万年历课程设计报告
c语言课程设计万年历
c语言课程设计万年历一、课程目标知识目标:1. 理解C语言中结构体、数组、函数等基本概念,并能运用这些知识实现万年历的基本功能;2. 学会使用循环、判断等控制结构,实现对日期的有效处理;3. 了解并掌握C语言中模块化编程的方法,将万年历功能划分为独立的功能模块。
技能目标:1. 能够独立编写C语言程序,实现万年历的日期显示、查询、切换等功能;2. 学会使用调试工具,对程序进行调试和优化,提高程序的稳定性;3. 学会在团队协作中发挥个人优势,与他人共同完成程序设计。
情感态度价值观目标:1. 培养学生积极思考、勇于探索的精神,增强学生对编程的兴趣和热情;2. 培养学生良好的编程习惯,遵循编程规范,注重代码的可读性和可维护性;3. 培养学生的团队协作意识,学会与他人沟通、分享、互助,共同进步。
课程性质:本课程为实践性较强的课程,要求学生在掌握C语言基本知识的基础上,运用所学知识完成万年历的设计与实现。
学生特点:学生具备一定的C语言基础,对编程有一定了解,但实践经验不足。
教学要求:结合学生特点,注重理论与实践相结合,引导学生主动参与,培养学生的编程能力和团队协作能力。
通过课程学习,使学生能够独立完成万年历的设计与实现,提高学生的编程水平和实际操作能力。
二、教学内容1. C语言基本语法复习:回顾结构体、数组、函数等基本概念,确保学生能够熟练运用;相关教材章节:第一章至第四章。
2. 控制结构:讲解循环、判断等控制结构在万年历中的应用;相关教材章节:第五章。
3. 模块化编程:引导学生将万年历功能划分为独立的功能模块,讲解模块之间的调用关系;相关教材章节:第六章。
4. 程序调试与优化:介绍调试工具的使用,教授学生如何找出并解决程序中的错误;相关教材章节:第七章。
5. 项目实践:指导学生按照教学大纲,分阶段完成万年历的设计与实现;相关教材章节:全书综合应用。
教学进度安排:1. 第一周:C语言基本语法复习;2. 第二周:控制结构;3. 第三周:模块化编程;4. 第四周:项目实践(第一阶段:功能设计);5. 第五周:项目实践(第二阶段:功能实现);6. 第六周:项目实践(第三阶段:调试与优化)。
c语言课程设计报告--万年历
c语言课程设计报告--万年历C 语言课程设计报告C语言课程设计报告实验课程:c语言课程设计年级:软件2班实验成绩:课程设计名称万年历姓名:**任课教师:杨** 学号:**** 实验日期:2014.6.11一、目的利用所学的知识解决生活中的实际问题。
本课题涉及的知识内容:时间函数,tm结构,for,do..while循环嵌套,if语句,指针,函数回调,结构体函数,文件创建与保存,自定义函数等语言内容。
二、内容与设计思想1.设计内容①显示系统当前时间②查询用户输入的时间③在用户输入的时间上,进行下一步的查询④对用户所需日期添加备忘,可供查看和添加2.主要代码结构main()函数调用了菜单函数,通过菜单函数来调用各个不同功能的函数。
3.主要代码段分析。
先显示系统时间,再通过列一个菜单来调用各个功能的函数;Themonth函数实现了对用户输入日期当月的处理,例如:日期的显示,日期与周几的对应等等。
Nextstep函数则是对输入日期的后续操作. Writetext、Readtext,、Changetext函数是对备忘录方面的操作,主要功能分别是写备忘,查看备忘,修改备忘。
三、使用环境本次上机实践所使用的平台和相关软件。
平台:Windows 2000相关软件:VC++四、调试过程1.测试结果分析经检验,运行结果正确五、总结1.设计中遇到的问题及解决过程调试过程中往往一个月的第一天与相对应的星期几对上比较棘手,通过查阅资料,找到了相应的函数;解决了问题备忘方面设计有关文件的读取方面的知识,在此之前,对文件的读取,修改比较,生疏模糊。
通过看书和上网寻找有关文件读取方面的例子,对文件有了初步的认识和应用。
期望备忘录功能中有修改功能,后期实在解决不了,换成了较为简单的添加功能。
2.设计体会和收获。
学会了如何通过现有资源解决问题;对c语言的有了更深的了解六、附录1.源代码#include "stdio.h"#include "time.h"#include "malloc.h"#include "stdlib.h"#include "string.h"typedef struct text{int num;char date[100];}Text[30],*pText;//函数声明void in_menu(void);void menu(void);void themonth(int,int);void nextstep(int,int);void Writetext(pText);void Readtext(void);void addtext(pText);void exit_calendar(void);int thelast(FILE*);//总菜单void allmenu(void){in_menu();//输出菜单menu();//选择菜单}//输出菜单void in_menu(void){printf(" △○日历查询及备忘系统○△\n");printf("\n");printf(" ===================1、日历==============================\n\n");printf(" ===================2、编辑备忘=========================\n\n");printf(" ===================3、查看备忘===========================\n\n");printf(" ===================4、添加备忘===========================\n\n");printf("====================5、退出==============================\n\n");printf("******************************************************* *********\n\n");printf("请选择菜单号码:");}//菜单选择void menu(void){struct text t;int i;scanf("%d",&i);switch(i){case 1:{//当前查询的月份int year;int month;printf("请输入要查询的年份及月份:\n"); scanf("%d %d",&year,&month); themonth(year,month);printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 2:{Writetext(&t);//写备忘printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 3:{Readtext();//查看备忘内容printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 4:{addtext(&t);//修改备忘printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 5:{exit_calendar();}default: break;}void nextmenu(int year,int month){int j;printf("===================1、结束本次查询,回菜=====================\n");printf(" ===================2、继续查询============================\n");scanf("%d",&j);if(j == 1){allmenu();}else{nextstep(year, month);}}/************************查询的当月*/void themonth(int year,int month){//定义变量struct tm t,*date;//tm结构指针time_t t_day;//声明time_t类型的变量t_dayint i,j;int day;if(month == 2 )//月份天数的判断if(year%4 == 0&&year%100 == 0||year%400 == 0)day = 28;elseday = 29;}else if(month == 4 || month == 6 || month == 9 || month == 11)//小月{day=30;}elseday=31;printf("查询日期当月天数是:%d\n日历\n",day); //输出当前天数printf("一\t二\t三\t四\t五\t六\t日\t\n"); //日历的第一行,显示一二三四五六日//功能:使当月中的每一天与对应的周几对齐for(i = 1;i <= day;i++){t.tm_year=year-1900;//从1900开始t.tm_mon=month-1;//月份【取值[0-11]】t.tm_mday=i;//一个月的日期[1-31]t.tm_hour=0;//时-取值区间t.tm_min=0;//分-取值区间t.tm_sec=0;//秒-取值区间t.tm_isdst=0;//夏令时标识符,实行夏令的时候为正否则为0t_day=mktime(&t);//date=gmtime(&t_day);if(i==1)for(j=0;jtm_wday;j++)printf("\t");}if(date->tm_wday == 6){printf("%d\n",i);}elseprintf("%d\t",i);}printf("\n\n");nextmenu(year,month);}bool sfnext(int * k)//判断是否继续{if((*k) == 1)return true;elsereturn false;}//是否进行后续操作void nextstep(int year,int month) {int m,k;do{printf("月历上翻请按-1,下翻请按1\n"); scanf("%d", &m);system("cls");if(m == 1){month += 1;printf("现在查询时间为%d年%d月的日历:\n",year,month); if(month/12 != 0){year = year + month/12;month = month % 12;}themonth(year,month);printf("是否继续查询,是:请按1\n");printf("否:请按0\n");scanf("%d",&k);}else if(m == -1){month -= 1;printf("现在查询时间为%d年%d月的日历:\n",year,month); if(month == 0){month = 12;year--;}if(month <= 0){month += 12;year--;}themonth(year,month);printf("是否继续查询,是:请按1\n");printf("否:请按0\n");scanf("%d",&k);}else{printf("error");}}while(sfnext(&k));}//读文件void Writetext(pText t){int len;char n;//读取文件FILE *fp;if((fp = fopen("C:\\text.txt","a+"))==NULL)//a+:以读写方式打开一个文件,允许读{printf("Cannot open the file ,press any key to exit");getchar();exit(0); //退出程序}printf("是否确定对某年某月某日进行备忘:y或n\n");getchar();scanf("%c",&n);if(n == 'y'||n == 'Y'){printf("请输入要添加备忘的数量:\n");scanf("%d",&len);printf("按格式输入(如:1 2014 6 17 c语言作业)\n");//输入需要备忘的年月日for(int i = 0;i < len; i++){printf("Num%d:",i+1);scanf("%d %s",&t[i].num ,&t[i].date);fprintf(fp,"%d %s\n",t[i].num ,t[i].date);//格式化读写}fclose(fp);}else{exit(-1);}}//判断文件是否读完int thelast(FILE*fp){if(fgetc(fp) == EOF)return 1;else{fseek(fp,-1L,SEEK_CUR);return 0;}}//查看备忘内容void Readtext(void){static char c[200];//文件输入FILE*fp;if((fp = fopen("c:\\text.txt","r")) == NULL){printf("文件不存在,按任意键退出.");exit(0);}else{printf("序号\n备忘内容\n");while(!thelast(fp)){fscanf(fp,"%s",c);//读取文件中的信息printf("%s\n",c);}printf("\n");}}void addtext(pText t){FILE *fp;int n,m;if((fp = fopen("C:\\text.txt","a+"))==NULL)//a+:以读写方式打开一个文件,允许读{printf("Cannot open the file ,press any key to exit");getchar();exit(0); //退出程序}printf("请输入要继续添加备忘的数量:\n");scanf("%d",&n);printf("已备忘数量:");scanf("%d",&m);printf("按格式输入(如:1 2014 6 17 c语言作业)\n");//输入需要备忘的年月日for(int i = 0;i < n; i++){printf("Addnum%d:",i+m+1);scanf("%d %s",&t[i+m].num ,&t[i+m].date);fprintf(fp,"%d %s\n",t[i+m].num ,t[i+m].date);//格式化读写}fclose(fp);}void exit_calendar(void)//退出系统{exit(1);}//主函数void main(){time_t now;//声明time_t类型变量time(&now);//获取时间printf("\n\t\t现在是:%s\n",ctime(&now));//系统时间allmenu();// nextstep(year, month,&t);//对当前月份的后续操作}。
C语言万年历设计报告
C语言课程设计报告题目:编写万年历系统年级:专业:班级:姓名:学号:目录第1章设计目的第2章需求分析第3章概要设计第4章源程序清单第5章执行结果1)登陆界面2)显示当前日月历3)显示具体日期信息第6章程序问题调试与课程设计心得第1章设计目的设计目的(实验要求):1.模仿现实生活中的挂历.2.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).3.当系统日期变到下一月时,系统自动翻页到下一月.第2章需求分析(1)程序运行时,首先给出菜单选项和输入提示:(2)用户可以通过主菜单选择不同选项。
输入1,通过输入当前日期可显示当前月的日历;输入2,通过输入具体日期(中间以空格分开)可显示该日具体信息;输入3,则退出查询系统。
第3章概要设计1.菜单选择界面可通过下面所示函数时现;主要思路:通过while语句与swich…case以及if条件语句实现菜单的循环功能和不同选项的功能实现。
闰年与平年的判断:代码如下:void main(){int year,month,day,a,b;while(1){printf("\n\n\n\n");printf("**********************************************************\n\n");printf(" * * \n");printf(" Welcome to enter calendar system \n");printf(" * * \n\n");printf("**********************************************************\n\n\n");printf(" 1 The month of current date 2 Date 3 Exit\n");printf(" please import your choose<1~3>,press Enter to define: ");scanf("%d",&b);switch(b){case 1:printf("\n Please import the year,month and day which you want tocheck,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,1);if(a==0){printf("Error!Please import again.\n");break;}yueli(year,month,day);break;case 2:printf("\n Please import the year,month and day which you want to check,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,day);if(a==0){printf("Error!Please import again.\n");break;}rili(year,month,day);break;case 3:exit(0);default:printf("Error!Please import again.\n\n");}}2.闰年的判断:计算所输入的年份是否可被4整除,若不能被整除,为平年。
c万年历课程设计
c 万年历课程设计一、课程目标知识目标:1. 让学生掌握年、月、日的概念及其关系,理解平年和闰年的区别;2. 使学生掌握如何使用万年历查找任意日期的星期,并了解其原理;3. 让学生了解不同历法的起源和发展,提高历史文化的认识。
技能目标:1. 培养学生运用数学知识解决实际问题的能力,如计算日期与星期之间的关系;2. 培养学生动手制作简单万年历的能力,提高动手操作和创新能力;3. 提高学生运用万年历进行时间管理和规划的能力。
情感态度价值观目标:1. 培养学生珍惜时间、合理安排生活的态度,树立时间观念;2. 激发学生对数学学科的兴趣,增强学习数学的自信心;3. 培养学生团队协作意识,学会与同学分享和交流学习心得。
本课程针对小学四年级学生设计,结合学生年龄特点和认知水平,注重知识性与趣味性的结合。
课程内容与教材紧密联系,旨在通过万年历的制作和使用,让学生在实际操作中掌握数学知识,提高解决问题的能力。
同时,注重培养学生良好的时间观念和情感态度,使学生在轻松愉快的氛围中学习,达到预期的学习成果。
二、教学内容1. 年、月、日的基本概念及其关系:包括一年有多少个月,一个月有多少天,平年和闰年的区别及其判断方法。
相关教材章节:第三章《年、月、日》。
2. 万年历的制作原理与使用方法:介绍星期与日期的关系,引导学生学会使用万年历查找任意日期的星期。
相关教材章节:第三章《认识星期》。
3. 不同历法的起源和发展:简述公历、农历等历法的历史背景,提高学生对历史文化的了解。
相关教材章节:第四章《历法的故事》。
4. 实践活动:分组让学生动手制作简易万年历,巩固所学知识,提高动手操作能力。
相关教材章节:第三章实践活动《制作自己的万年历》。
教学内容安排和进度:第一课时:介绍年、月、日的基本概念及其关系,判断平年和闰年的方法。
第二课时:讲解万年历的制作原理与使用方法,学会查找任意日期的星期。
第三课时:简述不同历法的起源和发展,提高历史文化认识。
C语言程序设计报告《万年历》
《“万年历”》—C语言程序设计报告专业:计算机科学与技术班级:姓名:指导教师:年月日目录1.设计的任务 (3)2.对问题的分析理解 (3)3. 采用的算法(流程图) (5)4. 算法中涉及的知识点 (6)5.设计用的计算机环境 (6)6 结论 (6)7.源代码 (7)1.设计的任务1.1设计编写一个C程序—“万年历”。
1.2输入任一年将显示出该年的所有月份日期,对应的星期。
1.3 下一行显示星期,从周日到周六,中英文都可以。
1.4 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐。
1.5 月份:中文英文都可以,注意闰年情况。
2.对问题的分析理解2.1 要输入任一年显示出该年的所有月份日期,应该先设计具体的输出格式,如下:the calendar of the year2008.JanuarySun Mon Tue 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 31FebruarySun Mon Tue Wed Thu Fri Sat1 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29=============================================…………2.2 判断是不是闰年 (year%4!=0||year%100==0&&year%400!=0)满足条件就是平年,把一年中的所有月份分为四类(28,29,30,31)。
2. 3 求出一年中的第一天是周几(year +(year-1)/4-(year-1)/100+(year-1)/400)%7。
2.4 有指针数组存放十二个月的英文和星期的英文缩写。
2.5 用FOR循环输出各月份的日历3. 采用的算法(流程图)开始定义整型变year,i=0,j=0,a,n,m=1,k=0和函数judge 定义一个指针变量**p定义两个字符型数组,month,week输入年份,yeara=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7i++,i<4n=judge(year,i+1),p=month+i输出月份回车Nj++,j<7输出星期回车k++,k<a输出六个空格m++,m<3输出占六个字节的天数(a+m)%7==0YY N输出回车n==2&&m==28YYn==3&&m==29break,退出本次循环break,退出本次循环n==4&&m==30break,退出本次循环Na=(a+m)%7回车输出”==============”结束NYYY Y4.算法中涉及的知识点4.1 定义整型,字符型,指针变量,字符型数组和指针数组。
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万年历课程设计
c 万年历课程设计一、课程目标知识目标:1. 学生能够理解年、月、日的关系,掌握平年、闰年的判断方法。
2. 学生能够运用所学的日期知识,制作一个简易的万年历。
3. 学生了解我国农历与公历的异同,认识到不同文化背景下的时间观念。
技能目标:1. 学生通过观察、分析、实践,提高解决问题的能力。
2. 学生学会运用万年历查找特定日期,为生活实际提供便利。
3. 学生能够运用所学知识,创新设计具有个性化的万年历。
情感态度价值观目标:1. 学生培养对时间管理的重视,养成珍惜时间、合理安排时间的好习惯。
2. 学生通过学习我国农历文化,增强民族自豪感,树立文化自信。
3. 学生在合作交流中,培养团队协作精神,学会尊重他人意见,取长补短。
本课程针对小学四年级学生设计,结合学生好奇心强、动手能力逐渐提高的特点,注重培养学生的学习兴趣和实际操作能力。
课程性质为实践性、探究性,旨在让学生在动手实践的过程中,掌握日期知识,提高解决实际问题的能力。
教学要求以学生为主体,教师为主导,注重启发式教学,激发学生的学习兴趣和思考能力,使学生在轻松愉快的氛围中学习,达到课程目标。
通过本课程的学习,学生能够具备制作和运用万年历的基本能力,同时培养良好的时间观念和团队协作精神。
二、教学内容1. 年、月、日的认识与关系- 公历与农历的基本概念- 年、月、日的定义及其相互关系- 平年与闰年的判断方法2. 万年历的制作方法- 万年历的基本结构- 制作万年历的步骤与技巧- 创新设计个性化万年历3. 日期查找与应用- 运用万年历查找特定日期- 日期在实际生活中的应用- 时间管理的方法与技巧教材章节关联:- 《数学》四年级上册第四章“年、月、日”- 《综合实践活动》四年级上册“我们的时间”教学进度安排:1. 第一节课:年、月、日的认识与关系,平年、闰年的判断方法2. 第二节课:万年历的基本结构,制作万年历的步骤与技巧3. 第三节课:个性化万年历的设计与创新,日期查找与应用4. 第四节课:总结与拓展,时间管理的方法与技巧教学内容确保科学性和系统性,以教材为依据,结合实际生活,让学生在掌握日期知识的基础上,学会制作和运用万年历,提高时间管理能力。
(2023)C语言万年历设计报告(一)
(2023)C语言万年历设计报告(一)C语言万年历设计报告这份报告是针对 2023 年度 C 语言万年历设计而准备的。
设计目的该万年历的设计目的是为了让用户能够快速地查看任意公历年份的日历,同时还能够显示节气、万年历和日历信息。
设计思路该万年历的主要思路是通过用户输入任意公历年份,在程序中计算并显示该年的日历信息。
具体实现思路如下:1.用户输入年份信息。
2.程序判断该年份是否为闰年,并计算该年的总天数。
3.根据该年第一天是星期几,排列该年每个月的天数。
4.标记国历节日,如元旦、劳动节等。
5.计算并标记该年的节气,如立春、清明等。
6.计算并标记该年的重要万年历信息,如“三伏”、“四季”等。
设计要点在实现该万年历的过程中需要注意以下几个要点:1.为了代码的可维护性,尽量将每个功能模块拆分成函数的形式。
2.程序中需要处理日期的加减运算,可以使用标准库中的<time.h>。
3.节气和万年历的计算应该基于一些公式而不是硬编码。
设计结果经过实现,该万年历已经能够正常运行,并能够正确地显示各种信息。
用户输入任意公历年份后,程序可以迅速计算并展示该年的万年历、节气和重要节日信息。
结论通过本次 C 语言万年历的设计,我们不仅深入地了解了日期处理等相关知识,还提升了编码的能力。
在日常开发中,我们也可以根据这些基础知识,设计更为实用的应用程序。
可改进之处尽管该万年历已经能够满足基本的需求,但仍有一些改进空间。
例如:1.目前仅支持公历,可以添加其他历法的支持,如农历、阴阳历等。
2.界面可以进一步美化,增加更多交互性的组件,如按钮、下拉菜单等。
3.可以添加更多的功能,如查询特定日期的天气、星座运势等。
总结本次 C 语言万年历设计,使我们更好地理解了日期处理的相关知识,提高了我们的编码水平。
同时,我们也意识到在实际项目中,需要更多的功能和优化,才能更好地服务于用户的需求。
通过持续不断的学习和实践,我们可以不断提升自己的编程技能。
c语言万年历课程设计报告
本次课程设计的主题为“C语言万年历”,旨在通过设计和实现一个简单的万年历程序,深入了解C语言程序设计的基本方法和技巧。
通过本课程设计的学习,我对C语言程序设计的各个方面进行了深入的了解和掌握,同时也提高了自己的编程思维和实践能力。
一、设计思路。
本次课程设计的主要功能是实现万年历。
在设计程序之前,我首先对万年历的基本功能进行了分析和思考,包括输入年月日,输出当月的日历和星期几等。
同时,考虑到用户友好性,我还增加了一些额外的功能,如输入错误时的提示,具体日历同时附带节假日等。
在分析了功能需求之后,我便开始考虑程序设计的具体实现。
首先,我选择了C语言作为实现程序的语言,因为C语言广泛应用于各类软件工程和移动计算等领域,适用性强,易于学习和掌握。
接着,我根据分析需求,确定了程序的基本框架和主要模块,包括输入年月日模块、求解该日是星期几模块、绘制当月日历模块和判断节日等模块。
二、程序实现。
在程序实现过程中,我遵循了模块化编程的原则,把整个程序划分成几个独立的模块,并在模块之间进行数据交互和函数调用。
具体来说,我分别实现了以下几个模块:1.输入年月日模块:该模块负责接收用户输入的年月日信息,并检查输入格式是否正确。
在输入不合法时,该模块能够给用户相应的提示信息,并要求用户重新输入。
2.求解该日是星期几模块:该模块根据给定年月日,求出该日是星期几。
该模块采用基姆拉尔森计算公式来实现。
3.绘制当月日历模块:该模块负责绘制给定月份的日历,并标注当日及节假日等信息。
在绘制日历时,该模块能够考虑各种特殊情况,如闰年、月初不为星期一等。
4.判断节日等模块:该模块能够根据给定年月日信息,判断当日是否为节假日、纪念日等特殊日子,如春节、圣诞节等,并在日历上作出相应标注。
以上四个模块构成了整个程序的主要功能。
在实现过程中,我还遇到了一些问题,如求解闰年的问题、绘制多行日历的问题等。
针对这些问题,我通过查找资料、借鉴其他同学的代码等方式进行了解决。
C语言万年历设计报告
千里之行,始于足下。
C语言万年历设计报告以下是一个关于C语言万年历设计报告的例子,共计约:设计报告:C语言万年历1. 引言万年历是一种用来显示特定年份日历的工具。
本设计报告将介绍一个使用C语言编写的万年历程序,它可以接受用户输入的年份,并显示该年份的日历。
2. 设计目标本程序的主要设计目标是实现以下功能:- 接受用户输入的年份。
- 检查年份的有效性。
- 显示该年份的万年历。
3. 设计思路万年历程序的设计思路如下:- 首先,接受用户输入的年份。
这可以通过使用C语言的scanf函数等方法来实现。
- 然后,检查年份的有效性。
年份必须大于0且小于或等于当前年份。
这可以通过使用C语言的条件语句来实现。
- 接下来,确定年份的第一天是星期几。
这可以通过查找该年份第一天距离已知星期几(比如星期一)的天数来实现。
- 然后,确定该年份每个月的天数。
根据已知的规则(比如闰年规则),计算每个月的天数。
- 最后,根据以上信息,显示该年份的日历。
可以使用C语言的循环语句和格式化输出函数来实现。
第1页/共2页锲而不舍,金石可镂。
4. 主要函数本程序将包含以下主要函数:- int isLeapYear(int year):判断给定年份是否是闰年。
根据已知的闰年规则进行计算,并返回一个布尔值。
- int getFirstDayOfWeek(int year):确定给定年份的第一天是星期几。
根据该年份的第一天距离已知星期几的天数进行计算,并返回一个整数(代表星期几)。
- void printCalendar(int year):根据给定年份的信息,打印该年份的日历。
5. 测试和调试在开发过程中,可以使用一些测试和调试方法来确保程序的正确性和稳定性。
比如:- 输入测试:使用各种不同类型的数据(正常、边界和异常)进行测试,确保程序在各种情况下都能正常工作。
- 边界测试:测试该程序处理边界条件的能力,比如闰年、非闰年、最小年份、最大年份等。
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. 实践活动:组织学生进行小组活动,共同设计与制作一个具有特色的万年历,培养学生的动手能力和团队协作精神。
教学内容依据课程目标进行选择和组织,注重科学性和系统性。
教学大纲明确以下安排和进度:第一课时:年、月、日的基本概念及其关系,平闰年的判断方法。
第二课时:万年历的原理与编制方法,查找特定日期的技巧。
第三课时:历法的演变与文化,不同文化背景下的时间记录方式。
第四课时:实践活动,设计与制作万年历。
教学内容与课本紧密关联,符合教学实际,旨在帮助学生系统掌握万年历相关知识。
c语言课程设计报告模板万年历
C语言课程设计报告模板-万年历
引言
万年历是一个非常实用的工具,能够帮助人们快速查找任意日期的详细信息。
本报告将介绍我们设计的C语言万年历程序的实现及其功能。
设计目标
我们的设计目标是开发一个简单易用的C语言万年历程序,该程序应具备以下功能: - 显示指定年份的整年日历信息 - 显示指定年份指定月份的月历信息 - 显示指定日期的详细信息,如星期几、所在月份等 - 具备用户友好的交互界面
设计思路
我们的设计思路如下: 1. 获取用户输入的年份、月份和日期信息。
2. 判断用户输入的年份是否为闰年。
3. 根据用户输入的年份计算出该年份的1月1日是星期几。
4. 根据用户选择的功能,分别显示整年日历、月历或详细日期信息。
实现步骤
我们按照以下步骤实现了C语言万年历程序:
步骤一:获取用户输入
首先,我们使用scanf()函数获取用户输入的年份、月份和日期信息。
```c int year, month, day; printf(。
C语言万年历课程设计报告书
C语言万年历课程设计报告书内部编号:(YUUT-TBBY-MMUT-URRUY-UOOY-DBUYI-0128)C语言课程设计报告书万年历系统设计学院:理学院专业:信息与计算科学姓名:指导教师:序言经过一个学期对《C程序设计》的学习,同学们都认为真正的学到了有用知识,可能有一些人学的不够理想,但无论如何,这些知识都为我们的下一步学习打下了坚实的基础。
做这么一个课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
本程序是一个万年历程序,可以查询1970年1月1日到2100年1月1日中任意一天是星期几,只要在运行程序时按照要求输入年,月,日,程序就会把这一天是星期几显示子啊屏幕上;也可以输入一个年份和一个月份,程序就会把该月份的月历显示在屏幕上,使人一目了然。
该程序能与目前天文学研究中所采用的各种日历程序所能计算的结果相一致。
还有许多功能等着你去探讨。
这个程序花费了很多时间,用了一天的时间去设计程序和调试程序,而在调试程序的过程中,经常会出现一些不如意的地方,所以程序就要修改。
所以这样经过一次又一次的修改之后,程序更显得人性化。
通过这一次程序的设计,让我深深的感受到程序员的辛苦。
2012年6月11日【课程设计题目:万年历系统】【要求】1:程序的功能多样;2:输入日期能够判断该日期是星期几;3:输入一个年份能够显示出该年的全部月历;4:输入一个年月能够显示该月的月历;5:输入一个年份能够判断该年是闰年还是平年;6:能够退出。
程序代码:{printf("please input the day youwant(2100,1,1>****,**,**>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day);for(b=0,r=0;b<month;b++){r=a[b]+r;}year=year-1972;r=r+(year/4)*1461+(year%4)*365+day;if(r%7==0)printf (" Today is Saturday.\n");else if(r%7==1)printf(" Today is Sunday.\n");else if(r%7==2)printf(" Today is Monday.\n");else if(r%7==3)printf(" Today is Tuesday.\n");else if(r%7==4)printf(" Today is Wednesday.\n");else if(r%7==5)printf(" Today is Thursday.\n");else printf(" Today is Firday.\n");choose=getchar();printf("Continue(y/n):\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}主要功能模块2:程序代码:{static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31}; int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year); weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year); weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<weekday+2;i++)printf ("\t");for (i=1;i<=y;i++){if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i);else printf ("%3d\t",i);};}主要功能模块3:程序代码:{ int i;if (year%4==0&&year%100!=0||year%400==0) i=1;else i=0;return i;}【用到的语句】1.<stdio.h>,<conio.h> /*头文件*/2.main() /*主函数*/3.printf(),4.scanf()5.a[] /*数组*/6.if 语句7.for 语句8.void /*要调用到的函数*/【源程序代码】#include<stdio.h>#include <conio.h>int main() //主函数{ int leap_year(int y);int count_leap(int year);int monthdays(int month,int year);void monthprint(int year,int month);int year,month,day,b,r,number; //定义变量char choose;int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf("*********************************mainMeun********************** *************\n");printf(" 1:ri qi>>>xing qi ji.\n");printf(" 2:yue li.\n");printf(" 3:ri li.\n");printf(" 4:run nian pan duan. \n");printf(" 5:exit\n");printf("\n");printf("*************************************************************** **************\n");printf (" please input the number:");scanf("%d",&number);if(number==1){printf("please input the day youwant(2100,1,1>****,**,**>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day); //输入要查询的日期for(b=0,r=0;b<month;b++) //计算输入月份与但年月份间隔了多少天{r=a[b]+r;}year=year-1972;r=r+(year/4)*1461+(year%4)*365+day; //计算输入日期与1970,1,1间隔了多少天if(r%7==0)printf (" Today is Saturday.\n");else if(r%7==1)printf(" Today is Sunday.\n");else if(r%7==2)printf(" Today is Monday.\n");else if(r%7==3)printf(" Today is Tuesday.\n");else if(r%7==4)printf(" Today is Wednesday.\n");else if(r%7==5)printf(" Today is Thursday.\n");else printf(" Today is Firday.\n");choose=getchar();printf("Continue(y/n):\n"); //选择是否继续scanf("%c",&choose);if (choose=='y'||choose=='Y') main(); //主函数调用主函数本身 }else if(number==2){ printf(" please input the year(5000>****>0):");scanf("%d",&year); //输入要查询的年份for(month=1;month<13;month++) //循环输出12个月份的月历{ printf(" %dyear %dmonth\n",year, month);printf("*************************************************************** *************\n");printf(" Sun Mon Tue Wen Thu Fri Sat\n");monthprint(year,month);printf("\n");printf("*************************************************************** *************\n");}choose=getchar();printf("Continue(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}else if(number==3){ printf("please input the year and month(2100,1>****,**>1970,1):"); scanf("%d,%d",&year,&month); //输入要查询的年,月printf(" %dyear %dmonth\n",year,month);printf("*************************************************************** *********\n");printf(" Sun Mon Tue Wen Thu Fri Sat\n");monthprint(year,month); //printf("\n");printf("*************************************************************** *********\n");choose=getchar();printf("Continue(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main(); }else if(number==4){ printf(" please input a year5000>****>0:");scanf("%d",&year); //输入要查询的年份 if(leap_year(year))printf("This is runyear.\n");else printf("This is pingyear.\n");choose=getchar();printf("Continue(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}else //选择其他则退出return 0;}int leap_year(int year) //判断是否闰年{ int i;if (year%4==0&&year%100!=0||year%400==0) i=1;else i=0;return i;}int count_leap(int year){ int i=0,j,min,max;if(year>2006) {min=2006;max=year;}else {min=year+1;max=2006;}for(j=min;j<max;j++)if(leap_year(j)) i++;return i;}int monthdays(int month,int year) //该月的天数{ int sum=0,i,j;if(year>=2006){ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};j=month-1;if(leap_year(year)) t[1]=29;else t[1]=28;for(i=0;i<j;i++)sum=sum+t[i];}else{ static int t1[12]={31,30,31,30,31,31,30,31,30,31,0,31}; j=12-month;if(leap_year(year)) t1[10]=29;else t1[10]=28;for(i=0;i<=j;i++)sum=sum+t1[i];}return sum;}void monthprint(int year,int month) //输出该月的月历{ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year);weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<weekday+2;i++) //输出该月第一天所在位置之前的空格printf ("\t");for (i=1;i<=y;i++) //输出该月的月历{if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i);else printf ("%3d\t",i);};}【调试及分析过程】1:在代码编辑器上输入以上程序代码后,保存并f9到tc3.0上运行结果输出:分析:运行后出现“菜单”,选项意思是:输入1,则确定一个日期是星期几。
c万年历课程设计
c 万年历课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日之间的关系。
2. 学生能够运用数学知识,进行日期的计算和推算。
3. 学生能够了解不同历法的起源和发展,认识我国农历的特色。
技能目标:1. 学生能够运用所学知识,制作简单的万年历。
2. 学生能够通过观察、分析、推理等方法,解决日期计算问题。
3. 学生能够运用信息技术,查找历法相关资料,提高信息处理能力。
情感态度价值观目标:1. 学生培养对时间观念的尊重,养成珍惜时间的良好习惯。
2. 学生通过学习万年历,增强对我国传统文化的认同感。
3. 学生在学习过程中,培养合作意识,提高团队协作能力。
课程性质:本课程为数学学科拓展课程,结合实际生活,培养学生的实际应用能力。
学生特点:四年级学生具有较强的观察、分析、推理能力,对新鲜事物充满好奇心。
教学要求:注重理论与实践相结合,鼓励学生主动探究,充分调动学生的学习积极性。
在教学过程中,关注学生的个体差异,因材施教,确保每个学生都能达到课程目标。
通过课程学习,使学生能够将所学知识运用到实际生活中,提高综合素养。
二、教学内容1. 年、月、日的基本概念及关系- 介绍公历、农历的年份、月份、日期的表示方法。
- 讲解平年、闰年的判断方法及其意义。
2. 日期的计算与推算- 掌握日期推算的基本方法,如加减法、乘除法等。
- 引导学生运用所学知识,解决实际问题,如计算某人生日是星期几。
3. 历法的起源与发展- 简要介绍世界主要历法的发展历程。
- 着重讲解我国农历的起源、特点及其在生活中的应用。
4. 制作简单万年历- 教授制作方法,引导学生运用所学知识,动手制作属于自己的万年历。
- 选取合适的教学案例,展示万年历在实际生活中的应用。
5. 教学内容的安排与进度- 第一章节:年、月、日的基本概念及关系(1课时)- 第二章节:日期的计算与推算(2课时)- 第三章节:历法的起源与发展(1课时)- 第四章节:制作简单万年历(2课时)教学内容与教材关联性:本教学内容紧密围绕课程目标,结合教材相关章节,确保教学内容的科学性和系统性。
c万年历课程设计
c 万年历课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日的关系及换算方法;2. 学生能够运用所学的日期知识,正确编制简单的万年历;3. 学生了解我国农历及二十四节气的由来及特点。
技能目标:1. 学生通过实际操作,提高观察能力、分析能力和解决问题的能力;2. 学生能够运用万年历知识解决生活中的实际问题,如计算日期、安排活动等;3. 学生掌握基本的计算机或手工制作万年历的技能。
情感态度价值观目标:1. 学生培养对时间管理和珍惜时间的意识,树立时间观念;2. 学生在学习过程中,增强对我国传统文化的认同感和自豪感;3. 学生通过合作学习,培养团队协作能力和沟通能力,形成积极向上的学习态度。
课程性质:本课程为综合实践课程,结合数学、历史、文化等多学科知识。
学生特点:五年级学生具备一定的观察能力、分析能力和动手操作能力,对新鲜事物充满好奇心。
教学要求:教师应注重激发学生的学习兴趣,引导他们主动探究万年历知识,将理论与实践相结合,提高学生的综合运用能力。
同时,关注学生的情感态度价值观的培养,使他们在学习过程中形成正确的价值观。
通过分解课程目标为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. 万年历的基本概念:介绍年、月、日的关系,引导学生理解闰年和平年的区别,掌握日期的换算方法。
教材章节:《数学》五年级下册第四章“年、月、日”2. 农历及二十四节气:讲解我国农历的起源、发展及特点,引导学生了解二十四节气的意义及农事活动。
教材章节:《传统文化》五年级下册第三章“我国的农历和节气”3. 万年历的制作:指导学生运用所学的日期知识,手工或使用计算机软件制作简单的万年历。
教材章节:《信息技术》五年级下册第四章“电子表格的应用”4. 实践活动:组织学生进行观察、记录和分析,了解日常生活中时间管理的重要性,提高珍惜时间的意识。
教材章节:《综合实践活动》五年级下册第二单元“时间管理”教学进度安排:第一课时:万年历的基本概念及换算方法第二课时:农历及二十四节气的学习第三课时:万年历制作方法的学习与实践第四课时:实践活动及成果展示教学内容注重科学性和系统性,结合教材章节,使学生在掌握万年历知识的同时,提高实践操作能力,培养正确的价值观。
万年历c语言课程设计
万年历c语言课程设计一、课程目标知识目标:1. 让学生掌握C语言中结构体和指针的基本概念及应用。
2. 使学生理解万年历的核心算法,包括日期的存储、计算及显示。
3. 帮助学生掌握如何使用C语言进行简单的文件操作。
技能目标:1. 培养学生运用结构体和指针进行数据组织的能力。
2. 培养学生利用循环和判断语句进行逻辑处理的能力。
3. 提高学生利用C语言解决实际问题的编程能力。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,增强其学习动力。
2. 培养学生团队协作和沟通能力,使其在合作中共同解决问题。
3. 培养学生面对问题时的耐心和毅力,树立正确的价值观。
课程性质:本课程为C语言程序设计实践课,强调理论与实践相结合,培养学生的编程能力和实际应用能力。
学生特点:学生已经具备一定的C语言基础,了解基本语法和编程思路,但对结构体、指针等高级概念掌握不牢,需要通过实践加深理解。
教学要求:教师应注重引导学生运用所学知识解决实际问题,关注学生个体差异,提供个性化指导,确保学生在课程中学有所得。
通过本课程的学习,将目标分解为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. 结构体和指针的概念与应用- 结构体定义和使用- 指针的基本概念和操作- 结构体指针及用法2. 万年历核心算法- 日期的存储与计算- 判断闰年的方法- 星期计算算法3. C语言文件操作- 文件的打开与关闭- 文件读写操作- 文件错误处理4. 万年历程序设计- 界面设计及用户交互- 功能模块划分与实现- 程序调试与优化教材章节关联:1. 结构体与指针:参考教材第3章“复合数据类型”和第4章“指针”。
2. 核心算法:结合教材第6章“控制语句”和第7章“函数”。
3. 文件操作:参考教材第8章“文件”。
4. 程序设计:综合运用教材第1章至第8章的知识点。
教学进度安排:1. 结构体和指针(2课时)2. 万年历核心算法(3课时)3. C语言文件操作(2课时)4. 万年历程序设计(4课时)三、教学方法本课程采用以下教学方法,旨在激发学生学习兴趣,提高教学效果:1. 讲授法:- 对于结构体、指针等基本概念和理论,采用讲授法进行教学。
C语言实训题目设计报告 万年历
C语言实训题目设计报告:万年历系统1、题目设计:设计一个万年历系统功能要求:(1)从2000年开始,用户输入年份与月份,将显示出该年该月份的日历,对应的星期。
(2)用户输入年份,将显示该年的日历(3)注意闰年情况显示格式要求如下:(1)第一行显示月份(中英文都可以)(2)下一行显示星期,从周日到周六,中英文都可以(3)下一行开始显示日期从1号开始,并按其是星期几实际情况与上面的星期数垂直对齐(4)程序输出菜单,用户按照提示操作,最终得到计算结果。
2、问题分析:该程序可大致分成主菜单、年历、月历3个部分,并且还有判断是否为闰年、月份的天数、该月第一天为周几三个小模块,并可由年历、月历调用,年历、月历可由主菜单调用。
最后可以考虑一下界面的优化和输入错误等小问题。
3、算法设计:主菜单部分:用户输入选项,用一个switch语句来进行接下来的任务,其中有一个选项是用来退出的。
在进行到程序结尾的时候用goto语句来实现回到函数最开始的目的。
月历部分:从键盘接收年份和月份,通过小函数来获得本月的天数和本月一号是周几,从而在屏幕上输出月历。
在到周末的时候换行。
年历部分:大体思路和月历相似,只是多用了一个for循环,使得月份从一月一直到十二月(其实这部分我是复制的月历部分的)。
判断闰年部分:输入年份,输出1或0。
判断天数部分:输入年份,月份,输出天数。
其中有调用闰年的函数。
判断周几部分:输入年,月,日,输出是周几的信息。
4、程序源代码:#include<stdio.h>#include<color.h>#include<conio.h>int ifren(int year)//判断是否是闰年{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;}int monthday(int month,int year)//判断这个月有多少天{if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) return 31;if(month==4||month==6||month==9||month==11)return 30;if(month==2&&ifren(year)==1) return 29;else return 28;}int firstday(int month,int year)//判断本月一日是周几{int w;if(month==1||month==2){month+=12;year=year-1;}w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1; //蔡勒公式return w;}void yueli(){ int i,k=1,startday,monthdays,month,year;//k是第几周的标志system("cls");printf("=======================================================\n输入年份:");scanf("%d",&year);printf("输入月份:");scanf("%d",&month);monthdays=monthday(month,year);startday=firstday(month,year);printf("\t\t\t%d月\n",month);printf(" Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");if(startday==7){for(i=1;i<=monthdays;i++){printf("%d\t",i);if(i%7==0){printf("\n");}}}if(startday!=7){for(i=1;i<=startday;i++){printf("\t");//把每月1日之前的空格打出来}for(i=1;i<=monthdays;i++){printf("%d\t",i);if(i==7*k-startday){printf("\n");k++;}}}printf("\n\n");}void nianli(){int i,j,k,startday,monthdays,month,year;system("cls");printf("=======================================================\n输入年份:");scanf("%d",&year);for(month=1;month<=12;month++){k=1;monthdays=monthday(month,year);startday=firstday(month,year);printf("\t\t\t%d月\n",month);printf(" Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");if(startday==7){for(i=1;i<=monthdays;i++){printf("%d\t",i);if(i%7==0){printf("\n");}}}if(startday!=7){for(j=1;j<=startday;j++){printf("\t");}for(i=1;i<=monthdays;i++){printf("%d\t",i);if(i==7*k-startday){printf("\n");k++;}}}printf("\n\n");}}int main(){restart:printf("\n\n\n\n");printf("=======================================================\n\n");//主菜单printf("== 万年历==\n\n");printf("== 1、月历==\n\n");printf("== 2、年历==\n\n");printf("== 3、退出==\n\n");printf("=======================================================\n\n");printf("输入数字,来执行相应的功能\n");int select;scanf("%d",&select);switch (select){case 1:yueli();break;case 2:nianli();break;case 3:system("cls");exit(0);break;default:printf("输入错误!\n祖さま、すごいですね!\n");}system("pause");//弄成可以在windows下人性化运行system("cls");goto restart;return 0;}截图:主菜单:月历:年历:5、使用说明:打开程序后,依照主菜单的提示输入数字选择功能,进行万年历的查阅。
C语言万年历设计报告
千里之行,始于足下。
C语言万年历设计报告设计报告:C语言万年历1. 引言本文旨在介绍一个基于C语言开发的万年历设计,并对其设计思路、代码细节、实现效果进行具体的阐述。
万年历是一种依据历法规章,能够显示任意年份任意月份的日历的工具。
在本设计中,我们使用C语言来编写一个简易的万年历程序,具备显示任意年份任意月份的日历、日期查询等功能。
2. 设计思路2.1 数据结构设计在设计万年历程序时,我们需要设计适用于存储日期信息的数据结构。
考虑到日历是依据年份和月份来呈现的,我们可以使用结构体来存储日期的年、月、日信息。
具体数据结构如下:```struct Date {int year;int month;int day;};```2.2 星期计算算法第1页/共3页锲而不舍,金石可镂。
在日历中,我们需要依据给定日期计算出其对应的星期。
这里我们接受Zeller公式来计算星期。
Zeller公式可以依据给定的年、月、日计算出一个对应的星期数。
具体公式如下:```h = (q + ((13*(m+1))/5) + K + (K/4) + (J/4) - (2*J)) % 7```其中,h是一个星期的编号,0代表星期一,1代表星期二,以此类推。
2.3 日历显示算法对于日历的显示,我们需要依据给定的年份和月份计算出该月的天数,并打印出日历表。
具体算法如下:- 首先,依据给定的年份和月份,计算出该月的天数。
- 然后,依据给定年份、月份、星期计算公式,计算出该月的第一天是星期几。
- 接下来,依据计算结果,打印出日历表。
3. 主要函数设计在C语言万年历程序的设计中,我们主要需要设计以下几个函数:3.1 输入函数该函数用于接收用户输入的年份和月份,并进行基本的输入验证,确保输入的年份和月份在合理范围内。
千里之行,始于足下。
3.2 星期计算函数该函数依据给定的年份、月份、日期,计算出对应的星期数,并返回星期数。
3.3 天数计算函数该函数依据给定的年份和月份,计算出该月的天数,并返回天数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华东交通大学理工学院
课程设计报告书
所属课程名称 C++程序设计课程设计
题目万年历
-
分院电信分院
专业班级 2012级计算机 (1) 班
学号 20
学生姓名陶志敏
指导教师肖盛文
2013 年 6月16 日
课程设计报告书 (1)
第一章需求分析................................................. . (3)
第二章概要设计................................................. . (4)
第三章详细设计与编码 (6)
第四章调试分析 (9)
第五章用户使用说明 (12)
设计心得 (13)
参考文献 (14)
致谢................................................. .. (14)
第一章需求分析
如今的社会是一个信息的时代,随着电脑等科技产品在人们生活中占据着越来越重要的地位,人们就会越加的善加利用,这为我们的生活带来了极大的效率,同时计算机的普及更可以看出它所占的地位。
万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便
,是一种比较实用的小工具。
我们每个人都可以在自己的个人电脑上进行制作,一方面不仅可以加强巩固我们对C++语言的学习,还可以通过自主的编程找到自身的缺点。
这对培养我们自身的创新能力和动手能力具有很大的作用。
第二章概要设计
1.设计要求
程序完成运行时,能过正确的表达出所输入年份的万年历。
2.总体设计
<1>实现操作流程图
<2>程序设计流程图
第三章详细设计与编码
<1>源代码
#include<iostream>
#include<iomanip>
using namespace std;
int monthday(int year,int month);
int newdays(int year);
//输出日历表
int output(int year)
{
int i,j,k,n;
int firstmonthday[12];
char month[12][10]={{"一月"},{"二月"},{"三月"},{"四月"},{"五月"},{"六月"},{"七月"},{"八月"},{"九月"},{"十月"},{"十一月"},{"十二月"}};
char weekday[]={" 日一二三四五六"};
for(i=0;i<12;i++)
{
if(i==0)
firstmonthday[i]=newdays(year);
else
firstmonthday[i]=(firstmonthday[i-1]+monthday(year,i))%7;
}
int month1[6][7],month2[6][7],month3[6][7];
cout<<year<<"年"<<endl;
for(i=0;i<12;i+=2)
{
cout<<setw(4)<<month[i]<<setw(17)<<'\t'<<setw(4)<<month[i+1]<<endl; cout<<weekday<<"\t"<<weekday<<endl;
for(j=0;j<6;j++)
{
for(k=0;k<7;k++)
{
month1[j][k]=k+1-firstmonthday[i]+j*7;
month2[j][k]=k+1-firstmonthday[i+1]+j*7;
}
for(n=0;n<7;n++)
{
if(month1[j][n]<1||month1[j][n]>monthday(year,i+1)) cout<<" ";
else
cout<<setw(3)<<month1[j][n];
}
cout<<'\t';
for(n=0;n<7;n++)
{
if(month2[j][n]<1||month2[j][n]>monthday(year,i+2)) cout<<" ";
else
cout<<setw(3)<<month2[j][n];
}
cout<<'\n';
}
}
return 0;
}
//判断某年某月的天数
int monthday(int year,int month)
{
int d;
switch(month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:d=31;break; case 4:case 6:case 9:case 11:d=30;break;
case 2:
if ((year%4==0)&&(year%100!=0)||(year%400==0)) d=29;
else d=28;
}
return d;
}
//判断元旦的星期几
int newdays(int year)
{
int day;
if((year%4==0)&&(year%100!=0)||(year%400==0))
day=(year-1+(year/4)-(year/100)+(year/400))%7;
else
day=(year+(year/4)-(year/100)+(year/400))%7;
return day;
}
//主函数实现
int main()
{
int year;
char choose;
next:
cout<<" -----------------------------------------\n";
cout<<" - 欢迎使用万年历查询 -\n";
cout<<" -----------------------------------------\n";
cout<<" 请输入你所要查询的年份: ";
cin>>year;
output(year);
}
第四章调试分析
<1>程序运行测试
①进入程序界面:
(进入程序的第一步)
②输入所查年份:
(例上输入所查年月2013)
③现实所查年份万年历:
(以上就是完整的输出结果)
第五章用户使用说明
这是一个简单的万年历编程,用户可以通过键入所查的年份,便可以轻松快速的查询这一年的万年历,使用用户在运行程序后,可以通过界面的指示键入所查的年份。
设计心得
通过几天的不懈努力,这一份C++的课程设计终于在自己的努力与同学的帮助下顺利的完成了。
前期可能是自己的一些方面薄弱,并没有完全的理解一些代码,从而设计出来的程序编译出错,还好在一些知识能力强的同学下进行了合理的改正才有了现在的这个完整的程序。
设计一个万年历的程序之前,可能都是有自己大概的一点想法,也许看上去简单,但通过实际的操作我便发现,各种细小的错误都可能会出现,这便让我意识到个人平时的动手操作还是有欠缺的。
所以还是如老师讲的那般,以电脑软件的检验来通过不断的练习完善自己的薄弱点。
通过这次为数不多的几天计算机实践学习,加上这学期的学习,我了解了一些关于c++语言的知识,理解巩固了我c++语言的理论知识,开始可能学的枯燥,但不断的深入便能发现他的有趣点,就如这一次万年历的设计,所以这便更容易让我感觉到,只要认真的学了,加上自己的汗水,还是
一样能够有收获的。
参考文献
作者:周蔼如林伟键 C++程序设计基础
作者:谭浩强 C++程序设计
百度文库:
致谢@。