2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  C 語 言</b></p><p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  2011年 6月 15 日</p><p> 設(shè)計(jì)題目:萬年歷</p><p> 學(xué)生姓名:</p><p> 學(xué)生學(xué)號:</p><p> 專業(yè)班級:

2、數(shù)學(xué)與應(yīng)用數(shù)學(xué)一班</p><p> 學(xué)院名稱:數(shù)學(xué)與計(jì)量經(jīng)濟(jì)學(xué)院</p><p> 同組人姓名:</p><p> 指導(dǎo)老師:</p><p><b>  1 需求分析</b></p><p><b>  問題描述</b></p><p>  我們需

3、要實(shí)現(xiàn)萬年歷的功能,那么如何實(shí)現(xiàn)這個(gè)功能呢?我們都很清楚,普通年份和閏年是有區(qū)別的,那么該怎么區(qū)分這種一天的差別對于萬年歷日期現(xiàn)實(shí)的影響呢?而且已知一個(gè)日期,那么我們怎么能夠知道它是星期幾?是不是需要一個(gè)參照物來比較呢?而且還有很多關(guān)于萬年歷的美化問題,占位符的考慮等等。另外我們還必須判斷輸入的萬年歷是否合法,這也需要一個(gè)子函數(shù)來實(shí)現(xiàn)。好吧,至于基礎(chǔ)的判斷閏年也是不在話下了。</p><p><b> 

4、 輸入數(shù)據(jù)要求</b></p><p>  我們要考慮三種情況,這三種情況下是不能夠?qū)崿F(xiàn)這個(gè)萬年歷的功能的:</p><p>  /*如果給定的日期中年份部分為非正數(shù)*/</p><p>  if(date.year<=0)</p><p>  printf("年份不符合要求!\n"</p>

5、<p>  printf("請重新輸入 )</p><p>  /*如果給定的日期中月份部分為負(fù)數(shù),為0或者大于12*/</p><p>  if(date.month>12||date.month<1)</p><p>  printf("月份不符合要求!\n");</p><p>  

6、printf("請重新輸入");</p><p>  getchar();</p><p><b>  exit(0);</b></p><p>  /*如果給定的日期中天數(shù)部分為非正數(shù),或者大于31*/</p><p>  a[2]=28+leap(date.year);</p>&l

7、t;p>  if(date.day>a[date.month]||date.day<1)</p><p>  printf("日期不符合要求!\n");</p><p>  printf("請重新輸入");</p><p>  getchar();</p><p><b> 

8、 exit(0);</b></p><p><b>  輸出數(shù)據(jù)要求</b></p><p>  根據(jù)輸入數(shù)據(jù),輸出數(shù)據(jù)必須嚴(yán)格的按照占位符進(jìn)行邏輯的策劃,然后得知一行萬年歷的日期的占位符是38個(gè)占位符,于是空格占位符和字符顯示出來的那些占位符就需要有一個(gè)限定使得其不凌亂特別應(yīng)該注意空格符的占位。</p><p><b>

9、  開發(fā)環(huán)境和工具</b></p><p>  開發(fā)環(huán)境:WINDOWS 7</p><p>  開發(fā)工具:Dev-C++ 4.9.9.2</p><p><b>  成員分工</b></p><p>  葉磊:主調(diào)模塊、萬年歷功能實(shí)現(xiàn)、數(shù)據(jù)測試、注釋編寫</p><p>  胡凡:總

10、體設(shè)計(jì)、主調(diào)模塊、備忘錄功能實(shí)現(xiàn)、注釋編寫</p><p><b>  2 總體設(shè)計(jì)</b></p><p><b>  2.1總體設(shè)計(jì)思路</b></p><p><b>  設(shè)計(jì)思路</b></p><p>  考慮到日期與備忘的一一對應(yīng),采用結(jié)構(gòu)體來解決該題成為一個(gè)可行的

11、思路。首先,定義結(jié)構(gòu)體類型,使得年月日與備忘直接綁定在一起。通過程序中這一臨時(shí)存放數(shù)據(jù)的變量,使用文件的讀寫功能向文件中寫入文件以及讀出信息以暫時(shí)使用。</p><p>  針對日歷的輸出,首要考慮的是當(dāng)月1日的輸出位置,即需要求出該月1日是星期幾。針對這個(gè)問題,我們以2011年1月1日為基點(diǎn),求所求日期與基點(diǎn)距離的天數(shù)之差,之后根據(jù)除以7取的余數(shù)來看星期。選擇2011年1月1日為基點(diǎn),是因?yàn)槠錆M足計(jì)算的兩個(gè)條件

12、:1.該日正好為年首,使得計(jì)算相差天數(shù)的計(jì)算變得更為簡單。2.該日正好是星期六,使得相差的天數(shù)除以7所取出來的余數(shù)正好按日歷從左至右顯示(我們輸出的日歷從左往右依次為星期日、一、二、三、四、五、六)。我們考慮2011年前與后的兩種情況。2011年后所需的即為正常余數(shù),2011年前的則需要用7減去得到的余數(shù)才是所欲要的值。之后經(jīng)過一定的輸出格式即可將日歷輸出。</p><p>  針對備忘錄的編寫,考慮到定義了一個(gè)

13、結(jié)構(gòu)體使得年月日與備忘相連,因此可以將年月日與備忘一同存入文件??紤]到萬年備忘錄的龐大,為了節(jié)省時(shí)間和空間,我們想出了一個(gè)算法:在添加寫入文件時(shí),一律將數(shù)據(jù)內(nèi)容寫入文件末尾(即使用ab+追加模式);而當(dāng)讀取文件時(shí),則將文件內(nèi)的年月日與外部參數(shù)輸入的年月日相比較,不相同則位置指針下移,一直到年月日相同或者無法讀取為止。這樣編寫可以避免考慮年份的上限大小(因?yàn)槿绻x一個(gè)二維數(shù)組,雖然也可以將日期和備忘一一對應(yīng),但是這樣的話處理這個(gè)數(shù)組的上

