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语言课程设计报告题目:编写万年历系统年级:专业:班级:姓名:学号:目录第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 前言 (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语言课程设计万年历带源程序

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 课程设计报告

目录一、设计任务,目的与要求 (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语言日历显示课程设计报告高级语言程序设计课程设计题目:专业计算机类班级计算机类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语言课程设计—年历显示系统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语言万年历设计报告(一)C语言万年历设计报告这份报告是针对 2023 年度 C 语言万年历设计而准备的。
设计目的该万年历的设计目的是为了让用户能够快速地查看任意公历年份的日历,同时还能够显示节气、万年历和日历信息。
设计思路该万年历的主要思路是通过用户输入任意公历年份,在程序中计算并显示该年的日历信息。
具体实现思路如下:1.用户输入年份信息。
2.程序判断该年份是否为闰年,并计算该年的总天数。
3.根据该年第一天是星期几,排列该年每个月的天数。
4.标记国历节日,如元旦、劳动节等。
5.计算并标记该年的节气,如立春、清明等。
6.计算并标记该年的重要万年历信息,如“三伏”、“四季”等。
设计要点在实现该万年历的过程中需要注意以下几个要点:1.为了代码的可维护性,尽量将每个功能模块拆分成函数的形式。
2.程序中需要处理日期的加减运算,可以使用标准库中的<time.h>。
3.节气和万年历的计算应该基于一些公式而不是硬编码。
设计结果经过实现,该万年历已经能够正常运行,并能够正确地显示各种信息。
用户输入任意公历年份后,程序可以迅速计算并展示该年的万年历、节气和重要节日信息。
结论通过本次 C 语言万年历的设计,我们不仅深入地了解了日期处理等相关知识,还提升了编码的能力。
在日常开发中,我们也可以根据这些基础知识,设计更为实用的应用程序。
可改进之处尽管该万年历已经能够满足基本的需求,但仍有一些改进空间。
例如:1.目前仅支持公历,可以添加其他历法的支持,如农历、阴阳历等。
2.界面可以进一步美化,增加更多交互性的组件,如按钮、下拉菜单等。
3.可以添加更多的功能,如查询特定日期的天气、星座运势等。
总结本次 C 语言万年历设计,使我们更好地理解了日期处理的相关知识,提高了我们的编码水平。
同时,我们也意识到在实际项目中,需要更多的功能和优化,才能更好地服务于用户的需求。
通过持续不断的学习和实践,我们可以不断提升自己的编程技能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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心得体会编写一个程序之前首先要分析它,知道它的功能,要做什么等等,如何实现它,需要我们认真的思考,分析。