版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 程序設計課程設計報告</p><p> 二00八 年 七 月 一 號 </p><p> 目錄 </p><p> 1……………………………………………設計目的<
2、;/p><p> 2…………………………………………設計題目和要求</p><p> 3…………………………………………總體設計</p><p> 4…………………………………………詳細設計</p><p> 5…………………………………………源程序清單和執(zhí)行結果</p><p> 6……………………………………
3、……總結</p><p><b> 1 設計目的</b></p><p> 設計一個簡單的行編輯器,了解行編輯器的應用</p><p><b> 2 設計題目和要求</b></p><p> 題目:簡單的行編輯器</p><p> 要求:1)設計一個簡單的行編輯器,
4、每行以回車結束</p><p> 2)數(shù)據(jù)以文件形式儲存</p><p> 3)編輯器具有查找 修改 刪除數(shù)據(jù)的功能</p><p><b> 3總體設計</b></p><p><b> 簡單的行編輯器</b></p><p> 刪除一行
5、 刪除一行 </p><p> 顯示一行 顯示一行</p><p> 文件存盤 文件存盤</p><p> 裝入文件 裝入文件 </p><p><b>
6、退出</b></p><p><b> 4 詳細設計</b></p><p><b> 1)結構體的應用</b></p><p> struct line{ </p><p> char text[81]; int num; /*行號*/struct line *next;
7、 /*指向下一個輸入項目的指針 */ struct line *prior; /*指向前一個項目的指針 */ </p><p> }; struct line *start; /*指向表中第一個項目的指針 */ struct line *last; /*指向表中作后一個項目的指針 */ struct line *find(int),*dls_store(struct line *); 注:在結構體中
8、分別聲明項目指針及項目中的指針變量</p><p><b> 2)函數(shù)聲明</b></p><p> void patchup(int,int),delete_text(),list(),save(char *),load(char *); menu_select(); enter(int linenum);</p><p> 注:在
9、結構體外分別對輸入、刪除、顯示等函數(shù)進行聲明 </p><p> 3)主函數(shù)和switch語句</p><p> void main(int argc,char *argv[]) {</p><p> char s[80],choice,fname[80]; // struct line *info; int linenum=1; start=NULL
10、; last=NULL; if(argc==2) load(argv[1]);/*裝入命令行上的文件 */ </p><p> do{ choice=menu_select( ); switch(choice)</p><p> { case 1:printf("\t行號:"); gets(s); linenum=atoi(s); enter(lin
11、enum); break; case 2:delete_text(); break; </p><p> case 3:list(); break; case 4:printf("\t文件名:"); gets(fname); save(fname); break; case 5:printf("\t文件名:"); gets(fname); load(
12、fname); break; case 6:exit(0); </p><p><b> } </b></p><p> }while(1); </p><p> } 注:通過主函數(shù)分別對相應函數(shù)進行調用,利用switch選擇語句來執(zhí)行語句</p><p><b> 4)菜單函數(shù)</b>
13、;</p><p> menu_select() </p><p> { char s[80]; int c; printf("\t\t1.輸入\n"); printf("\t\t2.刪除一行\(zhòng)n"); printf("\t\t3.顯示一行\(zhòng)n"); printf("\t\t4.文件存盤\n"
14、); printf("\t\t5.裝入文件\n"); printf("\t\t6.退出\n");</p><p><b> do</b></p><p> { printf("\n\n\t\t請按數(shù)字選擇:"); gets(s); c=atoi(s); }while(c<0||c>
15、6); return(c); </p><p> } 注:定義菜單顯示內容,根據(jù)菜單要求運用程序</p><p><b> 5源程序和執(zhí)行結果</b></p><p><b> 源程序:</b></p><p> #include<iostream></p>
16、<p> #include "stdio.h" #include "stdlib.h" struct line{ </p><p> char text[81]; int num; /*行號*/struct line *next; /*指向下一個輸入項目的指針 */ struct line *prior; /*指向前一個項目的指針 */ <
17、;/p><p> }; struct line *start; /*指向表中第一個項目的指針 */ struct line *last; /*指向表中作后一個項目的指針 */ struct line *find(int),*dls_store(struct line *); void patchup(int,int),delete_text(),list(),save(char *),load(char *
18、); menu_select(); enter(int linenum); void main(int argc,char *argv[]) {</p><p> char s[80],choice,fname[80]; // struct line *info; int linenum=1; start=NULL; last=NULL; if(argc==2) load(argv[1]);
19、/*裝入命令行上的文件 */ </p><p> do{ choice=menu_select( ); switch(choice)</p><p> { case 1:printf("\t行號:"); gets(s); linenum=atoi(s); enter(linenum); break; </p><p> cas
20、e 2:delete_text(); break; </p><p> case 3:list(); break; </p><p> case 4:printf("\t文件名:"); gets(fname); save(fname); break; </p><p> case 5:printf("\t文件名:&quo
21、t;); gets(fname); load(fname); break; case 6:exit(0); </p><p><b> } </b></p><p> }while(1); </p><p> } /* 顯示菜單,供用戶選擇 */ </p><p> menu_select()
22、</p><p> { char s[80]; int c; printf("\t\t1.輸入\n"); printf("\t\t2.刪除一行\(zhòng)n"); printf("\t\t3.顯示一行\(zhòng)n"); printf("\t\t4.文件存盤\n"); printf("\t\t5.裝入文件\n");
23、printf("\t\t6.退出\n");</p><p><b> do</b></p><p> { printf("\n\n\t\t請按數(shù)字選擇:"); gets(s); c=atoi(s); }while(c<0||c>6); return(c); </p><p>
24、 } /*將文本插在指定行端部 */ enter(int linenum) </p><p> { struct line *info; //char t[81]; for(;;)</p><p> { /* */ info=(struct line *)malloc(sizeof(struct line)); if(!info){ printf("\t
25、! 內存不夠!\n"); return(NULL); </p><p> } printf("%d:",linenum); gets(info->text); info->num=linenum; if(*info->text)</p><p> { if(find(linenum)) patchup(linenum,1);
26、 if(*info->text) start=dls_store(info); </p><p> } else break; linenum++; </p><p> } return(linenum); </p><p> } /*當文本內容插在文件中間時其下面的內容的行號必須增加1,而 */ /*刪除時,被刪除的文本后面的行號必
27、須減1 */ </p><p> void patchup(int n,int incr) </p><p> { struct line *i; i=find(n); while(i){ i->num=i->num+incr; i=i->next; </p><p><b> } </b></p&
28、gt;<p> } /*按行號排序后插入 */ struct line *dls_store(struct line *i) </p><p> { struct line *old,*p; if(last==NULL){ i->next=NULL; i->prior=NULL; last=i; return(i); </p><p>
29、} p=start; old=NULL; while(p){ if(p->num){ old=p; p=p->next; </p><p> } else{ if(p->prior){ p->prior->next=i; i->next=p; p->prior=i; return start; </p><p> }
30、 i->next=p; i->prior=NULL; p->prior=i; return(i); </p><p><b> } </b></p><p> } old->next=i; i->next=NULL; i->prior=old; last=i; return start; </p&g
31、t;<p> } /*刪除一行 */ void delete_text() </p><p> { struct line *info; char s[80]; int linenum; printf("\t行號:"); gets(s); linenum=atoi(s); info=find(linenum); if(info)</p>
32、<p> { if(start==info){ start=info->next; if(start) start->prior=NULL; else last=NULL; </p><p> } else{ info->prior->next=info->next; if(info!=last) info->next->prior=inf
33、o->prior; else last=info->prior; </p><p> } free(info); patchup(linenum+1,-1); </p><p><b> } </b></p><p> } /*查找一行文本 */ </p><p> struct li
34、ne *find(int linenum) </p><p> { struct line *info; info=start; while(info){ if(linenum==info->num) return(info); info=info->next; </p><p> } return(NULL); </p><p>
35、 } /*顯示文本 */ </p><p> void list() </p><p> { struct line *info; info=start; while(info){ printf("%d:%s\n",info->num,info->text); info=info->next; </p><p
36、> } printf("\n\n"); </p><p> } /*存文件 */ </p><p> void save(char *fname) </p><p> { struct line *info; char *p; FILE *fp; if((fp=fopen("text.txt",
37、"w"))==NULL){ printf("\t文件打不開!\n"); exit(0); </p><p> } printf("\t正在存入文件:\n"); info=start; while(info)</p><p> { p=info->text; while(*p) putc(*p++,fp);
38、 //putc('\r',fp); putc('\n',fp); info=info->next; </p><p> } fclose(fp); </p><p> } /*裝入文件 */ void load(char *fname) </p><p> { struct line *info,*t
39、emp; char *p; FILE *fp; //int t,size,inct; int size,inct; if((fp=fopen("text.txt","r"))==NULL){ printf("\t文件打不開!\n"); exit(0); </p><p> } while(start){ temp=start; s
40、tart=start->next; free(temp); </p><p> } printf("\n\t正裝入文件 !\n"); size=sizeof(struct line); start=(struct line*)malloc(size); if(!start){ printf("\n\t內存已經(jīng)用完!"); return; </
41、p><p><b> } </b></p><p> info=start; p=info->text; inct=1; while((*p=getc(fp))!=EOF)</p><p> { p++; while((*p=getc(fp))!='\n') p++; //getc(fp); /*丟掉
42、9;\n' */ *p='\0'; info->num=inct++; info->next=(struct line*)malloc(size); </p><p> if(!info->next)</p><p> { printf("\n\t內存已經(jīng)用完!"); return; </p>&l
43、t;p> } info->prior=temp; temp=info; info=info->next; p=info->text; </p><p> } temp->next=NULL; last=temp; free(info); start->prior=NULL; fclose(fp); </p><p><b&
44、gt; }</b></p><p><b> 執(zhí)行結果:</b></p><p><b> 6 總結</b></p><p> 我們所做的每一道程序設計題基本涵蓋了我們一學年的課程知識,而我側有些力不從心,很多地方生疏不知,大部分程序借鑒他人,這一點我還需改進,不過通過此次課程設計,我對程序設計這門課程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡單的行編輯器課程設計報告
- c++課程設計--簡單的行編輯器
- c++課程設計--簡單文本編輯器的設計
- 文本編輯器課程設計
- vb編輯器課程設計報告
- 文本編輯器課程設計報告
- java課程設計---文本編輯器
- java課程設計---文本編輯器
- java課程設計--文本編輯器
- 虛擬的java編輯器課程設計報告
- vb課程設計文本編輯器
- java課程設計(文本編輯器)
- c語言課程設計--文本編輯器
- c_文本編輯器課程設計
- 簡易文本編輯器課程設計報告
- vb課程設計報告----文本編輯器
- vb課程設計報告---文本編輯器
- 數(shù)據(jù)結構課程設計--文本編輯器
- 數(shù)據(jù)結構課程設計--文字編輯器
- 操作系統(tǒng)課程設計---文本編輯器
評論
0/150
提交評論