C语言日历显示课程设计报告(含源代码)

合集下载

c语言课程设计报告--万年历

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语言万年历设计报告

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语言课程设计-日历显示

中国海洋大学青岛学院C语言课程设计报告书题目日历显示学生姓名指导教师学院专业班级组内分工目录1 前言 (1)2 需求分析 (2)3 模块设计图及组内分工 (3)4 NS流程图清单 (5)5 存储结构及函数说明 (8)6 课程设计结果 (9)7 实践心得体会 (14)前言设计目的:1.加深对《C语言程序设计》课程所学知识的理解,进一步巩固C语言语法规则。

学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。

2.对题目的理解:1.本程序设计了一个比较完整的有一定功能的日历显示系统。

2.该题目要求熟练的掌握C语言的基本知识。

中包括数据类型(int、char);运算类型(算术运算、逻辑运算、自增运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构),进一步掌握各种函数的应用,包括时间函数等。

2 需求分析该系统共有四个大部分:日历显示功能、日历查询和闰年判断功能、参数检查功能、选做(通过键盘操作选择各个菜单)。

本系统通过对某天的查询、闰年的判断,日期的合法性判断,日期的调整等各部分进行了有效的计划,组织和控制,得到了一个功能比较完整并能实现一定功能的日历显示系统。

日历显示功能:判断星期,根据公式有年月日判断星期:打印时,通过第一天星期的判断,得到后面的日期,通过定长度输出。

对于初始输入当前日历,可通过函数取出系统时间进行初始化。

日历查询和闰年判断功能:闰年的判断,日期的查询,就是直接打印该天所在月份的日历。

参数检查功能:判断日期是否合法,如果合法,再判断闰年,之后判断二月份是否满足要求。

如果输入不合法或者不满足输入要求,则要求重新输入。

选做(通过键盘操作选择各个菜单):捕获键盘的输入,再判断哪个键的输入,根据某键的输入,则设置相应的年或月或日的值,再属性输出,则可以实现日期的调整。

3 模块设计图及组内分工模块一:日历显示功能判断星期,根据蔡勒公式,有年月日判断星期:nDay=year-1+(year-1)/4+(year-1)/400+ndayw=nDay%7;其中year:要查询的年份,nday:从该年的一月一日起到该天的天数,w:得出的星期数,w==0代表星期天打印月历时,通过第一天星期的判断,依次得到后面的日期,通过定长度输出,遇到星期六就换行输出,因此可以按照月历的格式输出。

c语言课程设计万年历带源程序

c语言课程设计万年历带源程序

2012-2013学年第二学期《高级语言程序设计》课程设计报告题目:万年历查询专业:网络工程班级:12(1)班姓名:xxx指导教师:xxx成绩:计算机与信息工程系二0一三年六月二十日目录1设计内容及要求 (2)1.1设计容 (2)1.2设计任务及具体要求 (2)2概要设计 (3)2.1设计内容及要求 (3)2.2该系统的功能简介 (3)2.3总体程序框图 (3)2.4各个模块之间的主要关系 (3)3.3设计过程或程序代码 (4)3.1各个模块的程序流程图及运行界面 (4)3.2对关键代码加以分析说明 (4)4设计结果与分析 (19)5小结 (22)致谢 (22)参考文献 (23)附:源程序 (18)1设计内容及要求1.1设计内容万年历查询算法。

1.2设计任务及具体要求设计一个小型信息系统,具有信息录入、信息浏览显示、信息删除修改、信息查询等功能,重点解决是查询的实现问题。

利用软件工程中的方法进行系统分析。

学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。

2概要设计2.1该程序可实现的功能主要有以下几点1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。

假定输入的年份在1-9999年之间。

2、输入年月,输出该月的月历。

3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。

:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。

即:当前若正在显示2011年的年历,按下键盘“↑”方向键后,年历变为2010年的。

