




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計報告課程設計題目:文章編輯 專 業(yè):信息工程班 級: 1720601學生姓名 : 指導教師 : 、實驗目的及要求:任務:輸入一頁文字,程序可以統(tǒng)計出文字、數字、空格的個數。靜態(tài)存儲一頁文章,每行最多不超過80個字符,共N行; 要求:(1)分別統(tǒng)計出其中英文字母數和空格數及整篇文章總字數; (2)統(tǒng)計某一字符串在文章中出現(xiàn)的次數,并輸出該次數; (3)刪除某一子串,并將后面的字符前移。存儲結構使用線性表,分別用幾個子函數實現(xiàn)相應的功能;輸入數據的形式和范圍:可以輸入大寫、小寫的英文字母、任何數字及標點符號。 輸出形式:(1)分行輸出用戶輸入的各行字符; (2)分4行輸出"全部字
2、母數"、"數字個數"、"空格個數"、"文章總字數"(3) 輸出刪除某一字符串后的文章;實驗時間、地點: 2013.6.16至6.20于軟件樓301一、概要設計(實驗思路)1.問題分析本程序是對一段英文文章的內容進行處理,存儲方式采用鏈式存儲。對于文本的輸入,采用頭插法將文本信息存儲到鏈表已申請好的存儲空間中,在此部分設計中最大的問題在于輸入文章過程中輸入的字符數大于80時如何換行;對于文本內容的統(tǒng)計,使用循環(huán)對已存儲的文章進行匹配,字母數、空格數、數字數直接通過比較即可得到;對于文本內容的處理,查找部分仍是使用循環(huán)對已存儲的
3、文章進行匹配,判斷需要查找的字符或者字符串是否與文章中某部分內容相同,如果存在相同的記錄相同的個數及位置并輸出個數及位置。刪除部分先使用程序的查找功能對文章中需要刪除的字符或者字符串進行查找,然后對其進行刪除。2. 數據結構選擇本程序是對輸入的文字進行操作,故使用的數據結構為單鏈表操作。根據第一部分的問題分析有該鏈表操作有3部分:另有全局變量 *head,作為文章的頭指針。創(chuàng)建結構體: typedef struct list char data80;/記錄一行字符int length;/記錄一行字符長度 struct _list *next;/后繼指針struct _list *pre;/前趨
4、指針int row;/記錄整篇文章的行數LinkList;在文章內容創(chuàng)建部分中使用線性表的鏈式存儲,并使用全局變量對文本的各種信息進行存儲;文章的讀取、內容統(tǒng)計、刪除、查找都采用鏈表操作完成。3.流程圖(1)主框架:(2)文章內容統(tǒng)計子菜單(3) 文章內容處理子菜單文章內容處理子菜單SearchWord()函數實現(xiàn)查找DeleteWord()函數內容刪除Printword()顯示當前內容返回主菜單退出程序(4)使用函數列表及關系圖函數名:1、CreatWord() 文本輸入函數,對文本的內容進行輸入2、PrintWord() 當前文本內容輸出函數,將當前存儲在鏈表中的文本內容輸出5、Count
5、Word() 文章內容統(tǒng)計函數,對存儲在鏈表中文本內容進行統(tǒng)計6、SearchWord() 文章內容查找函數7、DeleteWord() 文章內容刪除函數8、Bmenu() 文本內容處理菜單函數9、AboutWord() 顯示作者信息的函數10、menu() 主菜單函數11、main() 主函數關系圖:二、詳細設計(實驗過程)1、數據結構定義typedef struct list char data80;/*記錄一行字符*/ int length;/*記錄一行字符長度*/ struct list *next;/*后繼指針*/ struct list *pre;/*前趨指針*/ int row;
6、/*記錄整篇文章的行數*/LinkList;2、全局變量定義LinkList *head;/*定義全局變量*head,文章首行頭指針*/int NUM,C,N;/*定義全局變量,Num用來記錄行號,C用來記錄子串在主串中出現(xiàn)的總次數*/3、函數說明(1)CreatWord() 文本創(chuàng)建函數LinkList *CreatWord() LinkList *temp; char ch; int i,j; head->next=(LinkList *)malloc(sizeof(LinkList); / head->pre=NULL; temp=head->next; / temp-
7、>pre=NULL; temp->length=0; for(i=0;i<80;i+) temp->datai='0'printf("tt*n");printf("tt* 創(chuàng)建文本 *n");printf("tt*n");printf("tt請輸入文章(輸入#號結束):nn");for(j=0;j<Link_Size;j+)for(i=0;i<80;i+)ch=getchar();temp->datai=ch;temp->length+;if(ch=&
8、#39;#')NUM=j;break;if(ch='#')temp->length=i;temp->next=NULL;break;temp->next=(LinkList *)malloc(sizeof(LinkList) ;temp->next->pre=temp;temp=temp->next;for(i=0;i<80;i+)temp->datai='0'temp->row=NUM+1;system("cls");return (temp);說明:a、 定義LinkList指
9、針變量*temp: LinkList *temp;b、 定義文本輸入變量ch,記錄文本行數變量j,記錄每行字符數變量i;c、 申請動態(tài)存儲空間:head->next=(LinkList *)malloc(sizeof(LinkList);d、 首行頭指針的前驅指針為空:head->pre=NULL;首行指針: temp=head->next;首行指針的前驅指針也為空: temp->pre=NULL;定義沒輸入字符時文章長度為0: temp->length=0;初始化為字符串結束標志,防止出現(xiàn)亂碼: for(i=0;i<80;i+) temp->data
10、i='0'e、 利用循環(huán)進行文本輸入for(j=0;j<LINK_INIT_SIZE;j+)/ 控制一頁 for(i=0;i<80;i+) /控制一行 ch=getchar(); /接收輸入字符 temp->datai=ch; /給temp指向的行賦值···· temp->length+;/行中字符長度加1 if(ch='#') NUM=j; break; /文章結束時,Num來記錄整個文章的行數 在字符輸入的過程中,如果在單行輸入的字符超過了80個字符,則需要以下操作 :輸入字符數大于80,重新分
11、配空間建立下一行:temp->next=(LinkList *)malloc(sizeof(LinkList) ;給temp的前驅指針賦值:temp->next->pre=temp;temp指向當前行: temp=temp->next;將下一行初始化為字符串結束標志,防止出現(xiàn)亂碼:for(i=0;i<80;i+) temp->datai='0'記錄整個文章的行數:temp->row=NUM+1;返回指向最后一行指針:return temp;文本輸入部分到此結束。(2)PrintWord() 文章顯示函數void PrintWord()i
12、nt i,j;LinkList *p;p=head->next;system("cls");printf("n");printf("tt*n");printf("tt* 文本顯示 *n");printf("tt*n");printf("n當前文章的內容是:n");for(j=0;j<=NUM&&p!=NULL;j+)for(i=0;(i<80)&&(p->datai)!='#'i+)printf(&quo
13、t;%c",p->datai);p=p->next;說明:a、 定義文本行數變量j,每行字符數i:int i,j;b、 定義指針變量:LinkList *p;c、 將指針p指向鏈表表頭:p=head->next;d、 利用循環(huán)輸出鏈表中信息: for(j=0;j<=NUM&&p!=NULL;j+)=for(i=0;(i<80)&&(p->datai)!='#'i+)=printf("%c",p->datai);p=p->next; 文本顯示部分到此結束。(3)Count
14、Word() 文章內容統(tǒng)計函數void CountWord()LinkList *temp;char ch;int i,j,t;int WORD=0,word=0,space=0,num=0,sum=0;temp=head->next;for(j=0;j<=NUM;j+)for(i=0;(i<80)&&(temp->datai)!='#'i+)ch=temp->datai;if(ch>='A')&&(ch<='Z')WORD+;else if(ch>='a
15、39;)&&(ch<='z')word+;else if(ch>='0')&&(ch<='9')num+;else if(ch=' ')space+;sum=WORD+word+num;while(1)printf("n");printf("n");printf("n");printf("tt*n");printf("tt* 文章內容統(tǒng)計子菜單 *n");printf("t
16、t*n"); printf("tt* 文章中 字母 的個數: %d n",WORD+word);printf("tt* 文章中 數字 的個數: %d n",num);printf("tt* 文章中 空格 的個數: %d n",space);printf("tt* 文章中 所有字 的個數: %d n",sum);printf("tt* 1、退出返回主菜單 *n");printf("tt* 2、直接退出本系統(tǒng) *n");printf("tt*n");
17、printf("tt請選擇:");scanf("%d",&t);if(t=1)system("cls");break;else if(t=2)exit(0);else printf("tt 對不起,無此功能!請回車重新選擇!.n");printf("tt");fflush(stdin);getchar();說明:a、 定義指針變量temp:LinkList *temp;b、 定義記錄文本行數變量j,每行字符數i;c、 定義記錄文本大寫字母數、小寫字母數、空格數、數字數和總字數的變量:in
18、t WORD=0,word=0,space=0,num=0,sum=0;d、 將指針temp指向鏈表表頭:temp=head->next;利用循環(huán)對鏈表中信息進行匹配判斷,將大寫字母數、小寫字母數、空格數、數字數和總字數統(tǒng)計出來:for(j=0;j<=NUM;j+)for(i=0;(i<80)&&(temp->datai)!='#'i+)ch=temp->datai;if(ch>='A')&&(ch<='Z')WORD+;else if(ch>='a'
19、)&&(ch<='z')word+;else if(ch>='0')&&(ch<='9')num+;else if(ch=' ')space+;sum=WORD+word+num;e、 本程序對統(tǒng)計項目設計了菜單。菜單的編寫使用 while語句進行循環(huán)操作。文本內容統(tǒng)計部分到此結束。(4)SearchWord() 文章內容查找函數void SearchWord(char *str1,LinkList* temp) char Data20 ; int i,j,k=0,sum=0;in
20、t l=1; temp=head->next; strcpy(Data,str1); for(i=0;i<=NUM;i+) for(j=0;j<80;j+) if(temp->dataj)=Datak) k+; else if(Datak!='0')j=j-k;k=0; if(Datak='0') sum+;j=j-k+1;printf("ttt第%d次出現(xiàn)在第%d行第%d列n",l,i+1,j);l+;k=0;continue; temp=temp->next; printf("nttt字符串總共出現(xiàn)
21、次數為:%dnn",sum); C=sum;N=i*80+j;說明:a、 定義一個數組,用來記錄需要查找的字符內容:char Data20;b、 定義定義文本行數變量j,每行字符數i,記錄字符出現(xiàn)的次數變量:int i,j,m=0.,sum=0;c、 對形參中定義的指針變量進行操作,使其指向鏈表表頭:temp=head->next;d、 使用拷貝函數,將形參中str1的值賦給Data:strcpy(Data,str1);e、 利用循環(huán)進行查找操作:for(i=0;i<=NUM;i+) /*利用循環(huán)進行查找操作*/ for(j=0;j<80;j+) if(temp-&
22、gt;dataj)=Datak) k+;/*將輸入的查找字符與鏈表中信息比較,找到第一個相同的字符*/ else if(Datak!='0')j=j-k;/*從主串第j-k個位置重新查找*/k=0; if(Datak='0') sum+;/*此字符出現(xiàn)的次數加1*/j=j-k+1;/*j記錄下該字符串出現(xiàn)的位置*/printf("ttt第%d次出現(xiàn)在第%d行第%d列n",l,i+1,j);l+;k=0;continue; temp=temp->next;/*指向下一行*/ 文本內容查找部分到此結束。(5)DeleteWord() 文章內
23、容刪除函數void DeleteWord(char *str2) char Data20; LinkList *temp,*term; int i,j,a,k,m,y,num; strcpy(Data,str2); for(y=0;y<C;y+) num=80;k=0,m=0; temp=head; for(i=0;i<=NUM;i+) term=temp; temp=temp->next; for(j=0;j<80;j+) if(temp->dataj)=Datak) k+; else if(Datak!='0') j=j-k;k=0; if(D
24、atak='0') num=j;break; if(num<80) break; for(;i<=NUM;i+) for(;j<80;j+) if(j+1<k) term->data80-k+num=temp->dataj+1; elsetemp->dataj-k+1=temp->dataj+1; term=temp; temp=temp->next; j=0; 說明:a、定義一個數組用來存儲需要刪除的字符或者字符串:char Data20;b、定義指針變量:LinkList *temp,*term;c、定義整形變量用來控制
25、行數、字符數:int i,j,k,m,y,num;d、使用拷貝函數講形參中需要刪除的字符或字符串賦值給已定義的數組:strcpy(Data,str2);f、 使用循環(huán)進行刪除操作:for(y=0;y<C;y+) num=80;k=0,m=0; temp=head; for(i=0;i<=NUM;i+)/*使用循環(huán)進行刪除操作*/ term=temp; temp=temp->next; for(j=0;j<80;j+) if(temp->dataj)=Datak) k+; else if(Datak!='0') j=j-k;k=0; if(Datak
26、='0') num=j;break; if(num<80) break; /*首先是使用循環(huán)查找到需要刪除字符或者字符串的字符數以及字符或者字符串的位置,以便于刪除*/for(;i<=NUM;i+) for(;j<80;j+) if(j+1<k) term->data80-k+num=temp->dataj+1;/*刪除的字符串不在最后一行,將下一行的字符(由temp指向)前移到前行*/ elsetemp->dataj-k+1=temp->dataj+1;/*當要刪除的字符串在最后一行只要將最后一行的字符前移*/ term=tem
27、p; temp=temp->next;/*在使用循環(huán),從查找到的字符或者字符串開始進行刪除,在一行刪除完畢之后,轉至下一行進行刪除*/ j=0; 文本內容刪除部分到此完成。(6)Bmenu() 文章內容處理菜單函數void Bmenu(LinkList *temp) char str120;char str220;int t;do /*利用do while 循環(huán)來控制主菜單顯示*/ printf("n");printf("ntt*n");printf("tt* 文章內容處理子菜單 *n");printf("tt*n&q
28、uot;);printf("tt* 1、查找文章中的字符或者字符串 *n");printf("tt* 2、刪除文章中的字符或者字符串 *n");printf("tt* 3、顯示當前文章內容 *n");printf("tt* 4、返回主菜單 *n");printf("tt* 5、直接退出系統(tǒng) *n");printf("tt*n");printf("tt 請選擇:");scanf("%d",&t);if(t>5)|(t<
29、1) printf("tt 對不起,無此功能!請回車重新選擇!.n");printf("tt");fflush(stdin);getchar();elseswitch(t)case 1: system("cls"); printf("n");printf("ntt*n");printf("tt* 文章內容處理子菜單 *n");printf("tt*n");printf("nttt請輸入您需要查找的字符或字符串:");getchar();
30、gets(str1);printf("n");SearchWord(str1,temp);printf("ntt按回車鍵繼續(xù)·····");getchar();getchar();system("cls");break;case 2:system("cls"); printf("n");printf("ntt*n");printf("tt* 文章內容處理子菜單 *n");printf("tt*n&
31、quot;);printf("nttt請輸入您需要刪除的字符或字符串:");getchar();gets(str2);printf("n");SearchWord(str2,temp);DeleteWord(str2);printf("ttt刪除 %s 后的文章為:",str2);PrintWord();printf("ntt按回車鍵繼續(xù)·····");getchar();getchar();system("cls");break;case 3:
32、system("cls"); printf("nntt*n");printf("tt* 文章內容處理子菜單 *n");printf("tt*n");PrintWord();printf("nntt按回車鍵繼續(xù)·····");getchar();getchar();system("cls");break;if(t=4) system("cls"); break;if(t=5) exit(0); while(1
33、); 說明:用do-while 語句來制作文章內容處理菜單,用switch 語句來選擇實現(xiàn)功能。(7)AboutWord() 相關性息void AboutWord()printf("nnnnnnnn"); printf("t*n");printf("t* 本系統(tǒng)由 chevis 制作 部分功能則是仿照其他程序 能力有限 *n");printf("t* 謝謝使用! *n"); printf("t*n");printf("n");(8)menu() 主菜單void menu()i
34、nt t;LinkList *temp;doprintf("n");printf("n");printf("n");printf("tt*n");printf("tt* 簡單的文章編輯器 *n"); printf("tt*n");printf("tt* 主菜單 *n");printf("tt*n");printf("tt* 1、文章內容輸入 *n");printf("tt* 2、顯示當前文章內容 *n&qu
35、ot;);printf("tt* 3、文章內容統(tǒng)計子菜單 *n");printf("tt* 4、文章內容處理子菜單 *n");printf("tt* 5、程序相關 *n");printf("tt* 6、退出文章編輯器 *n");printf("tt*n");printf("tt! 注:第一次運行本程序時請選擇1功能進行輸入 !n");printf("tt*n");printf(" tt請輸入相應數字:");scanf("%d&
36、quot;,&t);if(t>6)|(t<1) printf("tt 對不起,無此功能!請回車重新選擇!.n");printf("tt");fflush(stdin);getchar();elseswitch(t) case 1: system("cls"); printf("n");temp=CreatWord();break; case 2: system("cls"); PrintWord();printf("n");printf("n&q
37、uot;);printf("ntt按回車鍵繼續(xù)·····");getchar();getchar();system("cls");break;case 3:system("cls");CountWord();break;case 4: system("cls"); Bmenu(temp);break;case 5:system("cls"); AboutWord();printf("ntt按回車鍵繼續(xù)···
38、··");getchar();getchar();system("cls");break;if(t=6) break;while(1);說明:用do-while 語句來制作文章內容處理菜單,用switch 語句來選擇實現(xiàn)功能。(9)main() 主函數void main()head=(LinkList *)malloc(sizeof(LinkList);menu();說明:/*先為head申請存儲空間,然后創(chuàng)建指針變量temp,然后直接在主菜單函數中進行其他操作*/三、上機調試上機調試過程中遇到的問題及解決方法:a)由于本程序的操作大部分都為經常使用的查找、刪除,基本的算法及代碼都可以通過查找資料得到,故沒有出現(xiàn)多大的問題。錯誤主要是在于刪除等子函數中復雜操作過程中出現(xiàn)的小問題。b)刪除及查找過程中需要在子函數中定義一個數組變量,用來存儲輸入的信息,然后用來與鏈表中的信息進行比較以達到刪除或者查找。另為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東菏澤服務活動方案
- 小孩長高活動方案
- 工作在前活動方案
- 就業(yè)分享沙龍活動方案
- 崆峒策劃活動方案
- 小學課外早讀活動方案
- 工會親子互動活動方案
- 幫扶門店開展活動方案
- 常州團日活動方案
- 小班下午美工活動方案
- 江西省九江市外國語學校2025屆英語八下期末學業(yè)質量監(jiān)測試題含答案
- 2025攝影服務合同模板
- 2025年全國統(tǒng)一高考語文試卷(全國一卷)含答案
- 2025年福建省高中自主招生模擬數學試卷試題(含答案)
- 2025年中考一模卷(貴州)英語試題含答案解析
- 餐飲運營餐飲管理流程考核試題及答案在2025年
- T/ISEAA 006-2024大模型系統(tǒng)安全測評要求
- 2025龍巖市上杭縣藍溪鎮(zhèn)社區(qū)工作者考試真題
- 礦山股東協(xié)議書
- 小學一年級語文下冊語文看拼音寫詞語全冊
- 暑假社會實踐安全教育
評論
0/150
提交評論