程序設(shè)計報告_第1頁
程序設(shè)計報告_第2頁
程序設(shè)計報告_第3頁
程序設(shè)計報告_第4頁
程序設(shè)計報告_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

-文件編輯器評分細則評分項優(yōu)秀良好中等差遵守機房規(guī)章制度上機時的表現(xiàn)學(xué)習(xí)態(tài)度程序準(zhǔn)備情況程序設(shè)計能力團隊合作精神課題功能實現(xiàn)情況算法設(shè)計合理性用戶界面設(shè)計報告書寫認真程度內(nèi)容詳實程度文字表達熟練程度回答問題準(zhǔn)確度簡短評語教師簽名:年月日評分等級備注評分等級有五種:優(yōu)秀、良好、中等、及格、不及格文件編輯器課題內(nèi)容和要求:該系統(tǒng)要求對一個文本文件中的內(nèi)容進行各種常規(guī)操作,如:插入、刪除、查找、替換、排序等功能。通過此課題,熟練掌握文本文件的操作及用字符數(shù)組或字符指針實現(xiàn)字符串操作的功能。文檔編輯器標(biāo)準(zhǔn)化文檔編輯器標(biāo)準(zhǔn)化統(tǒng)計查找抽取排序保存替換功能框架圖:(見圖2-1)圖2-1提供可操作的主菜單:輸出個菜單,用于顯示以從文件中加載的文檔信息和若干個可選的功能選項。根據(jù)用戶輸入的選項來運行不同的功能,運行不同的函數(shù)。進行文本信息的載入:從指定的文件中加載文檔。這里的文件是在編譯時就已經(jīng)指定好的、存在的文本,需設(shè)計者預(yù)先自己建立好。文件標(biāo)準(zhǔn)化處理功能:如果句子有前導(dǎo)空格和后導(dǎo)空格,則刪除這些空格,單詞與單詞之間只保留一個空格。統(tǒng)計功能:可方便地統(tǒng)計出文檔中所有出現(xiàn)次數(shù)最多和最少的單詞。查找與替換功能:能夠查找任意一個字符串在文檔中出現(xiàn)的次數(shù),并可以選擇全部或有選擇地將其替換為另一個字符串。顯示功能:編輯完成后可以顯示編輯后的文檔。抽取功能:重復(fù)單詞只保留一份拷貝,單獨存于另一個文件中。排序功能:按單詞的長度由小到大排序,按單詞出現(xiàn)的頻率由小到大排序。保存功能:將單詞和非單詞分別用不同的文件存儲。三、概要設(shè)計1)主要結(jié)構(gòu)體:structWord{ intlength;//單詞長度 intt;//單詞頻率 charstr[N];};typedefstructWordWord;2)主要函數(shù)流程圖:(1)錄入函數(shù):用于統(tǒng)計文章單詞數(shù)并計算單詞的長度。(見圖3-1)圖3-1(2)文件標(biāo)準(zhǔn)化處理功能函數(shù):如果句子有前導(dǎo)空格和后導(dǎo)空格,則刪除這些空格,單詞與單詞之間只保留一個空格。(見圖3-2)(3)統(tǒng)計功能函數(shù):可方便地統(tǒng)計出文檔中所有出現(xiàn)次數(shù)最多和最少的單詞。(見圖3-3)圖3-3圖3-4查找功能函數(shù):能夠查找任意一個字符串在文檔中出現(xiàn)的次數(shù)(見圖3-4)替換功能函數(shù):可以選擇全部或有選擇地將其替換為另一個字符串。(見圖3-5)(6)抽取功能函數(shù):重復(fù)單詞只保留一份拷貝,單獨存于另一個文件中。(見圖3-6)圖3-5(7)排序功能函數(shù):按單詞的長度由小到大排序,按單詞出現(xiàn)的頻率由小到大排序。(見圖3-7)(圖3-7) (8)保存功能函數(shù):將單詞和非單詞分別用不同的文件存儲。(見圖3-8)圖3-9圖3-10源程序代碼#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#defineN10#defineS200#defineMAXSIZE10000charBuffer[MAXSIZE],Buffer2[MAXSIZE],SSH[MAXSIZE];FILE*fp;structWord{ intlength; intt; charstr[N];};typedefstructWordWord;char*Sta();voidmenu();voidPrint(char*p);intLuru(char*p1,Word*p2);intequal(Word*p,intn);voidSum(Word*p,intn);voidSelect(Word*p,intn);voidChose(char*p);voidChose1(char*p);voidChose2(char*p);voidSort(Word*p,intn);voidChouqu(Word*p,intn);intTongji(Word*p,char*q,intn);intCountSubstr(constchar*str1,constchar*str2);voidfsort(Word*p,intn);voidSavetofile(char*p);intmain(){system("colorF0"); inti,k,n; charch; Wordp[200];char*file=(char*)malloc(sizeof(char)*MAXSIZE);printf("歡迎您使用文本文檔編輯器,請輸入要打開的文件名(含路徑):\n");gets(file);if(!(fp=fopen(file,"r+"))) { do { puts("對不起,打開文件失敗!請重新輸入要打開的文件名(含路徑):"); gets(file); }while(!(fp=fopen(file,"r+"))); } for(i=0;(ch=fgetc(fp))!=EOF;i++) //文件全賦值給buffer2 Buffer2[i]=ch; Buffer2[i]='\0'; printf("原文件為:\n"); for(i=0;(ch=Buffer2[i])!='\0';i++) putchar(ch); Sta(); n=Luru(Buffer,p); for(i=0;i<n;i++) p[i].t=Tongji(p,p[i].str,n); system("pause"); do { system("cls"); for(i=0;(ch=Buffer2[i])!='\0';i++) putchar(ch); menu(); printf("請選擇您要執(zhí)行的操作(1~8):"); scanf("%d",&k); switch(k) { case1:Print(Buffer);break; case2:Sum(p,n);break; case3:Select(p,n);break; case4:Chose(Buffer);break; case5:Chouqu(p,n);break; case6:Sort(p,n);break; case7:fsort(p,n);break; case8:Savetofile(Buffer);break; case9:break; default: printf("Errorinput,請重新輸入。\n"); } if(k!=9) system("pause"); }while(k!=9); free(file); fclose(fp); printf("歡迎再次進行文檔編輯!\n"); system("pause"); return0;}voidmenu(){ printf("\n文本文件處理主菜單\n"); printf("

◆"); printf("|①.文件標(biāo)準(zhǔn)化處理。|"); printf("|②.統(tǒng)計出現(xiàn)最多和最少的單詞。|"); printf("|③.查找某個單詞。|"); printf("|④.替換某個單詞。|"); printf("|⑤.抽取單詞并拷貝。|"); printf("|⑥.按單詞長度排序。|"); printf("|⑦.按單詞頻率排序。|"); printf("|⑧.保存到文件。|"); printf("|⑨.退出。|"); printf("◆

");}char*Sta(){ inti=0,j=0,k=0; //k判斷是不是第1個空格,k=0,是第一個空格;k=1,不是第一個空格 while(Buffer2[i]!='\0') { if(Buffer2[i]=='') { if(i==0) { i++; continue; } if(k==0) { Buffer[j]=Buffer2[i]; j++; k=1; } } else { Buffer[j]=Buffer2[i]; j++; k=0; } i++; } Buffer[j]='\0'; returnBuffer;}voidPrint(char*p){ inti; charch;FILE*fp4; fp4=fopen("Biaozhun.txt","w"); if(!fp4) { printf("Cannotcreateafile.\n"); exit(0); } for(i=0;(ch=p[i])!='\0';i++) putchar(ch); printf("\n");printf("標(biāo)準(zhǔn)化后的內(nèi)容已保存至biaozhun.txt中\(zhòng)n"); fprintf(fp4,"%s",p); fclose(fp4);}voidSelect(Word*p,intn){ intt,count=0; charstr[50]; printf("請輸入想要查找的字符串:\n"); scanf("%s",str); t=strlen(str); count=Tongji(p,str,n); printf("共有%d個\n\n",count);}voidChose(char*p){ intchose; printf("所擁有的模式:\n"); printf("1.全部替換\n"); printf("2.逐個替換\n"); printf("請選擇你所需要的模式:"); scanf("%d",&chose); switch(chose) { case1:Chose1(p);break; case2:Chose2(p);break; default:printf("對不起,你的輸入有誤。\n"); }}voidChose1(char*p){ charstr[50],str2[50]; inti,j,x=0,z,m,n,flag; FILE*fp3; fp3=fopen("Replace.txt","w"); if(!fp3) { printf("Cannotcreateafile.\n"); exit(1); } printf("請輸入想要替換掉的詞:\n"); scanf("%s",str); printf("替換成什么?\n"); scanf("%s",str2); m=strlen(p); n=strlen(str); z=strlen(str2); if(m==0||n==0||n>m) { printf("Cannotfind.\n"); return; } for(i=0;i<=(m-n);i++) { flag=1; for(j=0;j<n;j++) { if(p[i+j]!=str[j]) { flag=0; break; } } if(flag==1) { for(j=0;j<z;j++) SSH[x++]=str2[j]; i+=n-1; } else SSH[x++]=p[i]; } for(;i<m+1;i++) SSH[x++]=p[i]; printf("替換后的內(nèi)容為:\n%s\n該內(nèi)容已保存至Replace.txt中\(zhòng)n",SSH); fprintf(fp3,"%s",SSH); fclose(fp3); return;}voidChose2(char*p){ inti,j,k=0,cnt=0,n1,n2,n3,flag,m,chose,x=0; charstr[50],str2[50]; FILE*fp3; fp3=fopen("Replace.txt","w"); if(!fp3) { printf("Cannotcreateafile.\n"); exit(1); } printf("請輸入你所要替換的詞:\n"); scanf("%s",str); printf("替換成什么?\n"); scanf("%s",str2); n1=strlen(str); n2=strlen(str2); n3=strlen(p); for(i=0;i<=n3-n1;i++) { flag=1; for(j=0;j<n1;j++) if(p[i+j]!=str[j]) { flag=0; break; } cnt+=flag; } if(cnt==0) { printf("Cannotfind.\n"); return; } printf("全文一共發(fā)現(xiàn)了%d個%s單詞。\n",cnt,str); for(i=0;i<=n3-n1;i++) { flag=1; for(j=0;j<n1;j++) if(p[i+j]!=str[j]) { flag=0; break; } if(flag==1) { k++; printf("第%d處:\n",k); for(m=(i-15>0?(i-15):0);m<i;m++) putchar(p[m]); printf("\n--------"); for(;m<n1+i;m++) putchar(p[m]); printf("--------thisonetochange!\n"); for(;m<(n1+i+15<n3?(n1+i+15):n3);m++) putchar(p[m]); printf("\n是否替換?(1為替換,0為不換)\n"); scanf("%d",&chose); if(chose==1) { for(j=0;j<n2;j++) SSH[x++]=str2[j]; i+=n1-1; } elseif(chose==0) { SSH[x++]=p[i]; } else { printf("對不起,您的輸入有誤,沒有替換。\n"); SSH[x++]=p[i]; } } else SSH[x++]=p[i]; } for(;i<m+1;i++) SSH[x++]=p[i]; printf("替換后的內(nèi)容為:\n%s\n該內(nèi)容已保存至Replace.txt中\(zhòng)n",SSH); fprintf(fp3,"%s",SSH); fclose(fp3);}intequal(Word*p,intn){ inti; for(i=0;i<n;i++) if(strcmp(p[i].str,p[n].str)==0) return0; return1;}voidSum(Word*p,intn){ inti=0,j,max,min; char*q1,*q2; max=min=p[0].t; q1=q2=p[0].str; for(i=1;i<n;i++) { if(max<p[i].t) { max=p[i].t; q1=p[i].str; } if(min>p[i].t) { min=p[i].t; q2=p[i].str; } } if(max==1) printf("均只出現(xiàn)一次!\n"); else { printf("出現(xiàn)最少的單詞(出現(xiàn)了1次):\n"); for(j=0;j<n;j++) if(p[j].t==1) printf("%s",p[j].str);printf("\n"); printf("出現(xiàn)最多的單詞(出現(xiàn)了%d次):\n",max); for(j=0;j<n;j++) { if(p[j].t==max&&equal(p,j)==1) { printf("%s",p[j].str); } }printf("\n"); }}intLuru(char*p1,Word*p2){ inti=0,j=0,m; for(m=0;p1[m]!='\0';m++){ if(p1[m]==''||p1[m]==','||p1[m]=='.'||p1[m]=='\n') { p2[i].str[j]='\0'; i++; j=0; } elseif(p1[m]<='z'&&p1[m]>='a'||p1[m]<='Z'&&p1[m]>='A') { if(p1[m]>='A'&&p1[m]<='Z') p2[i].str[j++]=p1[m]; else p2[i].str[j++]=p1[m]; p2[i].length=j; } } if(p1[m]=='\0') p2[i].str[j]=p1[m]; returni+1;}voidSort(Word*p,intn){ inti,j,min; Wordtemp; for(i=0;i<n-1;i++) { min=i; for(j=i+1;j<n;j++) if(p[j].length<p[min].length) min=j; if(min!=i) { temp=p[i]; p[i]=p[min]; p[min]=temp; } } for(i=0;i<n;i++) printf("%s",p[i].str);}intCountSubstr(constchar*str1,constchar*str2){ char*cp; char*s1,*s2;intcount=0; if(!*str2) return0; cp=(char*)str1; while(*cp) { s1=cp; s2=(char*)str2; while(*s1&&*s2&&!(*s1-*s2)) ++s1,++s2; if(!*s2) ++count; ++cp; } returncount;}voidChouqu(Word*p,intn){ inti,j=0; FILE*fp5=fopen("Chouqu.txt","w"); if(fp5==NULL) { printf("Cannotopenfile!"); exit(0); } for(i=0;i<n;i++) { if(p[i].t==1) { fputs(p[i].str,fp5); fputc('',fp5); } else { for(j=0,p[i].t=0;j<i;j++) p[i].t+=CountSubstr(p[j].str,p[i].str); if(!p[i].t) {fputs(p[i].str,fp5); fputc('',fp5); } } } fclose(fp5); printf("文件存入chouqu.txt中!\n");}intTongji(Word*p,char*q,intn){ inti,m,t,count=0; t=strlen(q); for(i=0;i<n;i++) { if(t==p[i].length) { for(m=0;m<t;m++) { if(p[i].str[m]==q[m]) continue; else break; } if(m==t) count++; } } returncount;}voidfsort(Word*p,intn){ inti,j,min; Wordtemp; for(i=0;i<n-1;i++) { min=i; for(j=i+1;j<n;j++) if(p[j].t<p[min].t) min=j; if(min!=i) { temp=p[i]; p[i]=p[min]; p[min]=temp; } } for(i=0;i<n;i++) printf("%s",p[i].str);}voidSavetofile(char*p){ FILE*fp6,*fp7; inti,j,n,n1=0,n2=0; fp6=fopen("word.txt","w"); fp7=fopen("number.txt","w"); if((!fp6)||(!fp7)) { printf("Cannotopenfile!"); exit(0); } n=strlen(p); j=0; for(i=0;i<n;i++) { if((p[i]>='A'&&p[i]<='Z')||(p[i]>='a'&&p[i]<='z')) { if(j==2||(j==0&&n1>0)) fputc('',fp6); fputc(p[i],fp6); j=1; n1++; } elseif(p[i]>='0'&&p[i]<='9') { if(j==1||(j==0&&n2>0)) fputc('',fp7); fputc(p[i],fp7); j=2; n2++; } else j=0; } fclose(fp6); fclose(fp7); printf("文件已保存在word.txt與number.txt中。\n");}五、測試數(shù)據(jù)及其結(jié)果分析顯示的主菜單界面:

◆|①.文件標(biāo)準(zhǔn)化處理。||②.統(tǒng)計出現(xiàn)最多和最少的單詞。||③.查找某個單詞。||④.替換某個單詞。||⑤.抽取單詞并拷貝。||⑥.按單詞長度排序。||⑦.按單詞頻率排序。||⑧.保存到文件。||⑨.退出。|◆

測試文檔內(nèi)容:ASundayschoolteacherwastellingherpupilstheimportanceofmakingothersglad."Now,children,"saidshe,"hasanyoneofyouevermakesomeoneelseglad?""Please,teacher,"saidasmallboy,"I'vemakesomeonegladyesterday.""Welldone.Whowasthat?""Mygrandma""Goodboy.Nowtellushowyoumadeyourgrandmotherglad.""Please,teacher,Iwenttoseeheryesterday,andstayedwithherthreehours.ThenIsaidtoher,'Granny,I'mgoinghome,'andshesaid,'Well,I'mglad'!"hellohellohellohellohello1)文件標(biāo)準(zhǔn)化處理測試:輸入:1輸出:標(biāo)準(zhǔn)化后的內(nèi)容已保存至biaozhun.txt請按任意鍵繼續(xù)2)統(tǒng)計出現(xiàn)最多和最少的單詞測試:輸入:2輸出:確認位置,請輸入所要尋找的客戶名稱:輸入:moto輸出:請依次輸入:客戶帳單編碼,客戶名稱,市話費用,長話費用,本地區(qū)名稱,營業(yè)區(qū)名稱輸入:11wzy1111121212nanjinghaimen輸出:操作已完成,請繼續(xù)操作3)客戶排序測試:輸入:7輸出:操作已完成,請繼續(xù)操作輸入:9輸出:菜單:總客戶信息:1moto3100010200nanjingyuhua2huawei2000013020nanjinggulou3datang2501012030suqiansuyang4zhongxin2000088150nanjingyuhua5weidian7053055000suqiansihong6julong2000033000nanjingxuanwu7lianchuang2000033000nanjinggulou8sohu4000072000nantonghaian9yiruan5000040030nanjinggulou10sina3400021000nantonghaimen11wzy1111121212nanjinghaimen請輸入所要進行的操作:1:查找客戶;6:備份帳單;2:插入帳單;7:客戶排序;3:刪除帳單;8:分類合計;4:修改帳單;9:顯示菜單;5:保存帳單;0:推出操作;4)統(tǒng)計測試:輸入:8輸出:本地網(wǎng)名稱:市話費小計:長話費小計:通話費合計:客戶帳單數(shù)量nanjing1721112386124107237suqian95540670301

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論