2.2程序的流程图:(见下页)流程图3、详细设计(程序代码分析)3.1变量的说明变量说明:(以下均为整型变量)year 表示年份的变量;month 表示月份的变量;day 表示日期的变量;select 表示菜单选择的;变量i 表示月份的变量;j 表示一个月中的某一天的变量;sum 判断某天是一年中的第几天的变量;number判断某天离公元1年1月1日还有几天的变量;a[] 表示每月天数的数组变量;year1 系统时间年份的变量;month1 系统时间月份的变量;day1 系统时间日期的变量;3.2程序的分析#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/ #define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49#define KEYNUMPageDown 0x51int 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(" input a number:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" calender display:(eg2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" prompt press up:last year press down:next year press other key :return menu\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" input is invalid,please input again!\n");break;case 2: /*当选择为2显示月历*/printf(" month shows:input year,month(eg2011,6):");scanf("%d,%d",&year,&month);if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" prompt press left:last month perss right:next month perss other key:return menu\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" input is invalid,please input again!\n");break;case 3: /*当选择为3时显示日期*/printf(" date shoes:input year,month,date(eg2011,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("proompt press PageUp:yesterday press pageDown:next day press other key:return menu\n\n");setDay3( year,month, day);}elsesystem("cls");printf("input is invalid,please input again!\n");break;case 4: /*当输入数字4时,退出系统*/exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" input is invalid,please input again!\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 year %d month\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d year %d month\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,day1);days=days0-days1; /*计算出两个日期之间的时间差*/printf("\n Today to%dyear%dmonth%ddatehave%ddays\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,da y);number=number%7 ;switch( number){case 0:printf( "\n %d year%d month%d date today is sun",year,month,day);break;case 1:printf( "\n %d year%d month%d date today is mon",year,month,day);break;case 2:printf( "\n %d year%d month%d date today is tue",year,month,day);break;case 3:printf( "\n %d year%d month%d date today is wde",year,month,day);break;case 4:printf( "\n %d year%d month%d date today is thu",year,month,day);break;case 5:printf( "\n %d year%d month%d date today is fri",year,month,day);break;case 6:printf( "\n %d year%d month%d date today is sat",year,month,day);break;default:system("cls");printf(" there is an error!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/ {if(month==1)switch(day){case 1:printf(",Today is New Year's Day");}if(month==2)switch(day){case 14:printf(",Today is Valentine's Day ");}if(month==3)switch(day){case 8:printf(",Today is Women's Day ");break;case 12:printf(",Today is Arbor Day");}if(month==4)switch(day){case 1:printf(",Today is April fool's Day");}if(month==5)switch(day){case 1:printf(",Today is The labor Day");break;case 4:printf(",Today is Youth Day");}if(month==6)switch(day){case 1:printf(",Today is Children's Day ");}if(month==7)switch(day){case 1:printf(",Today is Founding of the section");}if(month==8)switch(day){case 1:printf(",Today is Army Day");}if(month==9)switch(day){case 10:printf(",Today is Teacher's Day");}if(month==10)switch(day){case 1:printf(",today is The national Day");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/{ char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/if(year<2){system("cls");printf(" WARNING!BEYOND THE RANGE!\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(" WARNING!BEYOND THE RANGE!\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();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(" WARNING!BEYOND THE RANGE!\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");;}}void getmenu() /* 显示菜单选择*/{printf(" ************Main menu********************\n\n");printf(" * Welcome to calendar system *\n\n");printf(" * 1.Calender display *\n\n");printf(" * 2.Month shows *\n\n");printf(" * 3.Date shows *\n\n");printf(" * 4.Log out *\n\n");printf(" *****************************************\n\n"); }4设计结果与分析4.1年历的显示(1)输入数字1进入年历的显示:(见下页)图4.1.1系统的主菜单(2)输入年份2013,显示2013年的年历如下图4.1.2输入年份2013后的结果(3)按↑键盘显示上一年(2012年)的年历,显示如下图4.1.3按↑后的结果(4)按↓键盘显示上一年(2014年)的年历,显示如下图4.1.4按↓后的结果图4.2月历的显示(1)在菜单中选择2,进入月历的显示,输入2013,6,显示2013年6月份的月历,显示效果如下图4.2.1月历查询的结果(2)按←键盘显示上一个月(5月)的月历,显示效果如下图4.2.2按←后显示的结果(3)按→键盘显示下个月(7月)的月历,显示效果如下:(见下页)图4.2.3按→后显示的结果4.3日历的显示(1)输入选择3进入日历的显示,如图输入2013,6,20显示这天的星期,是否为公历节日,距离现在还有多少天图4.3.1日历显示的结果(2)按Pagup显示前一天的日历,显示如下图4.3.2按Pagu显示的结果(3)按Pagdown显示后一天的日历,显示如下图4.3.3按Pagdown显示的结果(4)观察是否能判断节日,输入2013,2,14;显示结果如下:(见下页)图4.3.4节日查询的结果4.4退出系统当输入数字4时,显示结果如下:图4.4.1退出系统5、自我小结这次用C语言编写的万年历系统主要实现了年历、月历、日历的显示,并且可通过键盘来变换相应的年月日,最终的设计结果达到的这些要求,是一次比较成功的课程设计。

显示年历C 课程设计报告

显示年历C  课程设计报告

目录一、设计任务,目的与要求 (2)1.设计内容: (2)2.设计目的: (2)3.设计要求: (3)二、概要设计 (3)1.需求分析: (3)2.设计流程: (3)1设计要求: (3)2总体设计: (4)三、运行结果及分析 (5)1.程序运行测试: (5)2.进入程序菜单: (5)3.1号键功能: (6)3.2号键功能: (6)4.3号键功能: (7)5.0号键功能: (7)四、源代码 (7)一、设计任务,目的与要求1.设计内容:年历显示功能要求:1.输入一个年份,输出是在屏幕上显示该年的日历。

假定输入的年份在1940-2040年之间。

2.输入年月,输出该月的日历。

3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日。

2.设计目的:本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言C++(或C)》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:1. 巩固和加深学生对C++(或C)语言课程的基本知识的理解和掌握2. 掌握C++(或C)语言编程和程序调试的基本技能3. 利用C++(或C)语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C++(或C)语言解决实际问题的能力3.设计要求:1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告及程序代码二、概要设计1.需求分析:目前的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基于该程序所开发的各种应用程序中的日历程序。

然而,这些程序都是千遍一律的局限于一个很短的时间内。

但是,很多情况下,特别是在众多的科学领域中,一个时间跨度较大的程序是有参考价值的。

C++程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本就弥补了这一领域的空白。

万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便,是一种比较实用的小工具。

C语言日历显示课程设计报告

C语言日历显示课程设计报告

C语言日历显示课程设计报告高级语言程序设计课程设计题目:专业计算机类班级计算机类1102学生学号指导教师_______________起止时间2012.2.13——2012.2.172012年2月目录实验报告 (4)必做题: (4)选做题: (9)题目10 写一个日历显示程序 (9)流程图:(如下) (16)工程代码: (21)心得体会 (26)实验报告必做题:(1)编一程序对2种排序方法进行比较:交换法、选择法、插入法、冒泡法四种方法选2。

具体比较方法是随机生成一组(≥300个)的100以内的整数数据,用选定的2种排序方法进行排序。

纪录排序过程中数据比较和交换的次数,输出比较结果。

#include<stdio.h>#include<stdlib.h>int main(void){int a[300],b[300];int i,j,temp,t;int s=0,p=0,s1=0,p1=0;for(i=0;i<300;i++){a[i]=rand()%100;b[i ]=a[i];}for(i=0;i<299;i++){for(j=i+1;j<300;j++){if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;s++;}p++;}}printf("%d %d\n",s,p);printf("\n");for(i=0;i<299;i++){t=i;for(j=i+1;j<300;j++){if(b[t]<b[j])t=j;if(t!=i){temp=b[i];b[i]=b[t];b[t]=temp;s1++;}p1++;}}printf("%d %d\n",s1,p1);return 0;}运行结果:在这个题目中选择了交换法和选择法,首先要产生300个随机数,其次要懂得两种排序法的原理,然后进行编程,同时利用循环结构。

C语言课程设计—年历显示系统

C语言课程设计—年历显示系统

