下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
UNIX環(huán)境下非圖形終端上的通用下拉彈出式菜單工具
摘要該文在AIXV3.2.5環(huán)境下,利用C語言的指針機(jī)制,開發(fā)出了非圖形終端(HT-382)上通用下拉彈出式菜單工具。一、問題的提出隨著計算機(jī)在社會生產(chǎn)、生活各部門的廣泛應(yīng)用和高檔微機(jī)、小型機(jī)的不斷出臺,高性能UNIX/XENIX多用戶、多任務(wù)操作系統(tǒng)正在逐步取代原有單用戶的DOS系統(tǒng)。這就迫切需要在新環(huán)境下開發(fā)出大批功能齊全的應(yīng)用軟件工具,以取代DOS環(huán)境下的各種應(yīng)用軟件,從而滿足用戶新的要求。以往的菜單工具雖各有其特點,但均是在DOS環(huán)境下開發(fā)的,都借助于Windows或TurboC強(qiáng)大的圖形處理庫函數(shù),有良好的開發(fā)環(huán)境,而且一般的做法是,為每一個菜單編制一特定的程序,即:用戶菜單與程序具有一一對應(yīng)的關(guān)系,一旦菜單做出修改,對程序也必須做相應(yīng)的改動,從而導(dǎo)致編程工作量大,重復(fù)勞動多,靈活性差等不足。能否在UNIX操作系統(tǒng)下的中西文終端上,脫離TurboC強(qiáng)大的函數(shù)庫,開發(fā)出一個獨立于用戶菜單,對不同內(nèi)容與結(jié)構(gòu)的若干個用戶菜單實現(xiàn)管理的應(yīng)用程序呢?針對這個問題,筆者經(jīng)過探索和實踐,以AIXV3.2.5為背景,利用C語言的指針機(jī)制,在非圖形終端(HT-382)上開發(fā)出一通用的下拉彈出式菜單工具軟件。該程序和具體用戶菜單的聯(lián)接是通過相應(yīng)于菜單的描述文件(*.TXT)實現(xiàn)。*.TXT文件不僅描述了用戶菜單的內(nèi)容與結(jié)構(gòu),而且對其屏幕顯示屬性也做了相應(yīng)描述。二、問題分析與具體的用戶菜單無關(guān)是該通用軟件的主要特征。通用性要求:使程序相對于菜單而獨立,必須通過某種方式將一個菜單的信息傳遞給程序,而不同的菜單其內(nèi)容與功能選項,以及各功能選項所包含的子菜單嵌套層數(shù)(以下簡稱結(jié)構(gòu))都是不同的,這就要求程序必須能"動態(tài)"地處理用戶菜單的內(nèi)容與結(jié)構(gòu)。1.動態(tài)處理菜單程序要想"動態(tài)"地處理不同的用戶菜單,則必須在程序中實現(xiàn)變量的"動態(tài)定義",以便將數(shù)目不定的各功能選項進(jìn)行所需處理。C語言中變量定義的實質(zhì),是為了在編譯時能為其分配相應(yīng)的存儲單元。同時,C語言又提供了指針機(jī)制,允許使用指針對內(nèi)存單元進(jìn)行操作。而且,C語言經(jīng)編譯后,取得并使用四個邏輯上不同、用于不同對象的內(nèi)存區(qū)域,分別是:棧、堆、全局變量區(qū)、程序代碼區(qū),其中"堆"是一個自由內(nèi)存區(qū)域,C語言可通過內(nèi)存分配函數(shù)(malloc()、calloc()),動態(tài)地從中獲得所需空間。由指針指向被分配的內(nèi)存塊,使之可作為變量空間使用。當(dāng)該內(nèi)存空間無用時,可利用內(nèi)存釋放函數(shù)free()釋放指針?biāo)赶虻膬?nèi)存塊。而數(shù)據(jù)結(jié)構(gòu)中鏈表的特點是:邏輯上相鄰的元素在物理上不一定相鄰,數(shù)據(jù)元素之間的邏輯關(guān)系是由結(jié)點中的指針指示的,換句話說,指針為數(shù)據(jù)元素之間的邏輯關(guān)系的映像。它是一種動態(tài)結(jié)構(gòu),鏈表所占用的空間不需預(yù)先分配,而是由系統(tǒng)應(yīng)需求即時生成。2.用雙向循環(huán)鏈表實現(xiàn)菜單功能下拉彈出式菜單系統(tǒng)系在頂端水平顯示包含各主功能選項的菜單條行,用戶可以利用$-→鍵或←鍵移動并回車選擇所需的主功能選項,而被選取的主功能選項將會顯示其相關(guān)的子功能選項在下拉的彈出式菜單框中。同級菜單的功能選項形成一閉合循環(huán),即:當(dāng)用戶利用↑(或↓)鍵移動高亮度反白亮條至同級功能選項的頂(或底)部時,再往上(或下)移動,則高亮度反白條將自動返回底(或頂)部。子菜單可在該級任一功能選項上按"q"鍵返回其父菜單。為了實現(xiàn)這一功能,采用雙向式循環(huán)鏈表作為該軟件的基本數(shù)據(jù)結(jié)構(gòu)。將一個窗口下的菜單(僅有一個)作為一相對獨立的雙向循環(huán)鏈表,即:同一級的菜單以各功能選項信息的結(jié)構(gòu)體形式為結(jié)點,構(gòu)造成雙向循環(huán)鏈表。各菜單之間(即:相對獨立的雙向循環(huán)鏈表之間)又有父子關(guān)系,采用C語言的指針機(jī)制使各鏈表有機(jī)地連結(jié)成網(wǎng)。基于此,菜單便可"大"可"小",可"深"可"淺"("大":指菜單項目多,反之為"小";"深":指子菜單嵌套層數(shù)多)。3.創(chuàng)建與控制屏幕窗口與許多操作系統(tǒng)只在匯編語言級向用戶提供系統(tǒng)調(diào)用的接口不同,UNIX不僅在匯編語言級,而且在程序設(shè)計語言C中提供了這種接口。這給編程者提供了很大方便。筆者充分利用此特點,借助AIX操作系統(tǒng)(V3.2.5)提供的CURSES庫完成屏幕窗口的創(chuàng)建與操縱。CURSES庫是一組屏幕控制子程序,它允許用C程序調(diào)用這些子程序去控制終端的輸入與輸出。由此提供給用戶友好的界面。由于CURSES庫是一個較為復(fù)雜的問題,因此本文不作詳細(xì)論述,有關(guān)這方面的內(nèi)容,請讀者參考相應(yīng)的書籍。通過以上分析,筆者想到了一種應(yīng)用內(nèi)存分配(指針)和鏈表相結(jié)合來實現(xiàn)變量的動態(tài)定義,利用C語言的遞歸調(diào)用最終實現(xiàn)程序通用性的方法。現(xiàn)將該方法與程序提供出來供大家參考。三、具體方法1.先根據(jù)相應(yīng)的text文件內(nèi)容創(chuàng)建雙向循環(huán)鏈表網(wǎng);2.再用自定義函數(shù)menu()實現(xiàn)對該鏈表網(wǎng)的應(yīng)用。詳見程序清單和text文件示例。(1)下拉彈出式菜單程序清單(以W開頭的有關(guān)窗口函數(shù)是CURSES提供的)#include<curses.h>#include<string.h>#include<stdio.h>#defineLENsizeof(structlink)structlink{charstr[50],subp[20],prname[20],subtitl[30],mbegin,mend;inttlin,tcol,subhigh,subwide,sublin,subcol,lin,col;structlink*next,*befo,*subm,*parem,*paret;WINDOW*pwin,*subwin;};structlink*mhead;chartree[40];main()/*主函數(shù)*/{structlink*creat();voidmenu();charfname[10],tname[30];intwi,hi,li,co,tlin,tcol;FILE*fp1;if((fp1=fopen("main.txt","r"))==NULL){exit(0);}fscanf(fp1,"%s%d%d%s%d%d%d%d%s\n",fname,&tlin,&tcol,tname,&hi,&wi,&li,&co,tree);free(fp1);initscr();cbreak();mhead=creat(fname,NULL,NULL);/*創(chuàng)建雙向循環(huán)鏈表網(wǎng)*/menu(mhead,NULL,tlin,tcol,tname,hi,wi,li,co);/*操縱雙向循環(huán)鏈表網(wǎng)*/endwin();exit(0);}/*操縱菜單函數(shù)*/voidmenu(head,parewin,tline,tcolu,titl,high,wide,line,colu)structlink*head;inthigh,wide,line,colu,tline,tcolu;chartitl[30];WINDOW*parewin;{WINDOW*win,*pw;structlink*p,*stout,*head1;intkeycode;win=newwin(high,wide,line,colu);/*創(chuàng)建窗口*/keypad(win,TRUE);keycode=0;box(win,'*','*');mvwaddstr(win,tline,tcolu,titl);wrefresh(win);stout=head1=head;wrefresh(win);for(p=head1;p->mend!='T';)/*菜單顯示*/{p->pwin=parewin;p=p->next;}p->pwin=parewin;四、結(jié)束語該軟件具有以下特點。1.通用性強(qiáng):該菜單工具適用于任何用戶,即使不懂得編程,也能很快地構(gòu)造出所需的菜單,具編程經(jīng)驗的用戶更是易如反掌。2.易于維護(hù):當(dāng)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天正供暖課程設(shè)計
- 燈具的節(jié)能優(yōu)化設(shè)計技巧考核試卷
- 碳酸飲料行業(yè)的品牌塑造與消費者認(rèn)知考核試卷
- 鹽的文化與民俗考核試卷
- 電氣設(shè)備在智能變電站故障自愈系統(tǒng)中的應(yīng)用考核試卷
- 海底設(shè)施工程預(yù)算與結(jié)算管理考核試卷
- 電氣機(jī)械系統(tǒng)的家電與消費電子技術(shù)考核試卷
- 2024年度地區(qū)品牌總代理加盟合同3篇
- 玻璃天文觀測鏡考核試卷
- 2024年度物業(yè)與業(yè)主共同參與社區(qū)公益活動合同3篇
- 2024年盾構(gòu)操作工職業(yè)技能競賽理論考試題庫(含答案)
- 家庭教育與孩子的閱讀習(xí)慣培養(yǎng)
- 滬科黔科版《綜合實踐活動》5上農(nóng)業(yè)小當(dāng)家 活動一《花壇小暖棚》課件
- 期末素養(yǎng)展示試卷-2024-2025學(xué)年統(tǒng)編版語文三年級上冊
- 大學(xué)試卷(示范)
- 高職院校智能制造實驗室實訓(xùn)中心建設(shè)方案
- 勞動與社會保障法-001-國開機(jī)考復(fù)習(xí)資料
- 云南省昆明市(2024年-2025年小學(xué)六年級語文)部編版期末考試(上學(xué)期)試卷及答案
- 美麗的秋天景色作文500字小學(xué)
- 青少年足球培訓(xùn)
- 【MOOC】寄生人體的惡魔-醫(yī)學(xué)寄生蟲學(xué)-南方醫(yī)科大學(xué) 中國大學(xué)慕課MOOC答案
評論
0/150
提交評論