C语言程序设计万年历

合集下载

c语言万年历程序

c语言万年历程序

#include <stdio.h>#include <stdlib.h>#include <ctype.h>int leap (int year) ;//判断是否为闰年int days_month (int month,int year) ;//判断这个月的天数int menu_select();/*void f(){int day,month,year,sum,leap,S;printf("\n请输入年月日\n");scanf("%d%d%d",&year,&month,&day);switch(month){case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf("data error");break;}sum=sum+day;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;if(leap==1&&month>2)sum++;S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7; //X表示年份,C是该年份元旦开始到这一日的天数//S/7的系数就是星期数//01printf("%d",S);switch(S){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 0:printf("星期日\n");break;}}*/int Leap(int year){ int leap;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;return leap;}int SU(int sum,int year){int S;S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7;return S;}int Sum(int year,int month,int day=1){int sum,leap;switch(month){case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf("data error");break;}sum=sum+day;leap=Leap(year);if(leap==1&&month>2)sum++;return sum;}void Print(int S){switch(S){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 0:printf("星期日\n");break;}}void Fun1(){int day,month,year,sum,S;printf("\n请输入年月日\n");scanf("%d%d%d",&year,&month,&day);sum=Sum(year,month,day);S=SU(sum,year);Print(S);}void Fun2(){int i,j=1,k=1,a,b,month,year,sum;printf("\n 输入年月:\n");scanf("%d%d",&year,&month);b=days_month(month,year);sum=Sum(year,month);a=SU(sum,year);printf("*************************************\n");printf(" Sun Mon Tue Wed Thu Fri Sat \n");if(a==7){for(i=1;i<=b;i++){printf("%4d",i);if(i%7==0){printf("\n");}}}if(a!=7){while (j<=4*a){printf(" ");j++;}for(i=1;i<=b;i++){printf("%4d",i);if(i==7*k-a){printf("\n");k++;}}}printf("\n*************************************\n");printf("\n");}int days_month (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&&Leap(year)==1) return 29;else return 28;}void main(){for(;;){switch(menu_select()){case 1:printf("输入年月日计算该月第一天是星期几\n");Fun1();break;case 2:printf("打印任意日历\n");Fun2();break;case 3:printf("谢谢使用!\n");exit(0);}}}int menu_select(){ system("cls");char s;int cn;printf("1. 输入年月日计算该月第一天是星期几\n");printf("2. 打印任意日历\n");printf("3.谢谢使用! \n");printf("input 1-3:");do {s=getchar();cn=(int)s-48;}while(cn<0||cn>6);return cn;}。

C语言-万年历

C语言-万年历

