




免費預覽已結束,剩余13頁可下載查看
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
南京理工大學計算機科學與工程學院 第 1 頁 共 18 頁 1 C+C+課程設計課程設計 -日歷的設計(良好組)日歷的設計(良好組) 專業:計算機科學與技術 完成時間: 2020 年 1 月 31 日 南京理工大學計算機科學與工程學院 第 2 頁 共 18 頁 2 目錄目錄 前言 .2 正文 .2 2.1 設計程序的目的和思想 .2 2.1.1 設計程序的目的: .2 2.1.2 設計程序的思想: .2 2.2 設計環境 .3 2.3 設計目的 .3 2.4 設計流程 .3 2.5 設計內容和設計思想.4 2.5.1 大月和小月的定義.4 2.5.2 閏年與非閏年二月的定義 .4 2.5.3 日歷表的輸出.5 2.6 關鍵技術.6 總結 .6 效果圖 .6 致謝 .8 參考文獻 .8 附錄 A.9 南京理工大學計算機科學與工程學院 第 3 頁 共 18 頁 3 前言前言 C+是美國 AT else if (i=2) if(isleapyear() /判斷閏年 return 29; /是的話返回 29 天 else return 28;/不是閏年返回 28 天 計算輸入的年份和幾點 年份之間相差的天數 計算輸入年份的 1 月 1 號是星期幾 依次遞增,按照每月 的天數按照要求排列 用兩種方式 輸出日歷 居中豎向輸出 橫向輸出,每三 月為一行 主菜單選擇,整 合程序 結束 南京理工大學計算機科學與工程學院 第 6 頁 共 18 頁 6 else return 30; 運用簡單的 if 語句來設定大小月。 If 語句是 c+中常用且簡單的判斷語句,用途相當廣泛,使用起來簡單易懂,易操作。 2.5.2 閏年與非閏年二月的定義 int isleapyear() if(year%4=0 else return 0; 構造閏月的判斷函數,用返回值 1 和 0 來表示是否為閏年,對于后來的函數調用起來簡單不容易 出錯,如果出現 bug,修改起來也簡單。 2.5.3 兩種不同的輸出方法 1.居中輸出 void display2() int n=judgeweek(); for(int i=1;i=12;i+) /總共 12 個月份 int t=1; coutendlsetw(40) setw(5)year年setw(5)i月份endl; coutsetw(30) *endl; coutsetw(30) ; for(int j=0;j7;j+) coutsetw(5)weekdayj; coutendlsetw(30) *endl; coutsetw(30) ; for(int k=1;kn;k+,t+) coutsetw(5) ; /輸入每月第一天的起始位置,即該天為星期幾,用空格補充 for(int d=1;d=monthday(i);d+,t+) coutsetw(5)d; if(t=7) coutendlsetw(30) ; /控制每行只輸出 7 個數字 t=0; /控制一行輸出到星期日,如果到星期日則重新計數 n=t%7; if(n=0) /輸出完一個月后,記錄這個月的最后一天在哪里,尋找下個月第一天的起始位置 n=7; coutendlsetw(30) *endl; 南京理工大學計算機科學與工程學院 第 7 頁 共 18 頁 7 設計這種輸出方法主要運用 for 語句,多重循環,以每個月為單位循環,將一個月劃分為 7 列, 控制每行不超過 7 個數字,月頭和月尾分別用空格補齊,如此循環而得。 2.橫向輸出方法 void display1() coutsetw(35)” ”year”年日歷”; print(1) ; print(2) ; print(3) ; print(4) ; 橫向輸出相對居中輸出有難度,所以在設計橫向輸出時將其劃分為兩個函數,display1 為橫向總 的輸出函數,它的作用主要是輸出日歷的頭和調用下面的 print 函數。 void print(int x) char *a,*b,*c; int fm,sm,tm,modf,mods,modt,dof,dos,dot,i,j; int total=0; total=(year-2000)*365+(year-2001)/4-(year-2001)/100+(year-2001)/400; swtich(x) case 1:a=”一月”,b=”二月”,c=”三月”; fm=31,tm=31; if(islearpyear() sm=29; else sm=28; modf=total%7; mods=(modf+31)%7; if(islearpyear() modt=(mods+29)%7; else modt=(mods+28)%7; break; case 2:a=”四月”,b=”五月”,c=”六月”; fm=30,sm=31,tm=30; if(islearpyear() modf=(total+91)%7; else modf=(total+90)%7; mods=(modf+30)%7; modt=(mods+31)%7; break; case 3:a=”七月”,b=”八月”,c=”九月”; fm=31,sm=31,tm=30; if(islearpyear() modf=(total+182)%7; fm 和 tm 和 sm 分別代表一組中三 個月依次的天數,modf 等代表每 個月依次的第一天的位置,dof 等 分別用來表示每個月從第一天到最 后一天. 南京理工大學計算機科學與工程學院 第 8 頁 共 18 頁 8 else modf=(total+181)%7; mods=(modf+31)%7; modt=(mods+31)%7; break; case 4:a=”十月”,b=”十一月”,c=”十二月”; fm=31,sm=30,tm=31; if(islearpyear() modf=(total+274)%7; else modf=(total+273)%7; mods=(modf+31)%7; modt=(mods+30)%7; break; default:cout”數據溢出”; break; coutsetw(12) asetw(17) bsetw(18) cendlendl; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六 ; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六 endl; for (i=1;i=modf;i+) coutsetw(3) ; for(dof=1;dof=7-modf;dof+) coutsetw(3)dof; for (i=1;i=mods;i+) coutsetw(3) ; for(dos=1;dos=7-mods;dos+) coutsetw(3)dos; for (i=1;i=modt;i+) coutsetw(3) ; for(dot=1;dot=7-modt;dot+) 南京理工大學計算機科學與工程學院 第 9 頁 共 18 頁 9 coutsetw(3)dot; coutendl; for(j=1;j=5;j+) for(i=1;ifm)coutsetw(3) ; else coutsetw(3)dof; dof+; for(i=1;ism)coutsetw(3) ; else coutsetw(3)dos; dos+; for(i=1;itm)coutsetw(3) ; else coutsetw(3)dot; dot+; coutendl; coutendl; 從寫的程序來看橫向輸出要難的多,但主要思想不變,還是依賴多重循環,因為最終要求三個月 為一組輸出,所以在設計時便將每三月作為一個整體,最后有四組,因為每個月按 7 列最多可排列 5 行,所以在一組中僅計算天數又有 7 列五行,如以上所標注的那樣。 3.主函數的設計 int main() Date a; coutsetw(6)萬年歷查詢endl; cout*endl; int choose; w:while(choose!=0) cout1 以橫向模式顯示該年萬年歷 endl; cout”2 以豎向模式顯示該年萬年歷“endl; cout3 查詢某天對應的星期數endl; cout4 退出系統endl; coutchoose; switch(choose) /功能選擇 case 1:a.getyear();a.display1();break; case 2:a.getyear();a.display2();break; case 3:a.getday();a.searchday();break; case 4:cout謝謝使用萬年歷系統,請關閉!endl;exit(0);break; default:cout您輸入有誤,請重新輸入endl;goto w; return 0; 主函數主要包括,日歷的主界面,主菜單,上面各種函數的調用,其中選擇使用 while 和 switc 函數兩者結合,主函數是一個總結過程,將程序從頭到尾整理依次運行。 2.6 關鍵技術 就本程序使用的技術有方面。都是使用的是簡單的如 if 語句,switch 語句,for 循環語句, 輸入和輸出,變量的定義,等。 總結總結 通過實踐的學習,我認到學好計算機要重視實踐操作,不僅僅是學習 C+,還是其它的語言, 以及其它的計算機方面的知識都要重在實踐,所以后在學習過程中,我會更加注視實踐操作,使 自己便好地學好計算機。 效果圖效果圖 剛運行時如:圖 1 圖 1 南京理工大學計算機科學與工程學院 第 11 頁 共 18 頁 11 輸入 2012 時,如:圖 2 圖 2 橫向輸出圖 3 圖 3 程序結束 圖 4 致謝致謝 經過兩周的不懈努力,很高興能完成一個 C+編程,緊張的心終于可以平靜了。從中體會到 以及學習到很多關于 C+的很大方面的只是,是我更加了解了 C+,并更加熟練了 C+。 在此次設計中我也遇到了很多的問題,都是經過查看老師所給的關于課程設計書和圖書館借 的書才明白所用函數的用法,更重要的是上課時老師的細心教學,使我們學會了許多關于 C+的 基礎知識,為本次的課程設計打好了很好的基礎。從而使我能夠順利完成這次課程設計。 南京理工大學計算機科學與工程學院 第 12 頁 共 18 頁 12 在本次做課程設計過程中,要感謝陸建鋒老師的悉心關照,一直陪伴我們,并為大家講解不 懂的地方,很是辛苦,也很是忙碌。還要感謝學院為我們此次課程設計提供機房,讓我們有了良 好的學習環境可以利用所學做課程設計,從很大的程度上增強了我們對于 C+學習的興趣。和小 組成員一塊討論,多聽聽別人的想法,想辦法改進自己,這是我受益匪淺。只有比較才知道自己 的不足。我們一定要好好的改正自己的不足之處,完善自己。不做最好,只做更好!努力在老師 規定的時間內完成老師所規定的任務。 結束課設的時侯,心里就有一種很渴望但又很害怕的感覺,明白了自己與實際所需的距離, 因為現在畢業求職難,特別是對于像自己一般的人,更多的時侯是社會,職業選擇自己,而不是 更多的自己去選擇職業,所以更應該把所學的知識靈活地用于實踐,這次課設就是對自己一個很 好的鍛煉機會,無論任何的償試,都是自己以后很寶貴的經驗,更是對自己的一種充實。 參考文獻參考文獻 1譚浩強 著.C+面向程序程序設計.北京:清華大學出版社,2006.7 2吳乃陵,況迎輝,李海文 著.VC+程序設計.北京:高等教育出版社,2003.8 3鄧宗明,張睿哲,張曉競,等編著.Visual C+ 6.0 編程實用技術與案例.北京:清華大學 出版社,2001.5 4李海文,吳乃陵 等編C+程序設計及實踐教程北京:高等教育出版社,2003.9 附錄 1: #include #include #include #include #include using namespace std; class Date public: void getyear(); /輸入想要查詢的年份 void getday(); /輸入想要查詢的日期 int isleapyear(); /判斷該年是否為閏年 int judgeweek(); /判斷該年的 1 月 1 日是星期幾 int monthday(int i);/判斷該年每個月的天數 void display1(); /以橫向模式輸出結果 void display2(); /以居中模式輸出結果 void print(int x); /橫向輸出的計算 void putfile(); /結果存入文件 void searchday(); /判斷具體某天為星期幾 private: int year; 南京理工大學計算機科學與工程學院 第 13 頁 共 18 頁 13 int month; int day; ; string weekday7= 一,二,三,四,五,六,”日”; /記錄星期一到星期日 void Date:getyear() coutyear; void Date:getday() coutyear; cinmonth; cinday; int Date:isleapyear() if(year%4=0 else return 0; int Date:judgeweek() int total=0; /以 01 年 1 月 1 日(星期一)為基點 int n; total=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100; /計算基點到輸入年份的天數 n=total%7; if(n=0) return 0; else return n+1; /返回該年的 1 月 1 日為星期幾 int Date:monthday(int i) if(i=1|i=3|i=5|i=7|i=8|i=10|i=12) return 31; else if (i=2) if(isleapyear() return 29; else return 28; else return 30; void Date:display1() 南京理工大學計算機科學與工程學院 第 14 頁 共 18 頁 14 coutsetw(35)” ”year”年日歷”; print(1) ; print(2) ; print(3) ; print(4) ; void Date:print(int x) char *a,*b,*c; int fm,sm,tm,modf,mods,modt,dof,dos,dot,i,j; int total=0; total=(year-2000)*365+(year-2001)/4-(year-2001)/100+(year-2001)/400; swtich(x) case 1:a=”一月”,b=”二月”,c=”三月”; fm=31,tm=31; if(islearpyear() sm=29; else sm=28; modf=total%7; mods=(modf+31)%7; if(islearpyear() modt=(mods+29)%7; else modt=(mods+28)%7; break; case 2:a=”四月”,b=”五月”,c=”六月”; fm=30,sm=31,tm=30; if(islearpyear() modf=(total+91)%7; else modf=(total+90)%7; mods=(modf+30)%7; modt=(mods+31)%7; break; case 3:a=”七月”,b=”八月”,c=”九月”; fm=31,sm=31,tm=30; if(islearpyear() modf=(total+182)%7; else modf=(total+181)%7; mods=(modf+31)%7; modt=(mods+31)%7; break; case 4:a=”十月”,b=”十一月”,c=”十二月”; 南京理工大學計算機科學與工程學院 第 15 頁 共 18 頁 15 fm=31,sm=30,tm=31; if(islearpyear() modf=(total+274)%7; else modf=(total+273)%7; mods=(modf+31)%7; modt=(mods+30)%7; break; default:cout”數據溢出”; break; coutsetw(12) asetw(17) bsetw(18) cendlendl; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六 ; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六 endl; for (i=1;i=modf;i+) coutsetw(3) ; for(dof=1;dof=7-modf;dof+) coutsetw(3)dof; for (i=1;i=mods;i+) coutsetw(3) ; for(dos=1;dos=7-mods;dos+) coutsetw(3)dos; for (i=1;i=modt;i+) coutsetw(3) ; for(dot=1;dot=7-modt;dot+) coutsetw(3)dot; coutendl; for(j=1;j=5;j+) for(i=1;ifm)coutsetw(3) ; else coutsetw(3)dof; dof+; for(i=1;ism)coutsetw(3) ; else coutsetw(3)dos; dos+; for(i=1;itm)coutsetw(3) ; else coutsetw(3)dot; dot+; coutendl; coutendl; void Date:display1() coutsetw(35)” ”year”年日歷”; print(1) ; print(2) ; print(3) ; print(4) ; void Date:display2() int n=judgeweek(); for(int i=1;i=12;i+) /總共 12 個月份 int t=1; coutendlsetw(40) setw(5)year年setw(5)i月份endl; coutsetw(30) *endl; coutsetw(30) ; for(int j=0;j7;j+) coutsetw(5)weekdayj; coutendlsetw(30) *endl; coutsetw(30) ; for(int k=1;kn;k+,t+) coutsetw(5) ; /輸入每月第一天的起始位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年辦公軟件供應商協議
- 2025年銀行業務人員培訓與發展協議
- 2025年權益轉讓策劃補充協議范本
- 2025年農村經濟合作社股份互轉協議
- 2025年酒店預訂服務合作協議
- 2025年合作策劃協議書官方范本
- 2025年度供應商策劃合作訂購框架協議
- 教師教育能力提升的多維度框架分析
- 金融產品創新對消費需求的推動作用
- 商業空間節假日垃圾處理規劃基礎知識點歸納
- 2025超聲造影增強劑市場分析
- 水表抄表員安全知識培訓
- 2025年度民宿裝修改造項目承包協議
- “教學評一體化”模式在小學語文教學中的應用策略
- QC實驗室5S現場管理
- 2025年貴州出版集團招聘筆試參考題庫含答案解析
- 攀成德鐵四院中鐵四院集團績效考核管理制度
- 手術室急診搶救的配合
- 《公路橋梁防船撞工程技術指南》
- 公務車駕駛員安全教育
- 北師大版數學四年級上冊第八單元《可能性》大單元整體教學設計
評論
0/150
提交評論