備忘錄C語言參考模板_第1頁
備忘錄C語言參考模板_第2頁
備忘錄C語言參考模板_第3頁
備忘錄C語言參考模板_第4頁
備忘錄C語言參考模板_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、學號2012-2013學年 第二學期高級語言程序設計課程設計報告題目:備忘錄專業(yè):計算機科學與技術班級:姓名:指導教師:成績:計算機與信息工程系年月日0 / 33目錄1設計內容及要求.21.1設計內容.21.2設計任務及具體要求.22概要設計.32.1該系統(tǒng)的功能簡介.32.2 總體程序框圖.32.3各個模塊之間的主要關系.43 3設計過程或程序代碼.53.1各個模塊的程序流程圖及運行界面.53.2對關鍵代碼加以分析說明.74程序調試分析.135小結.14致謝.15參考文獻.16附:源程序.301 設計內容及要求1.1設計內容備忘錄主要根據(jù)課程設計要求進行設計,能夠進行個人的事件記錄,可以將程

2、序使用者的時間安排,重要事件,以及個人行程等事件做出具體詳細的記述,并能夠使使用者在程序上完成查看時間的功能,足以使得使用者避免忘記一些重要事件,也可以為使用者帶來一些便利,幫助使用者節(jié)省了時間。電子備忘錄相較于筆記本,其最大的好處在于可以不受紙張的限制,并切實的使用者可以在短時間內記述大量事件;查詢時也可以節(jié)省大量的時間,使得使用者可以減短查詢時間,方便快捷。同時,使用電子備忘錄也是一種現(xiàn)代化的代表,將電子科技應用與人們的日常生活中,達到現(xiàn)代實惠的先進水平。該系統(tǒng)功能主要包括三大模塊:1) 備忘錄的信息錄入 2)備忘錄信息的查看 3)進出備忘錄系統(tǒng)1.2設計任務及具體要求主要利用C語言的文件

3、操作能力設計開發(fā)一個小型的備忘錄系統(tǒng),至少具有如下功能:備忘錄的信息錄入,備忘錄的信息查詢和退出備忘錄系統(tǒng)。操作界面要符合用戶的一般習慣,圖形或文本界面都可以。要求:利用C語言編寫一個備忘錄程序,能實現(xiàn)一些基本的操作,達到一些基本的信息錄入,查詢,提醒以及編寫等功能,能根據(jù)課程設計的要求,查閱相關文獻,為完成設計準備必要的知識; 提高自身用高級語言進行程序設計的能力,重點提高用C語言進行文件操作和繪圖應用的編程技術水平;初步了解軟件開發(fā)的一般方法和步驟; 提高撰寫技術文檔的能力。并且對C語言的一些基本語句以及功能有一些更加深刻的認識和理解。能夠利用C語言解決一些生活中的基本問題。2 概要設計2

4、.1系統(tǒng)的功能簡介該系統(tǒng)的主要功能是實現(xiàn)重要信息的錄入,包括錄入的當前時間,事件的重要性以及提醒時間。能夠在設定時間內對使用者提醒,避免使用者忘記重要事件,造成不必要的麻煩。2.2 總體程序框圖備忘錄備忘錄主菜單編輯備忘錄推出備忘錄提 醒 我查詢備忘錄輸入新備忘 通過備忘時間編輯備忘通過備忘名稱編輯備忘通過備忘時間查詢備忘通過備忘名稱查詢備忘 圖2.12.3各個模塊之間的主要關系該程序的功能主要是實現(xiàn)備忘錄的錄入,能在系統(tǒng)內對錄入的信息進行查詢,并對相對重要的相應信息進行提醒。各個模塊之間的關系是相互聯(lián)系的。首先,主函數(shù)包含了所有的子函數(shù)。主函數(shù)是整個程序的核心。子函數(shù)之間也有聯(lián)系的,對重要的

