版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C 語(yǔ) 言課 程 設(shè) 計(jì) 報(bào) 告設(shè)計(jì)題目:萬(wàn)年歷學(xué)生姓名:葉磊學(xué)生學(xué)號(hào):20101010125專業(yè)班級(jí):數(shù)學(xué)與應(yīng)用數(shù)學(xué)一班學(xué)院名稱:數(shù)學(xué)與計(jì)量經(jīng)濟(jì)學(xué)院同組人姓名:胡凡指導(dǎo)老師:姚 蘭2011年 6月15 日1 需求分析1.1 問題描述我們需要實(shí)現(xiàn)萬(wàn)年歷的功能,那么如何實(shí)現(xiàn)這個(gè)功能呢?我們都很清楚,普通年份和閏年是有區(qū)別的,那么該怎么區(qū)分這種一天的差別對(duì)于萬(wàn)年歷日期現(xiàn)實(shí)的影響呢?而且已知一個(gè)日期,那么我們?cè)趺茨軌蛑浪切瞧趲??是不是需要一個(gè)參照物來(lái)比較呢?而且還有很多關(guān)于萬(wàn)年歷的美化問題,占位符的考慮等等。另外我們還必須判斷輸入的萬(wàn)年歷是否合法,這也需要一個(gè)子函數(shù)來(lái)實(shí)現(xiàn)。好吧,至于基礎(chǔ)的判斷閏
2、年也是不在話下了。1.2 輸入數(shù)據(jù)要求 我們要考慮三種情況,這三種情況下是不能夠?qū)崿F(xiàn)這個(gè)萬(wàn)年歷的功能的: /*如果給定的日期中年份部分為非正數(shù)*/ if(date.year<=0)printf("年份不符合要求!n" printf("請(qǐng)重新輸入) /*如果給定的日期中月份部分為負(fù)數(shù),為0或者大于12*/ if(date.month>12|date.month<1) printf("月份不符合要求!n"); printf("請(qǐng)重新輸入"); getchar(); exit(0); /*如果給定的日期中天數(shù)部分
3、為非正數(shù),或者大于31*/ a2=28+leap(date.year); if(date.day>adate.month|date.day<1)printf("日期不符合要求!n"); printf("請(qǐng)重新輸入"); getchar(); exit(0);1.3 輸出數(shù)據(jù)要求根據(jù)輸入數(shù)據(jù),輸出數(shù)據(jù)必須嚴(yán)格的按照占位符進(jìn)行邏輯的策劃,然后得知一行萬(wàn)年歷的日期的占位符是38個(gè)占位符,于是空格占位符和字符顯示出來(lái)的那些占位符就需要有一個(gè)限定使得其不凌亂特別應(yīng)該注意空格符的占位。1.4 開發(fā)環(huán)境和工具開發(fā)環(huán)境:WINDOWS 7開發(fā)工具:Dev-C
4、+ .21.5 成員分工葉磊:主調(diào)模塊、萬(wàn)年歷功能實(shí)現(xiàn)、數(shù)據(jù)測(cè)試、注釋編寫胡凡:總體設(shè)計(jì)、主調(diào)模塊、備忘錄功能實(shí)現(xiàn)、注釋編寫2 總體設(shè)計(jì)2.1總體設(shè)計(jì)思路1. 設(shè)計(jì)思路考慮到日期與備忘的一一對(duì)應(yīng),采用結(jié)構(gòu)體來(lái)解決該題成為一個(gè)可行的思路。首先,定義結(jié)構(gòu)體類型,使得年月日與備忘直接綁定在一起。通過程序中這一臨時(shí)存放數(shù)據(jù)的變量,使用文件的讀寫功能向文件中寫入文件以及讀出信息以暫時(shí)使用。針對(duì)日歷的輸出,首要考慮的是當(dāng)月1日的輸出位置,即需要求出該月1日是星期幾。針對(duì)這個(gè)問題,我們以2011年1月1日為基點(diǎn),求所求日期與基點(diǎn)距離的天數(shù)之差,之后根據(jù)除以7取的余數(shù)來(lái)看星期。選擇2011年1月1日為基點(diǎn),是
5、因?yàn)槠錆M足計(jì)算的兩個(gè)條件:1.該日正好為年首,使得計(jì)算相差天數(shù)的計(jì)算變得更為簡(jiǎn)單。2.該日正好是星期六,使得相差的天數(shù)除以7所取出來(lái)的余數(shù)正好按日歷從左至右顯示(我們輸出的日歷從左往右依次為星期日、一、二、三、四、五、六)。我們考慮2011年前與后的兩種情況。2011年后所需的即為正常余數(shù),2011年前的則需要用7減去得到的余數(shù)才是所欲要的值。之后經(jīng)過一定的輸出格式即可將日歷輸出。針對(duì)備忘錄的編寫,考慮到定義了一個(gè)結(jié)構(gòu)體使得年月日與備忘相連,因此可以將年月日與備忘一同存入文件??紤]到萬(wàn)年備忘錄的龐大,為了節(jié)省時(shí)間和空間,我們想出了一個(gè)算法:在添加寫入文件時(shí),一律將數(shù)據(jù)內(nèi)容寫入文件末尾(即使用a
6、b+追加模式);而當(dāng)讀取文件時(shí),則將文件內(nèi)的年月日與外部參數(shù)輸入的年月日相比較,不相同則位置指針下移,一直到年月日相同或者無(wú)法讀取為止。這樣編寫可以避免考慮年份的上限大?。ㄒ?yàn)槿绻x一個(gè)二維數(shù)組,雖然也可以將日期和備忘一一對(duì)應(yīng),但是這樣的話處理這個(gè)數(shù)組的上限就不好操作了。如果數(shù)組開太大會(huì)直接影響運(yùn)行速度),而且在存入的備忘不太多的情況下在時(shí)間和空間上都可以節(jié)?。臻g只跟存入的備忘數(shù)目有關(guān),而不是直接開很大的數(shù)組,這樣即使年份很大也不會(huì)對(duì)空間大小有什么影響)。另外,我們?cè)O(shè)計(jì)了備忘修改功能、備忘刪除(單日或全部),使得操作可以更人性化。最后,在自學(xué)了命令行參數(shù)之后,我們用argc和*argv將主
7、函數(shù)寫出,并且用getopt函數(shù)來(lái)處理接收的參數(shù)并返回命令選項(xiàng)。之后便可以通過返回的命令選項(xiàng)用switch語(yǔ)句選擇所需要實(shí)現(xiàn)的功能。以上即為我們對(duì)該課題的總體設(shè)計(jì)思路。2. 數(shù)據(jù)存儲(chǔ)將年月日與對(duì)應(yīng)的備忘放于同一結(jié)構(gòu)體變量中,在使用文件讀寫時(shí)作為一個(gè)整體使用,也方便了添加功能、修改功能、刪除功能的實(shí)現(xiàn)。2.2模塊結(jié)構(gòu)圖根據(jù)需求將系統(tǒng)劃分為四個(gè)功能模塊,函數(shù)之間的調(diào)用關(guān)系如圖2.1所示。memo_writtenmemo_modifymemo_deletememo_delete_allmemo_readleapcheckDateMainshow_calender箭頭出發(fā)的函數(shù)調(diào)用箭頭指向的函數(shù)圖2.
8、1 晚年備忘錄的模塊結(jié)構(gòu)圖1)Main:主函數(shù)。2)leap:閏年判斷。3)checkDate:檢查日期合法性4)show_calender:顯示當(dāng)日的日歷(未輸入日時(shí)顯示當(dāng)月1日的日歷)。5)memo_read:備忘的讀取。6)memo_written:備忘的寫入。7)memo_modify:備忘的修改。8)memo_delete:備忘的刪除(當(dāng)日)。9)memo_delete_all:備忘的刪除(全部)。2.3模塊說(shuō)明(以從上至下,從左至右的順序說(shuō)明)1. MathPath模塊函數(shù)原型:int main(int argc,char *argv)功能:主函數(shù)輸入?yún)?shù):argcint類型,表示
9、錄入?yún)?shù)的個(gè)數(shù)*argvchar類型,各元素記錄各種錄入字符串的首地址輸出參數(shù):0int類型,返回給系統(tǒng)一個(gè)值,說(shuō)明程序正常終止2. leap模塊函數(shù)原型:int leap(int t_year)功能:閏年判斷輸入?yún)?shù):t_yearint類型,表示需要判斷閏年的年份輸出參數(shù):1int類型,如果是閏年則返回1;0int類型,如果是非閏年則返回0;3. checkDate模塊函數(shù)原型:void checkDate()功能:檢查輸入年月日的合法性輸入?yún)?shù):yearint類型,表示年份 monthint類型,表示月份dayint類型,表示日期輸出參數(shù):無(wú)4. show_calender模塊函數(shù)原型:v
10、oid show_calender()功能:顯示日歷輸入?yún)?shù):date.yearint類型,表示年份 date.monthint類型,表示月份date.dayint類型,表示日期輸出參數(shù):無(wú)5. memo_read模塊函數(shù)原型:void memo_read()功能:從文件讀取備忘輸入?yún)?shù):date.yearint類型,表示年份 date.monthint類型,表示月份date.dayint類型,表示日期輸出參數(shù):無(wú)6. memo_written模塊函數(shù)原型:void memo_written ()功能:將備忘寫入文件輸入?yún)?shù):date.yearint類型,表示年份 date.monthint類
11、型,表示月份date.dayint類型,表示日期輸出參數(shù):無(wú)7. memo_modify模塊函數(shù)原型:void memo_modify ()功能:修改備忘輸入?yún)?shù):date.yearint類型,表示年份 date.monthint類型,表示月份date.dayint類型,表示日期輸出參數(shù):無(wú)8. memo_delete模塊函數(shù)原型:void memo_delete ()功能:刪除備忘(當(dāng)日)輸入?yún)?shù):date.yearint類型,表示年份 date.monthint類型,表示月份date.dayint類型,表示日期輸出參數(shù):無(wú)9. memo_delete_all模塊函數(shù)原型:void memo
12、_delete_all ()功能:刪除備忘(全部)輸入?yún)?shù):無(wú)輸出參數(shù):無(wú)3 詳細(xì)設(shè)計(jì)為了實(shí)現(xiàn)輸入日期知道其為星期幾的功能,我們必須的選取一個(gè)參照日期“以2011年1月1日星期六為基點(diǎn)”那么如何知道我們想要知道的日期時(shí)星期幾呢?“計(jì)算某月第一天距離基點(diǎn)的天數(shù)除以7取余*/”于是有“*加上整年的天數(shù)*”“加上整月的天數(shù)”“計(jì)算某月第一天是星期幾”這就可以判斷出來(lái)距離我們鎖定的那天是有多少天,再利用上述的方法來(lái)進(jìn)行計(jì)算,這是/*當(dāng)某年不低于2011年*/的情況,還有/*當(dāng)某年低于2011年*/的情況,其邏輯和這好似一樣的,同理。于是就判斷出了是星期幾。那么關(guān)于輸出,printf("ntt
13、 Sun Mon Tue Wed Thu Fri Satntt ");/*輸出一定數(shù)量的空格*/這是重點(diǎn),一行有占位符38格/*當(dāng)一行已輸出38個(gè)位數(shù)的時(shí)候換行(除每行開頭的一堆空格外)*/這樣就可以看到 這樣的輸出格式。然后判斷輸入是否合法以及判斷是否是閏年都在課本上有過交代。4 測(cè)試結(jié)果及分析為了檢驗(yàn)該程序的可行性以及正確性,我們選擇了幾組有代表的測(cè)試數(shù)據(jù),與實(shí)際結(jié)果符合得很好。測(cè)試數(shù)據(jù)如下:1. 選擇了2011年前的一天。我們選擇了1949年10月1日,預(yù)期結(jié)果為星期一,先查看其備忘,預(yù)期結(jié)果為“該日暫無(wú)備忘!”。之后添加備忘“中華人民共和國(guó)成立!”下面為測(cè)試時(shí)所截的圖。a.
14、在“命令提示行”中輸入?yún)?shù)b. 敲回車,得到結(jié)果:c. 該日添加備忘“中華人民共和國(guó)成立!”。下為參數(shù)輸入:d.敲回車后提示輸入備忘。輸入備忘。d. 按回車后e. 敲回車,得到成功信息,并輸出修改后的日歷及備忘。2. 還需要測(cè)試年份大于2011年的日期??紤]到這份日歷為萬(wàn)年歷,于是測(cè)試兩份數(shù)據(jù):大于一萬(wàn)年和小于一萬(wàn)年。以下測(cè)試小于一萬(wàn)年的數(shù)據(jù):2012年12月24日,先添加備忘“世界末日?”再修改為“不可能是世界末日!”,最后刪除該日備忘。a. 輸入?yún)?shù)(添加)b. 添加備忘c(diǎn). 添加成功信息d. 輸入?yún)?shù)(修改)e. 輸入修改內(nèi)容f. 修改成功g. 輸入?yún)?shù)(刪除)h. 確認(rèn)刪除后3. 最后
15、測(cè)試一組大于一萬(wàn)年的日期:999999年9月9日.測(cè)試功能:添加功能、全部刪除功能。a. 輸入?yún)?shù)b. 輸入備忘c(diǎn). 添加成功d. 輸入?yún)?shù)(刪除全部)e. 確認(rèn)刪除后至此,數(shù)據(jù)測(cè)試完畢。所有的測(cè)試結(jié)果均與實(shí)際符合得很好,驗(yàn)證了該程序的正確性。5 總結(jié)1 算法與程序總結(jié)本程序定義了結(jié)構(gòu)體類型,將年月日和備忘聯(lián)系起來(lái),在寫入和讀取的過程中均作為一個(gè)整體,并且在將寫入的內(nèi)容始終寫在文件的末尾,而不是定義一一對(duì)應(yīng)的備忘數(shù)組,節(jié)省了時(shí)間和空間。由于課題要求使用命令行參數(shù),所以,沒有使用菜單來(lái)實(shí)現(xiàn)功能,而是使用命令選項(xiàng)來(lái)選擇所需要執(zhí)行的功能。而由于使用了命令行參數(shù),因此該程序必須在DOS環(huán)境下運(yùn)行(命令
16、提示行)。萬(wàn)年歷部分,采用定基點(diǎn)求相差的天數(shù)取7的余來(lái)確定當(dāng)月首日是星期幾,從而得到所需要的日歷。2 改進(jìn)方案我們附錄以下為我們小組該課題的最終代碼:/*-我是分割線-*/*命令行功能選項(xiàng)*/*-d:顯示當(dāng)月日歷和當(dāng)日備忘*/*-i:顯示當(dāng)月日歷和添加當(dāng)日備忘*/ /*-m:顯示當(dāng)月日歷和修改當(dāng)日備忘*/ /*-g:刪除當(dāng)日備忘*/*-t:刪除全部備忘*/*-我是分割線-*/*頭文件*/ #include<stdio.h>#include<stdlib.h>#include<conio.h>#include<unistd.h> /*調(diào)用getop
17、t函數(shù)*/*-我是分割線-*/*定義全局變量(各月所含天數(shù))*/ int a=0,31,0,31,30,31,30,31,31,30,31,30,31;/*定義全局變量(已獲取的備忘個(gè)數(shù))*/int count_memo;/*定義結(jié)構(gòu)體*/ struct date_message int year; /*年*/ int month; /*月*/ int day; /*日*/ char memo300; /*備忘*/ date=1,1,1,"0"/*-我是分割線-*/*主函數(shù)*/ int main(int argc,char *argv) /*函數(shù)聲明*/ void chec
18、kDate(); /*檢查日期合法性*/ void show_calender(); /*顯示日歷*/ void memo_written(); /*寫入備忘*/ void memo_modify(); /*修改備忘*/ void memo_delete(); /*刪除當(dāng)日備忘*/ void memo_delete_all(); /*刪除全部備忘*/ void memo_read(); /*讀取備忘*/*定義變量*/ char choice;/*使用getopt函數(shù)分析命令行參數(shù),識(shí)別選項(xiàng)*/while(choice=getopt(argc,argv,"d:i:m:g:t"
19、)!=-1) /*選項(xiàng)*/ switch(choice) /*選項(xiàng)為d時(shí),顯示當(dāng)月日歷和當(dāng)日備忘*/ case 'd':/*調(diào)用atoi函數(shù),將字符型數(shù)字轉(zhuǎn)化為整型*/ date.year=atoi(argv2); /*如果沒有輸入月份則不賦值*/ if(atoi(argv3)!=0)date.month=atoi(argv3); /*如果沒有輸入日期則不賦值*/ if(atoi(argv4)!=0)date.day=atoi(argv4); /*檢查日期合法性*/ checkDate(); /*顯示當(dāng)日日歷*/ show_calender(); /*顯示備忘*/ memo_r
20、ead(); break; /*選項(xiàng)為i時(shí),顯示當(dāng)月日歷和添加當(dāng)日備忘*/ case 'i':date.year=atoi(argv2); date.month=atoi(argv3); if(atoi(argv4)!=0)date.day=atoi(argv4); checkDate(); show_calender(); memo_read(); printf("請(qǐng)輸入要添加的備忘n"); /*寫入備忘*/ memo_written(); /*添加之后*/ printf("添加之后的日歷與對(duì)應(yīng)的備忘為n"); show_calende
21、r(); memo_read(); break; /*選項(xiàng)為m時(shí),顯示當(dāng)月日歷和修改當(dāng)日備忘*/ case 'm':date.year=atoi(argv2); date.month=atoi(argv3); if(atoi(argv4)!=0)date.day=atoi(argv4); checkDate(); show_calender(); memo_read(); /*如果該日無(wú)備忘,則給出提示*/ if(count_memo=0) printf("無(wú)法修改,因?yàn)樵撊諢o(wú)備忘。n如需添加備忘,請(qǐng)使用備忘添加功能n"); break; /*修改備忘*/
22、memo_modify(); /*修改之后*/ printf("修改之后的日歷為n"); show_calender(); memo_read(); break; /*選項(xiàng)為g時(shí),刪除當(dāng)日備忘*/ case 'g':date.year=atoi(argv2); date.month=atoi(argv3); if(atoi(argv4)!=0)date.day=atoi(argv4); checkDate(); show_calender(); memo_read(); memo_delete(); show_calender(); memo_read();
23、 break; /*選項(xiàng)為t時(shí),刪除全部備忘*/ case 't':memo_delete_all(); getch(); break; printf("tt Please any key to continue"); getch(); system("cls"); return 0; /*-我是分割線-*/*顯示當(dāng)月日歷*/void show_calender() /*函數(shù)調(diào)用聲明*/ int leap(int t_year); /*定義函數(shù)*/ int sum=0,count=0,i,t,temp_year,temp_month,te
24、mp_day=-1; /*輸出年月日*/ printf("ntttt%d年%d月",date.year,date.month);if(date.day!=0)printf("%d日n",date.day);else printf("1日n");/*計(jì)算某月第一天是星期幾,以2011年1月1日星期六為基點(diǎn),計(jì)算某月第一天距離基點(diǎn)的天數(shù)除以7取余*/ /*當(dāng)某年不低于2011年*/ if(date.year>=2011) /*加上整年的天數(shù)*/ for(temp_year=2011;temp_year<date.year;te
25、mp_year+)sum+=365+leap(temp_year);a2=(leap(date.year)=1)?29:28;/*加上整月的天數(shù)*/ for(temp_month=1;temp_month<date.month;temp_month+)sum+=atemp_month;/*計(jì)算某月第一天是星期幾*/ t=(sum%7>0)?sum%7:(sum%7+7);/*當(dāng)某年低于2011年*/ if(date.year<2011) /*加上整年的天數(shù)*/ for(temp_year=2011;temp_year>date.year+1;temp_year-)sum
26、+=365+leap(temp_year-1); a2=(leap(date.year-1)=1)?29:28;/*加上整月的天數(shù)*/ for(temp_month=12;temp_month>=date.month;temp_month-)sum+=atemp_month;/*計(jì)算某月第一天是星期幾*/ t=(sum%7>=0)?(7-sum%7):(-sum%7);/*輸出當(dāng)月日歷*/ printf("ntt Sun Mon Tue Wed Thu Fri Satntt ");/*輸出一定數(shù)量的空格*/for(i=1;i<=5*t-2;i+)print
27、f(" ");/*計(jì)數(shù)一行中已輸出多少個(gè)位數(shù)*/count+;/*逐行輸出日歷中的日期部分*/for(temp_day=1;temp_day<=adate.month;temp_day+) /*如果有輸入日期則特別標(biāo)出*/if(temp_day=date.day) if(date.day<10)printf("b%d ",date.day); else printf("b%d ",date.day); /*普通日期無(wú)特別表示*/else printf("%-5d",temp_day);/*計(jì)數(shù)增加*/c
28、ount+=5;/*當(dāng)一行已輸出38個(gè)位數(shù)的時(shí)候換行(除每行開頭的一堆空格外)*/if(count=38)printf("n ");count=3;printf("n");/*-我是分割線-*/*備忘讀取*/void memo_read() /*定義文件指針*/ FILE *fp; /*定義變量*/ int i; struct date_message temp=0,0,0,"0" /*總是在讀取備忘之前令備忘數(shù)歸零*/ count_memo=0; /*打開文件*/ if(fp=fopen("calender.txt&quo
29、t;,"ab+")=NULL) printf("tttt打開文件失敗ttttn"); return; /*查找文件中是否有相同的日期*/ while(1) /*文件讀到不能讀取為止*/ if(fread(&temp,sizeof(struct date_message),1,fp)!=1)break; /*如果文件該位置的時(shí)間與所求時(shí)間相同*/ if(temp.year=date.year)&&(temp.month=date.month)&&(temp.day=date.day) /*當(dāng)天備忘個(gè)數(shù)的計(jì)數(shù)*/ co
30、unt_memo+; for(i=0;i<300;i+) date.memoi=temp.memoi; printf("nttt備忘%d:%sn",count_memo,date.memo); /*如果沒有相同日期的話*/ if(count_memo=0) printf("tttt該日暫無(wú)備忘nn"); printf("n"); fclose(fp); /*-我是分割線-*/*備忘寫入*/void memo_written() /*定義文件指針*/ FILE *fp; /*打開文件*/ if(fp=fopen("cal
31、ender.txt","ab+")=NULL) printf("ntttt 打開文件失敗nnttt "); return; /*輸入備忘*/ scanf("%s",date.memo); /*寫入備忘*/ if(fwrite(&date,sizeof(struct date_message),1,fp)=1) system("cls"); printf("ntttt 備忘存入成功nnttt "); else system("cls"); printf(&qu
32、ot;ntttt 備忘存入失敗nnttt "); fclose(fp); /*-我是分割線-*/*備忘修改*/void memo_modify() /*定義文件指針*/ FILE *fp; /*定義變量*/ int i=0,t,count=0; struct date_message temp; /*打開文件*/ if(fp=fopen("calender.txt","rb+")=NULL) printf("nnnnnnnnnttt 打開文件失敗nn"); return; printf("請(qǐng)輸入要修改第幾條備忘n&
33、quot;); /*輸入需要修改第幾條備忘*/ scanf("%d",&t); if(!(t>0&&t<=count_memo) printf("輸入錯(cuò)誤!該次操作失敗n!"); getch(); system("cls"); exit(0); printf("請(qǐng)輸入要修改的內(nèi)容n"); /*輸入備忘*/ scanf("%s",&date.memo); /*在文件中尋找該日期*/ while(1) /*移動(dòng)指針位置*/ fseek(fp,i*sizeo
34、f(struct date_message),0); /*到文件無(wú)法讀取時(shí)退出*/ if(fread(&temp,sizeof(struct date_message),1,fp)!=1)break; /*如果文件中的時(shí)間與所求時(shí)間相同*/ if(temp.year=date.year)&&(temp.month=date.month)&&(temp.day=date.day) /*備忘計(jì)數(shù)+1*/ count+; /*對(duì)應(yīng)上同一個(gè)備忘的時(shí)候*/ if(count=t) fseek(fp,i*sizeof(struct date_message),0);
35、 /*覆蓋*/ fwrite(&date,sizeof(struct date_message),1,fp); break; i+; printf("ntttt 修改成功!nn"); getch(); system("cls"); fclose(fp); /*-我是分割線-*/*當(dāng)日備忘刪除*/void memo_delete() /*定義文件指針*/ FILE *fp; /*定義變量*/ int i=0,t,choice,count=0; struct date_message temp1=0,0,0,"0" struct
36、date_message temp2; /*確認(rèn)信息*/ printf("確認(rèn)要?jiǎng)h除當(dāng)日備忘嗎(y/n)? "); /*如果輸入y的話刪除*/ if(!(getchar()='y'|'Y') printf("未刪除該日任何備忘n"); getch(); system("cls"); exit(0); printf("(1)刪除單條備忘 or (2)刪除當(dāng)日所有備忘?n請(qǐng)輸入1或2進(jìn)行選擇n"); scanf("%d",&choice); switch(ch
37、oice) case 1:printf("請(qǐng)輸入要?jiǎng)h除第幾條備忘n"); /*輸入要?jiǎng)h除第幾條備忘*/ scanf("%d",&t); if(!(t>0&&t<=count_memo) printf("輸入錯(cuò)誤!該次操作失?。?quot;); getch(); system("cls"); exit(0); /*打開文件*/ if(fp=fopen("calender.txt","rb+")=NULL) printf("打開文件失敗nn&q
38、uot;); return; /*在文件中查找輸入的年月日的信息*/ while(1) fseek(fp,i*sizeof(struct date_message),0); if(fread(&temp2,sizeof(struct date_message),1,fp)!=1)break; if(temp2.year=date.year)&&(temp2.month=date.month)&&(temp2.day=date.day) count+; if(count=t) fseek(fp,i*sizeof(struct date_message),0
39、); /*將空的覆蓋上去*/ fwrite(&temp1,sizeof(struct date_message),1,fp); break; i+; printf("單條備忘刪除成功!n"); getch(); system("cls"); fclose(fp); break; case 2:/*打開文件*/ if(fp=fopen("calender.txt","rb+")=NULL) printf("打開文件失敗nn"); return; /*在文件中查找輸入的年月日的信息*/ wh
40、ile(1) fseek(fp,i*sizeof(struct date_message),0); if(fread(&temp2,sizeof(struct date_message),1,fp)!=1)break; if(temp2.year=date.year)&&(temp2.month=date.month)&&(temp2.day=date.day) fseek(fp,i*sizeof(struct date_message),0); fwrite(&temp1,sizeof(struct date_message),1,fp); i+; printf("當(dāng)日所有備忘刪除成功!n"); getch(); system("cls"); fclose
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年天然氣加氣站建設(shè)運(yùn)營(yíng)合同范本3篇
- 關(guān)于伐木合同范例
- 商洛學(xué)院《場(chǎng)論與復(fù)變函數(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣告物料承包合同范例
- 陜西職業(yè)技術(shù)學(xué)院《微電影創(chuàng)作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024至2030年調(diào)經(jīng)活血片項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年臘鱸魚干項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年桂林米粉項(xiàng)目投資價(jià)值分析報(bào)告
- 地基強(qiáng)夯施工方案
- 陜西藝術(shù)職業(yè)學(xué)院《機(jī)電一體化技術(shù)及傳動(dòng)控制》2023-2024學(xué)年第一學(xué)期期末試卷
- 事故隱患內(nèi)部舉報(bào)獎(jiǎng)勵(lì)制度
- 入團(tuán)志愿書(2016版本)(可編輯打印標(biāo)準(zhǔn)A4) (1)
- 各國(guó)材料對(duì)照表
- 小升初個(gè)人簡(jiǎn)歷表
- 政府采購(gòu)驗(yàn)收?qǐng)?bào)告表
- 混凝土電纜溝典型施工及方法x
- 腦梗死標(biāo)準(zhǔn)病歷、病程記錄、出院記錄文本
- 星巴克案例分析
- 挖金灣礦梯子間及管路安裝措施要點(diǎn)
- 工業(yè)區(qū)位和區(qū)位因素的變化(以首鋼為例)
- 電大管理英語(yǔ)2單元自測(cè)6答案
評(píng)論
0/150
提交評(píng)論