文章编辑数据结构课程设计
文章編輯數據結構課程設計
/* Name:文本編輯 Time:2020-6-28 Author:Ding Function: (1) 輸入一頁文字,每行最多不超過80個字符,共N行(N>=5);輸入數據的形式和范圍:可以輸入大寫、小寫的英文字母、任何數字及標點符號。 (2) 分別統計出其中英文字母數和空格數及整篇文章總字數; (3) 統計某一字符串在文章中出現的次數,并輸出該次數; (4) 刪除某一子串,并將后面的字符前移, 輸出刪除某一字符串后的文章; (5)輸出形式:a)分行輸出用戶輸入的各行字符;b)分4行輸出"全部字母數"、"數字個數"、"空格個數"、"文章總字數"等信息。 Else:1-安全性2-實用性3-界面友好 */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #include<windows.h> #define MAXSIZE 1000 #define SIZE 100 #define OVERFLOW -1 #define OK 1 #define ZERO 0typedef char DataType; typedef int Elemtype; typedef struct node {DataType data[MAXSIZE];struct node *next; }LNode,*LinkList;void InitLinkedList(LinkList &L)//初始化 {//定義一個頭結點L = (LinkList)malloc(sizeof(LNode));//頭結點申請地址if (L == NULL)printf("分配空間失敗,請檢查內存");L->next = NULL; }LinkList InputKeyboard()//鍵盤導入編輯 {LinkList p,head;char str[SIZE];int i=0;printf("-----------------------------------------\n");printf("|請按行輸入想要修改的文章,#表示輸入完成|\n");printf("-----------------------------------------\n");printf("|每行最多輸入80個字符,如需輸入更多請換行|\n");printf("-----------------------------------------\n");InitLinkedList(p);head=p;p->next=NULL;while(1){gets(str);if(strlen(str)>80){printf("\n");printf("每行最多輸入80個字符,請重新輸入");break;}if(str[0]==35){str[0]='\0';p->next=NULL;break;}p->next=(LinkList)malloc(sizeof(LNode));strcpy(p->data,str);if(str[strlen(str)-1]==35){p->data[strlen(str)-1]='\0';break;}p=p->next;}p->next=NULL;return head; } LinkList InputText()//文本導入編輯 {LinkList p,head;FILE *fp;char str[SIZE][SIZE];if(!(fp=fopen("test.txt","r")))//打開文件{printf("文件打開失敗,請檢查文件是否存在。");exit(OVERFLOW);}InitLinkedList(p);//分配首地址初始化head=p;p->next=NULL;//尾插法int i=0;for(;fgets(str[i],SIZE,fp)!=NULL;i++)//讀取每一行的內容{if(strlen(str[i])>80){printf("\n");printf("當前第%d行超過了80個字符",i);break;}strcpy(p->data,str[i]);p->next=(LinkList)malloc(sizeof(LNode));p=p->next;}free(p);//釋放p指針,保證數據安全return head; }LinkList OutPut(LinkList head)//文本輸出 {LinkList p=head;//p指向開始節點while(p!=NULL){printf("%s\n",p->data);//輸出p的值p=p->next;}printf("\n");return p; }Elemtype Out_Alpha(LinkList head)//字母輸出 {LinkList p=head;int count=0;int len;while(p!=NULL){len=strlen(p->data);for(int i=0;i<len;i++){if(p->data[i]>='a'&&p->data[i]<='z'||p->data[i]>='A'&&p->data[i]<='Z')count++;}p=p->next;}return count; }Elemtype Out_NUm(LinkList head)//數字輸出 {LinkList p=head;int count=0;int length;while(p!=NULL){length=strlen(p->data);for(int i=0;i<length;i++){if(p->data[i]>='0'&&p->data[i]<='9')count++;}p=p->next;}return count; }Elemtype Out_Space(LinkList head)//空格輸出 {LinkList p=head;int count=0;int length;while (p!=NULL){length=strlen(p->data);for(int i=0;i<length;i++){if(p->data[i]==32)count++;}p=p->next;}return count; }Elemtype Out_Text(LinkList head)//所有文本輸出 {LinkList p=head;int count=0;while (p!=NULL){count+=strlen(p->data);p=p->next;}return count; }Elemtype Del_Words(char *s,char *str)//刪除的詳細步驟 {char *p; int count=0,length,i,j; char a[SIZE]; if(s!=NULL){p=strstr(s,str); // 找到相同字符串 length=strlen(s); i=length-strlen(p);j=i+strlen(str); for(int n=j;n<length;n++){a[count++]=s[n];//如果存在字符串則置為空 a[count]='\0'; strcpy(p,a); //將剩余字符串復制 }return OK; }else{printf("文章中沒有該字符串,請重新輸入。");return ZERO;} } LinkList Del_Strings(LinkList head,char *str)//刪除字符串 {LinkList p=head;while(p!=NULL){while(strstr(p->data,str)!=NULL) //如果沒有該字符串則循環到下一個 Del_Words(p->data,str); p=p->next;}return head; }Elemtype Search_Tools(char *s,char *str) {int count;if(Del_Words(s,str)!= NULL)//巧借刪除 {count++;}return count; } Elemtype Search_Strings(LinkList &head,char *str)//查詢字符串 {LinkList p=head;Elemtype num=0,counts=0;Elemtype i,j;if(p==NULL){printf("文本有誤。");return ZERO;}else{while(p!=NULL){while(strstr(p->data,str)!=NULL) //該字符串在總字符串中不為空 counts=Search_Tools(p->data,str); p=p->next;}return counts;} } main() {int i, j, k, l, m; char c = '*'; for (i=1; i<=3; i++) printf("\n"); for (i=1; i<=3; i++) { for (j=1; j<=32-2*i; j++) printf(" "); for (k=1; k<=4*i+1; k++) printf("%c", c);for (l=1; l<=13-4*i; l++) printf(" "); for (m=1; m<=4*i+1; m++) printf("%c", c);printf("\n"); }Sleep(1000); for (i=1; i<=3; i++) { for (j=1; j<=24+1; j++) printf(" "); for (k=1; k<=29; k++) printf("%c", c);printf("\n"); }Sleep(1000); for (i=7; i>=1; i--) { for (j=1; j<=40-2*i; j++) printf(" "); for (k=1; k<=4*i-1; k++) printf("%c", c);printf("\n"); }Sleep(1000); for (i=1; i<=39; i++) printf(" "); printf("%c\n", c);Sleep(1000); for (i=1; i<=3; i++) printf("\n"); printf("**********|**********************************************************|**********\n");printf("*******|*****|***************|--------------------|***************|*****|*******\n");printf("****|***********|************|歡迎來到文本編輯系統|************|***********|****\n"); printf("*|*****************|*********|--------------------|*********|*****************|*\n");printf("*|-Class:19130410--|****************************************|-----------------|*\n"); char st[SIZE],ss[SIZE]; int x,y;LinkList head;printf("*|-Date:2020-07-01-|****************************************|---Author:Ding---|*\n");printf("**|**************|** ***|--------------------|*** ***|***********|****\n");printf("****|**********|**** ***|--請您選擇輸入方式--|*** *****|*******|******\n");printf("*******|*****|****** ***|**1#使用鍵盤輸入****|*** *******|***|********\n");printf("**********|********* ***|**2#使用文件導入****|*** *********|**********\n");printf("******************** ***|**3#退出該系統 ****|*** ********************\n");printf("******************** ***|--------------------|*** ********************\n");printf("********************—————————R E A D M E———————————*********\n");printf("**** *****本系統支持統計文本的空格數,字母數,數字數,文本總數*** ***\n");printf("**** *****———————刪除,查找相應字符串出現的次數————*** ***\n");printf("********************************************************************************\n");while(1){printf("-----------請輸入您的選擇:-----------\n"); scanf("%d",&x);switch(x){case 1: head = InputKeyboard();printf("-----------您輸入的是:-----------\n"); OutPut(head);break;case 2:head = InputText();printf("-----------您導入的是:-----------\n");OutPut(head);break;case 3:printf("非常感謝使用本系統,歡迎再次使用。"); exit(-1);break;default:printf("-----您的輸入不合法,請重新輸入!------\n"); continue; }printf("**********************************************\n");printf("*********------------------------*************\n");printf("*********|------歡迎選擇功能-----|************\n");printf("** **|1、輸出當前文本的空格數|** ****\n");printf("** **|2、輸出當前文本的字母數|** ****\n");printf("** **|3、輸出當前文本的數字數|** ****\n");printf("** **|4、輸出當前文本的總字數|** ****\n"); printf("** **|5、查詢相應字符出現次數|** ****\n"); printf("** **|6、刪除當前文本相應字符|** ****\n");printf("** **|7、退出功能重新錄入文字|** ****\n"); printf("*********|-----------------------|************\n"); printf("**********************************************\n");while(1){printf("-----------請輸入您的選擇:-----------\n"); scanf("%d",&y);switch(y){case 1:printf("本文的全部空格數為: %d \n",Out_Space(head));break;case 2:printf("本文的全部字母數為: %d \n",Out_Alpha(head));break;case 3:printf("本文的全部數字數為: %d \n",Out_NUm(head)); break;case 4:printf("本文的全部總字數為: %d \n",Out_Text(head));break;case 5:printf("請輸入統計的字符串:\n");scanf("%s",&st); printf("%s在文本中出現的次數為: %d \n",st,Search_Strings(head,st));printf("\n");break;case 6:printf("請輸入刪除的字符串:\n"); scanf("%s",&ss);head = Del_Strings(head,ss);printf("刪除%s后的文本為:\n",ss);OutPut(head);break;case 7:printf("-----請選擇文本的輸入方式------\n"); break;default:printf("-----您的輸入不合法,請重新輸入!------\n"); continue;}break;}} }中 北 大 學
課程設計說明書
學 院、系: 軟件學院
專 業: 軟件工程
班 級:
學 生 姓 名: 學 號:
設 計 題 目: 文本編輯
起 迄 日 期: 2020年6月14日~2020年6月18日
指 導 教 師: 楊順民
日期: 2020年6月28日
1 設計目的
《數據結構》課程主要介紹最常用的數據結構,闡明各種數據結構內在的邏輯關系,討論其在計算機中的存儲表示,以及在其上進行各種運算時的實現算法,并對算法的效率進行簡單的分析和討論。進行數據結構課程設計要達到以下目的:
? 了解并掌握數據結構與算法的設計方法,具備初步的獨立分析和設計能力;
? 初步掌握軟件開發過程的問題分析、系統設計、程序編碼、測試等基本方法和技能;
? 提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力;
訓練用系統的觀點和軟件開發一般規范進行軟件開發,培養軟件工作者所應具備的科學的工作方法和作風。
2 任務概述
設計內容:
(1) 輸入一頁文字,每行最多不超過80個字符,共N行(N>=5);輸入數據的形式和范圍:可以輸入大寫、小寫的英文字母、任何數字及標點符號。
(2) 分別統計出其中英文字母數和空格數及整篇文章總字數;
(3) 統計某一字符串在文章中出現的次數,并輸出該次數;
(4) 刪除某一子串,并將后面的字符前移, 輸出刪除某一字符串后的文章;
(5) 輸出形式:
a)分行輸出用戶輸入的各行字符;
b)分4行輸出"全部字母數"、“數字個數”、“空格個數”、"文章總字數"等信息。
設計要求:
(1)符合課題要求,實現相應功能;
(2)要求界面友好美觀,操作方便易行;
(3)注意程序的實用性、安全性;
3本程序采用的數據結構及模塊劃分
1)本程序采用的是線性表,運用鏈式存儲,定義了一種結構體node
typedef struct node
{
DataType data[MAXSIZE];
struct node *next;
}LNode,*LinkList;
2)模塊圖如圖3.1所示:
圖3.1 模塊劃分圖
4 主要函數說明及功能圖
1、本系統定義了十一個函數
2)鍵盤導入函數:LinkList InputKeyboard()
3)文件導入函數:LinkList InputText()
4)所有文本輸出函數:LinkList OutPut(LinkList head)
5)所有字母個數輸出函數:Elemtype Out_Alpha(LinkList head)
6)所有數字個數輸出函數:Elemtype Out_NUm(LinkList head)
7)所有空格個數輸出函數:Elemtype Out_Space(LinkList head)
8)所有文本字數輸出函數:Elemtype Out_Text(LinkList head)
9)刪除字符串的兩個函數:LinkList Del_Strings(LinkList head,char *str),Elemtype Del_Words(char *s,char *str)
10)查詢字符串的兩個函數:Elemtype Search_Strings(LinkList &head,char *str)。,Elemtype Search_Tools(char *s,char *str)
11) 主函數:main()
2、主要函數N-S圖:
圖4.1 統計字母個數函數N-S圖
圖4.2統計數字個數函數N-S圖
圖4.3統計空格個數函數N-S圖
圖4.4查找字符串函數流程圖
5運行程序及結果
(1)開始菜單界面:
(2)鍵盤輸入操作界面:
(3)文件輸入操作界面
(4)功能界面
(5)結束界面
6 課程設計心得:
這次數據結構的課程設計不僅讓我提前感受了個人開發項目的感覺,更是加強了我自己獨立思,獨立解決問題的能力,連續幾天的挑燈夜戰,讓我感到了程序猿碼農的辛苦,當第一遍敲完代碼的時候,看著編譯框中無數的bug,好像感覺自己就是來寫bug的一樣,baidu,google,必應,CSDN,github挨個挨個查,解決bug,問大佬,問老師,問同學,好像把他當成自己的孩子一樣,畢竟第一個課設,用心程度肯定不一樣,雖然我代碼能力不強,圖形化程序最終還是被否決了,也是一個遺憾吧,在系統界面藏了很多小驚喜,也算是自娛自樂吧,畢竟每一個好的工具可都是有一個奇奇怪怪的初始界面呢,不僅僅c語言有數據結構,其他語言也有,那么當學到其他語言的時候,那時候我的課設又會是什么樣子的呢。
總結
以上是生活随笔為你收集整理的文章编辑数据结构课程设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作60:拼接问题
- 下一篇: 第二章 Jsp基本语法