版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、/* J :光標(biāo)左移*/*r:光標(biāo)右移*/* $鍵:光標(biāo)下移*/* f鍵:光標(biāo)上移*/*ESC鍵:取消菜單打開操作 */*回車鍵:換行*/*文本編輯器editor源代碼*/ #include <stdio.h>#include <conio.h>#include <bios.h> #include <math.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define ENTER 0x1c0d#defi
2、ne DEL 21248/*DEL鍵:刪除當(dāng)前字符*/#define BACK 3592#define CL 29440#define CR 29696#define Cc 11779#define Cv 12054#define Cx 11544#define F1 15104#define F2 15360#define F3 15616/*BackSpace鍵:刪除當(dāng)前光標(biāo)位置前一個字符*/*ctrl+。鍵:從右至左,選定文本 */*ctrl+鍵:從左到右,選定文本*/*ctrl+c鍵:將選定文本,復(fù)制一份到剪貼板中*/*ctrl+v鍵:將剪貼板中的內(nèi)容復(fù)制到當(dāng)前位置*/*ctrl+x鍵
3、:對選定文本,執(zhí)行剪切操作 */*F1鍵:打開文件菜單*/*F2鍵:打開編輯菜單*/*F3鍵:打開幫助菜單*/#define F10 17408/*F10鍵:進入文本快速預(yù)覽模式*/int value,backup,NUM;/*value保存有值數(shù)組元素的最大下標(biāo)值,backup保存value的副本,NUM保存當(dāng)前行中的用戶輸入的字符個數(shù)*/typedef struct recordchar ch;/*保存一字符*/int col, line; /*x 軸和 y 軸坐標(biāo) */record;record r500; /*定義一個有500個元素的結(jié)構(gòu)體數(shù)組,保存選定的文本字符的屬性*/typede
4、f struct node /*定義保存行中的單個字符的結(jié)構(gòu)*/char ch; /*數(shù)據(jù)域:保存一字符*/struct node *next; /*指針域:指向下一個結(jié)點的指針*/node;/*由此類型節(jié)點構(gòu)成的單鏈表,命名為:列單鏈表*/typedef struct Hnode /*定義保存所有列單鏈表首節(jié)點的指針的結(jié)構(gòu)*/node *next; /*指向列單鏈表的首節(jié)點的地址*/struct Hnode *nextl; /*指向下一個節(jié)點的指針*/Hnode;/*由此類型節(jié)點構(gòu)成的單鏈表,命名為:行單鏈表*/void drawmain() /* 畫主窗 口函數(shù) */(int i,j;go
5、toxy(1,1);/*在文本窗口中設(shè)置光標(biāo)至 (1,1)處*/textbackground(7); /*選擇新的文本背景顏色,7為LIGHTGRA Y淡灰色*/textcolor(0);/*在文本模式中選擇新的字符顏色0為BLACK黑*/insline();/*在文本窗口的(1,1)位置處中插入一個空行*/for(i=1;i<=24;i+) ( gotoxy(1,1+i); /* (x,y)中 x 不變,y+*/ cprintf("%c”,196); /*在窗口左邊輸出-,即畫出主窗口的左邊界*/gotoxy(80,1+i);cprintf("%c",19
6、6); /*在窗口右邊,輸出-,即畫出主窗口的右邊界*/for(i=1;i<=79;i+)(gotoxy(1+i,2); /*在第2行,第2列開始*/ cprintf("%c",196); /* 在窗口頂端,輸出-*/ gotoxy(1+i,25);/* 在第 25 行,第 2 列開始 */cprintf("%c",196); /* 在窗口底端,輸出-*/ gotoxy(1,1);cprintf("%c",196);/*在窗口左上角,輸出-*/gotoxy(1,24);cprintf("%c",196);/*
7、在窗口左下角,輸出-*/gotoxy(80,1);cprintf("%c",196);/*在窗口右上角,輸出-*/gotoxy(80,24); cprintf("%c",196); /*在窗口右下角,輸出-*/gotoxy(7,1); cprintf("%c %c File %c %c",179,17,16,179);/* | < > |*/gotoxy(27,1); cprintf("%c %c Edit %c %c",179,17,16,179); /* | < > |*/ gotoxy
8、(47,1); cprintf("%c %c Help %c %c",179,17,16,179); /* | < > |*/ gotoxy(5,25); /* 跳至窗 口底端 */ textcolor(1);cprintf(" Row:1Col:1”);gotoxy(68,25);cprintf("V ersion 2.0");void qview(Hnode *q) /* 快速預(yù)覽文本:開頭: #,回車:* */ (void view(Hnode *q); /*view() 函數(shù)聲明 */ node *p; int i;wind
9、ow(1,1,80,25); /* 定義文本窗口大小 */clrscr(); /* 清屏 */*循環(huán)讀取兩個單鏈表中的值:q是一個指向行單鏈表首節(jié)點的指針,此單鏈表數(shù)據(jù)域的值為實際保存各行字符的列單鏈表p中的首節(jié)點地址*/dop=q->next; /*p指向保存行數(shù)據(jù)的列單鏈表的首節(jié)點的地址*/cprintf("#"); /*每行開頭,打印此字符,不管前面是否有回車符*/while(p!=NULL) /* 循環(huán)讀取單鏈表 p中的值*/if(p->ch=13)putch('*'); /* 若為回車鍵,打印出 *號*/elseputch(p->
10、ch);/*輸出各行中的字符到預(yù)覽窗口*/p=p->next; /*指向下一個節(jié)點*/ q=q->nextl; /*指向下一個節(jié)點*/ printf("n");/* 輸出一個回車 */while(q!=NULL);getch();clrscr();drawmain();/*按任意鍵后,回到主窗口界面*/window(2,2,79,23);textbackground(9);for(i=0;i<24;i+)insline(); /* 插入 24 個空行 */ window(3,3,78,23);textcolor(10);void view(Hnode *q
11、) /*按行顯示保存在單鏈表中的文本字符,q為指向行單鏈表中第一個節(jié)點的指針*/node *p; /*p為保存列單鏈表節(jié)點元素地址的指針*/clrscr(); /* 清屏 */*雙重循環(huán),讀取并顯示保存在單鏈表中字符*/dop=q->next;while(p!=NULL&&p->ch>=32&&p->ch<127&&p->ch!=13&&p->ch!=-1)/*指針p不能為空,且數(shù)據(jù)域必須為常規(guī)字符*/putch(p->ch);/*在文本窗口中輸出該字符*/p=p->next;
12、 /*指向下一個節(jié)點*/q=q->nextl; /*指向下一個節(jié)點*/if(p->ch=13|p->ch=-1)&&q!=NULL) gotoxy(1,wherey()+1); /* 若 ch 為回車或EOF標(biāo)記,光標(biāo)跳至下行的開始處*/while(q!=NULL); /* 逐行逐列顯示文本字符 */ int check(Hnode *Hhead,int m,int n) /*check():在單鏈表中檢查第m行第n列位置的字符,若為常規(guī)字符,則返回該字符*/(int i;Hnode *q;node *p;q=Hhead;for(i=1;i<m;i+)/
13、*定位至行單鏈表中的第m個元素*/q=q->nextl;p=q->next;/*獲取第m個節(jié)點的數(shù)據(jù)域*/for(i=1;i<n;i+) /*定位至列單鏈表中的第n個元素*/p=p->next;if(p->ch=13) return -1; /*若第m行,第n列的字符為回車鍵,則返回 -1*/if(p->ch>=32&&p->ch<127) return p->ch; /* 若第 m 行,第 n 列的字符為常規(guī)字符 則返回該字符*/else return 0; /*若第m行,第n列的字符既非回車符又非常規(guī)字符,則返回
14、0*/int judge(Hnode *Hhead,int m) /*judge():返回第 m行中的常規(guī)字符總的個數(shù), 不包括回車符*/ (Hnode *q;node *p;int i,num=0;q=Hhead;for(i=1;i<m;i+) /*定位至行單鏈表中的第m個元素*/q=q->nextl;if(q=NULL) return -1; /* 返回-1,表示第 m 行不存在 */p=q->next;while(p->next!=NULL)(p=p->next;num+; /*統(tǒng)計第m行的字符個數(shù)*/*行尾字符還沒有判斷,接下來判斷行尾字符*/if(p-&
15、gt;ch=13&&num=0) return 0;/*返回0,表示當(dāng)前行只有一個回車字符*/if(p->ch>=32&&p->ch<127) return num+1; /*返回 num+1,表示當(dāng)前行的最后一個 字符為常規(guī)字符*/if(p->ch=13&&num!=0) return num; /*返回num,表示當(dāng)前行的最后一個字符為回 車符,不計算在內(nèi)*/else return 1;/*返回num,表示當(dāng)前行中只有一個字符,且沒有回車符 */int del(Hnode *Hhead,int m,int n)
16、/*del():刪除第 m 行,第 n 列位置的字符 */ (Hnode *q,*q1;node *p1,*p2,*tail;int i,num=0,j,flag=0;q=Hhead;if(n=0&&m=1) return; /* 第 1 行,第 0 列不存在 */if(n=0&&m>1) /*若為第0列字符,但行必須大于1,執(zhí)行向上行移處理*/(n=76;m=m-1;gotoxy(n,m);/* 移至第 m-1 行,第 76 列 */flag=1; /*移位的標(biāo)志置1*/for(i=1;i<m;i+)/*定位至行單鏈表中的第m個元素*/q=q-&g
17、t;nextl;p1=q->next;for(i=1;i<n-1;i+) /* 定位至列單鏈表中的第n-1個元素*/p1=p1->next;p2=p1->next; /*p2指向列單鏈表中的第n個元素*/if(n=1) /*若是刪除第m行第1列的字符*/(q->next=p1->next;free(p1);else(p1->next=p2->next; /*在單鏈表中刪除第 m行第n列的元素*/ free(p2);/*刪除掉第m行第n列的元素后,處理行單鏈表中第m個節(jié)點后的數(shù)據(jù)向前移的任務(wù)*/while(num=judge(Hhead,m+)&g
18、t;0) /*執(zhí)行一次 judge(Head,m)后,m 才加1.這里必須滿足行常規(guī)字符數(shù)不為 0的條件*/(p1=q->next; q1=q;if(p1!=NULL) /* 若當(dāng)前行非空*/(while(p1->next!=NULL) p1=p1->next;tail=p1;/*tail保存列單鏈表最后一個元素的地址*/q=q->nextl; /*指向下一行的元素的地址 */ p1=p2=q->next;tail->next=p1; /*tail的指針域指向下一行的第一個元素 的地址*/else /*若當(dāng)前行的字符個數(shù)為0,即刪除該字符后,只剩下回車符,則
19、將下一個行單鏈表中節(jié)點的數(shù)據(jù)域移至前一下節(jié)點的數(shù)據(jù)域*/( q=q->nextl; p1=p2=q->next; q1->next=p1;/*q1->next 指向下一行的第一個元素的地址*/for(i=0;i<76-num;i+)/*當(dāng)前行還有76-num個空位沒有字符,在下一行的單鏈表中讀 取字符,直至遇到回車符為止*/(p1=p2; /*p1指向p2的前一個節(jié)點,p2指向行單鏈表中 下一個節(jié)點*/p2=p2->next;if(p2->ch=13) break; /* 若為回車,跳出循環(huán) */ q->next=p2;/*在列單鏈表中去掉移至上
20、行的元素*/p1->next=NULL;/*下行移至上行的最后一個元素,指針置空*/return flag; /*返回0:表示沒有換位,返回 1:表示有換位*/*執(zhí)行insert()后,檢驗第n行及后面的數(shù)據(jù),使其滿足規(guī)則*/int test(Hnode *Hhead,int n) ( int i=0,num1=1; node *p1,*p2,*tail,*temp1,*temp2; Hnode *q; q=Hhead; for(i=1;i<n;i+) /*定位至行單鏈表中的第n個元素*/q=q->nextl; tail=p1=q->next; if(p1=NULL)
21、return; /* 若此行沒有任何字符,則返回 */ while(tail->next!=NULL) /*定位至列單鏈表中的最后一個元素*/tail=tail->next;/*若此單鏈表中沒有回車符且有超過76個節(jié)點時,則p1會指向此列單鏈表中的第76個節(jié)點*/ for(i=0;i<75;i+)( if(p1->ch=13|p1->next=NULL) break; p1=p1->next; p2=p1->next;p1->next=NULL; /*在此行的最后一個字符的前一個字符處斷行,因為插入在此行插入了一個新的字符*/ if(tail-&
22、gt;ch!=13) /*若此行行尾不是回車鍵 */ ( if(p1->ch=13&&q->nextl=NULL)/* 若p1的數(shù)據(jù)域為回車符且行單鏈表中只 有n個節(jié)點*/ ( q->nextl=(Hnode *)malloc(sizeof(Hnode); /* 新建一個行單鏈表節(jié) 點,相當(dāng)于添加一個新行 */ q->nextl->nextl=NULL; tail->next=(node *)malloc(sizeof(node);/* 在 tail 所指節(jié)點位置開始 繼續(xù)準(zhǔn)備添加字符*/ tail->next->ch=13; t
23、ail->next->next=NULL; q->nextl->next=p2; /*新行單鏈表節(jié)點保存此行多出的字符*/ else /*若此行行尾和行中都沒有回車鍵,或者q->nextl不為空*/( q=q->nextl;/*q->nextl 有可能為空 */ tail->next=q->next;/*將多出的字符與下一行的字符相連*/q->next=p2;/*/if(q!=NULL) test(Hhead,+n); /*若行單鏈表第 n個節(jié)點后還有節(jié)點, 繼續(xù)test()的相同處理*/else /*若此列單鏈表最后一個元素為回車符
24、*/temp2=p2; /*p2指向第77個字符,或者為空(為空表示此行插入一個字符后, 沒有超出范圍*/while(q!=NULL&&p2!=NULL) /*q指向行列表中的第 n個節(jié)點.條件:行單鏈表 中第n個節(jié)點存中且有第77個字符*/ /*條件:在行單鏈表中只有n個節(jié)點,且字符超過了一行規(guī)定的76個,且num1標(biāo)志為1*/if(q->nextl=NULL)&&(p1!=tail|p2!=NULL)&&(num1=1)num1+;q->nextl=(Hnode *)malloc(sizeof(Hnode); /* 新建一個行單鏈
25、表節(jié)點,準(zhǔn)備存儲此行中多出的字符*/q->nextl->nextl=NULL; q->nextl->next=NULL; /* 初始化值 */*行單鏈表中第n+1個節(jié)點已經(jīng)存在,下面為在行單鏈表中插入一個新的節(jié)點*/q=q->nextl; /*q指向行列表中的第 n+1個節(jié)點*/temp1=q->next;q->next=temp2; /*q的數(shù)據(jù)域為此行中多出的字符所在的列單鏈表中的節(jié)點地址*/temp2=temp1;void insert(Hnode *Hhead,int m,int n, char a) /* 第 m 行,第 n 列的位置之前一個
26、位置,插入單 字符*/int i;Hnode *q;node *p,*p1,*p2;q=Hhead;for(i=1;i<m;i+) /*定位至行單鏈表中的第m個元素*/q=q->nextl;p1=q->next;for(i=1;i<n-1;i+) /* 定位至列單鏈表中的第n-1個元素*/p1=p1->next;p=(node *)malloc(sizeof(node); /* 創(chuàng)建一個新的列單鏈表節(jié)點*/p->ch=a; /*給此節(jié)點的數(shù)據(jù)域賦值 */if(n=1) /*插入之前,若只有一個字符在行中,則插在此節(jié)點之前*/p->next=q->
27、next;q->next=p;elsep->next=p1->next; /*在第m行,第n列的字符前,插入一字符*/p1->next=p;test(Hhead,m); /*在插入新元素后,檢驗并處理單鏈表中第m行開始的元素,使其滿足規(guī)則*/*對控制鍵進行響應(yīng),A:按鍵的整數(shù)值,Hhead:行單鏈表的首地址*/void control(int A, Hnode *Hhead)void colorview(Hnode *,int,int); /* 函數(shù)聲明 */int x,y,flag=0;x=wherex(); y=wherey(); /*得到當(dāng)前光標(biāo)的坐標(biāo)值 */if
28、(A=CL)&&(x!=1) /*ctrl+當(dāng)前光標(biāo)不是在行首 ,光標(biāo)移動*/gotoxy(wherex()-1,wherey();if(A=CL)&&(x=1) /*ctrl+在行首 */gotoxy(abs(judge(Hhead,wherey()-1),wherey()-1); /*judge(Hhead,wherey()-1)上一行的字符個數(shù)作為x值,光標(biāo)移動*/if(A=CR)&&check(Hhead,wherey(),wherex()>0) /*ctrl+,當(dāng)前光標(biāo)的右邊有字符,光標(biāo)移動*/ flag=1; gotoxy(wh
29、erex()+1,wherey(); if(A=CR)&&check(Hhead,wherey()+1,1)>0&&check(Hhead,y,x)=0) /*ctrl+ ,當(dāng)前光標(biāo)處沒有字符但下一行的第一列有字符,光標(biāo)移動 */flag=1;gotoxy(1,wherey()+1); if(A=CR)&&x=76) /*ctrl+當(dāng)前光標(biāo)在當(dāng)前行的行尾,光標(biāo)移動*/flag=1; gotoxy(1,wherey()+1);if(A=CR&&flag=1) /*ctrl+ 光標(biāo)已經(jīng)跳至新處,將當(dāng)前光標(biāo)所在位置的字符的坐標(biāo)和值
30、保存在r數(shù)組中*/rabs(value).col=wherex();rabs(value).line=wherey();rabs(value).ch=check(Hhead,rabs(value).line,rabs(value).col);if(rabs(value).ch=-1) rabs(value).ch=13; /* 若第 line 行,第 col 列的字符 為回車鍵,則返回-1*/value-;if(A=CL&&(x!=1|y!=1) /*ctrl+。,當(dāng)前光標(biāo)并不在窗口左上角,將當(dāng)前光標(biāo)所在位置的字符的坐標(biāo)和值保存在r數(shù)組中*/(rabs(value).col=w
31、herex();rabs(value).line=wherey();rabs(value).ch=check(Hhead,rabs(value).line,rabs(value).col);value+;colorview(Hhead,wherex(),wherey();/*用不同的前背景色顯示選擇的字符*/void colorview(Hnode *Hhead,int x,int y)(int i;view(Hhead);/*重新顯示所有文本字符 */for(i=0;i<abs(value);i+) /*value 為數(shù)組下標(biāo) */(gotoxy(ri.col,ri.line);tex
32、tbackground(7);textcolor(O);if(ri.ch!=13&&ri.ch!=-1)cprintf("%c”,ri.ch);if(ri.ch=13|ri.ch=-1)cprintf("");gotoxy(x,y);void drawmenu(int m,int n) /*畫菜單,m:第幾項菜單,n:第m項的第n個子菜單*/ ( int i; if(m%3=0) /* 畫 File 菜單項 */ ( window(8,2,19,9); textcolor(0); textbackground(7); for(i=0;i<7;
33、i+) /*在上面定義的文本窗口中先輸出 7個空行*/ ( gotoxy(1,1+i); insline(); window(1,1,80,25); gotoxy(7,1); for(i=1;i<=7;i+) ( gotoxy(8,1+i); cprintf("%c”,179); /*窗口內(nèi)文本的輸出函數(shù),在窗口左邊輸出 | */ gotoxy(19,1+i); cprintf("%c",179); /*窗口內(nèi)文本的輸出函數(shù),在窗口右邊輸出 | */ for(i=1;i<=11;i+) ( gotoxy(8+i,2); cprintf("%c
34、”,196);/*窗口內(nèi)文本的輸出函數(shù),在窗口上邊輸出-*/gotoxy(8+i,9); cprintf("%c",196);/*窗口內(nèi)文本的輸出函數(shù),在窗口下邊輸出-*/ textbackground(0); gotoxy(10,10); cprintf(""); /* 輸出下邊的陰影效果 */for(i=0;i<9;i+) ( gotoxy(20,2+i); cprintf(" "); /*輸出右邊的陰影效果*/ /*以上為顯示菜單項的外觀*/textbackground(7); gotoxy(8,2); cprintf(&
35、quot;%c”,218); /* 輸出四個邊角表格符 */ gotoxy(8,9); cprintf("%c",192); gotoxy(19,2); cprintf("%c",191); gotoxy(19,9); cprintf("%c",217); gotoxy(9,3); cprintf(" New "); gotoxy(9,4); cprintf(" Open ");gotoxy(9,5);cprintf(" Save ");gotoxy(9,6);cprintf
36、(" Save as");for(i=1;i<=10;i+)gotoxy(8+i,7);cprintf("%c”,196); /* 在 Save as下輸出一行分隔符 */ gotoxy(9,8); cprintf(" Exit");textcolor(15); textbackground(0);gotoxy(7,1);cprintf("%c %c File %c %c",179,17,16,179);switch(n%5)case 0:gotoxy(9,3); cprintf(" New");
37、break;case 1:gotoxy(9,4); cprintf(" Open"); break;case 2:gotoxy(9,5); cprintf(" Save "); break;case 3:gotoxy(9,6); cprintf(" Save as "); break;case 4:gotoxy(9,8); cprintf(" Exit "); break;/*/if(m%3=1) /* 畫 Edit 菜單項 */ window(28,2,38,7);textcolor(0);textbackgro
38、und(7);for(i=0;i<5;i+)gotoxy(1,1+i);insline();window(1,1,80,25);gotoxy(27,1);for(i=1;i<=5;i+)gotoxy(28,1+i);cprintf("%c",179);gotoxy(39,1+i);cprintf("%c",179);for(i=1;i<=11;i+)gotoxy(28+i,2); cprintf("%c”,196);gotoxy(28+i,7);cprintf("%c",196);textbackgroun
39、d(0);gotoxy(30,8); cprintf("");for(i=0;i<7;i+)gotoxy(40,2+i);cprintf(" ");textbackground(7);gotoxy(28,2);cprintf("%c",218);gotoxy(28,7);cprintf("%c",192);gotoxy(39,2);cprintf("%c",191);gotoxy(39,7);cprintf("%c",217);gotoxy(29,3);cprintf(
40、" Cut");gotoxy(29,4);cprintf(" Copy");gotoxy(29,5);cprintf(" Paste ");gotoxy(29,6);cprintf(" Clear ");textcolor(15);textbackground(0);gotoxy(27,1);cprintf("%c switch(n%4) %c Edit %c %c",179,17,16,179);case 0:gotoxy(29,3);cprintf("Cut");brea
41、k;case 1:gotoxy(29,4);cprintf("Copy");break;case 2:gotoxy(29,5);cprintf("Paste");break;case 3:gotoxy(29,6);cprintf("Clear");break;/*if(m%3=2)/* 畫 Help 菜單項 3*/window(48,2,48,6);textcolor(0);textbackground(7);for(i=0;i<3;i+)gotoxy(1,1+i);insline();window(1,1,80,25); go
42、toxy(47,1); for(i=1;i<=5;i+) ( gotoxy(48,1+i); cprintf("%c”,179); gotoxy(59,1+i); cprintf("%c",179); for(i=1;i<=11;i+) ( gotoxy(48+i,2); cprintf("%c”,196); gotoxy(48+i,6); cprintf("%c",196); textbackground(0); gotoxy(50,7); cprintf("");for(i=0;i<6;i+)
43、 ( gotoxy(60,2+i); cprintf(" "); textbackground(7); gotoxy(48,2);cprintf("%c",218);gotoxy(48,6);cprintf("%c",192);gotoxy(59,2);cprintf("%c",191);gotoxy(59,6);cprintf("%c",217);gotoxy(49,3);cprintf("Help.");gotoxy(49,5);cprintf("About.&
44、quot;);for(i=1;i<=10;i+) ( gotoxy(48+i,4); cprintf("%c",196); textcolor(15); textbackground(0); gotoxy(47,1); cprintf("%c %c Help %c %c",179,17,16,179); switch(n%2) (case 0:gotoxy(49,3);cprintf("Help."); break;case 1:gotoxy(49,5);cprintf("About."); break;in
45、t menuctrl(Hnode *Hhead,int A) /* 菜單控制 */ (int x,y,i,B,value,flag=100,a,b;x=wherex();if(A=F1) (y=wherey();drawmenu(0,flag);value=300; /顯示File及其子采單,并將光市顯示在第-個子菜單上*/顯示在第-if(A=F2) (個子菜單上drawmenu(1,flag);*/value=301; /顯示Edit及其子采單,并將光市顯示在第-if(A=F3) (個子菜單上drawmenu(2,flag);*/value=302; /顯示Help及其子采單,并將光市if(
46、A=F1|A=F2|A=F3)(while(B=bioskey(0)!=ESC) /* 選擇用戶按鍵 */(if(flag=0) flag=100;if(value=0) value=300; /* 此 value 為局部變量 */if(B=UP) drawmenu(value,-flag); /* 循環(huán)上下移 */if(B=DOWN) drawmenu(value,+flag); /* 循環(huán)上下移 */if(B=LEFT) /*菜單項之間循環(huán)選擇(左移)*/(flag=100;drawmain();window(2,2,79,23);textbackground(9);for(i=0;i&l
47、t;24;i+)insline();window(3,3,78,23);textcolor(10);view(Hhead);drawmenu(-value,flag);if(B=RIGHT)/*菜單項之間循環(huán)選擇(右移)*/(flag=100;drawmain();window(2,2,79,23);textbackground(9);for(i=0;i<24;i+) insline();window(3,3,78,23);textcolor(10);view(Hhead);drawmenu(+value,flag);*/if(B=ENTER) /*選中某主菜單項的子菜單項(選中某項)i
48、f(value%3=0)b=5; /*File 下有 5 個子菜單項 */if(value%3=1)b=4; /*Edit 下有 4 個子菜單項 */if(value%3=2) b=2; /*Help 下有 2 個子菜單項 */ a=(value%3)*10+flag%b;/*a 表示選擇子菜單的編號 */drawmain();window(2,2,79,23); textbackground(9); for(i=0;i<24;i+)insline(); window(3,3,78,23); textcolor(10); view(Hhead); gotoxy(x,y);if(a=0)r
49、eturn100;/*New*/if(a=1)return101;/*Open*/if(a=2)return102;/*Save*/if(a=3)return103;/*Save As*/if(a=4) exit(0); /*Exit*/if(a=10)returnCx;/*Cut*/if(a=11)returnCc;/*Copy*/if(a=12)returnCv;/*Paste*/if(a=13)returnDEL;/*Clear*/if(a=20)return 120; /*Help. */if(a=21)return 121; /*About.*/gotoxy(x+2,y+2);/*若
50、按鍵非 F1、F2、F3*/drawmain();window(2,2,79,23);textbackground(9);for(i=0;i<24;i+) insline();window(3,3,78,23);textcolor(10);view(Hhead);gotoxy(x,y); return A;/*將head所指的行單鏈表中所指的各個列單鏈表中的數(shù)據(jù)域的值寫入文件,文件路徑和文 件名由用戶指定*/void save(Hnode *head)FILE* fp;Hnode *q;node *p;int count=0,x,y;char filename10; /* 保存文件名 *
51、/q=head;clrscr();/* 清屏 */printf("Enter infile name,for example c:wb.txt:");/*輸入文件名格式 */scanf("%s",filename); /* 輸入文件名 */ fp=fopen(filename,"w");if(fp=NULL) /* 打開文件失敗*/printf("n=>open file error!n");getchar();return ;dop=q->next; /*指向node類型的數(shù)據(jù)*/while(p!=N
52、ULL)if(int)p->ch=13)fputc('n',fp);p=p->next; count+;else(fputc(p->ch, fp);p=p->next;count+;q=q->nextl;while(q!=NULL);fclose(fp); /*關(guān)閉此文件*/return ;/*文件另存為:將head所指的行單鏈表中所指的各個列單鏈表中的數(shù)據(jù)域的值寫入文件,文 件路徑和文件名由用戶指定*/void saveas(Hnode *head)(FILE* fp;Hnode *q;node *p;int count=0,x,y;char f
53、ilename10; /* 保存文件名 */q=head;clrscr();/* 清屏 */printf("Enter infile name,for example c:wb.txt:");/*輸入文件名格式 */scanf("%s",filename); /* 輸入文件名 */ fp=fopen(filename,"w");if(fp=NULL) /* 打開文件失敗*/(printf("n=>open file error!n");getchar();return ;do(p=q->next; /*
54、指向node類型的數(shù)據(jù)*/while(p!=NULL)(if(int)p->ch=13)(fputc('n',fp);p=p->next; count+; else (fputc(p->ch, fp);p=p->next;count+;q=q->nextl;while(q!=NULL);fclose(fp); /*關(guān)閉此文件*/return ;/*從任意文本文件中讀取文件內(nèi)容,保存至行單鏈表和列單鏈表形式的數(shù)據(jù)結(jié)構(gòu)中*/void opens(Hnode *Hp)FILE* fp;Hnode *q11,*q22;node *p11,*p22,*hp;
55、char temp;int count=0,flags=1;char filename10; /* 保存文件名 */clrscr();/* 清屏 */printf("Enter infile name,for example c:wb.txt:");/*輸入文件名格式 */scanf("%s",filename); /* 輸入文件名 */fp=fopen(filename,"r");/*以只讀方式打開文件,filename必須要存在*/if(fp=NULL)/*打開文件失敗*/ textbackground(2);textcolor(
56、13);cprintf("open file error!");getchar();exit(0) ;q11=Hp;while(!feof(fp) count=0;flags=1;q22=(Hnode *)malloc(sizeof(Hnode);/* 新建一個行單鏈表中的節(jié)點*/p11=(node *)malloc(sizeof(node); /* 新建一個列單鏈表中的節(jié)點 */while(temp=fgetc(fp)!=10&&count<=76&&!feof(fp)/* 循環(huán)結(jié)束,表示在單鏈表中一行處理完畢,開始新行*/ p22=
57、(node *)malloc(sizeof(node);/* 新建一個列單鏈表中的節(jié)點*/if(flags=1) hp=p22;flags=0; /*hp保存列單鏈表中的首節(jié)點的地址*/p22->ch=temp; p22->next=NULL;p11->next=p22; p11=p22;count+;if(temp=10) /*若為換行符,將其轉(zhuǎn)換為回車符,因為在程序中,是按回車符處理的*/p22=(node *)malloc(sizeof(node);p22->ch=13; p22->next=NULL;p11->next=p22; p11=p22; i
58、f(!feof(fp)/*若沒此條件,文件最后一行會處理兩次.*/(q22->next=hp;q22->nextl=NULL;/*將存儲了字符的新列單鏈表與行單鏈表中的新節(jié)點建立關(guān)聯(lián)*/q11->nextl=q22;q11=q22;fclose(fp);Hp=Hp->nextl;/*因為Hp的所在節(jié)點的數(shù)據(jù)域為空,所以 Hp=Hp->nextl*/ return ; void main()(char a;int i,A,x,y,flag=0,b;Hnode *Hhead,*q;node *p1,*p2;Hhead=(Hnode *)malloc(sizeof(Hnode); /* 為行單鏈表中首節(jié)點分配內(nèi)存空間 */ q=Hhead; Hhead->nextl=NULL;p1=p2=q->next=(node *)malloc(sizeof(node); /* 為列單鏈表中首節(jié)點分配內(nèi)存空 間*/p1->ch=13; p1->ne
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《公務(wù)員法》知識考試題庫150題(含答案)
- 2025年江蘇信息職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年新疆體育職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 貸款第三方擔(dān)保合同
- 煙霧探測器的選擇與安裝
- 農(nóng)村殘疾人就業(yè)服務(wù)鏈的構(gòu)建與運行機制研究
- 阿克蘇“冰糖心”蘋果貯藏期品質(zhì)智能檢測裝置研發(fā)
- 2025年冀少新版八年級歷史上冊階段測試試卷含答案
- 2025年人教A版必修一歷史上冊月考試卷
- 2025年粵人版七年級生物下冊階段測試試卷含答案
- 《中國心力衰竭診斷和治療指南(2024)》解讀完整版
- 《檔案管理課件》課件
- 2025年中考物理終極押題猜想(新疆卷)(全解全析)
- 抽水蓄能電站項目建設(shè)管理方案
- 電動工具培訓(xùn)課件
- 《智能網(wǎng)聯(lián)汽車智能傳感器測試與裝調(diào)》電子教案
- 固定資產(chǎn)盤點報告醫(yī)院版
- 中國內(nèi)部審計準(zhǔn)則及指南
- 腫瘤患者全程管理
- DB13(J)T145-2012建筑工程資料管理規(guī)程(上冊)
- 企業(yè)職務(wù)犯罪法制講座課件
評論
0/150
提交評論