万年历C语言报告3
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. 输入检查在程序中,我们使用了正则表达式来检查用户输入的日期是否符合格式要求。
具体而言,日期的格式应该为“YYYY-MM-DD”,其中YYYY表示年份,MM表示月份,DD表示日期。
如果用户输入的日期格式不正确,程序将会提示用户重新输入。
2. 星期查询当用户输入符合格式要求的日期后,程序将会计算该日期对应的星期几。
具体而言,我们使用了蔡勒公式来计算星期几。
该公式的计算过程较为复杂,不在此做详细介绍。
3. 月历输出除了星期几之外,程序还能输出当月的日历。
具体而言,程序将会输出该月份的日历表格,其中包括每天的日期和星期几。
为了使输出的日历表格美观整洁,我们使用了格式化输出的方式,将日期和星期几对齐输出。
三、程序实现在程序实现过程中,我们主要使用了c语言中的日期和时间相关函数。
具体而言,我们使用了time.h头文件中的函数来获取当前日期和时间,然后使用strftime函数将其格式化。
我们还使用了ctype.h头文件中的isxdigit函数来检查用户输入的日期格式是否正确,以及math.h头文件中的floor函数来对日期进行取整操作。
除此之外,我们还使用了c语言中的数组和循环语句来实现日历的输出。
具体而言,我们使用了一个二维数组来存储日历中每天的日期和星期几,然后使用循环语句将其输出到屏幕上。
四、程序测试在程序开发完成后,我们进行了多次测试,确保程序的功能正常。
具体而言,我们测试了以下几个方面:1. 输入检查:测试了输入正确日期和错误日期两种情况,确保程序能够正确检查用户输入的日期格式。
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程序设计》的学习,同学们都认为真正的学到了有用知识,可能有一些人学的不够理想,但无论如何,这些知识都为我们的下一步学习打下了坚实的基础。
做这么一个课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
本程序是一个万年历程序,可以查询1970年1月1日到2100年1月1日中任意一天是星期几,只要在运行程序时按照要求输入年,月,日,程序就会把这一天是星期几显示子啊屏幕上;也可以输入一个年份和一个月份,程序就会把该月份的月历显示在屏幕上,使人一目了然。
该程序能与目前天文学研究中所采用的各种日历程序所能计算的结果相一致。
还有许多功能等着你去探讨。
这个程序花费了很多时间,用了一天的时间去设计程序和调试程序,而在调试程序的过程中,经常会出现一些不如意的地方,所以程序就要修改。
所以这样经过一次又一次的修改之后,程序更显得人性化。
通过这一次程序的设计,让我深深的感受到程序员的辛苦。
2012年6月11日【课程设计题目:万年历系统】【要求】1:程序的功能多样;2:输入日期能够判断该日期是星期几;3:输入一个年份能够显示出该年的全部月历;4:输入一个年月能够显示该月的月历;5:输入一个年份能够判断该年是闰年还是平年;6:能够退出。
程序代码:{printf("please input the day you want(2100,1,1>****,**,**>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day);for(b=0,r=0;b<month;b++)r=a[b]+r;}year=year-1972;r=r+(year/4)*1461+(year%4)*365+day;if(r%7==0)printf (" Today is Saturday.\n");else if(r%7==1)printf(" Today is Sunday.\n");else if(r%7==2)printf(" Today is Monday.\n");else if(r%7==3)printf(" Today is Tuesday.\n");else if(r%7==4)printf(" Today is Wednesday.\n");else if(r%7==5)printf(" Today is Thursday.\n");else printf(" Today is Firday.\n");choose=getchar();printf("Continue(y/n):\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}主要功能模块2:程序代码:{static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006)days=(year-2006)*365+count_leap(year)+monthdays(month,year); weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year); weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<weekday+2;i++)printf ("\t");for (i=1;i<=y;i++){if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i);else printf ("%3d\t",i);};}主要功能模块3:程序代码:{ int i;if (year%4==0&&year%100!=0||year%400==0) i=1;else i=0;return i;}【用到的语句】1.<>,<> /*头文件*/() /*主函数*/(),()[] /*数组*/语句语句/*要调用到的函数*/ 【源程序代码】#include<>#include <>int main() n");printf(" 2:yue li.\n");printf(" 3:ri li.\n");printf(" 4:run nian pan duan. \n");printf(" 5:exit\n");printf("\n");printf("*****************************************************************************\n"); printf (" please input the number:");scanf("%d",&number);if(number==1){printf("please input the day you want(2100,1,1>****,**,**>1970,1,1):");scanf("%d,%d,%d",&year,&month,&day); n");else if(r%7==1)printf(" Today is Sunday.\n");else if(r%7==2)printf(" Today is Monday.\n");else if(r%7==3)printf(" Today is Tuesday.\n");else if(r%7==4)printf(" Today is Wednesday.\n");else if(r%7==5)printf(" Today is Thursday.\n");else printf(" Today is Firday.\n");choose=getchar();printf("Continue(y/n):\n"); n");else printf("This is pingyear.\n");choose=getchar();printf("Continue(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main();}else //选择其他则退出return 0;}int leap_year(int year) //判断是否闰年{ int i;if (year%4==0&&year%100!=0||year%400==0) i=1;else i=0;return i;}int count_leap(int year){ int i=0,j,min,max;if(year>2006) {min=2006;max=year;}else {min=year+1;max=2006;}for(j=min;j<max;j++)if(leap_year(j)) i++;return i;}int monthdays(int month,int year) //该月的天数{ int sum=0,i,j;if(year>=2006){ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};j=month-1;if(leap_year(year)) t[1]=29;else t[1]=28;for(i=0;i<j;i++)sum=sum+t[i];}else{ static int t1[12]={31,30,31,30,31,31,30,31,30,31,0,31};j=12-month;if(leap_year(year)) t1[10]=29;else t1[10]=28;for(i=0;i<=j;i++)sum=sum+t1[i];}return sum;}void monthprint(int year,int month) //输出该月的月历{ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year);weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<weekday+2;i++) //输出该月第一天所在位置之前的空格 printf ("\t");for (i=1;i<=y;i++) //输出该月的月历{if ((i+weekday-1)%7==0) printf ("\n\t%3d\t",i);else printf ("%3d\t",i);};}【调试及分析过程】1:在代码编辑器上输入以上程序代码后,保存并f9到上运行结果输出:分析:运行后出现“菜单”,选项意思是:输入1,则确定一个日期是星期几。
c语言课程设计报告--万年历,最详细