#include"reg51.h"sbit Led1 = P0^0;sbit Led2 = P0^1;sbit Led3 = P0^2;sbit Led4 = P0^3;sbit Led5 = P0^4;sbit SPK = P1^1;sbit Key4 = P1^7;sbit Key2 = P1^5;sbit Key1 = P1^4;void DelayTime(unsigned int DTime){unsigned int uiCnt;for(uiCnt = 0;uiCnt < DTime*50;uiCnt++);}code unsigned char LedSeg[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};main(){unsigned char Second = 59,Minute = 59,Month=29,Day=29,Year=11,Hour=23;unsigned int wCnt = 0;unsigned char BLed = 0,ucLed1 = 1,ucLed2 = 2,ucLed3 = 3,ucLed4 = 4;bit FlashBit = 0; //0: 不闪烁;1:闪烁unsigned char Shift = 0;while(1){/*计时*/if(wCnt > 200){wCnt = 0;if(++Second > 59){ Second = 0;if(++Minute > 59){ Minute = 0;if(++Hour > 23){ Hour = 0;if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Month==12){ if(++Day > 31){ Day = 01 ;if(++Month>12){ Month=01;Year++;}}}else if(Month==2){if(Year%4==0&&Year%100!=0||Year%400==0){if(++Day>29){ Day = 01 ;if(++Month>12){ Month=01;Year++;}}}else{if(++Day>28){ Day = 01 ;if(++Month>12){ Month=01;Year++;}}}}else{if(++Day > 30){ Day = 01 ;if(++Month>12){ Month=01;Year++;}}}}}}}switch(++wCnt % 5){case 0: //显示秒的个位Led2 = 1; //定位显示数码管Led3 = 0;Led4 = 0;Led5 = 0;Led1 = 0;if(FlashBit && Shift == 0){if(wCnt < 100)P2 = LedSeg[ucLed1];//亮elseP2 = 0;//灭}elseP2 = LedSeg[ucLed1];break;case 1:P0 &= 0xe0;Led3 = 1;if(FlashBit && Shift == 1){if(wCnt < 100)P2 = LedSeg[ucLed2];//亮elseP2 = 0;//灭}elseP2 = LedSeg[ucLed2];break;case 2:P0 &= 0xe0;Led4 = 1;if(FlashBit && Shift == 2){if(wCnt < 100)P2 = LedSeg[ucLed3];//亮elseP2 = 0;//灭}elseP2 = LedSeg[ucLed3];break;case 3:P0 &= 0xe0;Led5 = 1;if(FlashBit && Shift == 3){if(wCnt < 100)P2 = LedSeg[ucLed4];//亮elseP2 = 0;//灭}elseP2 = LedSeg[ucLed4];break;case 4:P0 &= 0xe0;Led1 = 1;P2 = LedSeg[BLed];break;}DelayTime(5);if(Key4 == 0){DelayTime(10);while(Key4 == 0);if(!FlashBit){BLed++;if(BLed > 2)BLed = 0;}/*如果切换放置这个位置,会出现什么结果?*/ }if(Key1 == 0){DelayTime(10);while(Key1 == 0);FlashBit = ~FlashBit;}if(Key2 == 0){DelayTime(10);while(Key2 == 0);Shift++;if(Shift > 3)Shift = 0;}switch(BLed){case 0:ucLed1 = Second%10;ucLed2= Second/10;ucLed3= Minute%10;ucLed4= Minute/10;break;case 1:ucLed1 = Hour%10;ucLed2=Hour/10;ucLed3 = Day%10;ucLed4= Day/10;break;case 2:ucLed1 = Month%10;ucLed2 = Month/10;ucLed3 = Year%10;ucLed4= Year/10;break;}} }。

C语言程序设计 万年历程序

C语言程序设计 万年历程序

#include"stdio.h"int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};int judge(int year,int month){if(month==1||month==3||month==5||month==7||month==8||month==10||month ==12)return(1);else if(month==2){if(year%4!=0||year%100==0&&year%400!=0)return(2);else return(3);}else return(4);}void show2(){int year,i,j,a,n,m,k;char ** p;char * week[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};char*month[]={"January","February","March","April","May","June","July","Augu st","September","October","November","December"};printf("please inter the year:");scanf("%d",&year);printf("\n");printf("the calendar of the year%d.",year);printf("\n");a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;for(i=0;i<12;i++){n=judge(year,i+1);p=month+i;printf("%s\n",*p);printf("\n");for(j=0;j<7;j++){p=week+j;printf("%6s",*p);}printf("\n");for(k=0;k<a;k++)printf(" ");for(m=1;m<32;m++){printf("%6d",m);if((a+m)%7==0)printf("\n");if(n==1&&m==31) break;else if(n==2&&m==28) break;else if(n==3&&m==29) break;else if(n==4&&m==30) break;}a=(a+m)%7;/*计算出下个月的第一天是星期几*/printf("\n");printf("**************************************************");printf("\n");}}void show(){printf("******************************\n");printf("1.某年某月某日是星期几\n2.是否闰年\n3.某年某月的最大天数\n4.打印该月日历\n5.退出\n");printf("******************************\n");}int show1(int y,int m,int d){int i,R,sum=0;for(i=0;i<m-1;i++)sum=sum+mon_day[i];sum=sum+d;if((y%4 == 0 &&y%100 != 0)||(y%400 == 0)&&m>2)sum=sum+1;R=(5+(y+1)+(y-1)/4-(y-1)/100+(y-1)/400+sum)%7;if(R==0)R=7;return R;}int leap(int y){if((y%4 == 0 &&y%100 != 0)||(y%400 == 0))return 1;elsereturn 0;}int max_day(int y,int m){int X;if(leap(y)==1&&m==2)X=29 ;//printf("该年该月最大天数:29");elseX=mon_day[m-1];//printf("%d",mon_day[m-1]);return X;}void main(){int year,month,day,i;F:show();printf("请选择:");scanf("%d",&i);switch(i){case 1:printf("请输入年、月,日:");scanf("%d%d%d",&year,&month,&day);printf("%d-%d-%d是星期%d\n",year,month,day,show1(year,month,day));break;case 2:printf("请输入年份:");scanf("%d",&year);if(leap(year)==1)printf("该年是闰年.\n");elseprintf("该年不是闰年\n");break;case 3:printf("请输入年、月:");scanf("%d%d",&year,&month);printf("该月最大天数:%d",max_day(year,month)); printf("\n");break;case 4:show2();break;case 5:return 0;break;}goto F;}。

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语言万年历#include<stdio.h>main(){for(;;){int nian,yue,a,b,m,c,_m=28;long e;printf("请输入年份:");scanf("%d",&nian);e=nian;e=e-1;e=(e*365+e/4)%7;m=e;if((nian%4==0)||(nian%100==0)&&(nian%400!=0)) //求出nian是否为闰年//m++;printf("%d的日历:",nian);for(yue=1;yue<=12;yue++){if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12){c=0;printf("\n");printf(" %d月\n",yue);printf(" 日一二三四五六\n");for(b=1;b<=m;b++){c++;printf(" ");}for(a=1;a<=31;a++){c++;if(c%7-1==0&&c!=1)printf("\n");if(a<10)printf(" ");printf(" %d ",a);m++;if(m==7)m=0;}printf("\n");}else{if(yue==4||yue==6||yue==9||yue==11||yue==2){if(yue==2){c=0;printf("\n");printf(" %d月\n",yue);printf(" 日一二三四五六\n");for(b=1;b<=m;b++){c++;printf(" ");}for(a=1;a<=_m;a++){c++;if(c%7-1==0&&c!=1)printf("\n");if(a<10)printf(" ");printf(" %d ",a);m++;if(m==7)m=0;}printf("\n");}else{c=0;printf("\n");printf(" %d月\n",yue);printf(" 日一二三四五六\n");for(b=1;b<=m;b++){c++;printf(" ");}for(a=1;a<=30;a++){c++;if(c%7-1==0&&c!=1)printf("\n");if(a<10)printf(" ");printf(" %d ",a);m++;if(m==7)m=0;}printf("\n");} } }} } }。

