




免費(fèi)預(yù)覽已結(jié)束,剩余19頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)語(yǔ)言課程設(shè)計(jì) 任務(wù)書(shū)及說(shuō)明書(shū)設(shè)計(jì)題目 : 航空訂票系統(tǒng) 學(xué) 院 專(zhuān)業(yè)、 年級(jí) 學(xué) 生 學(xué) 號(hào) 指 導(dǎo) 教 師 時(shí) 間 2010 年 春季 學(xué)期目錄 1摘要 3前言43正文.53.1系統(tǒng)分析.53.2總體設(shè)計(jì).63.3詳細(xì)設(shè)計(jì).83.4系統(tǒng)調(diào)試與測(cè)試.104參考文獻(xiàn).15附錄:源程序.161摘要航空定票系統(tǒng)是使用JAVA編程技術(shù)在MYEclipse6.0集成開(kāi)發(fā)環(huán)境下開(kāi)發(fā)的訂票系統(tǒng)。該系統(tǒng)實(shí)現(xiàn)了航班管理、訂票管理、退票管理以及查詢(xún)航線(xiàn)航班等功能。在航班管理中航空公司內(nèi)部管理員能在系統(tǒng)中完成添加客戶(hù)或刪除客戶(hù)信息、查看數(shù)據(jù)庫(kù)等功能。乘客能夠在系統(tǒng)中完成查詢(xún)航班、訂票辦理和退票辦理等功能。乘客可以用多種方式來(lái)查詢(xún)航班信息,系統(tǒng)還能將這些信息保存在數(shù)據(jù)庫(kù)中,并供航空公司內(nèi)部管理員隨時(shí)查詢(xún)。關(guān)鍵詞: 航空定票系統(tǒng);結(jié)構(gòu)體;文件;指針;定票;退票;查詢(xún)。 2前言通過(guò)該題目的設(shè)計(jì)過(guò)程,可以培養(yǎng)學(xué)生結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對(duì)高級(jí)語(yǔ)言基本語(yǔ)言要素和控制結(jié)構(gòu)的理解,針對(duì)c語(yǔ)言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。得到軟件工程的綜合訓(xùn)練,提高解決實(shí)際問(wèn)題的能力。3正文3.1系統(tǒng)分析 設(shè)計(jì)一個(gè)實(shí)用的航空訂票系統(tǒng),能以簡(jiǎn)便高效的方式對(duì)航線(xiàn)及客戶(hù)信息、訂票、退票等的錄入和查詢(xún),具體功能如下:1、 系統(tǒng)以菜單方式工作,要求界面友好,易于操作;2、 訂票系統(tǒng)信息錄入功能(訂票信息以文件保存);3、 訂票成功,存儲(chǔ)客戶(hù)信息功能;4、 退票成功,查詢(xún)客戶(hù)信息功能;5、 訂票信息查詢(xún)功能??傮w設(shè)計(jì)登錄界面航空訂票系統(tǒng)存儲(chǔ)航線(xiàn)信息系統(tǒng) 存儲(chǔ)客戶(hù)信息系統(tǒng) 退票系統(tǒng)查詢(xún)系統(tǒng) 訂票系統(tǒng)退出訂票系統(tǒng)按航線(xiàn)查詢(xún)按姓名查詢(xún)退出主菜單,到登錄界面! 為實(shí)現(xiàn)系統(tǒng)功能,本程序主要分為五個(gè)模塊。它們分別為:存儲(chǔ)航線(xiàn)信息、存儲(chǔ)客戶(hù)信息、退票刪除客戶(hù)信息、訂票存儲(chǔ)客戶(hù)信息、查詢(xún)客戶(hù)信息,保存并且退出該程序。這五個(gè)函數(shù)再通過(guò)主函數(shù)調(diào)用分別得以實(shí)現(xiàn)。主函數(shù),首先提供了程序運(yùn)行時(shí)的友好界面,列出了清單,提供用戶(hù)做出選擇,以便決定使用訂票系統(tǒng)的哪種功能。然后,通過(guò)執(zhí)行多分支選擇語(yǔ)句switch語(yǔ)句,分別現(xiàn)其它各個(gè)函數(shù)的調(diào)用功能。其它各個(gè)函數(shù)的功能分別如下:airline函數(shù)用于對(duì)航線(xiàn)及客戶(hù)中的數(shù)據(jù)以文件的方式進(jìn)行讀入和添加;book函數(shù)用于訂票時(shí)對(duì)客戶(hù)信息的存儲(chǔ);cancel函數(shù)用于退票時(shí)對(duì)客戶(hù)信息的刪除;information函數(shù)用于對(duì)文件中客戶(hù)信息的查詢(xún)。(選擇 5時(shí)退出訂票系統(tǒng))3.3詳細(xì)設(shè)計(jì)(1)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)本程序中,對(duì)于航線(xiàn)及客戶(hù)各項(xiàng)詳細(xì)信息的記錄用了結(jié)構(gòu)數(shù)組的形式,對(duì)于主要數(shù)據(jù)結(jié)構(gòu)的應(yīng)用如下:結(jié)構(gòu)數(shù)組: struct airlineInformation /*存儲(chǔ)航線(xiàn)信息*/ char flightNum20; /*航班號(hào)*/char placeNum20; /*飛機(jī)號(hào)*/char destination20; /*目的地*/int bookTicketNum; /*訂票數(shù)*/int spareTicket; /*余票數(shù)*/int seat100; /*表示該航班的座位是否有人坐的情況*/airline3; struct clientInformation /*存儲(chǔ)客戶(hù)信息*/ char clientNum20; /*姓名*/char clientFlightNum20; /*航班號(hào)*/int seatNum; /*座位號(hào)*/client300;(2)模塊接口設(shè)計(jì) 本程序執(zhí)行的入口是main函數(shù),然后用switch語(yǔ)句實(shí)現(xiàn)對(duì)各個(gè)函數(shù)的調(diào)用。被調(diào)用的函數(shù)都是沒(méi)有形參的,函數(shù)直接實(shí)現(xiàn)所需要的功能。最后,再?gòu)膍ain函數(shù)中結(jié)束整個(gè)程序的運(yùn)行 其中涉及到被調(diào)用的函數(shù)有:airLine() 用于對(duì)航線(xiàn)及客戶(hù)信息中的數(shù)據(jù)以文件的方式進(jìn)行讀入和添加;book() 用于訂票時(shí)對(duì)客戶(hù)信息的存儲(chǔ); cancel() 用于退票時(shí)對(duì)客戶(hù)信息的刪除;information() 用于對(duì)文件中客戶(hù)信息的查詢(xún);(3)部分函數(shù)流程圖airline()函數(shù):book()函數(shù):cancel() 函數(shù): information() 函數(shù): 3.4系統(tǒng)調(diào)試與測(cè)試首先進(jìn)入菜單,選擇1時(shí)輸出航線(xiàn)及客戶(hù)信息,初始有三名乘客,分別對(duì)應(yīng)于相應(yīng)的航班號(hào),飛機(jī)號(hào),目的地,定余票數(shù)及相關(guān)信息。選擇時(shí),乘客可根據(jù)航線(xiàn)訂票,訂票成功則輸出相應(yīng)的座位號(hào)、目的地,然后可進(jìn)行下一項(xiàng)。選擇輸出查詢(xún)信息,例如飛機(jī)號(hào)、目的地、訂票數(shù)等。當(dāng)多項(xiàng)選擇完成時(shí),選擇退出訂票系統(tǒng),操作結(jié)束。(2)在沒(méi)有聲明函數(shù)原型的情況下調(diào)用函數(shù),系統(tǒng)默認(rèn)把其處理為有任意個(gè)整型參數(shù)。返回值也為整型。調(diào)用時(shí)所有參數(shù)以整型傳遞,會(huì)出現(xiàn)參數(shù)不匹配的情況。解決辦法就是明確定義函數(shù)參數(shù)的類(lèi)型和個(gè)數(shù)。但在這個(gè)過(guò)程中,我的基礎(chǔ)也欲顯扎實(shí),對(duì)C語(yǔ)言編程的認(rèn)識(shí)也提升了一個(gè)層次。 設(shè)計(jì)總結(jié)在這個(gè)航空訂票系統(tǒng)C語(yǔ)言課程設(shè)計(jì)中,完成了基本功能,即可以檢索記錄,新建新記錄,刪除記錄,使用文件對(duì)記錄進(jìn)行保存和讀取功能。在開(kāi)始進(jìn)行課程設(shè)計(jì)時(shí),先進(jìn)行界面模塊的總體把握,充分了解自己要設(shè)計(jì)的程序的總體的結(jié)構(gòu),從而,在設(shè)計(jì)過(guò)程中能一個(gè)模塊一個(gè)函數(shù)進(jìn)行詳細(xì)的構(gòu)思,從而在調(diào)試程序時(shí)也顯得比較方便,雖說(shuō)隨著程序代碼的不斷增多、其復(fù)雜性不斷增大,但因?yàn)榉帜K函數(shù)一個(gè)一個(gè)的調(diào)試;最后將其模塊用多文件編譯運(yùn)行至沒(méi)有遇到語(yǔ)法錯(cuò)誤。但是,運(yùn)行結(jié)果完全不正確,常常出現(xiàn)亂碼和死循環(huán)等問(wèn)題,通過(guò)查找資料、與同學(xué)相互討論、多次上機(jī)實(shí)踐及請(qǐng)教,程序終于正確地運(yùn)行。在此過(guò)程中,通過(guò)實(shí)踐的學(xué)習(xí),學(xué)好計(jì)算機(jī)要重視實(shí)踐操作,不僅僅是學(xué)習(xí)C語(yǔ)言,還有其他語(yǔ)言,要注重實(shí)踐能力的培養(yǎng),學(xué)到的不止是如何調(diào)試這個(gè)知識(shí),學(xué)到得最多的是一種遇到不懂問(wèn)題怎么去解決的方法和在遇到困難時(shí)心態(tài)的調(diào)節(jié)即無(wú)論學(xué)習(xí)什么,親手動(dòng)手去做才能得到最深刻的體會(huì)。在此課程設(shè)計(jì)中,不僅綜合了數(shù)據(jù)結(jié)構(gòu)的知識(shí),而且還綜合了文件處理數(shù)據(jù)的知識(shí),難度顯得較大,但這些功能還是能在較短的時(shí)間內(nèi)完成,倒是課本上那些屬于基礎(chǔ)和細(xì)節(jié)上的知識(shí)點(diǎn)總不知道如何使用、常常用錯(cuò),如在使用switch()、while()、和getch(),scanf()以及gets()等語(yǔ)句上,有時(shí)因用錯(cuò)它們,使程序無(wú)法停止??偟膩?lái)說(shuō),這次課程設(shè)計(jì)收獲很多,為了完成這次設(shè)計(jì),參考了一些書(shū)籍,查看一些資料,對(duì)課本知識(shí)進(jìn)行總結(jié),了解了以前常忽視卻很重要的東西,深化了對(duì)C語(yǔ)言的理解,進(jìn)一步理解對(duì)C語(yǔ)言進(jìn)行程序設(shè)計(jì)的方法和步驟,加深了結(jié)構(gòu)化程序設(shè)計(jì)的思想,更重要的是,積累了很多調(diào)試程序的經(jīng)驗(yàn),為進(jìn)一步學(xué)習(xí)C語(yǔ)言奠定了一定的基礎(chǔ)。 4:參考文獻(xiàn)1 C/C+程序設(shè)計(jì),王連相等,中國(guó)科學(xué)技術(shù)出版社,20042 C語(yǔ)言程序設(shè)計(jì),譚浩強(qiáng),清華大學(xué)出版社,19993 C程序設(shè)計(jì)題解與上機(jī)指導(dǎo),譚浩強(qiáng),清華大學(xué)出版社,19994 C語(yǔ)言實(shí)用程序薈萃,西安電子科技大學(xué)出版社,19935 C語(yǔ)言函數(shù)手冊(cè),機(jī)械工業(yè)出版社,1999附錄:源程序#include#include#includestruct airlineInformation/存儲(chǔ)航線(xiàn)信息的結(jié)構(gòu),初始為三條航線(xiàn)char flightNum20;char planeNum20;char destination20;int bookTicketNum;int spareTicketNum;int seat100;/表示該航班的座位是否有人坐的情況airline3=0001,china-001,BeiJing,1,99,0,0002,china-002,ShangHai,1,99,0,0003,china-003,Guangzhou,1,99,0; struct clientInformation/存儲(chǔ)客戶(hù)信息的結(jié)構(gòu),初始為三位客戶(hù) char clientName20; char clientFlightNum20; int seatNum;client300=zhangsan,0001,1,lisi,0002,1,wangwu,0003,1;int enterChoice(void);void airLine(FILE * cfPtr1 , FILE * cfPtr2);/進(jìn)行航線(xiàn)信息與客戶(hù)信息的儲(chǔ)存的函數(shù)原型void bookTicket(FILE * cfPtr1 , FILE * cfPtr2);/訂票的函數(shù)原型void cancelTicket(FILE * cfPtr1 , FILE * cfPtr2);/退票的函數(shù)原型void printInformation(FILE * cfPtr1 , FILE * cfPtr2);/打印航線(xiàn)信息與客戶(hù)信息的函數(shù)原型int main()FILE * cfPtr1;FILE * cfPtr2;int choice,i,j; for(i=0;i=2;i+)/開(kāi)始時(shí)只有每次航班的第一個(gè)座有人坐 for(j=0;j=99;j+) airlinei.seatj=0; airlinei.seat0=1;if (cfPtr1=fopen(airline.dat,wb+)=NULL)printf(非常抱歉!n存儲(chǔ)航線(xiàn)信息的文件不能打開(kāi)!n請(qǐng)稍候n);else if(cfPtr2=fopen(customer.dat,wb+)=NULL)printf(非常抱歉!n存儲(chǔ)客戶(hù)信息的文件不能打開(kāi)!n請(qǐng)稍候n);elseairLine(cfPtr1,cfPtr2);for(i=1;i=30;i+) printf(*); printf(n歡迎使用南航訂票系統(tǒng)!n有何疑問(wèn)詳詢(xún)800-800-800!n);while(choice=enterChoice()!=5)/對(duì)操作的選擇,當(dāng)選擇5時(shí),操作結(jié)束switch (choice) case 1: airLine(cfPtr1,cfPtr2); printInformation(cfPtr1,cfPtr2); break; case 2: bookTicket(cfPtr1,cfPtr2); break; case 3: cancelTicket(cfPtr1,cfPtr2); break; case 4: printInformation(cfPtr1,cfPtr2); break; printf(n);for(i=1;i=30;i+)printf(*);printf(n);printf(謝謝您使用本系統(tǒng)!n歡迎您下次再次使用!n再見(jiàn)!n);for(i=1;i=30;i+)printf(*);printf(n);fclose(cfPtr1);fclose(cfPtr2);system(pause);return 0;int enterChoice(void)int i; int menuChoice; for(i=1;i=30;i+)printf(*);printf(n); printf(n請(qǐng)輸入您想進(jìn)行的操作:n 1-航線(xiàn)信息及客戶(hù)信息的存儲(chǔ)n 2-訂票n 3-退票n 4-查詢(xún)信息n 5-退出系統(tǒng)n);printf(n);for(i=1;i=30;i+)printf(*);printf(n);scanf(%d,&menuChoice); for(i=1;i=20;i+)printf(*);printf(n);return menuChoice;void airLine(FILE * cfPtr1 , FILE * cfPtr2) int i;if (cfPtr1=fopen(airline.dat,rb+)=NULL)printf(非常抱歉!n存儲(chǔ)航線(xiàn)信息的文件不能打開(kāi)!n請(qǐng)稍候n);else if(cfPtr2=fopen(customer.dat,rb+)=NULL)printf(非常抱歉!n存儲(chǔ)客戶(hù)信息的文件不能打開(kāi)!n請(qǐng)稍候n);elsefor(i=0;i=2;i+)/將目前airline結(jié)構(gòu)數(shù)組中的每一項(xiàng)都儲(chǔ)存在航線(xiàn)信息中fwrite(&airlinei,sizeof(struct airlineInformation),1,cfPtr1);for(i=0;i=299;i+)/將目前client結(jié)構(gòu)數(shù)組中的每一項(xiàng)都儲(chǔ)存在客戶(hù)信息中fwrite(&clienti,sizeof(struct clientInformation),1,cfPtr2);fclose(cfPtr1);fclose(cfPtr2);void bookTicket(FILE * cfPtr1 , FILE * cfPtr2)char Name20;char flightnum20;int i,j,ok=0;/ok為是否訂上票的標(biāo)記值,0表示沒(méi)訂上,1表示訂上if (cfPtr1=fopen(airline.dat,rb+)=NULL)printf(非常抱歉!n存儲(chǔ)航線(xiàn)信息的文件不能打開(kāi)!n請(qǐng)稍候n);else if(cfPtr2=fopen(customer.dat,rb+)=NULL)printf(非常抱歉!n存儲(chǔ)客戶(hù)信息的文件不能打開(kāi)!n請(qǐng)稍候n);elsegetchar();printf(尊敬的客戶(hù),歡迎您訂票!n);for(i=1;i=30;i+) printf(*);printf(n請(qǐng)輸入您的姓名:n);gets(Name);printf(%s先生/女士,請(qǐng)輸入您想乘坐的航班號(hào):n,Name);gets(flightnum);printf(操作正在進(jìn)行中,請(qǐng)稍后.n);for(i=1;i=30;i+) printf(*);printf(n);for(i=0;i0)/并且有余票ok=1;airlinei.bookTicketNum+; airlinei.spareTicketNum-;break;if(ok=1)for(j=0;j=99;j+)/為客戶(hù)選擇一座位 if(airlinei.seatj=0)airlinei.seatj=1;break;printf(恭喜您!n您已經(jīng)訂上了%s次航班的%d座位, 您的目的地為%sn,flightnum,j+1,airlinei.destination);for(i=0;i 2)printf(對(duì)不起!n這里沒(méi)有該次航班,請(qǐng)檢查后再次輸入!n);elseprintf(抱歉!n您所要坐的%s航班由于客滿(mǎn),不能為您辦理!n,flightnum);for(i=1;i=30;i+)printf(*);printf(n);/將此時(shí)的信息儲(chǔ)存airLine(cfPtr1,cfPtr2);fclose(cfPtr1);fclose(cfPtr2);void cancelTicket(FILE * cfPtr1 , FILE * cfPtr2)char Name20;char flightnum20;int i,j,ok=0,ok1=0;/ok表示是否退票成功,ok1表示是否有該客戶(hù)if (cfPtr1=fopen(airline.dat,rb+)=NULL)printf(非常抱歉!n存儲(chǔ)航線(xiàn)信息的文件不能打開(kāi)!n請(qǐng)稍候n);else if(cfPtr2=fopen(customer.dat,rb+)=NULL)printf(非常抱歉!n存儲(chǔ)客戶(hù)信息的文件不能打開(kāi)!n請(qǐng)稍候n);elsegetchar();printf(尊敬的客戶(hù),歡迎您退票!n);for(i=1;i=30;i+) printf(*);printf(n請(qǐng)輸入您的姓名:n); gets(Name); printf(%s先生/女士,請(qǐng)輸入您想退掉的航班號(hào):n,Name);gets(flightnum); for(i=1;i=30;i+) printf(*);printf(n);printf(操作正在進(jìn)行中,請(qǐng)稍后.n);for(i=1;i=20;i+) printf(*);printf(n);for(i=0;i=299;i+)/檢查是否有該客戶(hù)if(strcmp(clienti.clientName,Name)=0)/有該客戶(hù)ok1=1;for(j=0;j=2;j+)/檢查其輸入的航班號(hào)是否真確if(strcmp(airlinej.flightNum,flightnum)=0)ok=1; airlinej.bookTicketNum-;airlinej.spareTicketNum+;airlinej.seatclienti.seatNum=0; break;if(ok=1)/退票成功,刪除客戶(hù)信息strcpy(clienti.clientName,);strcpy(clienti.clientFlightNum,); clienti.seatNum=0;break;if(ok1=0)printf(抱歉!n您還沒(méi)有訂票!n);elseif(ok=1)printf(恭喜您!n您已經(jīng)退票成功!n);elseprintf(抱歉!n您訂的不是這次航班,請(qǐng)檢查后再次輸入!n);for(i=1;i=30;i+)printf(*);printf(n);airLine(cfPtr1,cfPtr2);fclose(cfPtr1);fclose(cfPtr2);void printInformation(FILE * cfPtr1 , FILE * cfPtr2)int i;struct airlineInformation airline;struct clientInformation client;if (cfPtr1=fopen(airline.dat,rb+)=NULL)printf(非常抱歉!n存儲(chǔ)航線(xiàn)信息的文件不能打開(kāi)!n請(qǐng)稍候n);else if(cfPtr2=fopen(customer.dat,rb
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療信息安全培訓(xùn)提升員工安全意識(shí)
- 醫(yī)療設(shè)備操作標(biāo)準(zhǔn)化與質(zhì)量管理
- 醫(yī)療器械清潔滅菌的宣傳教育
- 從教育到醫(yī)療區(qū)塊鏈技術(shù)的跨領(lǐng)域應(yīng)用案例
- 健康管理計(jì)劃與科技創(chuàng)新的深度融合
- 醫(yī)學(xué)領(lǐng)域中數(shù)據(jù)挖掘的倫理邊界探討
- 小學(xué)語(yǔ)文統(tǒng)編五年級(jí)下冊(cè)《梅花魂》教學(xué)設(shè)計(jì)
- 區(qū)塊鏈技術(shù)對(duì)各行業(yè)的影響與機(jī)遇分析
- nome加盟合同范例
- 為垃圾找個(gè)家教學(xué)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)-箱體零件加工工藝規(guī)程及專(zhuān)用夾具設(shè)計(jì)
- 市供銷(xiāo)社規(guī)章制度匯編
- 辦公用品及辦公耗材售后維護(hù)服務(wù)方案
- 思想道德與法治 第三章
- 信息光學(xué)課件
- 北師大版數(shù)學(xué)八年級(jí)下冊(cè)全冊(cè)同步練習(xí)附答案
- 開(kāi)放水域潛水員理論知識(shí)考試試題與答案
- 機(jī)械設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)題目范文
- 報(bào)價(jià)單報(bào)價(jià)表
- 職業(yè)衛(wèi)生檔案全套
-
評(píng)論
0/150
提交評(píng)論