版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
昆明理工大學(xué)城市學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:C語言設(shè)計(jì)課程設(shè)計(jì)課程設(shè)計(jì)題目:萬年歷姓名:系:信息工程系專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)年級:2012學(xué)號:指導(dǎo)教師:2013年7月12日任務(wù)書實(shí)訓(xùn)的目標(biāo)1.進(jìn)一步培養(yǎng)學(xué)生結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對高級語言基本語言要素和控制結(jié)構(gòu)的理解。2.針對C語言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。3.掌握C語言的編程技巧和上機(jī)調(diào)試程序的方法。4.掌握程序設(shè)計(jì)中的常用算法。任務(wù)名稱:萬年歷項(xiàng)目功能:1、能夠顯示當(dāng)前月的日歷以及標(biāo)志出當(dāng)前日期??梢苑?、翻年??梢暂斎肽暝氯詹榭摧斎氲哪暝碌娜諝v。4、擁有記事本的功能。教師簽名:目錄一、 實(shí)訓(xùn)要求: 31. 掌握時(shí)間函數(shù)的運(yùn)用。 32. 掌握在WinTC下的動畫制作。 33. 掌握bioskey和隨機(jī)函數(shù)的運(yùn)用。 34. 學(xué)會邊界的判斷。 35. 掌握鏈表和文件。 36. 綜合所學(xué)內(nèi)容編寫一個(gè)程序。 3二、實(shí)訓(xùn)題目: 31. ①給出時(shí)間計(jì)算與幾天的差值;②給出天數(shù)計(jì)算日期;③給出兩個(gè)日期計(jì)算差值。 32. ①讓一個(gè)圓在屏幕上動起來;②制作一個(gè)太陽、地球、月亮的動畫。 33. ①區(qū)域內(nèi)有障礙物使方塊不能穿過;②小球在區(qū)域內(nèi)運(yùn)動,碰到邊界后隨機(jī)改變方向繼續(xù)運(yùn)動。 34. ①創(chuàng)建一個(gè)結(jié)構(gòu)體;②創(chuàng)建鏈表并輸出;③刪除已有鏈表中的一個(gè)節(jié)點(diǎn);④在已有鏈表中增加一個(gè)節(jié)點(diǎn)。 35. 萬年歷 3三、實(shí)訓(xùn)過程: 31. 時(shí)間函數(shù): 3思考過程: 32. 動畫制作: 3思考過程: 3障礙物(邊界判斷) 3思考過程 3鏈表及文件: 3思考過程 31. 課程設(shè)計(jì):萬年歷(帶記事本功能) 4①思考過程 4②源代碼: 4③運(yùn)行結(jié)果 9四、實(shí)訓(xùn)心得: 10實(shí)訓(xùn)要求:掌握時(shí)間函數(shù)的運(yùn)用。掌握在WinTC下的動畫制作。掌握bioskey和隨機(jī)函數(shù)的運(yùn)用。學(xué)會邊界的判斷。掌握鏈表和文件。綜合所學(xué)內(nèi)容編寫一個(gè)程序。二、實(shí)訓(xùn)題目:①給出時(shí)間計(jì)算與幾天的差值;②給出天數(shù)計(jì)算日期;③給出兩個(gè)日期計(jì)算差值。①讓一個(gè)圓在屏幕上動起來;②制作一個(gè)太陽、地球、月亮的動畫。①區(qū)域內(nèi)有障礙物使方塊不能穿過;②小球在區(qū)域內(nèi)運(yùn)動,碰到邊界后隨機(jī)改變方向繼續(xù)運(yùn)動。①創(chuàng)建一個(gè)結(jié)構(gòu)體;②創(chuàng)建鏈表并輸出;③刪除已有鏈表中的一個(gè)節(jié)點(diǎn);④在已有鏈表中增加一個(gè)節(jié)點(diǎn)。萬年歷三、實(shí)訓(xùn)過程:時(shí)間函數(shù):思考過程:第一小題:先把系統(tǒng)當(dāng)前時(shí)間用time函數(shù)轉(zhuǎn)換成秒,再把輸入的天數(shù)用24乘3600秒轉(zhuǎn)換成秒,再與系統(tǒng)當(dāng)前的秒數(shù)相加減,最后用ctime函數(shù)以字符串輸出。第二小題:調(diào)用localtime取得系統(tǒng)當(dāng)前年月日,然后把當(dāng)前年月日提取出來用自己輸入的年月日進(jìn)行替換,用mktime把該年月日轉(zhuǎn)換成秒,然后再把系統(tǒng)當(dāng)前時(shí)間轉(zhuǎn)換成秒,兩個(gè)秒數(shù)進(jìn)行相加減,把加減后的結(jié)果除以(24*3600)就得到相差的天數(shù)。第三小題和第二小題同理,輸入兩個(gè)日期、轉(zhuǎn)換成秒以后相加減,最后除以(24*3600),就得到了兩個(gè)日子相差的天數(shù)。動畫制作:思考過程:做個(gè)循環(huán),先用白色畫一個(gè)圓,然后再用背景色畫一個(gè)圓把當(dāng)前圓覆蓋,然后改變圓心,然后在畫圓再覆蓋~最后循環(huán)完之后,再用白色在用位置畫個(gè)圓,因?yàn)椴贿@樣干的話,屏幕上就沒有最好運(yùn)行的位置了…第二小題同理~障礙物(邊界判斷);①思考過程:第一小題:判斷出上下左右移動的時(shí)候能運(yùn)動的范圍(即控制外邊界),然后再把范圍內(nèi)的某些不能通過的點(diǎn)的范圍找出來,把他們分別排除在外,其他的坐標(biāo)點(diǎn)就是可以任意移動的了,用bioskey計(jì)算按下的鍵的鍵值,然后判斷可以移動之后,就在當(dāng)前位置用背景色畫一個(gè)方框,然后在移動之后的位置用白色畫方框和障礙物等。第二小題劃定一個(gè)匡,然后在匡的范圍再把小球的半徑減去,就是最后小球能運(yùn)動的范圍了…然后我設(shè)置的是讓小球逆時(shí)針轉(zhuǎn)動,然后用隨機(jī)函數(shù)(系統(tǒng)時(shí)間做種子)來控制小球偏移的位置(或者說角度)。鏈表及文件:思考過程:第一個(gè)問題需要做的是結(jié)構(gòu)體的認(rèn)識并運(yùn),定義一個(gè)結(jié)構(gòu)體,然后輸入內(nèi)容,然后再輸出之前輸入的內(nèi)容。第二個(gè)問題則是創(chuàng)建鏈表并輸出,將一個(gè)節(jié)點(diǎn)分成了兩份,一邊是指針域,一邊是數(shù)據(jù)域,而指針域,指針域是下一節(jié)點(diǎn)的地址,我把頭結(jié)點(diǎn)不存儲數(shù)據(jù),以方便之后兩題的操作;第三個(gè)問題是刪除鏈表,首先定義一個(gè)空的字符串,P,P1,P2,把頭指針賦值給P,隨后讓用戶輸入要刪去數(shù)據(jù)的名字,儲存在字符串中,利用strcmp函數(shù)進(jìn)行查找,隨后如果第一個(gè)有數(shù)據(jù)的節(jié)點(diǎn)就符合要求,就把第二個(gè)節(jié)點(diǎn)的地址賦值給頭節(jié)點(diǎn)的指針域后跳出循環(huán),如果不是第一個(gè)節(jié)點(diǎn)符合要求就執(zhí)行循環(huán),讓P賦值給P2,再把p->next賦值給P,這時(shí)P就到了下一個(gè)節(jié)點(diǎn),再把p->next賦值給P1,也就是讓P1得到第三個(gè)節(jié)點(diǎn)的首地址,P指向第二個(gè)節(jié)點(diǎn),P2指向第一個(gè)節(jié)點(diǎn),再進(jìn)行循環(huán),還是沒找到就把P,P1,P2同時(shí)向后移動一個(gè)節(jié)點(diǎn),如果找到了,就把P2的值賦給p->next,再把p->next的值賦給P,這時(shí)P就回到了上一個(gè)節(jié)點(diǎn),再把p->next直接指向P1,就把中間的那個(gè)節(jié)點(diǎn)跳過,完成了刪除功能;第四個(gè)問題則是增加節(jié)點(diǎn),同樣定義一個(gè)整型數(shù)據(jù)(即學(xué)號),P,P1,P2,P3,讓用戶鍵入想要添加的位置,之后讓頭指針賦值給P,p->next就賦值給P1,也就是讓p1指向下一個(gè)節(jié)點(diǎn),隨后執(zhí)行循環(huán),讓用戶輸入想學(xué)號和每個(gè)節(jié)點(diǎn)內(nèi)的學(xué)號比較,如果找到了,就創(chuàng)建一個(gè)新的鏈表,并讓P3指向它,讓用戶輸入添加的信息,并且把p->next賦值給P2和P,這是P就到了下一個(gè)節(jié)點(diǎn),再把p->next賦值給P1,也就是讓P1指向第二個(gè),P和P2都指向第一個(gè),返回循環(huán),如果符合要求就讓p3->next指向P1,p2->next指向P3,這樣,新的節(jié)點(diǎn)就進(jìn)入了鏈表中,滿足要求,最后在主函數(shù)中先輸入數(shù)據(jù),然后執(zhí)行一個(gè)死循環(huán),讓用戶選擇功能,如果選擇1就刪除一個(gè)節(jié)點(diǎn),選擇2就增加一個(gè)節(jié)點(diǎn),選擇0就跳出循環(huán)結(jié)束程序。課程設(shè)計(jì):萬年歷(帶記事本功能)①思考過程:用localtime取得當(dāng)前的系統(tǒng)時(shí)間,并且提取出年月日,然后把公元元年到今年一月一日前的天數(shù)計(jì)算出來,把這個(gè)天數(shù)除7取余為a,然后就獲得了今年元旦前的一天是星期幾。然后循環(huán)、從一月循環(huán)到當(dāng)前月的上一月的最后一天,在這個(gè)循環(huán)中,循環(huán)一次a+1;當(dāng)a=7時(shí)a置零,這個(gè)是用來計(jì)算當(dāng)前月的上一月的最后一天是星期幾,然后從新在次循環(huán)外另開一個(gè)循環(huán)來輸出當(dāng)前月的日歷,并標(biāo)記出今天用()標(biāo)記,然后用bioskey讀取用戶按下的鍵值,并實(shí)現(xiàn)相應(yīng)的翻頁、標(biāo)記特殊日子、記事本、從新輸入年份等功能…②源代碼:#include<stdio.h>#include<time.h>#include<stdlib.h>voidf();/*計(jì)算公元元年到某年某月的時(shí)間*/voidf1(longintt,longintn,inty,intr);/*按日歷模式輸出要得到的那個(gè)月的日歷*/voidw();/*當(dāng)前月的日歷*/voids();/*輸入某個(gè)年份和月份*/voidm(longintn,inty,intr);/*記事本功能的函數(shù)*/structjishiben/*記事本的結(jié)構(gòu)體定義*/{longinta;charname[100];};voidw()/*輸出當(dāng)前月的日歷*/{inty,r,a,b,c;/*分別定義月份日期以及記錄鍵值記錄日期以及某月最后一天*/longintn;/*定義年份的變量*/time_ttimep;structtm*p;time(&timep);p=localtime(&timep);/*取得當(dāng)?shù)貢r(shí)間*/printf("%d--%d--%d\n",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);/*輸出當(dāng)前的年月日*/n=(1900+p->tm_year);/*獲得當(dāng)前年份*/y=(1+p->tm_mon);/*獲得當(dāng)前月份*/r=p->tm_mday;/*獲得當(dāng)前的是幾號*/for(;;){printf("jintianshi%d--%d--%d\n",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);/*輸出當(dāng)前年月日*/f(n,y,r);/*調(diào)用函數(shù)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);/*調(diào)用m函數(shù)進(jìn)行記事本功能*/if(a==3592)s();/*按回格鍵調(diào)用函數(shù)s出入年份和月份*/if(a==283)exit(0);/*按esc鍵直接退出程序*/system("CLS");}}voidf(longn,inty,intr)/*計(jì)算公元元年一月一號到某年的天數(shù)nyr為年月日*/{longinti,t;/*定義i為循環(huán)變量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)/*為防止數(shù)據(jù)過大所以當(dāng)t除7的余數(shù)是0的時(shí)候,讓t=0;*/t=0;}f1(t,n,y,r);/*調(diào)用函數(shù)f輸出某月的日歷*/}voidf1(longintt,longintn,inty,intr)/*按日歷模式輸出某月的日歷nyr為年月日*/{inti,j,k,a;/*a為記錄星期的*/a=t%7;for(i=1;i<y;i++)/*循環(huán)到某月的前一個(gè)月*/{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);/*標(biāo)記出當(dāng)前的日子以及特殊的日期*/elseprintf("%2d",j);a=a+1;if(a==7){a=0;printf("\n");}/*當(dāng)循環(huán)一個(gè)星期以后,輸出一個(gè)換行符*/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;/*判斷這個(gè)月的最后一天時(shí)跳出循環(huán)*/}printf("\n");}voids()/*輸入年月的函數(shù)*/{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;/*這里不需要標(biāo)記處某天,所以令r=0*/f(n,y,r);/*調(diào)用函數(shù)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則調(diào)用函數(shù)w顯示當(dāng)前月的日歷*/if(a==3592)s();/*按回格鍵調(diào)用它自己從新輸入一個(gè)年月*/}}voidm(longintn,inty,intr){longintc;/*c是用來計(jì)算結(jié)構(gòu)體長度的*/longints=r+100*y+10000*n;/*轉(zhuǎn)換年月日例如2013-7-10就轉(zhuǎn)換成20130710*/structjishibenkefu;/*定義結(jié)構(gòu)體*/FILE*fp;/*定義文件指針*/c=sizeof(structjishiben);/*計(jì)算結(jié)構(gòu)體需要的長度*/system("CLS");/*清屏*/if((fp=fopen("qw2.txt","a+"))==NULL)/*判斷這個(gè)文件是否存在*/{printf("dakaishibaiqingxianchuangjiangaiwenjian\n");exit(-1);}else{for(;!feof(fp);){fread(&kefu,sizeof(kefu),1,fp);if(kefu.a==s)break;}/*篩選數(shù)據(jù)*/if(kefu.a==s){printf("riqi%ld%s\n",kefu.a,);}/*若得到了需要的數(shù)據(jù)則顯示出來*/else/*否則錄入數(shù)據(jù)*/{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45171-2024塑料類食品接觸材料及制品在微波加熱條件下與食品接觸面溫度的測定
- 人教版八年級物理下冊《第七章力》單元檢測卷及答案
- 開發(fā)具有抗蟲特性的轉(zhuǎn)基因作物品種
- 新高考走班制選課排課解決方案
- 高一化學(xué)達(dá)標(biāo)訓(xùn)練:第四單元太陽能、生物質(zhì)能和氫能的利用
- 2024屆江蘇省淮陰區(qū)高三二診模擬考試數(shù)學(xué)試卷含解析
- 2024高中物理第四章牛頓運(yùn)動定律3牛頓第二定律課后作業(yè)含解析新人教版必修1
- 2024高中語文第一課走進(jìn)漢語的世界第2節(jié)古今言殊-漢語的昨天和今天訓(xùn)練含解析新人教版選修語言文字應(yīng)用
- 2024高考化學(xué)一輪復(fù)習(xí)第1章認(rèn)識化學(xué)科學(xué)章末化學(xué)素材與命題架構(gòu)學(xué)案魯科版
- 2024高考地理一輪復(fù)習(xí)專練64區(qū)域能源礦產(chǎn)資源的綜合開發(fā)利用含解析新人教版
- 郵政儲蓄銀行-客戶經(jīng)理(個(gè)人消費(fèi)貸款)-試題+答案
- 2024年大學(xué)試題(宗教學(xué))-佛教文化筆試歷年真題薈萃含答案
- 乙肝 丙肝培訓(xùn)課件
- 責(zé)任制整體護(hù)理護(hù)理
- 一年級科學(xué)人教版總結(jié)回顧2
- 精神發(fā)育遲滯的護(hù)理查房
- 有效排痰的護(hù)理ppt(完整版)
- 魯教版七年級數(shù)學(xué)下冊(五四制)全冊完整課件
- 算法向善與個(gè)性化推薦發(fā)展研究報(bào)告
- 聚合物的流變性詳解演示文稿
- 電氣設(shè)備預(yù)防性試驗(yàn)安全技術(shù)措施
評論
0/150
提交評論