万年历程序设计c语言代码

万年历程序设计c语言代码

这是当时我做的一个小小的课题,希望对你有所帮助#include "stdio.h" /* Required for MS-DOS use */#define ENTER 0x1C0D /* Enter key */int year, month, day;static char *days[8] = {" ","Sunday ","Monday ","Tuesday ","Wednesday","Thursday ","Friday ","Saturday "}; struct TIMEDATE {int year; /* year 1980..2099 */int month; /* month 1=Jan 2=Feb, etc. */int day; /* day of month 0..31 */int hours; /* hour 0..23 */int minutes; /* minute 0..59 */int seconds; /* second 0..59 */int hsecs; /* 1/100ths of second 0..99 */char dateline[47]; /* date & time together */};static struct TIMEDATE today;main(){char cmonth[3];char cday[3];char cyear[5];double getdays();double daynumb, numbnow;int weekday, retcode, dayer, i;dayer = datetime(&today);clrscn();for (i=0;i<3;++i)cmonth[i]='\0';for (i=0;i<3;++i)cday[i]='\0';for (i=0;i<5;++i)cyear[i]='\0';putstr(5,8,14,"Enter date in MM DD YYYY format:");while (retcode != ENTER){retcode = bufinp(5,41,13,2,cmonth);if (retcode != ENTER) retcode = bufinp(5,44,13,2,cday);if (retcode != ENTER) retcode = bufinp(5,47,13,4,cyear);}year = atoi(&cyear);month = atoi(&cmonth);day = atoi(&cday);daynumb = getdays(year, month, day);numbnow = getdays(today.year, today.month, today.day); weekday = weekdays(daynumb);if (numbnow - daynumb == 0)printf("\n\n%02d-%02d-%d is",month, day, year);if (numbnow - daynumb > 0)printf("\n\n%02d-%02d-%d was",month, day, year);if (numbnow - daynumb < 0)printf("\n\n%02d-%02d-%d will be",month, day, year);printf(" a %s\n",days[weekday]);} /* end MAIN *//************************************************************* GETDAYS - From integer values of year (YYYY), month * * (MM) and day (DD) this subroutine returns a ** double float number which represents the * * number of days since Jan 1, 1980 (day 1). * * This routine is the opposite of GETDATE. * ************************************************************/double getdays(year, month, day)int year, month, day;{int y,m;double a,b,d, daynumb;double floor(),intg();/************************************ make correction for no year 0 ************************************/if (year < 0) y = year + 1;else y = year;/*********************************************************** Jan and Feb are months 13 and 14 in this calculation ***********************************************************/m = month;if (month < 3){m = m + 12;y = y - 1;}/**************************** calculate Julian days ****************************/d = floor(365.25 * y) + intg(30.6001 * (m + 1)) + day - 723244.0;/************************************************ use Julian calendar if before Oct 5, 1582 ************************************************/if (d < -145068.0) daynumb = d;/*************************************** otherwise use Gregorian calendar ***************************************/else{a = floor(y / 100.0);b = 2 - a + floor(a / 4.0);daynumb = d + b;}return(daynumb);} /* end GETDAYS *//********************************************************* GETDATE - This routine takes a double float number * * representing the number of days since Jan 1,* * 1980 (day 1) and returns the year month and * * day as pointer integers * * This routine is the opposite of GETDAYS * ********************************************************/getdate(numb)double numb;{double a,aa,b,c,d,e,z;double date;date = numb;z = intg(date + 2444239.0);if (date < -145078.0) a = z;else{aa = floor((z - 1867216.25) / 36524.25);a = z + 1 + aa - floor(aa/4.0);}b = a + 1524.0;c = intg((b - 122.1) / 365.25);d = intg(365.25 * c);e = intg((b - d) / 30.6001);day = b - d - intg(30.6001 * e);if (e > 13.5) month = e - 13.0;else month = e - 1.0;if (month > 2) year = c - 4716.0;else year = c - 4715.0;if (year < 1) --year;return;} /* end GETDATE *//********************************************************* WEEKDAYS - This routine takes a double float number * * representing the number of days since Jan 1,** 1980 (day 1) and returns the day of the week** where 1 = Sunday, 2 = Tuesday, etc. * ********************************************************/int weekdays(numb)double numb;{double dd;int day;dd = numb;while (dd > 28000.0) dd = dd - 28000.0;while (dd < 0) dd = dd + 28000.0;day = dd;day = ((day + 1) % 7) + 1;return(day);}/********************************************************* FRACT - This routine takes a double float number ** and returns the fractional part as a double ** float number * ********************************************************/double fract(numb)double numb;{int inumb;double fnumb;while (numb < -32767) numb += 32767;while (numb > 32767) numb -= 32767;inumb = numb;fnumb = inumb;return(numb-fnumb);} /* end FRACT *//********************************************************* FLOOR - This routine takes a double float number ** and returns the next smallest integer *********************************************************/double floor(numb)double numb;{double fract(), intg();double out;out = intg(numb);if (numb < 0 && fract(numb) != 0) out -= 1.0;return(out);} /* end FLOOR *//********************************************************* INTG - This routine takes a double float number ** and returns the integer part as a double ** float number * ********************************************************/double intg(numb)double numb;{double fract();return(numb - fract(numb));} /* end INTG */。