14、限就不好操作了。如果數(shù)組開太大會(huì)直接影響運(yùn)行速度),而且在存入的備忘不太多的情況下在時(shí)間和空間上都可以節(jié)省(空間只跟存入的備忘數(shù)目有關(guān),而不是直接開很大的數(shù)組,這樣即使年份很大也不會(huì)對空間大小有什么影響)。另外,我們設(shè)計(jì)了備忘修改功能、備忘刪除(單日或全部),使得操作可以更人性化。</p><p>  最后,在自學(xué)了命令行參數(shù)之后,我們用argc和*argv[]將主函數(shù)寫出,并且用getopt函數(shù)來處理接收的參數(shù)

15、并返回命令選項(xiàng)。之后便可以通過返回的命令選項(xiàng)用switch語句選擇所需要實(shí)現(xiàn)的功能。</p><p>  以上即為我們對該課題的總體設(shè)計(jì)思路。</p><p><b>  數(shù)據(jù)存儲(chǔ)</b></p><p>  將年月日與對應(yīng)的備忘放于同一結(jié)構(gòu)體變量中,在使用文件讀寫時(shí)作為一個(gè)整體使用,也方便了添加功能、修改功能、刪除功能的實(shí)現(xiàn)。</p&g

16、t;<p><b>  2.2模塊結(jié)構(gòu)圖</b></p><p>  根據(jù)需求將系統(tǒng)劃分為四個(gè)功能模塊,函數(shù)之間的調(diào)用關(guān)系如圖2.1所示。</p><p>  圖2.1 晚年備忘錄的模塊結(jié)構(gòu)圖</p><p>  1)Main:主函數(shù)。</p><p>  2)leap:閏年判斷。</p>&

17、lt;p>  3)checkDate:檢查日期合法性</p><p>  4)show_calender:顯示當(dāng)日的日歷(未輸入日時(shí)顯示當(dāng)月1日的日歷)。</p><p>  5)memo_read:備忘的讀取。</p><p>  6)memo_written:備忘的寫入。</p><p>  7)memo_modify:備忘的修改。

18、</p><p>  8)memo_delete:備忘的刪除(當(dāng)日)。</p><p>  9)memo_delete_all:備忘的刪除(全部)。</p><p><b>  2.3模塊說明</b></p><p>  (以從上至下,從左至右的順序說明)</p><p>  MathPath模塊

19、</p><p>  函數(shù)原型:int main(int argc,char *argv[])</p><p>  功 能:主函數(shù)</p><p>  輸入?yún)?shù):argc——int類型,表示錄入?yún)?shù)的個(gè)數(shù)</p><p>  *argv[]——char類型,各元素記錄各種錄入字符串的首地址</p><p>  輸

20、出參數(shù):0——int類型,返回給系統(tǒng)一個(gè)值,說明程序正常終止</p><p><b>  leap模塊</b></p><p>  函數(shù)原型:int leap(int t_year)</p><p>  功 能:閏年判斷</p><p>  輸入?yún)?shù):t_year——int類型,表示需要判斷閏年的年份</p&

21、gt;<p>  輸出參數(shù):1——int類型,如果是閏年則返回1;</p><p>  0——int類型,如果是非閏年則返回0;</p><p>  3. checkDate模塊</p><p>  函數(shù)原型:void checkDate()</p><p>  功 能:檢查輸入年月日的合法性</p><

22、;p>  輸入?yún)?shù):year——int類型,表示年份</p><p>  month——int類型,表示月份</p><p>  day——int類型,表示日期</p><p><b>  輸出參數(shù):無</b></p><p>  4. show_calender模塊</p><p>  函

