c语言课程设计实习报告1.doc_第1页
c语言课程设计实习报告1.doc_第2页
c语言课程设计实习报告1.doc_第3页
c语言课程设计实习报告1.doc_第4页
c语言课程设计实习报告1.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c语言课程设计实习报告班 级:地信11001班学生姓名:国产毛毛虫学 号:201001098指导老师: 朱小龙、王庆日 期: 目 录一、程序分析与设计1二、流程图1三、源程序清单1四、调试过程1五、程序有待改进的地方2六、本次实习的收获和建议2附录2c语言课程设计实习报告一、程序分析与设计1、要求提取到系统中的日期;2、判断日期是星期几;3、程序会根据系统日期,自动判断月份;4、要求以程序以日历的方式显示程序界面;5、制作万年历的过程中要考虑平年和闰年的区别,系统要求判断平年还是闰年;6、制作万年历,然后根据提取到得系统时间判断月份,自动显示当月的月历;7、要求程序有自动随系统日期而自动更新的功能;8、程序可以实现一些查询的功能。二、流程图开始提取系统时间_strdate(date);判断天数monthnum函数日历格式化显示函数 print主界面选择 print-1判断星期几显示某月日历显示某年日历判断评年闰年星期判断函数week判断平年闰年leap-yearwhile(1)循环检测,作为时间自动更新次选择菜单print-2退出选择项目三、源程序清单#include #include #include #includevoid main ()int print_1();void slect(int n);int leap_year(int year);int monthnum(int leap,int month);void print(int century,int year,int month,int day);int century,year,month,day,newyear,newmonth,newday;int leap,n;int day;/用于记录每个月有多少天char date9,newdate9;_strdate(date);/调用函数取得系统时间/printf(今天是 %sn, date);输出系统日期/*for(i=0;i9;i+)printf(%dn,datei-48);用作查看日期在数组中的存储方式*/century=20;year=(date6-48)*10+(date7-48);/将字符串转换成其应该表示的数值month=(date0-48)*10+(date1-48);day=(date3-48)*10+(date4-48);system(color 27);/调整程序窗口背景和字体颜色 printf(欢迎使用万年历nn);printf(今天是%d%d年%d月%d日n,century,year,month,day);leap=leap_year(century*100+year);/判断该年是平年还是闰年day=monthnum(leap,month);/得到该月有多少天print(century,year,month,day); loop: n= print_1();switch(n) case 1:printf(恭喜!恭喜!n你已经进入日期自动更新功能n);while(1)_strdate(newdate);/调用函数取得系统时间 newyear=(newdate6-48)*10+(newdate7-48);/将字符串转换成其应该表示的数值newmonth=(newdate0-48)*10+(newdate1-48);if(newyear!=year|newmonth!=month) system(cls);print(century,newyear,newmonth,day);year=newyear;month=newmonth;day=newday;sleep(100);break;case 2:printf(|=请按数字选择相应的功能=|n);printf(| 1查询某年某月某日是星期几 |n);printf(| 2打印某月的日历 |n);printf(| 3打印某年的全年日历 |n);printf(| 4查询某一年是否为闰年 |n);printf( = n);scanf(%d,&n);slect(n);break;case 3:printf(您确定要退出吗? 按y退出,按n继续n);getchar();if( (getc(stdin) = y)|(getc(stdin) = y)break;elsegoto loop; ;void print(int century,int year,int month,int day) /用于格式控制输出 int week(int century,int year,int month,int day);int i=1;printf(n_%d%d年%d月_n,century,year,month);printf( sun mon tue wen thu fri satn); switch(week(century,year,month,i) /switch语句用于控制日历开头的格式 case 0:;break;case 1:printf( );break;case 2:printf( );break;case 3:printf( );break;case 4:printf( );break;case 5:printf( );break;case 6:printf( );break;for(i=1;i1&year1&month1&day1&day1&day1&day=31)if(month=3)week=(int)(century/4)-2*century+year+(int)(year/4)+(int)(13*(month+1)/5)+day-1;while(week0) week+=7;xinqi=week%7;return xinqi;void slect(int n) int leap_year(int year);int monthnum(int leap,int month);int week(int century,int year,int month,int day);void print(int century,int year,int month,int day);int xinqi,century,year,month,day,day,leap;switch(n)case 1:while(1)printf(请输入要查询的日期(格式yy,yy,mm,dd)n);scanf(%d,%d,%d,%d,¢ury,&year,&month,&day); xinqi=week(century,year,month,day);if(xinqi=0)printf(%d%d年%d月%d日是星期天n,century,year,month,day);elseprintf(%d%d年%d月%d日是星期%dn,century,year,month,day,xinqi);printf(是否继续查询? 按y继续,按n退出n);getchar();if( (getc(stdin) = n)|(getc(stdin) = n) system(cls);break;else continue;break;case 2:while(1) printf(请输入要查询的年月(格式yy,yy,mm)n);scanf(%d,%d,%d,%d,¢ury,&year,&month);day=monthnum(leap_year(year),month);print(century,year,month,day);printf(是否继续查询? 按y继续,按n退出n);getchar();if( (getc(stdin) = n)|(getc(stdin) = n) system(cls);break;else continue;break;case 3:while(1) system(cls);printf(请输入要查询的年月(格式yy,yy)n);scanf(%d,%d,¢ury,&year);for(month=1;month=12;month+)print(century,year,month,monthnum(leap_year(year),month);printf(是否继续查询? 按y继续,按n退出n);getchar();if( (getc(stdin) = n)|(getc(stdin) = n) system(cls);break;else continue;break;case 4:while(1) printf(请输入要查询的年月(格式yy,yy)n);scanf(%d,%d,¢ury,&year);leap=leap_year(century*100+year);if(leap=1) printf(%d%d是闰年n,century,year);elseprintf(%d%d是平年n,century,year);printf(是否继续查询? 按y继续,按n退出n);getchar();if( (getc(stdin) = n)|(getc(stdin) = n) system(cls);break;else continue;break;int print_1()int n; printf(|=请按数字选择相应的功能=|n);printf(| 1进入日历自动更新功能 |n);printf(| 2进入查询功能 |n);printf(| 3退出 |n);printf(=n);scanf(%d,&n);return n;四、调试过程在程序调试过程中,由于变量设置过多,导致变量用错,使得程序调试得不到理想的结果,碰到了一个异常纠结的问题,几乎话费了我大半下午来调试,在使用百度百科中提供的蔡勒公式时,输入2012,05,05的时候程序的格式控制就又出现了问题,第一天不是按照我的目的输出的,多次调试发现程序没有错误,但是单独把计算星期几的函数拿出来运行的时候却发现2012,05,05输入后计算的返回值却是-1,而根据我们的设想,计算结果应该是在06之间(0代表星期天),后来经过仔细思考发现,-1+7=6而2012,05,05正好是星期六,于是在返回值之前加了一句if判断if(xingqi0)xingqi+=7,但是多测试几个月后还是发现有的月份计算值任然是出现格式不对的情况,自己再仔细调试的时候发现,程序计算的返回值还是负值,所以考虑到用循环解决问题,将上面的if语句修改为while(xingqi0)xingqi+=7,通过多次测试没有发现问题,成功解决了返回值的问题,再看程序的输出显示也没有任何问题。五、程序有待改进的地方1、程序由于是使用系统的库函数_strdate();获取系统的日期,但是获取的格式却是dd/mm/yy这就使得计算星期几的时候不知道是多少世纪,所以我在程序中直接将变量century的值直接固定为20,这就是的我的万年历自动显示的功能受到限制,只能显示20012099年的日历。2、在主界面选择菜单的退出选项上使用了goto语句,询问用户是否确认退出,但是这使得程序的结构变得混乱,违背了结构化程序设计的原则。3、在日历随系统自动更新时间模块中使用了while(1)这个死循环,这使得程序不能同时执行后面的其他查询功能模块,因为程序一直在while这个死循环里面打转,循环没有执行完毕,程序不会执行后面的查询功能。4、程序没有全部使用返回上一层菜单的功能。例如在自动更新模块中,如果想返回上一级选择菜单的时候,这是程序目前无法实现的。六、本次实习的收获和建议通过本次实习,我了解了做事要一鼓作气,因为在星期一选完题的时候,我就开始构思自己的程序该怎么写,通过什么样的算法来达到自己的目的。从星期一到星期三。包括我睡觉的时候做梦都在考虑我的程序该如何写,怎么样才能达到我想要的功能,几天的空余时间在自习室期末复习的时候同样是没有心思的,脑袋里面一直还是想着自己的程序,哪些地方有待改进,还应该添加哪些功能的。很庆幸这个程序完全是靠自己的想法写出来的,没有参考任何万年历的实例,中间自动更新时间模块的功能只知道用一个死循环可以实现,但是自己还是没有想到怎么解决,这是通过老

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论