版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
昆明理工大学城市学院课程设计报告课程名称:C语言设计课程设计课程设计题目:万年历姓名:系:信息工程系专业:计算机科学与技术年级:2012学号:指导教师:2013年7月12日任务书实训的目标1.进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。2.针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。3.掌握C语言的编程技巧和上机调试程序的方法。4.掌握程序设计中的常用算法。任务名称:万年历项目功能:1、能够显示当前月的日历以及标志出当前日期。可以翻页、翻年。可以输入年月日查看输入的年月的日历。4、拥有记事本的功能。教师签名:目录一、 实训要求: 31. 掌握时间函数的运用。 32. 掌握在WinTC下的动画制作。 33. 掌握bioskey和随机函数的运用。 34. 学会边界的判断。 35. 掌握链表和文件。 36. 综合所学内容编写一个程序。 3二、实训题目: 31. ①给出时间计算与几天的差值;②给出天数计算日期;③给出两个日期计算差值。 32. ①让一个圆在屏幕上动起来;②制作一个太阳、地球、月亮的动画。 33. ①区域内有障碍物使方块不能穿过;②小球在区域内运动,碰到边界后随机改变方向继续运动。 34. ①创建一个结构体;②创建链表并输出;③删除已有链表中的一个节点;④在已有链表中增加一个节点。 35. 万年历 3三、实训过程: 31. 时间函数: 3思考过程: 32. 动画制作: 3思考过程: 3障碍物(边界判断) 3思考过程 3链表及文件: 3思考过程 31. 课程设计:万年历(带记事本功能) 4①思考过程 4②源代码: 4③运行结果 9四、实训心得: 10实训要求:掌握时间函数的运用。掌握在WinTC下的动画制作。掌握bioskey和随机函数的运用。学会边界的判断。掌握链表和文件。综合所学内容编写一个程序。二、实训题目:①给出时间计算与几天的差值;②给出天数计算日期;③给出两个日期计算差值。①让一个圆在屏幕上动起来;②制作一个太阳、地球、月亮的动画。①区域内有障碍物使方块不能穿过;②小球在区域内运动,碰到边界后随机改变方向继续运动。①创建一个结构体;②创建链表并输出;③删除已有链表中的一个节点;④在已有链表中增加一个节点。万年历三、实训过程:时间函数:思考过程:第一小题:先把系统当前时间用time函数转换成秒,再把输入的天数用24乘3600秒转换成秒,再与系统当前的秒数相加减,最后用ctime函数以字符串输出。第二小题:调用localtime取得系统当前年月日,然后把当前年月日提取出来用自己输入的年月日进行替换,用mktime把该年月日转换成秒,然后再把系统当前时间转换成秒,两个秒数进行相加减,把加减后的结果除以(24*3600)就得到相差的天数。第三小题和第二小题同理,输入两个日期、转换成秒以后相加减,最后除以(24*3600),就得到了两个日子相差的天数。动画制作:思考过程:做个循环,先用白色画一个圆,然后再用背景色画一个圆把当前圆覆盖,然后改变圆心,然后在画圆再覆盖~最后循环完之后,再用白色在用位置画个圆,因为不这样干的话,屏幕上就没有最好运行的位置了…第二小题同理~障碍物(边界判断);①思考过程:第一小题:判断出上下左右移动的时候能运动的范围(即控制外边界),然后再把范围内的某些不能通过的点的范围找出来,把他们分别排除在外,其他的坐标点就是可以任意移动的了,用bioskey计算按下的键的键值,然后判断可以移动之后,就在当前位置用背景色画一个方框,然后在移动之后的位置用白色画方框和障碍物等。第二小题划定一个匡,然后在匡的范围再把小球的半径减去,就是最后小球能运动的范围了…然后我设置的是让小球逆时针转动,然后用随机函数(系统时间做种子)来控制小球偏移的位置(或者说角度)。链表及文件:思考过程:第一个问题需要做的是结构体的认识并运,定义一个结构体,然后输入内容,然后再输出之前输入的内容。第二个问题则是创建链表并输出,将一个节点分成了两份,一边是指针域,一边是数据域,而指针域,指针域是下一节点的地址,我把头结点不存储数据,以方便之后两题的操作;第三个问题是删除链表,首先定义一个空的字符串,P,P1,P2,把头指针赋值给P,随后让用户输入要删去数据的名字,储存在字符串中,利用strcmp函数进行查找,随后如果第一个有数据的节点就符合要求,就把第二个节点的地址赋值给头节点的指针域后跳出循环,如果不是第一个节点符合要求就执行循环,让P赋值给P2,再把p->next赋值给P,这时P就到了下一个节点,再把p->next赋值给P1,也就是让P1得到第三个节点的首地址,P指向第二个节点,P2指向第一个节点,再进行循环,还是没找到就把P,P1,P2同时向后移动一个节点,如果找到了,就把P2的值赋给p->next,再把p->next的值赋给P,这时P就回到了上一个节点,再把p->next直接指向P1,就把中间的那个节点跳过,完成了删除功能;第四个问题则是增加节点,同样定义一个整型数据(即学号),P,P1,P2,P3,让用户键入想要添加的位置,之后让头指针赋值给P,p->next就赋值给P1,也就是让p1指向下一个节点,随后执行循环,让用户输入想学号和每个节点内的学号比较,如果找到了,就创建一个新的链表,并让P3指向它,让用户输入添加的信息,并且把p->next赋值给P2和P,这是P就到了下一个节点,再把p->next赋值给P1,也就是让P1指向第二个,P和P2都指向第一个,返回循环,如果符合要求就让p3->next指向P1,p2->next指向P3,这样,新的节点就进入了链表中,满足要求,最后在主函数中先输入数据,然后执行一个死循环,让用户选择功能,如果选择1就删除一个节点,选择2就增加一个节点,选择0就跳出循环结束程序。课程设计:万年历(带记事本功能)①思考过程:用localtime取得当前的系统时间,并且提取出年月日,然后把公元元年到今年一月一日前的天数计算出来,把这个天数除7取余为a,然后就获得了今年元旦前的一天是星期几。然后循环、从一月循环到当前月的上一月的最后一天,在这个循环中,循环一次a+1;当a=7时a置零,这个是用来计算当前月的上一月的最后一天是星期几,然后从新在次循环外另开一个循环来输出当前月的日历,并标记出今天用()标记,然后用bioskey读取用户按下的键值,并实现相应的翻页、标记特殊日子、记事本、从新输入年份等功能…②源代码:#include<stdio.h>#include<time.h>#include<stdlib.h>voidf();/*计算公元元年到某年某月的时间*/voidf1(longintt,longintn,inty,intr);/*按日历模式输出要得到的那个月的日历*/voidw();/*当前月的日历*/voids();/*输入某个年份和月份*/voidm(longintn,inty,intr);/*记事本功能的函数*/structjishiben/*记事本的结构体定义*/{longinta;charname[100];};voidw()/*输出当前月的日历*/{inty,r,a,b,c;/*分别定义月份日期以及记录键值记录日期以及某月最后一天*/longintn;/*定义年份的变量*/time_ttimep;structtm*p;time(&timep);p=localtime(&timep);/*取得当地时间*/printf("%d--%d--%d\n",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);/*输出当前的年月日*/n=(1900+p->tm_year);/*获得当前年份*/y=(1+p->tm_mon);/*获得当前月份*/r=p->tm_mday;/*获得当前的是几号*/for(;;){printf("jintianshi%d--%d--%d\n",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);/*输出当前年月日*/f(n,y,r);/*调用函数f获得某年某月的日历*/printf("anfangxiangjianketiaojienianhuoyue\n");printf("ruxushurunianfenqinganhuigejian\n");printf("ruoxushiyongjishibenqinganhuiche\n");if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)c=31;if(y==4||y==6||y==9||y==11)c=30;if(y==2&&(((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0))))c=29;if(y==2&&((n%4!=0)||((n%100==0)&&(n%400!=0))))c=28;/*判断月份及最后一天*/a=bioskey(0);/*取得按下的键值*/if(a==18432)n=n-1;/*按方向键向上则年份减一*/if(a==20480)n=n+1;/*按方向键向下则年份加一*/if(a==19200){y=y-1;if(y==0){y=12;n=n-1;}}/*按方向键向左则月份减一*/if(a==19712){y=y+1;if(y==13){y=1;n=n+1;}}/*按方向键向右则月份加一*/if(a==18488){b=r;r=r-7;if(r<1)r=b;}/*按小键盘8则上一周*/if(a==19509){b=r;r=r+7;if(r>c)r=b;}/*按小键盘5则下一周*/if(a==19252){b=r;r=r-1;if(r<1)r=b;}/*按小键盘4则上一日*/if(a==19766){b=r;r=r+1;if(r>c)r=b;}/*按小键盘则下一日*/if(a==7181)m(n,y,r);/*调用m函数进行记事本功能*/if(a==3592)s();/*按回格键调用函数s出入年份和月份*/if(a==283)exit(0);/*按esc键直接退出程序*/system("CLS");}}voidf(longn,inty,intr)/*计算公元元年一月一号到某年的天数nyr为年月日*/{longinti,t;/*定义i为循环变量t为天*/t=0;for(i=1;i<n;i++){if(((i%4==0)&&(i%100!=0))||((i%100==0)&&(i%400==0)))/*判断闰年*/t=t+366;if((i%4!=0)||((i%100==0)&&(i%400!=0)))/*判断平年*/t=t+365;if(t%7==0)/*为防止数据过大所以当t除7的余数是0的时候,让t=0;*/t=0;}f1(t,n,y,r);/*调用函数f输出某月的日历*/}voidf1(longintt,longintn,inty,intr)/*按日历模式输出某月的日历nyr为年月日*/{inti,j,k,a;/*a为记录星期的*/a=t%7;for(i=1;i<y;i++)/*循环到某月的前一个月*/{for(j=1;;j++){a=a+1;if(a==7)a=0;if((i==1||i==3||i==5||i==7||i==8||i==10||i==12)&&j==31)break;if((i==4||i==6||i==9||i==11)&&j==30)break;if(i==2&&(((((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0)))&&j==29)||(((n%4!=0)||((n%100==0)&&(n%400!=0)))&&j==28)))break;}}printf("%ldnian%dyuerili\n",n,y);printf("1234567\n");printf("MONTUEWEDTHUFRISATSUN\n");for(k=0;k<a;k++)printf("");for(j=1;;j++)/*按日历模式输出某月*/{if(j==r)printf("(%2d)",j);/*标记出当前的日子以及特殊的日期*/elseprintf("%2d",j);a=a+1;if(a==7){a=0;printf("\n");}/*当循环一个星期以后,输出一个换行符*/if((y==1||y==3||y==5||y==7||y==8||y==10||y==12)&&j==31)break;if((y==4||y==6||y==9||y==11)&&j==30)break;if(y==2&&(((((n%4==0)&&(n%100!=0))||((n%100==0)&&(n%400==0)))&&j==29)||(((n%4!=0)||((n%100==0)&&(n%400!=0)))&&j==28)))break;/*判断这个月的最后一天时跳出循环*/}printf("\n");}voids()/*输入年月的函数*/{longintn;inty,r,a;for(;;){printf("qingshurunianheyue\n");scanf("%ld%d",&n,&y);if(y<12&&y>0)break;/*判断输入的月份是否正确*/elseprintf("yuefenshurucuowu\n");}for(;;){r=0;/*这里不需要标记处某天,所以令r=0*/f(n,y,r);/*调用函数f来输出需要的某月的日历*/printf("anfangxiangjianketiaojienianhuoyue\n");printf("ruxushurunianfenqinganhuigejian\n");printf("anrjianfanhuidangqianyue\n");a=bioskey(0);if(a==18432)n=n-1;/*按方向键上键则年份减一*/if(a==20480)n=n+1;/*按方向键下键则年份加一*/if(a==19200){y=y-1;if(y==0){y=12;n=n-1;}}/*按方向键左键月份减一*/if(a==19712){y=y+1;if(y==13){y=1;n=n+1;}}/*按方向键右键月份加一*/if(a==283)exit(0);/*按esc退出程序*/system("CLS");/*清屏*/if(a==4978)w();/*按小写的r则调用函数w显示当前月的日历*/if(a==3592)s();/*按回格键调用它自己从新输入一个年月*/}}voidm(longintn,inty,intr){longintc;/*c是用来计算结构体长度的*/longints=r+100*y+10000*n;/*转换年月日例如2013-7-10就转换成20130710*/structjishibenkefu;/*定义结构体*/FILE*fp;/*定义文件指针*/c=sizeof(structjishiben);/*计算结构体需要的长度*/system("CLS");/*清屏*/if((fp=fopen("qw2.txt","a+"))==NULL)/*判断这个文件是否存在*/{printf("dakaishibaiqingxianchuangjiangaiwenjian\n");exit(-1);}else{for(;!feof(fp);){fread(&kefu,sizeof(kefu),1,fp);if(kefu.a==s)break;}/*筛选数据*/if(kefu.a==s){printf("riqi%ld%s\n",kefu.a,);}/*若得到了需要的数据则显示出来*/else/*否则录入数据*/{
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级科学第一知识板块上学期专题变量控制基础选择题高频训练卷快速提分版
- 2026欧盟ERP新规对出口型机电调光器能效门槛的冲击与应对策略报告
- 大型锅炉布袋除尘器提升阀安装施工工法
- 2026事业单位工勤技能-广东-广东广播电视天线工二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-山西-山西机械冷加工五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-山东-山东机械热加工五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-安徽-安徽水利机械运行维护工五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-宁夏-宁夏热处理工五级(初级工)历年参考题库含答案详解
- 2026事业单位工勤技能-天津-天津铸造工一级(高级技师)历年参考题库含答案详解
- 从导数几何意义解读垂直切线的数学表达
- 军训安全教育主题班会
- 2025年广西投资集团有限公司招聘考试笔试试题(含答案)
- 妇产科两非两禁止培训
- 公路工程预算定额
- T/CECS 10214-2022钢面镁质复合风管
- 升压站施工流程图
- 中国古代舞蹈史课件
- 电力系统分析 第2版 习题答案 穆钢 第1-8章
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
- 【教师企业实践手册5400字】
评论
0/150
提交评论