C语言课程设计报告 -----万年历设计人:贾伟涛学号:2013010912班级:13电信应电班指导老师:张伟日期:2014年6月9日内容提要通过大一下学期对C语言的学习,了解到了很多C语言的相关知识。
学习的过程虽然有很多困惑,但是当自己能够独立的看懂和独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。
我虽然可以看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对c语言的兴趣。
C语言是近年在国内外得到迅速推广应用的一种机器语言。
C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。
因此,C语言特别适合于编写各种软件。
在这次的课程设计中我将把日常生活中最经常接触的——日历的查询,利用C语言的程序编成一个简单的万年历查询系统。
通过这个小小的系统可以实现很多功能。
在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。
在不断的调试中最终才获得最为完整的程序。
接下来就是我的C语言课程设计的具体内容来了,大家拭目以待吧!目录一、系统功能和数据说明-----------------------二、问题分析---------------------------------三、程序总体设计及功能结构框图---------------四、程序流程图-------------------------------五、源程序代码-------------------------------六、使用说明---------------------------------七、个人心得---------------------------------八、参考文献---------------------------------一、系统功能和数据说明(一)功能简介在日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简单明了的给我们最想要的日期信息。
万年历C语言报告3

软件工程实验报告姓名:学号:班级:指导老师第三章实验报告(Reports)实验题目:实验目的通过实例使同学们掌握结构化数据流分析技术,结构化程序设计的基本概念与技术,并且养成良好的编码风格,单元测试的一般步骤及技术,集成测试的一般步骤和技术等软件设计的相关技术。
一.实验内容1.软件需求分析数据流程图总流程算法一算法二2.软件设计与编码#include "stdio.h"#include "conio.h"void main(){int leap_year(int y);int count_leap(long year);int monthdays(int month,long year);void monthprint(long year,int month);int month=0;long year=0;char choose;clrscr(); /* clear the windows */do{printf ("\n\nPlease input one integer number as'year'(0~3000):\n");scanf ("%ld",&year);if (year<0||year>3000) printf ("WANNING:ERROR,please input again!");}while (year<0||year>3000);printf ("\n\n");do{printf ("please input the month(1~12)\n\n");scanf ("%d",&month);if (month<=0||month>12) printf ("WANNING:ERROR,please inputagain!");}while (month<=0||month>12);printf ("\n\n\n");printf("\t\t\t\t%ld\t%d\n\n",year,month);printf("\n******************************************************************************* *\n");printf("\t\t Sun\t Mon\t Tue\t Wen\t Thu\t Fri\t Sat\n");monthprint(year,month);printf("\n\n");choose=getchar();printf("Continue?(y/n):\n\n");scanf("%c",&choose);if (choose=='y'||choose=='Y') main(); /*main函数调用main函数本身*/ }int leap_year(int y){ int i;if (y%4==0&&y%100!=0||y%400==0) i=1;else i=0;return i;}int count_leap(long year){int i=0,j,min,max;if(year>2006) {min=2006;max=year;}else {min=year+1;max=2006;}for(j=min;j<max;j++)if(leap_year(j)) i++;return i;}int monthdays(int month,long year){int sum=0,i,j;if(year>=2006){ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};/*1~12月的每月天数*/j=month-1;if(leap_year(year)) t[1]=29;else t[1]=28;for(i=0;i<j;i++)sum=sum+t[i];}else{static int t1[12]={31,30,31,30,31,31,30,31,30,31,0,31}; /*12~1月的每月天数*/j=12-month;if(leap_year(year)) t1[10]=29;else t1[10]=28;for(i=0;i<=j;i++)sum=sum+t1[i];}return sum;}void monthprint(long year,int month){static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};int i,y,weekday=0;long days=0;if(leap_year(year)) t[1]=29;else t[1]=28;y=t[month-1];if(year>2006){days=(year-2006)*365+count_leap(year)+monthdays(month,year);weekday=days%7;}else if(year<2006){days=(2005-year)*365+count_leap(year)+monthdays(month,year);weekday=7-days%7;}else{days=monthdays(month,year);weekday=days%7;}for (i=1;i<=weekday+2;i++) /*由于上一行打印星期的时候空2个制表位,所以weekday要加2*/printf ("\t");for (i=1;i<=y;i++){if ((i+weekday-1)%7==0) printf ("\n\n\t\t%3d\t",i);else printf ("%3d\t",i);};printf("\n********************************************************************* ***********\n\n");}二.测试结果三.总结通过本次实验,我充分认识到了制作一个能够运行的软件和制作一个好的软件之间的差距,做一个好的软件不仅要求软件能够工作,而且软件从开始制作到最终完成都要经过严格的审核,不断的修改,从而使做出的软件界面更和谐,更易于操作,功能更强大等等。
C语言程序设计报告《万年历》