23、數(shù)原型:void show_calender()</p><p>  功 能:顯示日歷</p><p>  輸入?yún)?shù):date.year——int類型,表示年份</p><p>  date.month——int類型,表示月份</p><p>  date.day——int類型,表示日期</p><p><

24、b>  輸出參數(shù):無</b></p><p>  5. memo_read模塊</p><p>  函數(shù)原型:void memo_read()</p><p>  功 能:從文件讀取備忘</p><p>  輸入?yún)?shù):date.year——int類型,表示年份</p><p>  date.mo

25、nth——int類型,表示月份</p><p>  date.day——int類型,表示日期</p><p><b>  輸出參數(shù):無</b></p><p>  6. memo_written模塊</p><p>  函數(shù)原型:void memo_written ()</p><p>  功

26、 能:將備忘寫入文件</p><p>  輸入?yún)?shù):date.year——int類型,表示年份</p><p>  date.month——int類型,表示月份</p><p>  date.day——int類型,表示日期</p><p><b>  輸出參數(shù):無</b></p><p>  7

27、. memo_modify模塊</p><p>  函數(shù)原型:void memo_modify ()</p><p>  功 能:修改備忘</p><p>  輸入?yún)?shù):date.year——int類型,表示年份</p><p>  date.month——int類型,表示月份</p><p>  date.da

28、y——int類型,表示日期</p><p><b>  輸出參數(shù):無</b></p><p>  8. memo_delete模塊</p><p>  函數(shù)原型:void memo_delete ()</p><p>  功 能:刪除備忘(當(dāng)日)</p><p>  輸入?yún)?shù):date.ye

29、ar——int類型,表示年份</p><p>  date.month——int類型,表示月份</p><p>  date.day——int類型,表示日期</p><p><b>  輸出參數(shù):無</b></p><p>  9. memo_delete_all模塊</p><p>  函數(shù)原型

30、:void memo_delete_all ()</p><p>  功 能:刪除備忘(全部)</p><p><b>  輸入?yún)?shù):無</b></p><p><b>  輸出參數(shù):無</b></p><p><b>  3 詳細(xì)設(shè)計(jì)</b></p>&l

31、t;p>  為了實(shí)現(xiàn)輸入日期知道其為星期幾的功能,我們必須的選取一個(gè)參照日期“以2011年1月1日星期六為基點(diǎn)”那么如何知道我們想要知道的日期時(shí)星期幾呢?“計(jì)算某月第一天距離基點(diǎn)的天數(shù)除以7取余*/</p><p>  ”于是有“*加上整年的天數(shù)*” “加上整月的天數(shù)”“ 計(jì)算某月第一天是星期幾”這就可以判斷出來距離我們鎖定的那天是有多少天,再利用上述的方法來進(jìn)行計(jì)算,這是/*當(dāng)某年不低于2011年*/的情

32、況,還有/*當(dāng)某年低于2011年*/的情況,其邏輯和這好似一樣的,同理。于是就判斷出了是星期幾。那么關(guān)于輸出,printf("\n\t\t Sun Mon Tue Wed Thu Fri Sat\n\t\t ");</p><p>  /*輸出一定數(shù)量的空格*/這是重點(diǎn),一行有占位符38格/*當(dāng)一行已輸出38個(gè)位數(shù)的時(shí)候換行(除每行開頭的一堆空格外)*/這樣就可以看到

33、 </p><p>  這樣的輸出格式。然后判斷輸入是否合法以及判斷是否是閏年都在課本上有過交代。</p><p><b>  4 測試結(jié)果及分析</b></p><p>  為了檢驗(yàn)該程序的可行性以及正確性,我們選擇了幾組有代表的測試數(shù)據(jù),與實(shí)際結(jié)果符合得很好。測試數(shù)據(jù)如下:</p><p>  選擇了2011

34、年前的一天。我們選擇了1949年10月1日,預(yù)期結(jié)果為星期一,先查看其備忘,預(yù)期結(jié)果為“該日暫無備忘!”。之后添加備忘“中華人民共和國成立!”下面為測試時(shí)所截的圖。</p><p>  在“命令提示行”中輸入?yún)?shù)</p><p><b>  敲回車,得到結(jié)果:</b></p><p>  該日添加備忘“中華人民共和國成立!”。下為參數(shù)輸入:&l

35、t;/p><p>  d.敲回車后提示輸入備忘。輸入備忘。</p><p><b>  按回車后</b></p><p>  敲回車,得到成功信息,并輸出修改后的日歷及備忘。</p><p>  還需要測試年份大于2011年的日期??紤]到這份日歷為萬年歷,于是測試兩份數(shù)據(jù):大于一萬年和小于一萬年。以下測試小于一萬年的數(shù)據(jù):2