万年历的c语言实现源程序

万年历的c语言实现源程序

万年历的C语言编程实现源程序:#include<stdio.h>#include<stdlib.h>int Isleapyear(int y)/*判断是否是闰年*/{if((y%4==0&&y%100!=0)||(y%400==0))return 1;elsereturn 0;}int Getdaysofmonth(int y,int m)/*确定某个月的天数*/{int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(Isleapyear(y))/*如果是闰年则2月份的天数改变为29*/ months[2]=29;return months[m];}int Gettotaldays(int y,int m)/*计算从1901年1月开始到给定年月的天数*/{intmonths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int days=0;int i,j;if((Isleapyear(y)))months[2]=29;for(i=1901;i<y;i++)/*从1901年1月开始计算,累加y年之前的天数*/{if(Isleapyear(i))days+=366;elsedays+=365;}for(j=1;j<m;j++)/*累加m月之后的天数*/days+=months[j];return days;}int Getfirstdayintable(int y,int m)/*计算给定年月的第一天在日历表中的位置*/{int d;d=Gettotaldays(y,m);d=d+3;/*1901年1月1日是星期二,在日历中星期二是第三个位置*/d=d%7;return d;}void Showdate(int y,int m)/*显示日历*/{int first;int d;int i,k;first=Getfirstdayintable(y,m);/*得到第一天在日历中的第一个位置*/d=Getdaysofmonth(y,m);/*得到这个月的天数*/k=0;printf("-------------------------------------\n");printf(" SUN MON TUE WEN THU FRI STA\n");for(i=1;i<first;i++)/*打印第一天之前的空格*/{printf(" ");k++;/*k用于确定日历中是否回车*/}for(i=1;i<=d;i++){printf("%5d",i);/*每个具体的日期占5个字符的宽度*/k++;if(k==7)/*每行打印7个日期数字后回车*/{printf("\n");k=0;}}printf("\n-------------------------------------\n"); }int main(){int y,m;printf("Input year:");scanf("%d",&y);printf("Input month:");scanf("%d",&m);Showdate(y,m);return 0;}欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。