5、信息查詢,必須是在信息錄入的情況下進行的。因此對重要事件信息的錄入時非常重要的。在退出備忘錄系統(tǒng)的子函數(shù)之間是沒有多大聯(lián)系的。3設計過程或程序代碼3.1各個模塊的程序流程圖備忘錄開始 main()函數(shù)開始執(zhí)行顯示備忘錄主菜單判斷 case 5case 4case 3case 2case 1調用input_memo()函數(shù)實現(xiàn)個人備忘輸入功能調用exit(0)退出程序調用search_memo()函數(shù)顯示個人備忘查詢功能菜單調用modify_memo()函數(shù)顯示個人備忘修改功能菜單調用remind_me()函數(shù)顯示個人備忘提醒功能菜單判斷 判斷 case 2case 2case 1case 1調

6、用modify_by_event_date() 函數(shù)實現(xiàn)個人備忘的時間時間功能調用modify_ name() 函數(shù)實現(xiàn)個人備忘的名稱修改功能調用search_by_ event_date() 函數(shù)實現(xiàn)個人備忘的時間查詢功能調用search_by _name() 函數(shù)實現(xiàn)個人備忘的名稱查詢功能 圖3.13.2對關鍵代碼加以分析說明1 ) 函數(shù) 名稱:main() 函數(shù) 功能:實現(xiàn)個人備忘錄的主菜單顯示功能和各個函數(shù)功能的調用功能 函數(shù) 參數(shù):void 函數(shù)返回值:void2 ) 函數(shù) 名稱:input_memo()函數(shù) 功能:實現(xiàn)個人備忘內容的輸入功能函數(shù) 參數(shù):void函數(shù)返回值:void3

7、 ) 函數(shù) 名稱:search_memo()函數(shù) 功能:實現(xiàn)個人備忘內容查詢功能的菜單函數(shù) 參數(shù):void函數(shù)返回值:void4 ) 函數(shù) 名稱:search_by_name() 函數(shù) 功能:實現(xiàn)個人備忘內容通過備忘名稱查詢的功能 函數(shù) 參數(shù):void 函數(shù)返回值:void5 ) 函數(shù) 名稱:search_by_event_date()函數(shù) 功能:實現(xiàn)個人備忘內容通過備忘時間查詢的功能函數(shù) 參數(shù):void函數(shù)返回值:void6 ) 函數(shù) 名稱:modify_memo() 函數(shù) 功能:實現(xiàn)個人備忘內容修改功能的菜單 函數(shù) 參數(shù):void 函數(shù)返回值:void7 ) 函數(shù) 名稱:modify_by

8、_name() 函數(shù) 功能:實現(xiàn)個人備忘內容通過備忘名稱修改的功能 函數(shù) 參數(shù):void 函數(shù)返回值:void8 ) 函數(shù) 名稱:modify_by_event_date() 函數(shù) 功能:實現(xiàn)個人備忘內容通過備忘時間修改的功能函數(shù) 參數(shù):void函數(shù)返回值:void9 ) 函數(shù) 名稱:remind_me()函數(shù) 功能:實現(xiàn)個人備忘的提醒功能函數(shù) 參數(shù):void函數(shù)返回值:void4設計結果與分析1) 運 行 備 忘 錄 程 序運行程序,進入備忘錄系統(tǒng)的主菜單,按照系統(tǒng)提示進行操作,完成系統(tǒng)的操作圖4.1 2) 輸入數(shù)字進行菜功能的選擇,輸入數(shù)字1,執(zhí)行輸入新備忘的功能,調用輸入新備忘的函數(shù)顯示

9、結果如下:圖4.23)輸入數(shù)字2,執(zhí)行個人備忘的查詢功能,調用備忘查詢函數(shù),顯示備忘查詢的功能菜單。結果如下:圖4.3 4)輸入數(shù)字1,執(zhí)行通過個人備忘的名稱查詢功能,調用備忘名稱查詢函數(shù),顯示通過備忘名稱查詢的結果,如下:圖4.45)輸入數(shù)字2,執(zhí)行通過個人備忘的時間查詢功能,調用備忘時間查詢函數(shù),顯示通過備忘時間查詢的結果,如下:圖4.5 6)返回主菜單,輸入數(shù)字3,執(zhí)行個人備忘的修改功能,調用備忘修改函數(shù),顯示備忘修改的功能菜單。結果如下: 圖4.67)輸入數(shù)字1,執(zhí)行通過個人備忘的名稱修改功能,調用備忘名稱修改函數(shù),顯示通過備忘名稱修改的結果,如下: 圖4.78)輸入數(shù)字2,執(zhí)行通過個