C语言课程设计—年历显示系统Revised by Liu Jing on January 12, 2021课程设计报告课程设计报告题目:年历显示系统姓名:XXX学号:XXXX专业:XXXX班级: XXXX1指导教师:XXX职称:XXX2012年 6 月 20 日目录97.参考文献 (13)1.摘要C语言是近年在国内外得到迅速推广应用的一种语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。

然而,这些程序都千篇一律的局限在一个很短的时间范围内。

(Windows各个版本一般都局限在1980年至2099年这一范围内),但是,在很多情况下,特别是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价值的。

C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C程序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。

【关键字】C语言计算机日历程序2.设计要求输入一个年份,输出是在屏幕上显示该年的日历。

假定输入的年份在1940-2040年之间;1、输入年,输出该年的日历。

2、输入年月,输出该月的日历。

3、输入年月日,输出距今天还有多少天,星期几,是否是公历节日。

3.思想构架3.1闰年问题:每400年整一闰,或每4年且不为百年的一闰。

(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。

但四年加一天又多用了44分56秒,这个数积满400年为三天。

(2023)C语言万年历设计报告(一)

(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语言课程设计―日历显示
printf("\n\n%d年%d月日历\n",year,month);
printf(" SMTWTFS \n");
d=j_week(year,month,1);
for(i=1;i<=c+d;i++)
{
if(i<=d)
printf("");
else printf("%2d ",i-d);
if(i%7==0)
#include <stdio.h>
#include <stdlib.h>
#includபைடு நூலகம் <math.h>
char* month[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nev","Dec"};char*
week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
a=year>=x?year:x;
b=year<x?year:x;
if(a>b)
{
for(i=b+1;i<a;i++)
c+=j_leapyear(i);

C语言日历表现课程设计报告含源代码

C语言日历表现课程设计报告含源代码

目录 实验报告 .........................................................3
必做题: .....................................................3 选做题: .....................................................8 题目 10 写一个日历显示程序 ......................8 流程图:(如下) ...................................14 工程代码: ...............................................19 心得体会 ...................................................24
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

c语言课程设计报告 万年历 最详细

c语言课程设计报告 万年历 最详细

C语言课程设计报告-----万年历设计人:贾伟涛学号:2013010912班级:13电信应电班指导老师:张伟日期:2014年6月9日内容提要通过大一下学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程虽然有很多困惑,但是当自己能够独立的看懂和独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我虽然可以看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对c语言的兴趣。

C语言是近年在国内外得到迅速推广应用的一种机器语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日历的查询,利用C语言的程序编成一个简单的万年历查询系统。

通过这个小小的系统可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了,大家拭目以待吧!目录一、系统功能和数据说明-----------------------二、问题分析---------------------------------三、程序总体设计及功能结构框图---------------四、程序流程图-------------------------------五、源程序代码-------------------------------六、使用说明---------------------------------七、个人心得---------------------------------八、参考文献---------------------------------一、系统功能和数据说明(一)功能简介在日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简单明了的给我们最想要的日期信息。

万年历C语言课程设计报告

万年历C语言课程设计报告

程序实践报告任务分配:1、头文件,定义常量,全局变量,自定义函数和打印输出模块。

即1~50和140~2902、功能控制模块和一部分日历显示模块,即50~140和290~4003、一部分日历显示模块和键值获取模块,即400~1、基本思路功能模块图本系统包括4个模块,分别是功能控制模块、打印输出模块、日历显示模块和键值获取模块。

(1)功能控制模块。

该模块用于实现日期有效性检查、判断是否是闰年和返回指定日期对应的星期。

(2)打印输出模块。

该模块主要是进行输出显示,包括打印指定个数的空格、打印分隔线、打印用户使用手册、打印当前日期对应的星期以及打印给定的星期。

(3)日历显示模块。

该模块是系统的核心模块,是用来显示指定日期所在月份的月历。

(4)键值获取模块。

该模块接受键盘操作,获取键值,来进行日期调整,并调用日历显示模块中的函数来显示调整后的日历。

日历显示模块日历显示是系统的核心模块,它控制着日历的生成和显示。

其实现流程如图所示。

程序输入的是包含年月日(year,month和day)的日期,输出month所在月份的月历,并突出显示day 所在的日期和year是否是闰年的标识。

程序首先根据year判断其是否是闰年,如果是则需要将该年2月份的天数设置为29天,接着判断day是否超过month所在月份的最大天数,如果超过则显示系统日期所在的月历。

然后进行星期输出的判断,如果输出的是该月的第一个星期,则判断该星期中还有几天在本月(如,该月1号是星期五,则表示该月第一个星期中只有两天在本月,星期一到星期四在上月,则星期一到星期四在本月就不输出,仅有空格表示),输出空格。

输出完第一周后,接着输出第二到第五(或者六)周,每周7天。

在输出过程中,如果遇到了day所在的日期,则突出显示。

键值获取流程图键值获取实现的是从键盘调整日期并显示调整后的月历。

其实现流程如图所示。

系统首先判断从键盘输入的值,如果是右移键,表示增加月份。

《C语言程序设计》课程设计--年历显示

《C语言程序设计》课程设计--年历显示

南京航空航天大学金城学院《C语言程序设计》课程设计实验报告题目: _ 年历显示班级:学号:姓名:成绩:指导教师:完成日期:年月日目录一、程序的主要功能二、系统总框架图三、各模块的功能四、功能模块图五、程序结构流程图六、试验结果七、编程体会八、参考资料九、附录:程序清单及源程序一、程序的主要功能(1)可根据菜单进行日历显示(2)输入年月日显示当天星期几,是否为公历节日(3)自动获取系统当前日期,与输入日期比较(4)输入年月日,显示距今多少天二、系统总框架图三、各模块的功能int total (int yeara) //计算公元一年一月一日到输入年份之前的总天数int where (int yearb,int monb) //判断每月天数void when (int day) //判断输入日期是星期几void why(int month,int day) //公历节日判断void output_year() //年份输出void output_month() //年月输出void output_day() //年月日输出int main () //主函数四、功能模块图五、程序结构流程图六、试验结果七、编程体会刚开始没有想到去怎么做,查找资料知道了公元一年一月一日是星期一的切入点,然后事情就变得简单了。

还有就是在主函数中利用do while实现功能的循环。

最麻烦的是系统当前时间的获取,通过百度的查找,懂得了用tm 时间结构。

这次课设让我对c语言有了更深的认识八、参考资料(1)chinaunix博客(2)比特网(3)百度文库九、附录:程序清单及源程序#include <stdio.h>#include <time.h>int total (int yeara) //计算公元一年一月一日到输入年份之前的总天数{int i,s=0,a;for (i=1;i<=yeara-1;i++){if (i%4==0 && i%100!=0 || i%400==0)a=366;elsea=365;s=s+a;}return s;}int where (int yearb,int monb) //判断每月天数{int tian;switch (monb){case 1: tian=31;break;case 2:if(yearb%4==0 && yearb%100!=0 || yearb%400==0)tian=29;elsetian=28;break;case 3: tian=31;break;case 4: tian=30;break;case 5: tian=31;break;case 6: tian=30;break;case 7: tian=31;break;case 8: tian=31;break;case 9: tian=30;break;case 10: tian=31;break;case 11: tian=30;break;case 12: tian=31;break;}return tian;}void when (int day) //判断输入日期是星期几{switch(day){case 1: printf("该日为星期一\n");break;case 2: printf("该日为星期二\n");break;case 3: printf("该日为星期三\n");break;case 4: printf("该日为星期四\n");break;case 5: printf("该日为星期五\n");break;case 6: printf("该日为星期六\n");break;case 7: printf("该日为星期日\n");break;}}void why(int month,int day) //公历节日判断{if(month==1)if(day==1)printf("该日是元旦\n");elseprintf("该日不是公历节日!\n");if(month==3){switch(day){case 8: printf("该日是国际妇女节\n"); break;case 12: printf("该日是植树节\n"); break;default : printf("该日不是公历节日!\n"); break;}}if(month==4)if(day==5)printf("该日是清明节\n");elseprintf("该日不是公历节日!\n");if(month==5){switch(day){case 1: printf("该日是劳动节\n"); break;case 4: printf("该日是五四青年节\n"); break;default : printf("该日不是公历节日!\n"); break;}}if(month==6)if(day==1)printf("该日是儿童节\n");elseprintf("该日不是公历节日!\n");if(month==7)if(day==1)printf("该日是中国建党节\n");elseprintf("该日不是公历节日!\n");if(month==8)if(day==1)printf("该日是建军节\n");elseprintf("该日不是公历节日!\n");if(month==9){switch(day){case 3: printf("该日是抗日战争胜利纪念日\n"); break;case 10: printf("该日是教师节\n");break;default : printf("该日不是公历节日!\n"); break;}}if(month==10)if(day==1)printf("该日是国庆节\n");elseprintf("该日不是公历节日!\n");}void output_year() //年份输出{int year,d,di,did,z,j;printf("请输入年份(eg:2015):");scanf("%d",&year);z=total(year);for (j=1;j<=12;j++){d=z%7;printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf (" %d月份\n",j);printf ("sun mon tue wed thu fri sat\n");if (d<6)for (di=1;di<=d+1;di++)printf(" ");for (did=1;did<=where(year,j);did++){printf ("%d",did);if (did<10)printf (" ");elseprintf (" ");if (did==6-d || (did-6+d)%7==0 || did==where(year,j))printf ("\n");}z=z+where(year,j);}main();}void output_month() //年月输出{int year,m,n,d,di,did,j,Z,D;printf ("请输入所查日历的年月(eg:2015 01):");scanf ("%d%d",&m,&n);Z=total(m);for (j=1;j<=n-1;j++){D=where(m,j);Z=Z+D;}d=Z%7;printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf (" %d月份\n",n);printf ("sun mon tue wed thu fri sat\n");if (d<6)for (di=1;di<=d+1;di++)printf(" ");for (did=1;did<=where(m,n);did++){printf ("%d",did);if (did<10)printf (" ");elseprintf (" ");if (did==6-d || (did-6+d)%7==0 || did==where(m,n))printf ("\n");}main();}void output_day() //年月日输出{int d,h,j,k,l,x,y,z,Z,Z1,D,jian,judge;time_t timep;struct tm *p;time(&timep); //系统时间获取p =localtime(&timep); //此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间printf ("请输入年月日(eg:2015 01 01):");scanf ("%d%d%d",&x,&y,&z);judge=where(x,y);if(judge<z || y>12)printf("输入日期不存在!");else{Z=total(x);for (j=1;j<=y-1;j++){D=where(x,j);Z=Z+D;}Z=Z+z;h=1900+p->tm_year;//时间赋值k=1+p->tm_mon;l=1+p->tm_mday;Z1=total(h);for (j=1;j<=k-1;j++){D=where(k,j);Z1=Z1+D;}Z1=Z1+l;jian=Z1-Z;printf ("输入日期距今有%d天\n",jian);d=Z%7;when(d);why(y,z);}main();}int main (){int number;printf("\n\n*************查询方式************* \n");printf("* 1.查询某年的日历 * \n");printf("* 2.查询某月的日历 * \n");printf("* 3.查询特定的日期 * \n");printf("* 4.查询结束--退出 * \n");printf("********************************** \n");do{printf("请输入查询方式:");scanf("%d",&number);switch(number){case 1: output_year(); break;case 2: output_month(); break;case 3: output_day(); break;case 4: break;default : printf("输入错误!\n--------------\n");break;}}while (number!=1 && number!=2 && number!=3 && number!=4);}。

C语言日历显示课程设计报告

C语言日历显示课程设计报告
{
int *data9*max9*min^size;
float *ave;
maxMinAver(data,maximin,ave^size);
return 0;
void maxMinAver(int *data,int *max, int *min,float * avejnt size) {
int a[10];
}
for(i=0;i<299;i++){
for(j=i+l;j<300;j++)
{
if(a[i]<aU])
{
temp=a[i];
a[i]=aUJ;
a[j]=temp;
s++;
}
P++;
}}
printf(n%d %d\n'\s,p);
printfU;
for(i=0;i<299;i++)
t=i;for(j=i+l;j<300;j++) {
将最大、最小以及平均值求出来。关键是函数调用。
选做题:
题目10写一个日历显示程序
基本功能:
1).输入任一年将显示出该年的所有月份日期,对应的星期
2).注意闰年情况
其显示格式要求如下:
1)月份:中文英文都可以,
2)下一行显示星期,从周日到周六,中英文都可以
3)下一行开始显示日期从1号开始,并按其是周几实际情况与 上面的星期数垂直对齐
要求第一个实参是数组,第2、3、4个实参都是对普通的简单 变量的某种操作,最后一个实参是数组的大小。测试之
#include<stdio.h>

c语言课程设计报告模板万年历

c语言课程设计报告模板万年历

C语言课程设计报告模板-万年历
引言
万年历是一个非常实用的工具,能够帮助人们快速查找任意日期的详细信息。

本报告将介绍我们设计的C语言万年历程序的实现及其功能。

设计目标
我们的设计目标是开发一个简单易用的C语言万年历程序,该程序应具备以下功能: - 显示指定年份的整年日历信息 - 显示指定年份指定月份的月历信息 - 显示指定日期的详细信息,如星期几、所在月份等 - 具备用户友好的交互界面
设计思路
我们的设计思路如下: 1. 获取用户输入的年份、月份和日期信息。

2. 判断用户输入的年份是否为闰年。

3. 根据用户输入的年份计算出该年份的1月1日是星期几。

4. 根据用户选择的功能,分别显示整年日历、月历或详细日期信息。

实现步骤
我们按照以下步骤实现了C语言万年历程序:
步骤一:获取用户输入
首先,我们使用scanf()函数获取用户输入的年份、月份和日期信息。

```c int year, month, day; printf(。

万年历课程设计C语言源代码

万年历课程设计C语言源代码

#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<math.h>#define uchar unsigned char#define uint unsigned int#define rst573 XBYTE[0X1000]#define y4 XBYTE[0X8000]#define y5 XBYTE[0Xa000]#define y6 XBYTE[0Xc000]#define y7 XBYTE[0Xe000]sbit scl1302=P1^7;sbit IO=P2^3;sbit rst1302=P1^3;sbit lcden=P1^2;sbit lcdwr=P2^1;sbit lcdrs=P2^0;sbit s5=P3^2;sbit s4=P3^3;sbit s6=P3^1;sbit s7=P3^0;uint t;sbit DQ=P1^4;float tt;uchar *riqi="20 - - "; uchar *xingqi="week "; uchar *shijian=" - - "; uchar *wedu="28.7C";uchar time[8],num;int nian,yue,ri,xq=1,shi,fen,miao; char count;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--); }void delayus(uint t){for(;t>0;t--);}void init(){rst573;y4;rst573;P0=0x00;y6;rst573;P0=0xa0;y7;rst573;}/**************************1602***********************/void write_com(uchar com){lcdrs=0;lcdwr=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void initlcd(){lcdwr=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}void write_data(uchar date){lcdrs=1;lcdwr=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}/***********************************************1302**************/ void writebyte(uchar add,date){uchar i;IO=0;rst1302=1;for(i=0;i<8;i++){scl1302=0;IO=add&0x01;scl1302=1;add>>=1;}for(i=0;i<8;i++){scl1302=0;IO=date&0x01;scl1302=1;date>>=1;}rst1302=0;}uchar readbyte(uchar add){uchar i,temp;scl1302=0;IO=0;rst1302=1;for(i=0;i<8;i++){scl1302=0;IO=add&0x01;scl1302=1;add>>=1;}for(i=0;i<8;i++){scl1302=1;temp>>=1;scl1302=0;if(IO)temp|=0x80;}return temp;}void set_1302(){writebyte(0x8e,0x00);writebyte(0x8c,nian);writebyte(0x8a,xq);writebyte(0x88,yue);writebyte(0x86,ri);writebyte(0x84,shi);writebyte(0x82,fen);writebyte(0x80,0x00);writebyte(0x8e,0x80);}void read_1302(uchar *p){p[0]=readbyte(0x81);writebyte(0x00,0x00);p[1]=readbyte(0x83);writebyte(0x00,0x00);p[2]=readbyte(0x85);writebyte(0x00,0x00);p[3]=readbyte(0x87);writebyte(0x00,0x00);p[4]=readbyte(0x89);writebyte(0x00,0x00);p[5]=readbyte(0x8b);writebyte(0x00,0x00);p[6]=readbyte(0x8d);writebyte(0x00,0x00);fen=p[1];shi=p[2];ri=p[3];yue=p[4];xq=p[5];nian=p[6];}/*************************************18b20******************/ void init_ds18b20() //18B20初始化{char presence=1;WR=0;while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0;delayus(50);DQ=1;delayus(6);presence=DQ;delayus(45); //延时500 uspresence=~DQ;}DQ=1; //拉高电平}/****************************************************************************** **/void writeonechar(unsigned char dat) //写一个字节{uchar i=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();DQ=0;DQ=dat&0x01;delayus(6);DQ=1;dat>>=1;}DQ=1;}/****************************************************************************** ***/uchar readonechar(void) //读一个字节{uchar i=0;uchar dat=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();dat>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();DQ=1;_nop_();_nop_();_nop_();_nop_();if(DQ)dat|=0x80;delayus(6);}return(dat);}/****************************************************************************** */uchar display_zh() //把子节转化为十进制{init_ds18b20();writeonechar(0xcc);writeonechar(0x44);init_ds18b20();_nop_();_nop_(); _nop_();_nop_();writeonechar(0xcc);writeonechar(0xbe);a=readonechar();b=readonechar();t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*10+0.5;return t;}void display1(){uchar i;write_com(0x80); //2011-11-11 23-14-59 week 1 28.7℃for(i=0;i<2;i++){write_data(riqi[i]);}write_com(0x84); //2011-11-11 23-14-59 week 1 28.7℃write_data(riqi[4]);write_com(0x87); //2011-11-11 23-14-59 week 1 28.7℃write_data(riqi[7]);write_com(0x8d);write_data('.');write_com(0x8f);write_data('C');write_com(0xc2);write_data(shijian[2]);write_com(0xc5);write_data(shijian[5]);write_com(0xc9);for(i=0;i<4;i++){write_data(xingqi[i]);}writebyte(0x80,0x00);write_com(0x82);write_data(nian/16+'0');write_data(nian%16+'0');write_com(0x85);write_data(yue/16+'0');write_data(yue%16+'0');write_com(0x88);write_data(ri/16+'0');write_data(ri%16+'0');display_zh();write_com(0x8b);write_data(t%1000/100+'0');write_data(t%100/10+'0');write_com(0x8e);write_data(t%10+'0');/********************************/write_com(0xc0);write_data(shi/16+'0');write_data(shi%16+'0');write_com(0xc3);write_data(fen/16+'0');write_data(fen%16+'0');write_com(0xc6);write_data(time[0]/16+'0');write_data(time[0]%16+'0');write_com(0xce);write_data(xq+'0');}void jian(){if(s4==0){writebyte(0x8e,0x00); writebyte(0x80,0x00);num=0;set_1302();}if(s7==0){while(!s7);num++;}switch(num){case 1:writebyte(0x8e,0x00);if(s6==0){while(!s6);fen++; writebyte(0x80,0x80);}if(fen==10)//10fen=16;if(fen==26)//20fen=32;if(fen==42)//30fen=48;if(fen==58)//40fen=64;if(fen==74)//50fen=80;if(fen==90)//60fen=0;if(s5==0){while(!s5);fen--;writebyte(0x80,0x80);}if(fen==-1)//10fen=89;if(fen==79)//20fen=73;if(fen==63)//30fen=57;if(fen==47)//40fen=41;if(fen==31)//50fen=25;if(fen==15)//50fen=9;writebyte(0x82,fen);write_com(0xc3);display1();break;case 2:writebyte(0x8e,0x00);if(s6==0){while(!s6); shi++;writebyte(0x80,0x80);} if(shi==10)//10shi=16;if(shi==26)//20shi=32;if(shi==36)//30shi=0;if(s5==0){while(!s5);shi--;writebyte(0x80,0x80);}if(shi==-1)//30shi=35;if(shi==31)//40shi=25;if(shi==15)//50shi=9;write_com(0xc0);writebyte(0x84,shi);display1();break;case 3:writebyte(0x8e,0x00);if(s6==0){while(!s6);ri++;writebyte(0x80,0x80);}if(ri==10)//10ri=16;if(ri==26)//20ri=32;if(ri==42)//30ri=48;if(ri==50)//60ri=0;if(s5==0){while(!s5);ri--;writebyte(0x80,0x80);}if(ri==-1)//10ri=49;if(ri==47)//40ri=41;if(ri==31)//50ri=25;if(ri==15)//50ri=9;write_com(0x88);writebyte(0x86,ri);display1();;break;case 4:writebyte(0x8e,0x00);if(s6==0){while(!s6);yue++;writebyte(0x80,0x80);}if(yue==10)//10yue=16;if(yue==19)//20yue=0;if(s5==0){while(!s5);yue--;writebyte(0x80,0x80);}if(yue==-1)//10yue=18;if(yue==16)//10yue=10;write_com(0x85);writebyte(0x88,yue);display1();;break;case 5:writebyte(0x8e,0x00);if(s6==0){while(!s6);nian++;writebyte(0x80,0x80);}if(nian==10)//10nian=16;if(nian==26)//20nian=32;if(nian==42)//30nian=48;if(nian==58)//40nian=64;if(nian==74)//50nian=80;if(nian==90)//60nian=96;if(nian==106)//70nian=112;if(nian==122)//80nian=128;if(nian==138)//90nian=144;if(nian==154)//60nian=0;if(s5==0){while(!s5);nian--;writebyte(0x80,0x80);}if(nian==-1)//10nian=153;if(nian==143)//90nian=137;if(nian==127)//80nian=121;if(nian==111)//70nian=105;if(nian==95)//60nian=89;if(nian==79)//50nian=73;if(nian==63)//40nian=57;if(nian==47)//30nian=41;if(nian==31)//20nian=25;if(nian==-15)//10nian=9;write_com(0x82);writebyte(0x8c,nian);display1();break;case 6:writebyte(0x8e,0x00);if(s6==0){while(!s6);xq++;writebyte(0x80,0x80);}if(xq==8)xq=1;if(xq==0)xq=7;if(s5==0){while(!s5); xq--;writebyte(0x80,0x80);}if(xq==-1)xq=7;write_com(0xce);writebyte(0x8a,xq);display1();break;case 7: writebyte(0x8e,0x00);writebyte(0x80,0x00);num=0;set_1302();break;}}void main(){init();initlcd();set_1302();while(1){ display1();jian();read_1302(time);}}。

万年历C语言课程设计报告书

万年历C语言课程设计报告书

C语言课程设计报告书设计人:查波学号:201201466院系:电信学院班级:电气11203指导老师:杜红一.设计要求1.能够显示星期。

2.能够显示年月日。

二.设计目的1. 通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!2. 通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。

为后续各门计算机课程的学习和毕业设计打下坚实基础。

三.设计思想1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为355。

然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

2 .输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。

3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

四.要用到的函数和语句1.<stdio.h>/*头文件*/2.main() /*主函数*/3.printf(),4.scanf()5.if 语句6.for 语句7.IsLeapYear(int) /*定义函数*/流程图五.程序运行结果六.源代码#include <stdio.h>int IsLeapYear(int);main(){int i;int day;int year;int temp;int temp_i;long int Year_days = 0; //输入的年份之前的所有年的天数之和int Year_Start = 1; //当前年份int Per_Year_Days;int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29}; //第n月的天数printf("请输入年份: ");scanf("%d",&year);while(Year_Start < year) //求输入的年份之前的所有年的天数之和{if( IsLeapYear( Year_Start ) ) //当前年份是闰年Per_Year_Days = 366; //则当前年份的天数为366天else //当前年份是平年Per_Year_Days = 365; //则当前年份的天数为365天Year_days = Year_days + Per_Year_Days; //当前年份之前的所有年的天数之和Year_Start++;}for( temp = 1; temp <=12; temp++ ) //一个for循环内部嵌套一个for循环和两个while循环{switch( temp ){case 1:printf(" *****************一月(%d)********************\n",year);break; //break:跳出switch语句,执行switch 语句后面的语句case 2:printf(" *****************二月(%d)********************\n",year);break;case 3:printf(" *****************三月(%d)********************\n",year);break;case 4:printf(" *****************四月(%d)********************\n",year);break;case 5:printf(" *****************五月(%d)********************\n",year);break;case 6:printf(" *****************六月(%d)********************\n",year);break;case 7:printf(" *****************七月(%d)********************\n",year);break;case 8:printf(" *****************八月(%d)********************\n",year);break;case 9:printf(" ******************九月(%d)*******************\n",year);break;case 10:printf(" ******************十月(%d)*******************\n",year);break;case 11:printf(" ******************十一月(%d)*****************\n",year);break;case 12:printf(" ******************十二月(%d)*****************\n",year);break;}i = Year_days % 7; //输入的年份的前一年的最后一天对应星期i(i=1~6)星期天(i=0) printf("星期一星期二星期三星期四星期五星期六星期天\n");if( i != 0 ) //i=0不需输出空格for( temp_i = 0; temp_i < i; temp_i++) //temp_i用来计输出的空格数printf(" "); //输出七个空格,保持数据右对齐,输入的年份的第一天对应星期i+1 (i=0~5)星期天(i=6)day = 1;if( IsLeapYear(year) && temp == 2) //输入的年份为闰年且当前月份为2月(确定闰年二月的月历)while( day <= month_day[12] ) //day<=29时进行循环{if( day >1 ) //(一个if语句嵌套两个if语句)如果day >1 ,则执行if( Year_days % 7 == 0 ),否则(即day=1)执行printf(" %d ",day),(两个空格)if( Year_days % 7 == 0 ) //如果Year_days % 7 == 0,则执行printf("\n");否则执行空语句“;”,不进行任何处理printf("\n");if( day >= 10 ) //如果if( day >= 10 ),则执行printf(" %d ",day),(一个空格);否则执行空语句“;”,不进行任何处理printf(" %d ",day);//四个空格,当数大于10时与小于10的数右对齐elseprintf(" %d ",day);//五个空格,当数小于10时与大于10的数右对齐Year_days++;//Year_days自增,day++;//day自增,换到下一天}else //输入的年份为平年或当前月份不是2月while (day <= month_day[temp-1]) //day<=当前月份的天数时进行循环if( day > 1 )//(一个if语句嵌套两个if语句)如果day >1 ,则执行if( Year_days % 7 == 0 ),否则(即day=1)执行printf(" %d ",day),(两个空格)if( Year_days % 7 == 0 )//如果Year_days % 7 == 0,则执行printf("\n");否则执行空语句“;”,不进行任何处理printf("\n");if( day >=10 ) //如果if( day >= 10 ),则执行printf(" %d ",day),(一个空格);否则执行空语句“;”,不进行任何处理printf(" %d ",day);//四个空格,当数大于10时与小于10的数右对齐elseprintf(" %d ",day);//五个空格,当数小于10时与大于10的数右对齐Year_days++;day++;}printf("\n");} //外层for循环结束} //主函数结束int IsLeapYear( int year ) //定义被调函数(用户函数),(不)是闰年则返回1 (0),使条件语句的条件为真(假){if ((year %4 == 0) && (year % 100 != 0) || //输入的年份能被4且不能被100整除或(year % 400 == 0) ) //输入的年份能被400整除(为闰年)return 1; //条件语句的条件为真elsereturn 0; //条件语句的条件为假}六.实验小结为期两个星期的课程设计很是短暂,由于本人水平有限,程序设计比较简单,没有多少复杂的语句,这是一个很好的锻炼机会,很多以前没看懂的都得到了答案,程序虽小,也费了一番功夫,同时上网借鉴了别人的程序,深为感谢,感谢老师的指导。

C语言实训题目设计报告 万年历

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、使用说明:打开程序后,依照主菜单的提示输入数字选择功能,进行万年历的查阅。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高级语言程序设计课程设计题目:专业计算机类班级计算机类1102学生学号指导教师_______________起止时间2012.2.13——2012.2.172012年2月目录实验报告 (3)必做题: (3)选做题: (8)题目10 写一个日历显示程序 (8)流程图:(如下) (14)工程代码: (19)心得体会 (24)实验报告必做题:(1)编一程序对2种排序方法进行比较:交换法、选择法、插入法、冒泡法四种方法选2。

具体比较方法是随机生成一组(≥300个)的100以内的整数数据,用选定的2种排序方法进行排序。

纪录排序过程中数据比较和交换的次数,输出比较结果。

#include<stdio.h>#include<stdlib.h>int main(void){int a[300],b[300];int i,j,temp,t;int s=0,p=0,s1=0,p1=0;for(i=0;i<300;i++){a[i]=rand()%100;b[i ]=a[i];}for(i=0;i<299;i++){for(j=i+1;j<300;j++){if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;s++;}p++;}}printf("%d %d\n",s,p);printf("\n");for(i=0;i<299;i++){t=i;for(j=i+1;j<300;j++){if(b[t]<b[j])t=j;if(t!=i){temp=b[i];b[i]=b[t];b[t]=temp;s1++;}p1++;}}printf("%d %d\n",s1,p1);return 0;}运行结果:在这个题目中选择了交换法和选择法,首先要产生300个随机数,其次要懂得两种排序法的原理,然后进行编程,同时利用循环结构。

关键在于产生随机数和排序。

通过比较发现交换法的交换次数比选择法少,比较的次数两者一样。

(2)写一个函数void maxMinAver(int *data, int *max, int*min,float * ave,int size), 求一组数据的最大值、最小值和平均值,测试之。

其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数组的大小。

要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。

测试之#include<stdio.h>void maxMinAver(int *data, int *max, int *min,float * ave,int size);int main(void){int *data,*max,*min,size;float *ave;maxMinAver(data,max,min,ave,size);return 0;}void maxMinAver(int *data, int *max, int *min,float * ave,int size) {int a[10];int b,c,n,j,s=0,temp;float d;data=a;max=&b;min=&c;ave=&d;for(n=0;n<10;n++){scanf("%d",&a[n]);}//交换法排序求最大最小值for(n=0;n<9;n++){for(j=n+1;j<10;j++){if(a[n]<a[j]){temp=a[n];a[n]=a[j];a[j]=temp;}}}b=a[0];c=a[9];//求平均数for(n=0;n<10;n++){s=s+a[n];}d=(float)s/10;printf("%d %d %f",*max,*min,*ave);}这个题目需要利用函数调用,还要利用指针的间接引用法,设计函数将最大、最小以及平均值求出来。

关键是函数调用。

选做题:题目10 写一个日历显示程序基本功能:1).输入任一年将显示出该年的所有月份日期,对应的星期 2).注意闰年情况其显示格式要求如下:1)月份:中文英文都可以,2)下一行显示星期,从周日到周六,中英文都可以3)下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐当输入2004显示如下:Input the year:2004Input the file name:aThe calendar of the year 2004.Januray 1 February 2Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat1 2 3 1 2 3 4 5 6 74 5 6 7 8 9 10 8 9 10 11 12 13 1411 12 13 14 15 16 17 15 16 17 18 19 20 2118 19 20 21 22 23 24 22 23 24 25 26 27 2825 26 27 28 29 30 31 29=========================== ===========================March 3 April 4Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat1 2 3 4 5 6 1 2 37 8 9 10 11 12 13 4 5 6 7 8 9 1014 15 16 17 18 19 20 11 12 13 14 15 16 1721 22 23 24 25 26 27 18 19 20 21 22 23 2428 29 30 31 25 26 27 28 29 30=========================== ===========================…#include<stdio.h>int year(int p);int riqi(int z);int xinqi(int w,int l,int jj);void dayin(int m,int n,int a[12],int b[12],char c[30]);int main(void){int n,s;int m,qq,xx;printf("Input the year:");scanf("%d",&n);s=year(n);int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};int b[12]={31,s,31,30,31,30,31,31,30,31,30,31};//printf("%d",b[1]);char c[]="sun mon tue wed thr fri sat";printf("The calendar of the year %d\n",n);m=riqi(n);//printf("%d\n",m);dayin(m,n,a,b,c);return 0;}//判断输入的那一年是否是闰年int year(int p){if(p%4 != 0){return 28;}if(p%4 == 0){if(p%100 == 0){if(p%400 == 0){return 29;}return 28;}return 29;}}//求输入那一年的1月1日式星期几/*参照1997年1月1日*/int riqi(int z){int d;int days=(z-1997)*365;int i = (z- 1997)/4;days=days+i*1;/*1997年1月1日是星期三*/d=days%7+1;d=(d+2)%7;if(d == 0)d = 7;return d;}//从2月开始到12月每个月份的的1号是星期几int xinqi(int w,int l,int jj){int ss;int qi;int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};ss=year(l);b[1]=ss;qi=(b[jj-1]%7+(w-1)+1)%7;return qi;}void dayin(int m,int n,int a[12],int b[12],char c[30]) {int i,r,v,xx,j,qq;for(i=0;i<12;i++){printf("%d\n",a[i]);printf ("%s\n",c);if(i==0){if(m==7)m=0;for(xx=0;xx<3*m+m*1;xx++){printf(" ");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}else{qq=xinqi(m,n,i);m=qq;// printf("%d\\\\\\\\",m);for(xx=0;xx<3*m+m*1;xx++){printf(" ");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}for(j=r,v=1;j<=b[i];j++,v++){printf("%-4d",j);if(v%7==0)printf("\n"); }printf("\n==========================");printf("\n");}}运行结果:这个程序要求输入任意年能打印出该年的一月到十二月的日历表;因此需要年份,月份,日期;但如上程序是以1997的1月1日(星期三)为参照,因此只能查询1997年以后的年份日历(包括1997年)。

流程图:(如下)主流程图:分层流程图:模块流程图:dayin:year:Start(p%4!=0)return(p%100==0)(p%400==0)returnreturnendreturn(p%4==0) xinqi:工程代码:1.main.c :#include<stdio.h>#include"li.h"int main(void){int n,s;int m,qq,xx;printf("Input the year:");scanf("%d",&n);s=year(n);int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};int b[12]={31,s,31,30,31,30,31,31,30,31,30,31};//printf("%d",b[1]);char c[]="sun mon tue wed thr fri sat";printf("The calendar of the year %d\n",n);m=riqi(n);//printf("%d\n",m);dayin(m,n,a,b,c);return 0;}2.ri.c://判断输入的那一年是否是闰年int year(int p){if(p%4 != 0){return 28;}if(p%4 == 0){if(p%100 == 0){if(p%400 == 0){return 29;}return 28;}return 29;}}//求输入那一年的1月1日式星期几/*参照1997年1月1日*/int riqi(int z){int d;int days=(z-1997)*365;int i = (z- 1997)/4;days=days+i*1;/*1997年1月1日是星期三*/d=days%7+1;d=(d+2)%7;if(d == 0)d = 7;return d;}//从2月开始到12月每个月份的的1号是星期几int xinqi(int w,int l,int jj){int ss;int qi;int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};ss=year(l);b[1]=ss;qi=(b[jj-1]%7+(w-1)+1)%7;return qi;}//打印日历void dayin(int m,int n,int a[12],int b[12],char c[30]) {int i,r,v,xx,j,qq;for(i=0;i<12;i++){printf("%d\n",a[i]);printf ("%s\n",c);if(i==0){if(m==7)m=0;for(xx=0;xx<3*m+m*1;xx++){printf(" ");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}else{qq=xinqi(m,n,i);m=qq;// printf("%d\\\\\\\\",m);for(xx=0;xx<3*m+m*1;xx++){printf(" ");}printf("1");for(r=2;r<=7-m;r++){printf("%4d",r);}printf("\n");}for(j=r,v=1;j<=b[i];j++,v++){printf("%-4d",j);if(v%7==0)printf("\n");}printf("\n==========================");printf("\n");}}3.li.h :#ifndef LI_H#define LI_Hint year(int p);int riqi(int z);int xinqi(int w,int l,int jj);void dayin(int m,int n,int a[12],int b[12],char c[30]);#endif心得体会编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,需要我们认真的思考,分析。

相关文档
最新文档