C语言课程设计万年历 完整版

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};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。

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

C语言课程设计报告题目:万年历系统设计者:李文杰专业班级:软件工程(.net)一班学号:************指导教师:***2011年6月30日河南理工大学计算机科学与技术学院目录一、C语言课程设计任务书 (3)1、C语言课程设计目的和要求 (3)1.1目的: (3)1.2要求: (3)二、本组课题及本人任务 (3)三、程序功能简介 (4)四、主题内容 (4)1、题目与要求 (4)1.1 问题提出 (4)1.2 本系统涉及的知识点 (5)1.3 功能要求 (5)2、功能设计 (6)2.1 算法设计 (6)3、程序流程图.. (8)4、程序代码设计 (9)4.1输入及年份平润确定模块 (9)4.2求星期天数模块 (9)4.3求月份天数模块 (11)4.4查询模块 (11)4.5输出及验证模块 (12)4.6说明: (12)5、C程序设计总结 (12)6、结束语 (13)参考文献 (13)一、C语言课程设计任务书1、C语言课程设计目的和要求1.1目的:1)复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握;2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力;3)培养学生在项目开发中团队合作精神、创新意识及能力。

1.2要求:1)、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;2)、系统设计要实用,编程简练,可用,功能全面3)、说明书、流程图要清楚4)、记录设计情况(备查,也为编写设计说明书作好准备);5)、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。

6)、设计上交内容:设计报告一份(按格式书写);源程序盘一张(能编译成可执行文件并能正常运行,可一个班交一张光盘)。

二、本组课题及本人任务经考虑及尝试,本人决定选择题目2.2编写一个万年历系统,完成对日期的查询输出。

1设计编写一个C程序—“万年历”。

2输入任一年将显示出该年的所有月份日期,对应的星期。

3 下一行显示星期,从周日到周六,中英文都可以。

4 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐。

5 月份:中文英文都可以,注意闰年情况。

三、程序功能简介模仿现实生活中的挂历.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).当系统日期变到下一月时,系统自动翻页到下一月.四、主题内容1、题目与要求1.1 问题提出本人计划编写一个万年历查询系统,模仿现实生活中的挂历,实现多日期的变更了解。

1.2 本系统涉及的知识点1. 程序的三种基本结构:顺序,选择,循环。

if语句的嵌套,for语句的嵌套。

2. 定义整型,字符型,指针变量,字符型数组和指针数组。

数组的初始化和引用和指针的使用。

3. 函数的定义、声名、调用以及函数的返回值。

4. 赋值语句的使用。

5. 输入(scanf)输出(printf)函数的应用。

6. 算术运算符、关系运算符和逻辑运算符的应用。

1.3 功能要求1、建立日历基础信息,输入当前日期时间为本系统时间基数;2、根据年份平润规律得出所要了解年份的平润;3、以每七天为一个循环的规律得出星期天数;4、根据月份天数规律得出所要了解月份天数;5、输入日期查询;6、输出。

2、功能设计2.1 算法设计1、本系统需要实现的功能要求:利用switch语句设计如图1所示的主菜单:请输入选项编号(1~7)图1 日历查询系统主菜单2、选择3后,调用排序函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中每个选项调用一个函数。

图2 排序子菜单3、根据所选菜单编写相应模块图1)输入函数leap 、count ,将当前基数时间输入及求出所要了解年份的平润;2)通过switch 函数求出星期天数;3)通过switch 函数求出月份天数;4)输入日期查询;5)输出及验证。