36、012年12月24日,先添加備忘“世界末日?”再修改為“不可能是世界末日!”,最后刪除該日備忘。</p><p><b>  輸入?yún)?shù)(添加)</b></p><p><b>  添加備忘</b></p><p><b>  添加成功信息</b></p><p><b&g

37、t;  輸入?yún)?shù)(修改)</b></p><p><b>  輸入修改內(nèi)容</b></p><p><b>  修改成功</b></p><p><b>  輸入?yún)?shù)(刪除)</b></p><p><b>  確認(rèn)刪除后</b></p&

38、gt;<p>  最后測試一組大于一萬年的日期:999999年9月9日.測試功能:添加功能、全部刪除功能。</p><p><b>  輸入?yún)?shù)</b></p><p><b>  輸入備忘</b></p><p><b>  添加成功</b></p><p> 

39、 輸入?yún)?shù)(刪除全部)</p><p><b>  確認(rèn)刪除后</b></p><p>  至此,數(shù)據(jù)測試完畢。所有的測試結(jié)果均與實(shí)際符合得很好,驗(yàn)證了該程序的正確性。</p><p><b>  5 總結(jié)</b></p><p><b>  1 算法與程序總結(jié)</b><

40、/p><p>  本程序定義了結(jié)構(gòu)體類型,將年月日和備忘聯(lián)系起來,在寫入和讀取的過程中均作為一個(gè)整體,并且在將寫入的內(nèi)容始終寫在文件的末尾,而不是定義一一對應(yīng)的備忘數(shù)組,節(jié)省了時(shí)間和空間。</p><p>  由于課題要求使用命令行參數(shù),所以,沒有使用菜單來實(shí)現(xiàn)功能,而是使用命令選項(xiàng)來選擇所需要執(zhí)行的功能。而由于使用了命令行參數(shù),因此該程序必須在DOS環(huán)境下運(yùn)行(命令提示行)。</p&g

41、t;<p>  萬年歷部分,采用定基點(diǎn)求相差的天數(shù)取7的余來確定當(dāng)月首日是星期幾,從而得到所需要的日歷。</p><p><b>  2 改進(jìn)方案</b></p><p><b>  我們</b></p><p><b>  附錄</b></p><p>  以下

42、為我們小組該課題的最終代碼:</p><p>  /*-------------------------------我是分割線-------------------------------*/</p><p>  /*命令行功能選項(xiàng)*/</p><p>  /*-d:顯示當(dāng)月日歷和當(dāng)日備忘*/</p><p>  /*-i:顯示當(dāng)月日歷和添加

43、當(dāng)日備忘*/ </p><p>  /*-m:顯示當(dāng)月日歷和修改當(dāng)日備忘*/ </p><p>  /*-g:刪除當(dāng)日備忘*/</p><p>  /*-t:刪除全部備忘*/</p><p>  /*-------------------------------我是分割線-------------------------------*/<

44、;/p><p><b>  /*頭文件*/ </b></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  #include<conio.h></p><p>  #include<