10、人備忘的時間修改功能,調用備忘時間修改函數(shù),顯示通過備忘時間修改的結果,如下:圖4.89)返回主菜單,輸入數(shù)字4,執(zhí)行個人備忘的提醒功能,調用備忘提醒函數(shù),顯示備忘提醒的功能菜單。結果如下:圖4.9 當把程序寫好并進行調試時,并不是一帆風順的,總會遇到很多在調試時遇到的錯誤。(1)首先在定義函數(shù)時,不能輸入漢字。否則會程序會顯示錯誤。(2)如果要調用查詢函數(shù),增詞函數(shù),刪除函數(shù),修改函數(shù)等要在主函數(shù)前面進行申明,否則會顯示警告。(3)如果程序在運行的過程中,對于一個循環(huán)語句,如果你返回的值始終是真的,那么程序將進如死循環(huán)。(4)對應該有花括弧的復合語句,忘記加花括弧。 (5)所調用的函數(shù)在調用

11、語句之后才定義,而又在調用前未加說明。5 小 結 在這次的課程設計中,我利用C語言完成了一個小型的備忘錄系統(tǒng),能夠對信息進行錄入與查詢,并能夠提醒用戶。通過實驗,基本上掌握了C語言的基本用法與功能。對于所學知識有了更深的認識。 在本課程設計的設計過程中,我剛開始感覺到有點頭痛。要通過一學期C語言的學習后將所學知識運用起來有點困難,但回過頭來再去看教課書,對于這些知識點有關的背景,概念和解決方案更進一步的理解,感覺也不是很難。另外我還體會了從事C語言課程設計工作需要特別謹慎認真地態(tài)度和作風,一點都不能馬虎。每個細微的細節(jié)都必須十分注意,如果不認真思考,就會出現(xiàn)或大或小的錯誤。如果把早期的錯誤隱藏

12、下來,對后面的工作影響就會很大,甚至有時會推倒很多前面做的工作。有時候,我自己覺得我寫的程序非常正確,但是就是編譯通不過,在查找錯誤的過程中,面臨著否認自己的過程,非常的痛苦,而且由于自己的經(jīng)驗及各方面的能力的不足,所以進展的速度非常的緩慢,往往幾天的時間沒有一點進展。這時候,我一般是先自己通過書本,手冊和資料找解決辦法,實在沒轍才向老師同學請教。 在開始編寫程序的時候,我看到別人的程序功能非常的詳細,而且界面非常漂亮,總是希望自己的程序也非常的完善,但是,發(fā)現(xiàn)編一個好的程序不是一蹴而就的事情,需要長時間的積累和經(jīng)驗。在反反復復的學習中,我終于作出一個簡單的程序,雖然這個程序的功能非常簡單,而

13、且在實際運用中還有些不足,因為工資的的內容非常豐富,我涉及到的僅僅是工資管理的一部分簡單內容,離實際的客戶需求肯定還有差距。由于我的知識淺薄,經(jīng)驗不足及閱歷頗淺,在該系統(tǒng)的設計方面還有很多不足,比如功能過少,界面不醒目等問題,我會在以后的學習過程中,根據(jù)具體要求不斷的修改、完善,爭取使系統(tǒng)慢慢趨于完美。致謝在這次C語言課程設計中,我遇到了一些困難,因為通過書本以及自身的不足所難以解決。所以我想任課老師進行了詢問。他給予了我一些代碼以及注意事項上的幫助,使我能夠完成這次課程設計。在此,我對他們表示感謝!感謝他們在我面對困難時給了我?guī)椭椭С?。也感謝那些給我?guī)椭乃型瑢W!參考文獻1譚浩強著.C程