《“万年历”》—C语言程序设计报告专业:计算机科学与技术班级:姓名:指导教师:年月日目录1.设计的任务 (3)2.对问题的分析理解 (3)3. 采用的算法(流程图) (5)4. 算法中涉及的知识点 (6)5.设计用的计算机环境 (6)6 结论 (6)7.源代码 (7)1.设计的任务1.1设计编写一个C程序—“万年历”。
1.2输入任一年将显示出该年的所有月份日期,对应的星期。
1.3 下一行显示星期,从周日到周六,中英文都可以。
1.4 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐。
1.5 月份:中文英文都可以,注意闰年情况。
2.对问题的分析理解2.1 要输入任一年显示出该年的所有月份日期,应该先设计具体的输出格式,如下:the calendar of the year2008.JanuarySun Mon Tue Wed Thu Fri Sat1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31FebruarySun Mon Tue Wed Thu Fri Sat1 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29=============================================…………2.2 判断是不是闰年 (year%4!=0||year%100==0&&year%400!=0)满足条件就是平年,把一年中的所有月份分为四类(28,29,30,31)。
2. 3 求出一年中的第一天是周几(year +(year-1)/4-(year-1)/100+(year-1)/400)%7。
2.4 有指针数组存放十二个月的英文和星期的英文缩写。
2.5 用FOR循环输出各月份的日历3. 采用的算法(流程图)开始定义整型变year,i=0,j=0,a,n,m=1,k=0和函数judge 定义一个指针变量**p定义两个字符型数组,month,week输入年份,yeara=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7i++,i<4n=judge(year,i+1),p=month+i输出月份回车Nj++,j<7输出星期回车k++,k<a输出六个空格m++,m<3输出占六个字节的天数(a+m)%7==0YY N输出回车n==2&&m==28YYn==3&&m==29break,退出本次循环break,退出本次循环n==4&&m==30break,退出本次循环Na=(a+m)%7回车输出”==============”结束NYYY Y4.算法中涉及的知识点4.1 定义整型,字符型,指针变量,字符型数组和指针数组。
万年历C语言报告3