45、;unistd.h> /*調(diào)用getopt函數(shù)*/</p><p>  /*-------------------------------我是分割線-------------------------------*/</p><p>  /*定義全局變量(各月所含天數(shù))*/ </p><p>  int a[]={0,31,0,31,30,31,30,31

46、,31,30,31,30,31};</p><p>  /*定義全局變量(已獲取的備忘個(gè)數(shù))*/</p><p>  int count_memo;</p><p>  /*定義結(jié)構(gòu)體*/ </p><p>  struct date_message</p><p><b>  {</b><

47、/p><p>  int year; /*年*/ </p><p>  int month; /*月*/ </p><p>  int day; /*日*/ </p><p>  char memo[300]; /*備忘*/ </p><p>  

48、}date={1,1,1,"\0"};</p><p>  /*-------------------------------我是分割線-------------------------------*/</p><p><b>  /*主函數(shù)*/ </b></p><p>  int main(int argc,char *

49、argv[]) </p><p><b>  {</b></p><p><b>  /*函數(shù)聲明*/ </b></p><p>  void checkDate(); /*檢查日期合法性*/</p><p>  void show_calender();

50、 /*顯示日歷*/</p><p>  void memo_written(); /*寫入備忘*/</p><p>  void memo_modify(); /*修改備忘*/ </p><p>  void memo_delete(); /*刪除當(dāng)日備

51、忘*/</p><p>  void memo_delete_all(); /*刪除全部備忘*/</p><p>  void memo_read(); /*讀取備忘*/</p><p><b>  /*定義變量*/ </b></p><p>  char choi

52、ce;</p><p>  /*使用getopt函數(shù)分析命令行參數(shù),識別選項(xiàng)*/</p><p>  while((choice=getopt(argc,argv,"d:i:m:g:t"))!=-1) </p><p>  { /*選項(xiàng)*/ </p><p>  switch(choice)

53、 </p><p>  { /*選項(xiàng)為d時(shí),顯示當(dāng)月日歷和當(dāng)日備忘*/</p><p>  case 'd':/*調(diào)用atoi函數(shù),將字符型數(shù)字轉(zhuǎn)化為整型*/ </p><p>  date.year=atoi(argv[2]); </p><p>

54、  /*如果沒有輸入月份則不賦值*/ </p><p>  if(atoi(argv[3])!=0)date.month=atoi(argv[3]);</p><p>  /*如果沒有輸入日期則不賦值*/</p><p>  if(atoi(argv[4])!=0)date.day=atoi(argv[4]); </p><p&

55、gt;  /*檢查日期合法性*/ </p><p>  checkDate(); </p><p>  /*顯示當(dāng)日日歷*/ </p><p>  show_calender(); </p><p>  /*顯示備忘*/ </p><p>  memo_r

56、ead(); </p><p><b>  break;</b></p><p>  /*選項(xiàng)為i時(shí),顯示當(dāng)月日歷和添加當(dāng)日備忘*/</p><p>  case 'i':date.year=atoi(argv[2]);</p><p>  date.month=at

57、oi(argv[3]);</p><p>  if(atoi(argv[4])!=0)date.day=atoi(argv[4]);</p><p>  checkDate();</p><p>  show_calender();</p><p>  memo_read();</p><p>  printf(&qu

58、ot;請輸入要添加的備忘\n"); </p><p><b>  /*寫入備忘*/</b></p><p>  memo_written(); </p><p>  /*添加之后*/ </p><p>  printf("添加之后的日歷與對應(yīng)的備忘為\n")

59、; </p><p>  show_calender();</p><p>  memo_read();</p><p><b>  break;</b></p><p>  /*選項(xiàng)為m時(shí),顯示當(dāng)月日歷和修改當(dāng)日備忘*/ </p><p>  case 'm

60、9;:date.year=atoi(argv[2]);</p><p>  date.month=atoi(argv[3]);</p><p>  if(atoi(argv[4])!=0)date.day=atoi(argv[4]);</p><p>  checkDate();</p><p>  show_calender();</

61、p><p>  memo_read();</p><p>  /*如果該日無備忘,則給出提示*/</p><p>  if(count_memo==0)</p><p><b>  {</b></p><p>  printf("無法修改,因?yàn)樵撊諢o備忘。\n如需添加備忘,請使用備忘添加功能

62、\n"); </p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  /*修改備忘*/</b></p><p>  memo_modify(); </p><p> 

63、 /*修改之后*/ </p><p>  printf("修改之后的日歷為\n"); </p><p>  show_calender();</p><p>  memo_read();</p><p><b>  break;</b></p><p>

64、;  /*選項(xiàng)為g時(shí),刪除當(dāng)日備忘*/</p><p>  case 'g':date.year=atoi(argv[2]);</p><p>  date.month=atoi(argv[3]);</p><p>  if(atoi(argv[4])!=0)date.day=atoi(argv[4]);</p><p>  

65、checkDate(); </p><p>  show_calender();</p><p>  memo_read(); </p><p>  memo_delete(); </p><p>  show_calender(); </p><p>  memo_read(

66、); </p><p><b>  break;</b></p><p>  /*選項(xiàng)為t時(shí),刪除全部備忘*/</p><p>  case 't':memo_delete_all(); </p><p><b>  getch();</b></p><p>

67、;<b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\t\t Please any key to continue…………"); </p><p>&

68、lt;b>  getch();</b></p><p>  system("cls");</p><p>  return 0; </p><p><b>  }</b></p><p>  /*-------------------------------我是分割線----

69、---------------------------*/</p><p>  /*顯示當(dāng)月日歷*/</p><p>  void show_calender()</p><p><b>  {</b></p><p>  /*函數(shù)調(diào)用聲明*/</p><p>  int leap(int t_y

70、ear);</p><p><b>  /*定義函數(shù)*/</b></p><p>  int sum=0,count=0,i,t,temp_year,temp_month,temp_day=-1;</p><p><b>  /*輸出年月日*/</b></p><p>  printf("

71、\n\t\t\t\t%d年%d月",date.year,date.month);</p><p>  if(date.day!=0)printf("%d日\n",date.day);</p><p>  else printf("1日\n");</p><p>  /*計(jì)算某月第一天是星期幾,以2011年1月1日星期

72、六為基點(diǎn),計(jì)算某月第一天距離基點(diǎn)的天數(shù)除以7取余*/</p><p>  /*當(dāng)某年不低于2011年*/ </p><p>  if(date.year>=2011)</p><p><b>  { </b></p><p>  /*加上整年的天數(shù)*/ </p><p>  for(t

73、emp_year=2011;temp_year<date.year;temp_year++)</p><p>  sum+=365+leap(temp_year);</p><p>  a[2]=(leap(date.year)==1)?29:28;</p><p>  /*加上整月的天數(shù)*/ </p><p>  for(temp_m

74、onth=1;temp_month<date.month;temp_month++)</p><p>  sum+=a[temp_month];</p><p>  /*計(jì)算某月第一天是星期幾*/ </p><p>  t=(sum%7>0)?sum%7:(sum%7+7);</p><p><b>  }</b

75、></p><p>  /*當(dāng)某年低于2011年*/ </p><p>  if(date.year<2011)</p><p><b>  {</b></p><p>  /*加上整年的天數(shù)*/ </p><p>  for(temp_year=2011;temp_year>d

76、ate.year+1;temp_year--)</p><p>  sum+=365+leap(temp_year-1);</p><p>  a[2]=(leap(date.year-1)==1)?29:28;</p><p>  /*加上整月的天數(shù)*/ </p><p>  for(temp_month=12;temp_month>

77、=date.month;temp_month--)</p><p>  sum+=a[temp_month];</p><p>  /*計(jì)算某月第一天是星期幾*/ </p><p>  t=(sum%7>=0)?(7-sum%7):(-sum%7);</p><p><b>  }</b></p>

78、<p>  /*輸出當(dāng)月日歷*/ </p><p>  printf("\n\t\t Sun Mon Tue Wed Thu Fri Sat\n\t\t ");</p><p>  /*輸出一定數(shù)量的空格*/</p><p>  for(i=1;i<=5*t-2;i++)</p><p

79、><b>  {</b></p><p>  printf(" ");</p><p>  /*計(jì)數(shù)一行中已輸出多少個(gè)位數(shù)*/</p><p><b>  count++;</b></p><p><b>  }</b></p><

80、p>  /*逐行輸出日歷中的日期部分*/</p><p>  for(temp_day=1;temp_day<=a[date.month];temp_day++)</p><p><b>  {</b></p><p>  /*如果有輸入日期則特別標(biāo)出*/</p><p>  if(temp_day==dat

81、e.day)</p><p><b>  {</b></p><p>  if(date.day<10)printf("\b[%d] ",date.day);</p><p>  else printf("\b[%d] ",date.day);</p><p><

82、b>  }</b></p><p>  /*普通日期無特別表示*/</p><p>  else printf("%-5d",temp_day);</p><p><b>  /*計(jì)數(shù)增加*/</b></p><p><b>  count+=5;</b><

83、;/p><p>  /*當(dāng)一行已輸出38個(gè)位數(shù)的時(shí)候換行(除每行開頭的一堆空格外)*/</p><p>  if(count==38)</p><p><b>  {</b></p><p>  printf("\n ");</p><p>

84、;<b>  count=3;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p>&l

85、t;p>  /*-------------------------------我是分割線-------------------------------*/</p><p><b>  /*備忘讀取*/</b></p><p>  void memo_read()</p><p><b>  {</b></p&g

86、t;<p>  /*定義文件指針*/</p><p><b>  FILE *fp;</b></p><p><b>  /*定義變量*/</b></p><p><b>  int i;</b></p><p>  struct date_message tem

87、p={0,0,0,"\0"};</p><p>  /*總是在讀取備忘之前令備忘數(shù)歸零*/</p><p>  count_memo=0;</p><p><b>  /*打開文件*/</b></p><p>  if((fp=fopen("calender.txt","

88、ab+"))==NULL)</p><p><b>  {</b></p><p>  printf("\t\t\t\t打開文件失敗\t\t\t\t\n");</p><p><b>  return;</b></p><p><b>  }</b>

89、;</p><p>  /*查找文件中是否有相同的日期*/ </p><p><b>  while(1) </b></p><p><b>  { </b></p><p>  /*文件讀到不能讀取為止*/ </p><p>  if(fread(&temp,

90、sizeof(struct date_message),1,fp)!=1)break;</p><p>  /*如果文件該位置的時(shí)間與所求時(shí)間相同*/</p><p>  if((temp.year==date.year)&&(temp.month==date.month)&&(temp.day==date.day))</p><p>

91、;<b>  {</b></p><p>  /*當(dāng)天備忘個(gè)數(shù)的計(jì)數(shù)*/</p><p>  count_memo++;</p><p>  for(i=0;i<300;i++) </p><p>  date.memo[i]=temp.memo[i];</p><p>  printf(&

92、quot;\n\t\t\t備忘%d:%s\n",count_memo,date.memo); </p><p><b>  } </b></p><p><b>  }</b></p><p>  /*如果沒有相同日期的話*/ </p><p>  if(count_memo==0)&

93、lt;/p><p>  printf("\t\t\t\t該日暫無備忘\n\n");</p><p>  printf("\n");</p><p>  fclose(fp);</p><p><b>  } </b></p><p>  /*----------

94、---------------------我是分割線-------------------------------*/</p><p><b>  /*備忘寫入*/</b></p><p>  void memo_written()</p><p><b>  {</b></p><p>  /*定

95、義文件指針*/</p><p><b>  FILE *fp;</b></p><p><b>  /*打開文件*/</b></p><p>  if((fp=fopen("calender.txt","ab+"))==NULL)</p><p><b&

96、gt;  {</b></p><p>  printf("\n\t\t\t\t 打開文件失敗\n\n\t\t\t ");</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  /*輸入備忘*

97、/</b></p><p>  scanf("%s",date.memo);</p><p><b>  /*寫入備忘*/</b></p><p>  if(fwrite(&date,sizeof(struct date_message),1,fp)==1)</p><p><

98、;b>  {</b></p><p>  system("cls"); </p><p>  printf("\n\t\t\t\t 備忘存入成功\n\n\t\t\t ");</p><p><b>  }</b></p><p><b>  else

99、</b></p><p><b>  {</b></p><p>  system("cls"); </p><p>  printf("\n\t\t\t\t 備忘存入失敗\n\n\t\t\t ");</p><p><b>  }</b><

100、;/p><p>  fclose(fp);</p><p><b>  } </b></p><p>  /*-------------------------------我是分割線-------------------------------*/</p><p><b>  /*備忘修改*/</b>&

101、lt;/p><p>  void memo_modify()</p><p><b>  {</b></p><p>  /*定義文件指針*/</p><p><b>  FILE *fp;</b></p><p><b>  /*定義變量*/</b><

102、;/p><p>  int i=0,t,count=0;</p><p>  struct date_message temp;</p><p><b>  /*打開文件*/</b></p><p>  if((fp=fopen("calender.txt","rb+"))==NULL

103、)</p><p><b>  {</b></p><p>  printf("\n\n\n\n\n\n\n\n\n\t\t\t 打開文件失敗\n\n");</p><p><b>  return;</b></p><p><b>  }</b>&

104、lt;/p><p>  printf("請輸入要修改第幾條備忘\n"); </p><p>  /*輸入需要修改第幾條備忘*/</p><p>  scanf("%d",&t);</p><p>  if(!(t>0&&t<=count_memo))</p>

105、<p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!該次操作失敗\n!");</p><p><b>  getch();</b></p><p>  system("cls");</p><p><b>  e

106、xit(0);</b></p><p><b>  }</b></p><p>  printf("請輸入要修改的內(nèi)容\n"); </p><p><b>  /*輸入備忘*/</b></p><p>  scanf("%s",&date.

107、memo);</p><p>  /*在文件中尋找該日期*/</p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  /*移動(dòng)指針位置*/</p><p>  fseek(fp,i*sizeof(struct

108、date_message),0);</p><p>  /*到文件無法讀取時(shí)退出*/</p><p>  if(fread(&temp,sizeof(struct date_message),1,fp)!=1)break;</p><p>  /*如果文件中的時(shí)間與所求時(shí)間相同*/</p><p>  if((temp.year==d

109、ate.year)&&(temp.month==date.month)&&(temp.day==date.day))</p><p><b>  {</b></p><p>  /*備忘計(jì)數(shù)+1*/</p><p><b>  count++;</b></p><p>

110、;  /*對應(yīng)上同一個(gè)備忘的時(shí)候*/</p><p>  if(count==t)</p><p><b>  { </b></p><p>  fseek(fp,i*sizeof(struct date_message),0);</p><p><b>  /*覆蓋*/</b></p&

111、gt;<p>  fwrite(&date,sizeof(struct date_message),1,fp);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  } </b></p><

112、p><b>  i++; </b></p><p><b>  }</b></p><p>  printf("\n\t\t\t\t 修改成功!\n\n");</p><p><b>  getch();</b></p><p>  system(&q

113、uot;cls");</p><p>  fclose(fp);</p><p><b>  } </b></p><p>  /*-------------------------------我是分割線-------------------------------*/</p><p>  /*當(dāng)日備忘刪除*/

114、</p><p>  void memo_delete()</p><p><b>  {</b></p><p>  /*定義文件指針*/</p><p><b>  FILE *fp;</b></p><p><b>  /*定義變量*/</b>&l

115、t;/p><p>  int i=0,t,choice,count=0;</p><p>  struct date_message temp1={0,0,0,"\0"};</p><p>  struct date_message temp2;</p><p><b>  /*確認(rèn)信息*/</b><

116、;/p><p>  printf("確認(rèn)要?jiǎng)h除當(dāng)日備忘嗎(y/n)? "); </p><p>  /*如果輸入y的話刪除*/ </p><p>  if(!(getchar()=='y'||'Y'))</p><p><b>  { </b></p>

117、<p>  printf("未刪除該日任何備忘\n"); </p><p><b>  getch();</b></p><p>  system("cls");</p><p><b>  exit(0);</b></p><p><b>

118、;  }</b></p><p>  printf("(1)刪除單條備忘 or (2)刪除當(dāng)日所有備忘?\n請輸入1或2進(jìn)行選擇\n");</p><p>  scanf("%d",&choice);</p><p>  switch(choice)</p><p><b>

119、;  {</b></p><p>  case 1:printf("請輸入要?jiǎng)h除第幾條備忘\n"); </p><p>  /*輸入要?jiǎng)h除第幾條備忘*/</p><p>  scanf("%d",&t);</p><p>  if(!(t>0&&t<=co

120、unt_memo))</p><p><b>  {</b></p><p>  printf("輸入錯(cuò)誤!該次操作失?。?quot;);</p><p><b>  getch();</b></p><p>  system("cls");</p>&l

121、t;p><b>  exit(0);</b></p><p><b>  } </b></p><p><b>  /*打開文件*/</b></p><p>  if((fp=fopen("calender.txt","rb+"))==NULL)&l

122、t;/p><p><b>  {</b></p><p>  printf("打開文件失敗\n\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  /*在文件中查找輸入

123、的年月日的信息*/</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  fseek(fp,i*sizeof(struct date_message),0);</p><p>  if((fread(&temp2,sizeof(st

124、ruct date_message),1,fp))!=1)break;</p><p>  if((temp2.year==date.year)&&(temp2.month==date.month)&&(temp2.day==date.day))</p><p><b>  {</b></p><p><b

125、>  count++;</b></p><p>  if(count==t)</p><p><b>  { </b></p><p>  fseek(fp,i*sizeof(struct date_message),0);</p><p>  /*將空的覆蓋上去*/</p><

126、;p>  fwrite(&temp1,sizeof(struct date_message),1,fp);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b

127、>  i++; </b></p><p><b>  }</b></p><p>  printf("單條備忘刪除成功!\n");</p><p><b>  getch(); </b></p><p>  system("cls");&

128、lt;/p><p>  fclose(fp);</p><p><b>  break;</b></p><p>  case 2:/*打開文件*/</p><p>  if((fp=fopen("calender.txt","rb+"))==NULL)</p><

129、p><b>  {</b></p><p>  printf("打開文件失敗\n\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  /*在文件中查找輸入的年月日的信息*/</

130、p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  fseek(fp,i*sizeof(struct date_message),0);</p><p>  if(fread(&temp2,sizeof(struct date_messa

131、ge),1,fp)!=1)break;</p><p>  if((temp2.year==date.year)&&(temp2.month==date.month)&&(temp2.day==date.day)) </p><p><b>  { </b></p><p>  fseek(fp,i*si

132、zeof(struct date_message),0);</p><p>  fwrite(&temp1,sizeof(struct date_message),1,fp);</p><p><b>  } </b></p><p><b>  i++;</b></p><p>&l

133、t;b>  }</b></p><p>  printf("當(dāng)日所有備忘刪除成功!\n");</p><p><b>  getch(); </b></p><p>  system("cls");</p><p>  fclose(fp);</p>

134、<p><b>  break;</b></p><p>  default:printf("輸入錯(cuò)誤!操作失敗!");</p><p><b>  getch();</b></p><p>  system("cls");</p><p><

135、;b>  exit(0);</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  /*-------------------------------我是分割線-------------------------------*/</p>&

136、lt;p>  /*全部備忘刪除*/</p><p>  void memo_delete_all()</p><p><b>  {</b></p><p>  /*定義文件指針*/</p><p><b>  FILE *fp;</b></p><p><b&g

137、t;  /*定義變量*/</b></p><p><b>  int i=0;</b></p><p>  struct date_message temp1={0,0,0,"\0"};</p><p>  struct date_message temp2;</p><p><b&

138、gt;  /*確認(rèn)信息*/</b></p><p>  printf("確認(rèn)要?jiǎng)h除當(dāng)日備忘嗎(y/n)? "); </p><p>  /*如果輸入y的話刪除*/</p><p>  if(!(getchar()=='y'||'Y'))</p><p><b>  {

139、 </b></p><p>  printf("未刪除任何備忘\n"); </p><p><b>  getch();</b></p><p>  system("cls");</p><p><b>  exit(0);</b></p

140、><p><b>  }</b></p><p><b>  /*打開文件*/</b></p><p>  if((fp=fopen("calender.txt","wb+"))==NULL)</p><p><b>  {</b></

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論