14、序設計.清華大學出版社,1999年第二版2譚浩強,張基溫,唐永炎編著.C語言程序設計.高等教育出版社,19923譚浩強編著.QBASIC語言教程.電子工業(yè)出版社,19974譚浩強.C程序設計M.清華大學出版社,20055Herbert Schildt著.戴健鵬譯.C語言大全.電子工業(yè)出版社,1994年第二版6美SCHILDTH.C語言大全M.王子恢等譯.電子工業(yè)出版社,2001源程序#include<stdio.h> #include<string.h>#include<stdlib.h> #define Namelength 60 #define Date

15、length 50 #define Contentlength 800 struct memo char nameNamelength; char event_dateDatelength; char contentContentlength; char remind_dateDatelength; ;void input_memo(); void search_memo();void modify_memo();void modify_name();void modify_by_event_date();void remind_me();void remind();void search_b

16、y_name();void search_by_event_date();void main()FILE *fp; int number_menu; char a;printf("nn*-*-*-* 歡 迎 使 用 備 忘 錄 *-*-*-*n"); loop:printf("nn*-*-*-* 備 忘 錄 主 菜 單 *-*-*-*n"); printf(" ="); printf("n 1 輸 入 新 備 忘; "); printf("n "); printf("n 2 查 詢 備

17、 忘; "); printf("n "); printf("n 3 編 輯 備 忘; "); printf("n "); printf("n 4 提 醒 我; ");printf("n "); printf("n 5 退 出 備 忘; n"); printf(" ="); printf("n請 輸 入 菜 單 功 能 的 數(shù) 字:"); a = getch(); if(a>='1'&&a&

18、lt;='5') printf("nn您 輸 入 的 數(shù) 字 是 : %c",a); number_menu = (a - '0'); else printf("nn您 輸 入 的 數(shù) 字 是 : %c",a); printf("nn對 不 起,您 的 輸 入 有 誤,請 輸 入 正 確 的 菜 單 功 能 數(shù) 字,謝 謝。n"); goto loop; switch(number_menu) case 1:input_memo(); goto loop; case 2:search_memo(); g

19、oto loop; case 3:modify_memo(); goto loop; case 4:remind_me(); goto loop; case 5:exit(0);default:printf("n對 不 起,您 的 輸 入 有 誤,請 輸 入 正 確 的 菜 單 功 能 數(shù) 字,謝 謝。n"); goto loop; void input_memo() struct memo m;FILE *fp;if(fp=fopen("memo","a")=NULL)printf("對 不 起,無 法 打 開 文 件!n

20、");exit(1);printf("nn請 輸 入 新 備 忘。 (如 果 您 想 返 回 上 級 菜 單,請 輸 入 0。):n");printf("n請 輸 入 新 的 備 忘 名 稱:");scanf("%s",);while(strcmp(,"0")printf("n請 輸 入 新 的 備 忘 時 間:");scanf("%s",m.event_date);printf("n請 輸 入 新 的 備 忘 內 容:"

21、);scanf("%s",m.content);printf("n請 輸 入 新 的 備 忘 提 醒 時 間:");scanf("%s",m.remind_date);fprintf(fp,"name:%snevent_date:%sncontent:%snremind_date:%sn", ,m.event_date,m.content,m.remind_date);printf("=");printf("n您 輸 入 的 新 備 忘 是:nn");printf