万年历C语言报告3万年历是一种常用的日历工具,可以显示任意年份的任意月份的日历,并且还能够根据用户的需求进行一定的调整。
通过这个项目的设计和实现,我更深入地了解了C语言的应用,并且提升了编程能力。
本次实现的万年历功能主要包括以下几个方面:1. 用户输入年份和月份,程序可以显示对应年份和月份的日历。
为了实现这个功能,我首先使用了C语言的输入函数 scanf 来获取用户的输入,然后使用了计算机中的日期计算方法和算法来推算出该月份的具体日期。
最后,我们使用C语言的输出函数 printf 来将日历以表格形式显示出来。
2.用户可以选择其中一天并输出该天的详细信息。
在实现这个功能时,我首先使用了结构体来存储日期的信息,包括年、月、日、星期等。
然后,当用户选择其中一天时,我根据输入的日期,查找并输出对应的详细信息,如星期几、是一年中的第几天等等。
3.用户可以选择不同的视图显示日历。
为了实现这个功能,我使用了C语言的条件判断语句来判断用户的选择,并且根据不同的选择来显示不同的视图。
用户可以选择显示整个月份的日历,也可以只显示当月的日期。
此外,为了增加程序的可读性和易用性,我还对程序进行了一些优化和改进:1.使用函数来提高代码的复用性。
我将一些常用的功能封装成函数,如计算2024年6月的天数、计算其中一天的星期几等等。
这样不仅可以减少代码的冗余,并且让代码更加易读和易于维护。
2.添加错误处理机制。
用户输入的年份和月份可能会不符合规定范围,为了避免程序出错,我对用户的输入进行了检查,并在输入错误时进行了相应的提示。
这样可以增加程序的稳定性和可靠性。
3.增加程序的交互性。
用户可以通过菜单选择不同的功能和视图,并根据提示进行操作。
这样可以提高用户的使用体验和程序的易用性。
通过完成这个万年历项目,我不仅学习到了C语言的应用,还锻炼了自己的编程能力。
在这个过程中,我掌握了C语言的输入输出函数、条件判断语句、循环语句等基本语法,并熟悉了C语言的常用函数和相关算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程实验报告
姓名:
学号:
班级:
指导老师
第三章实验报告(Reports)
实验题目:
实验目的通过实例使同学们掌握结构化数据流分析技术,结构化程序设计的基本
概念与技术,并且养成良好的编码风格,单元测试的一般步骤及技术,集成测试的一般步骤和技术等软件设计的相关技术。
一.实验内容
1.软件需求分析
数据流程图
总流程
算法一
算法二
2.软件设计与编码
#include "stdio.h"
#include "conio.h"
void main()
{
int leap_year(int y);
int count_leap(long year);
int monthdays(int month,long year);
void monthprint(long year,int month);
int month=0;
long year=0;
char choose;
clrscr(); /* clear the windows */
do
{printf ("\n\nPlease input one integer number as
'year'(0~3000):\n");
scanf ("%ld",&year);
if (year<0||year>3000) printf ("WANNING:ERROR,please input
again!");
}
while (year<0||year>3000);
printf ("\n\n");
do
{printf ("please input the month(1~12)\n\n");
scanf ("%d",&month);
if (month<=0||month>12) printf ("WANNING:ERROR,please input again!");
}
while (month<=0||month>12);
printf ("\n\n\n");
printf("\t\t\t\t%ld\t%d\n\n",year,month);
printf
("\n************************************************************************ ********\n");
printf("\t\t Sun\t Mon\t Tue\t Wen\t Thu\t Fri\t Sat\n");
monthprint(year,month);
printf("\n\n");
choose=getchar();
printf("Continue?(y/n):\n\n");
scanf("%c",&choose);
if (choose=='y'||choose=='Y') main(); /*main函数调用main函数本身*/ }
int leap_year(int y)
{ int i;
if (y%4==0&&y%100!=0||y%400==0) i=1;
else i=0;
return i;
}
int count_leap(long year)
{
int i=0,j,min,max;
if(year>2006) {min=2006;max=year;}
else {min=year+1;max=2006;}
for(j=min;j<max;j++)
if(leap_year(j)) i++;
return i;
}
int monthdays(int month,long year)
{
int sum=0,i,j;
if(year>=2006)
{ static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};/*1~12月的每月天数*/
j=month-1;
if(leap_year(year)) t[1]=29;
else t[1]=28;
for(i=0;i<j;i++)
sum=sum+t[i];
}
else
{ static int t1[12]={31,30,31,30,31,31,30,31,30,31,0,31}; /*12~1月的每月天数*/
j=12-month;
if(leap_year(year)) t1[10]=29;
else t1[10]=28;
for(i=0;i<=j;i++)
sum=sum+t1[i];
}
return sum;
}
void monthprint(long year,int month)
{
static int t[12]={31,0,31,30,31,30,31,31,30,31,30,31};
int i,y,weekday=0;
long days=0;
if(leap_year(year)) t[1]=29;
else t[1]=28;
y=t[month-1];
if(year>2006)
{
days=(year-2006)*365+count_leap(year)+monthdays(month,year);
weekday=days%7;
}
else if(year<2006)
{days=(2005-year)*365+count_leap(year)+monthdays(month,year);
weekday=7-days%7;
}
else
{days=monthdays(month,year);weekday=days%7;}
for (i=1;i<=weekday+2;i++) /*由于上一行打印星期的时候空2个制表位,所以weekday要加2*/
printf ("\t");
for (i=1;i<=y;i++)
{if ((i+weekday-1)%7==0) printf ("\n\n\t\t%3d\t",i);
else printf ("%3d\t",i);};
printf
("\n************************************************************** ******************\n\n");
}
二.测试结果
三.总结
通过本次实验,我充分认识到了制作一个能够运行的软件和制作一个好的软件之间的差距,做一个好的软件不仅要求软件能够工作,而且软件从开始制作到最终完成都要经过严格的审核,不断的修改,从而使做出的软件界面更和谐,更易于操作,功能更强大等等。
在本次实验中,我也犯了这样那样的错误,但是通过与其他同学的讨论交流,我也将这些错误一一改正了过来,这使我认识到软件制作过程中交流的重要性。
总之,本次实验我的收获很大,最重要的是对软件工程这门课程有了一个更深入的认识。