freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言課程設(shè)計(jì)c語言文本編輯器(完整版)

2025-07-31 06:24上一頁面

下一頁面
  

【正文】 個列單鏈表用來保存一行的字符,有多少行即有多少個這樣的單鏈表。若為Ctrl+C鍵,則將選定的相關(guān)內(nèi)容保存起來,重新顯示單鏈表中的內(nèi)容(目的:為了去除字符的底色)。(1) 若按鍵為常規(guī)字符,即其ASCII碼大于32小于127,則繼續(xù)判斷在文本編輯區(qū)的當(dāng)前光標(biāo)位置有沒有字符,若有字符,則調(diào)用insert()函數(shù),將此字符插入在當(dāng)前位置,否則在判斷沒有滿行后,將此字符添加在單鏈表的數(shù)據(jù)域中,若此行已滿,則執(zhí)行添加新行操作。主窗口要有菜單欄,文本編輯區(qū)和狀態(tài)欄三大部分構(gòu)成,菜單欄用來顯示菜單項(xiàng),文本編輯區(qū)主要用來文本字符的輸入,刪除等操作,狀態(tài)欄主要用來顯示當(dāng)前光標(biāo)在文本窗口中的坐標(biāo)值。光帶條在子菜單之間的上下移動或菜單之間的左右移動和子菜單項(xiàng)的選取。用戶可以使用左移鍵(←),右移鍵(→),上移鍵(↑)和下移鍵(↓)來移動光標(biāo)位置。在文件操作模塊中,主要完成文件的創(chuàng)建,打開,保存和另存操作。在本章中,我們將向讀者講解如何利用C語言來發(fā)展開發(fā)一個簡易的文本編輯器。 1 設(shè)計(jì)目的利用C語言的單鏈表數(shù)據(jù)結(jié)構(gòu)及相關(guān)函數(shù),本章編程實(shí)現(xiàn)了一個與DOS操作系統(tǒng)下的Edit相似的文本編輯器。用戶可以選擇File菜單上的New子菜單來完成新建文本文件操作;選擇File菜單上的Save子菜單來完成保存文件操作選擇File菜單上的Open子菜單來完成打開文件操作;選擇Flie菜單上的Save as子菜單來完成文件的另存為操作。(3) 剪貼板操作模塊。本文本編輯器共有Flie,Edit和Help3個子菜單項(xiàng),用戶可以分別按F1,F2和F3功能鍵來完成這3個菜單項(xiàng)的調(diào)用,即顯示某項(xiàng)菜單。注意:Turbo ,共有80列(或40列),25行的文本單元,每個單元包括一個字符和一個屬性,字符即ASCII碼字符,屬性規(guī)定該字符的顏色和強(qiáng)度。(2) 若按鍵為Enter鍵,則將光標(biāo)移至下一行的行首,等待用戶輸入新的字符。若為Ctrl+V鍵,則調(diào)用insert()函數(shù)將保存起來的字符插入在單鏈表中,并重新顯示單鏈表中的內(nèi)容。行單鏈表只有一個,它的每個節(jié)點(diǎn)的數(shù)據(jù)域用來保存不同列單鏈表的首節(jié)點(diǎn)的地址。(1) 用戶輸入一個保存此單鏈表數(shù)據(jù)的文件名。1) 添加字符當(dāng)光標(biāo)處在文本編輯的最后一行的位置且光標(biāo)后面沒有字符時(shí),若此時(shí)輸入字符,程序會判斷一行中字符的個數(shù),若字符個數(shù)不等于76,則在當(dāng)前的列單鏈表的最后一個節(jié)點(diǎn)中保存輸入的字符,然后添加一個新的節(jié)點(diǎn)來保存下一個輸入的字符:若等于76,則在當(dāng)前的列單鏈表的最后一個節(jié)點(diǎn)中保存輸入的字符,然后在行單鏈表中添加一個新節(jié)點(diǎn)用來保存下一行的列單鏈表的首地址,添加一個新的列單鏈表節(jié)點(diǎn)來保存下一個用戶輸入的字符。(5) 插入此字符后,調(diào)用test()函數(shù),從第m行開始檢查各行是否滿足每行只允許有76個字符的條件,若不滿足此條件,則必須進(jìn)行處理。(1) 在相應(yīng)的列單鏈表中刪除第n個節(jié)點(diǎn)。下面分別介紹文本的選定和對選定文本的剪切、復(fù)制和粘貼操作的具體實(shí)現(xiàn)。(3)利用全局變量backup保存value的值后,將value賦值為0。(2) 保存當(dāng)前位置的坐標(biāo),利用循環(huán)語句,依次利用x[0]至x[backup1]數(shù)組元素保存已選定字符的坐標(biāo)和字符值,調(diào)用insert()函數(shù)在單鏈表中一次插入一個字符。下面簡要描述一下draw(value,flag)函數(shù)的過程。(1) 若為左移鍵,則調(diào)用drawmenu(value,flag)函數(shù),將切換至某個菜單的左邊鄰居菜單。6.幫助及其他模塊幫助模塊主要用于提示用戶如何使用本軟件,它的實(shí)現(xiàn)非常簡單。int col,line。}node。Hnode結(jié)構(gòu)體定義了在一個單鏈表中保存列單鏈表首節(jié)點(diǎn)地址的結(jié)構(gòu),我們稱由Hnode類型的節(jié)點(diǎn)構(gòu)成的單鏈表為行單鏈表。q為指向行單鏈表中第一個節(jié)點(diǎn)的指針。11)drawmenu()函數(shù)原型:void drawmenu(int m,int n)drawmenu函數(shù)用于畫菜單,m表示第幾項(xiàng)菜單,n表示第m項(xiàng)的第n個子菜單項(xiàng)。/*value保存有值數(shù)組元素的最大下標(biāo)值,backup保存value的副本,NUM保存當(dāng)前行中的用戶輸入的字符個數(shù)*/typedef struct record { char ch。 /*指向列單鏈表的首節(jié)點(diǎn)的地址*/ struct Hnode *nextl。 /*在文本模式中選擇新的字符顏色0為BLACK黑*/ insline()。i=79。 cprintf(%c,196)。 cprintf(%c %c Edit %c %c,179,17,179)。 }文本字符顯示輸出模塊的作用是通過循環(huán)讀取各單鏈表,醬爆錯在單鏈表眾多的字符在文本編輯區(qū)中顯示輸出。 /*清屏*/ /*循環(huán)讀取兩個單鏈表中的值:q是一個指向行單鏈表首節(jié)點(diǎn)的指針, 此單鏈表數(shù)據(jù)域的值為實(shí)際保存各行字符的列單鏈表p中的首節(jié)點(diǎn)地址*/ do{ p=qnext。 /*指向下一個節(jié)點(diǎn)*/ printf(\n)。i24。amp。/*在文本窗口中輸出該字符*/ p=pnext。下面介紹另外兩個對字符進(jìn)行檢測的函數(shù),它在字符的刪除、插入等許多操作中都有用到。m==1) return。im。 free(p1)。 /*指向下一行的元素的地址*/ p1=p2=qnext。 /*p1指向p2的前一個節(jié)點(diǎn),p2指向行單鏈表中下一個節(jié)點(diǎn)*/ p2=p2next。 q=Hhead。 if(pch==13) return 1。 q=Hhead。 /*統(tǒng)計(jì)第m行的字符個數(shù)*/ } /*行尾字符還沒有判斷,接下來判斷行尾字符*/ if(pch==13amp。num!=0) return num。 for(i=1。 /*創(chuàng)建一個新的列單鏈表節(jié)點(diǎn)*/ pch=a。 Hnode *q。 /*若此單鏈表中沒有回車符且有超過76個節(jié)點(diǎn)時(shí),則p1會指向此列單鏈表中的第76個節(jié)點(diǎn)*/ for(i=0。qnextl==NULL)/*若p1的數(shù)據(jù)域?yàn)榛剀嚪倚袉捂湵碇兄挥衝個節(jié)點(diǎn)*/ { qnextl=(Hnode *)malloc(sizeof(Hnode))。/*將多出的字符與下一行的字符相連*/ qnext=p2。amp。 /*q的數(shù)據(jù)域?yàn)榇诵兄卸喑龅淖址诘牧袉捂湵碇械墓?jié)點(diǎn)地址*/ temp2=temp1。 /*得到當(dāng)前光標(biāo)的坐標(biāo)值*/ if((A==CL)amp。check(Hhead,wherey(),wherex())0) /*ctrl+→,當(dāng)前光標(biāo)的右邊有字符,光標(biāo)移動*/ { flag=1。 } if((A==CR)amp。 r[abs(value)].ch=check(Hhead,r[abs(value)].line,r[abs(value)].col)。 value++。 textcolor(0)。(2) 通過drawmenu(int m,int n)函數(shù),完成第m%3項(xiàng)菜單的繪制,并將光帶條至于第m%3項(xiàng)的第n%b個菜單選項(xiàng)上,為相應(yīng)菜單所擁有的菜單選項(xiàng)個數(shù)。 insline()。 cprintf(%c,179)。 gotoxy(10,10)。 cprintf(%c,218)。 cprintf( New )。i=10。 cprintf(%c %c File %c %c,179,17,179)。 cprintf( Save )。 } } /********************************************************/ if(m%3==1) /*畫Edit菜單項(xiàng)*/ { window(28,2,38,7)。 gotoxy(27,1)。i=11。 for(i=0。 cprintf(%c,192)。 cprintf( Copy )。 cprintf(%c %c Edit %c %c,179,17,179)。 cprintf( Paste )。 for(i=0。i++) { gotoxy(48,1+i)。 gotoxy(48+i,6)。 } textbackground(0)。 gotoxy(59,1+i)。i++) { gotoxy(1,1+i)。 case 3:gotoxy(29,6)。 cprintf( Cut )。 cprintf( Paste )。 cprintf(%c,191)。i++) { gotoxy(40,2+i)。 cprintf(%c,196)。i=5。 textbackground(7)。 case 3:gotoxy(9,6)。 cprintf( New )。 cprintf(%c,196)。 cprintf( Open )。 cprintf(%c,192)。 /*輸出下邊的陰影效果*/ for(i=0。i=11。 gotoxy(7,1)。 if(m%3==0) /*畫File菜單項(xiàng)*/ { window(8,2,19,9)。amp。 }/*用不同的前背景色顯示選擇的字符*/void colorview(Hnode *Hhead,int x,int y) { int i。 /*若第line行,第col列的字符為回車鍵,則返回1*/ value。x==76) /*ctrl+→,當(dāng)前光標(biāo)在當(dāng)前行的行尾,光標(biāo)移動*/ { flag=1。 } if((A==CR)amp。(x!=1)) /*ctrl+←,當(dāng)前光標(biāo)不是在行首,光標(biāo)移動*/ gotoxy(wherex()1,wherey())。(1) 通過control(int A,Hnode*Hhead)函數(shù),對控制鍵進(jìn)行響應(yīng),移動光標(biāo)后并將光標(biāo)所在位置的字符保存在數(shù)組中。 qnextl=(Hnode *)malloc(sizeof(Hnode))。 /*若行單鏈表第n個節(jié)點(diǎn)后還有節(jié)點(diǎn),繼續(xù)test()的相同處理*/ } } else /*若此列單鏈表最后一個元素為回車符*/ { temp2=p2。 tailnext=(node *)malloc(sizeof(node))。i++) { if(p1ch==13||p1next==NULL) break。 for(i=1。 qnext=p。i++) /*定位至行單鏈表中的第m個元素*/ q=qnextl。/*返回num,表示當(dāng)前行中只有一個字符,且沒有回車符*/ }在文本編輯區(qū)中插入字符的工作由insert(Hnode,*Hhead,int m,int n,char a)函數(shù)和test(Hnode*Hhead,int n)函數(shù)配合完成。num==0) return 0。im。amp。im。 /*若為回車,跳出循環(huán)*/ } qnext=p2。 /*tail的指針域指向下一行的第一個元素的地址*/ } else /*若當(dāng)前行的字符個數(shù)為0,即刪除該字符后,只剩下回車符,則將下一個行單鏈表中節(jié)點(diǎn)的數(shù)據(jù)域移至前一下節(jié)點(diǎn)的數(shù)據(jù)域*/ {
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1