22、("名 稱:%snn",);printf("備 忘 時 間:%snn",m.event_date);printf("備 忘 內 容:%snn",m.content);printf("提 醒 時 間:%snn",m.remind_date);printf("=");printf("n恭 喜 您,新 備 忘 已 經(jīng) 輸 入 成 功!n");printf("n請 輸 入 另 一 個 新 備 忘! (如 果 您 想 返 回 上 級 菜 單,請 輸 入 0。):n

23、");printf("n請 輸 入 新 的 備 忘 名 稱:");scanf("%s",);fclose(fp); void search_memo() int sm; char a; loop:printf("nn*-*-*-*-* 查 詢 備 忘 *-*-*-*-*n"); printf("n1 通 過 備 忘 名 稱 查 詢;n"); printf("n2 通 過 備 忘 時 間 查 詢;n");printf("n3 返 回 上 級 菜 單;nn"

24、); printf("n請 輸 入 菜 單 上 的 數(shù) 字 :");a = getch(); if(a>='1'&&a<='3') printf("nn您 輸 入 的 數(shù) 字 是 : %c",a); printf("n"); sm = (a - '0'); else printf("nn您 輸 入 的 數(shù) 字 是 : %c",a); printf("nn對 不 起,您 的 輸 入 有 誤,請 輸 入 正 確 的 菜 單 功 能 數(shù)

25、 字,謝 謝。n"); goto loop; switch(sm)case 1:search_by_name(); goto loop; case 2:search_by_event_date(); goto loop; case 3:break;default:printf("n對 不 起,您 的 輸 入 有 誤,請 輸 入 正 確 的 菜 單 功 能 數(shù) 字,謝 謝。nn");goto loop; void search_by_name() struct memo i;FILE *fp;int j=0, k=0, l=0;char nameNamelength

26、='n','a','m','e',':'char new_nameNamelength;if(fp=fopen("memo","r")=NULL)printf("對 不 起,無 法 打 開 文 件!n");exit(1);printf("n請 輸 入 需 要 查 詢 的 備 忘 名 稱 ( 返 回 上 級 菜 單,請 輸 入 0 ):");scanf("%s",new_name);if (new_name != 0)

27、for(j=0; j<sizeof(new_name); )if(new_namej='n')break;else j+;for(l=0; l<j; l+)name5+l=new_namel;while(! feof(fp)fscanf(fp,"%s%s%s%sn",,i.event_date,i.content,i.remind_date);if(!strcmp(name,)printf("n已 經(jīng) 查 到,結 果 如 下:n");printf("=");printf("

28、n您 查 詢 的 結 果 是 :nn");printf("%snn",);printf("%snn",i.event_date);printf("%snn",i.content);printf("%snn",i.remind_date);printf("=");k=1;break; if(!k)printf("n對 不 起,沒 有 查 詢 結 果!請 重 新 輸 入,謝 謝。n");fclose(fp);void search_by_event_date

29、() struct memo i;FILE *fp;int j=0,k=0,l=0; char event_dateDatelength='e','v','e','n','t','_','d','a','t','e',':'char new_event_dateDatelength;if(fp=fopen("memo","r+")=NULL)printf("n對 不 起,

30、無 法 打 開 文 件!n");exit(1);printf("n請 輸 入 需 要 查 詢 的 備 忘 時 間 (返 回 上 級 菜 單,請 輸 入 0 ):");scanf("%s",new_event_date);if (new_event_date != 0)for(j=0;j<sizeof(new_event_date);)if(new_event_datej='n')break;else j+;for(l=0; l<j; l+)event_date11+l=new_event_datel; while(!

31、feof(fp)fscanf(fp,"%s%s%s%s",,i.event_date,i.content,i.remind_date);if(!strcmp(event_date,i.event_date)printf("n已 經(jīng) 查 到,結 果 如 下:n");printf("=");printf("n您 查 詢 的 結 果 是 :nn");printf("%snn",);printf("%snn",i.event_date);printf(&quo

32、t;%snn",i.content);printf("%snn",i.remind_date);printf("=");k=1;break;if(!k) printf("n對 不 起,沒 有 查 詢 結 果!請 重 新 輸 入,謝 謝。n");fclose(fp);void modify_memo() int mb;char a;loop:printf("nn*-*-*-* 編 輯 備 忘 *-*-*-*n"); printf("n1 通 過 備 忘 名 稱 編 輯;n"); prin

33、tf("n2 通 過 備 忘 時 間 編 輯;n"); printf("n3 返 回 上 級 菜 單;n"); printf("n請 輸 入 菜 單 上 的 數(shù) 字 :"); a = getch(); if(a>='1'&&a<='3') printf("nn您 輸 入 的 數(shù) 字 是 :%cn",a); mb = (a - '0'); else printf("nn您 輸 入 的 數(shù) 字 是 :%c",a); prin

34、tf("nn對 不 起,您 的 輸 入 有 誤,請 輸 入 正 確 的 菜 單 功 能 數(shù) 字,謝 謝。n"); goto loop; switch(mb)case 1:modify_name(); goto loop;case 2:modify_by_event_date(); goto loop;case 3:break;default:printf("n對 不 起,您 的 輸 入 有 誤,請 輸 入 正 確 的 菜 單 功 能 數(shù) 字,謝 謝。nn"); goto loop;void modify_name() struct memo i;FILE

35、 *fp;int j=0,k=0,l=0;long offset; char nameNamelength='n','a','m','e',':'char new_nameNamelength;printf("n請 輸 入 您 要 修 改 的 備 忘 名 稱:");scanf("%s",new_name);for(j=0;j<sizeof(new_name);)if(new_namej='n')break;else j+;for(l=0; l<j;

36、 l+)name5+l=new_namel; if(fp=fopen("memo","r+")=NULL)printf("n對 不 起,無 法 打 開 文 件!n");exit(1);while(!feof(fp)offset=ftell(fp);fscanf(fp,"%s%s%s%s",,i.event_date,i.content,i.remind_date);if(!strcmp(name,)k=1;break;if(k)printf("n已 經(jīng) 查 到,結 果 如 下:n&

37、quot;);printf("=");printf("n您 查 詢 的 結 果 是 :nn");printf("%snn",);printf("%snn",i.event_date);printf("%snn",i.content);printf("%snn",i.remind_date);printf("=");printf("n請 輸 入 新 備 忘 n");printf("=");printf(&q

38、uot;n請 輸 入 新 備 忘 的 名 稱 :");scanf("%s",);printf("n請 輸 入 新 備 忘 的 時 間 :");scanf("%s",i.event_date);printf("n請 輸 入 新 備 忘 的 內 容 :");scanf("%s",i.content);printf("n請 輸 入 新 備 忘 的 提 醒 時 間 :");scanf("%s",i.remind_date);fseek(fp,

39、offset,SEEK_SET);fprintf(fp,"nname:%snevent date:%sncontent:%snremind_date:%sn", ,i.event_date,i.content,i.remind_date);printf("n恭 喜 您,編 輯 成 功!n");printf("=n");elseprintf("n對 不 起,沒 有 查 詢 結 果,請 重 新 輸 入,謝 謝。");fclose(fp); void modify_by_event_date() struct

40、 memo i;FILE *fp;int j=0,k=0,l=0;long offset; char event_dateDatelength='e','v','e','n','t','_','d','a','t','e',':'char new_event_dateDatelength;printf("n請 輸 入 您 要 修 改 的 備 忘 時 間 :");scanf("%s"

41、,new_event_date);for(j=0;j<sizeof(new_event_date);)if(new_event_datej='n')break;else j+;for(l=0; l<j; l+)event_date11+l=new_event_datel;if(fp=fopen("memo","r+")=NULL)printf("n對 不 起,無 法 打 開 文 件!n");exit(1);while(!feof(fp)offset=ftell(fp);fscanf(fp,"%s%

42、s%s%s",,i.event_date,i.content,i.remind_date);if(!strcmp(event_date,i.event_date)k=1;break; if(k)printf("n已 經(jīng) 查 到,結 果 如 下:n");printf("=");printf("n您 查 詢 的 結 果 是 :nn");printf("%snn",);printf("%snn",i.event_date);printf("%snn"

43、;,i.content);printf("%snn",i.remind_date);printf("=");printf("n請 輸 入 新 備 忘 n");printf("=");printf("n請 輸 入 新 備 忘 的 名 稱 :");scanf("%s",);printf("n請 輸 入 新 備 忘 的 時 間 :");scanf("%s",i.event_date);printf("n請 輸 入 新 備 忘 的 內 容 :");scanf("%s",i.content);printf("n請 輸 入 新 備 忘 的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論