3、程序流程图(成立)4、程序代码设计4.1输入及年份平润确定模块1)函数原形:void count(int year, int month)2)功能:利用if循环语句和count、leap函数完成对基数日期的输入和对所要了解的日期所在年份的平润。

3)模块源代码:#include <stdio.h>#define YEAR 365int leap(int year){int n;n=(year%4==0&&year%4!=0||year%400==0);return(n);}void count(int year, int month) /*基:2000年1月*/{int i,day,first_day,flag,year1,year2,temp=6;flag=leap(year);year1=year/100; /*相差几百年*/year2=year%100; /*中间几十年*/if(year>=2000) /*大于2000年*/{year1-=20;day=year1/4; /*百闰年数*/day+=(YEAR+24)*year1+YEAR*year2+(year2-1)/4; /*2000年至现年总天数*/if(year>2000)day++; /*加上2000年闰年2月的29天*/4.2求星期天数模块1)函数原型:switch(month)2)功能:利用switch语句完成万年历中对星期天数的求解。

3)模块源代码:switch(month){case 1:day+=0;break;case 2:day+=31;break; /*加上月份天数*/case 3:day+=59+flag;break;case 4:day+=90+flag;break;case 5:day+=120+flag;break;case 6:day+=151+flag;break;case 7:day+=181+flag;break;case 8:day+=212+flag;break;case 9:day+=243+flag;break;case 10:day+=273+flag;break;case 11:day+=304+flag;break;case 12:day+=334+flag;break;}day+=temp; /*加上2000年1月1号是星期六*/ first_day=day%7; /*对7取余,为1号星期*/}else /*以下25行,计算<2000年,算法同上*/ {year1=20-1-year1;year2=100-year2-1; /*倒减,应多减1*/day=year1/4;day+=36524*year1+365*year2+year2/4; switch(month){case 12:day+=31;break;case 11:day+=61;break;case 10:day+=92;break;case 9:day+=122;break;case 8:day+=153;break;case 7:day+=184;break;case 6:day+=214;break;case 5:day+=245;break;case 4:day+=275;break;case 3:day+=306;break;case 2:day+=334+flag;break;case 1:day+=365+flag;break;}day-=temp; /*减去1号的6天*/day=day%7;first_day=(7-day)%7; /*反对称*/}4.3求月份天数模块1)函数原型:switch(month)2)功能:利用switch、fot循环语句实现万年历中对每月天数的求解以及万年历基本信息的输出。

3)模块源代码:switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:month=31;break;case 4:case 6:case 9:case 11:month=30;break;case 2:month=28+flag;}printf(" SUN MON TUE WED THU FRI SAT\n");for(i=1;i<=4*first_day;i++) /*输出空格*/printf(" ");for(i=0;i<month;i++){printf("%4d",i+1); /*输出日历*/if((first_day+i)%7==6)printf("\n");}printf("\n");}4.4查询模块1)函数原型:void main()2)功能:利用main函数实现对输入日期的查询。

3)模块源代码:void main(){int year,i;printf("please input year :\n");4.5输出及验证模块1)函数原型:void main()2)功能:利用for、while语句和for、count函数实现查询结果的输出及验证。

3)模块源代码:while(scanf("%d",&year)!=1){printf("输入错误,请重新输入");fflush(stdin);}for(i=1;i<13;i++){printf("month:%d\n",i);count(year,i);}getch();}4.6说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。

5、C程序设计总结1.程序调试情况;程序经过多次调试,最终运行正常。

输入数据,得出正确结果。

2.本人在程序设计中感想,收获:通过本次试验设计,我对C语言在编写程序时的用处有了更明确的认识,懂得了编写C程序的一般法方步骤。

最大的收获是,编写程序时一定要有信心和勇气,要相信自己一定可以把这个程序编写出来。

分析问题做出算法,想好思路,在心里有个大致的框架,然后按部就班的记下自己想到的每一点内容,把写下的东西认真整理,查缺补漏,把一些细节的地方补上,就这样一个貌似很难的程序就写出来了(其实编程并不难,关键是要投入,要钻到里面去)。

下一步就是读程序了,读程序时一定要小心仔细,一条语句一条语句的读,看是否能输出自己想要输出的结果,如果发现错误要马上改过来,再接着向下读,直到把程序调试的完美无缺为至。

相关文档
最新文档