實驗一:同學(xué)通訊錄管理系統(tǒng)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct list
{
char number[20];//學(xué)號
char name[20];//姓名
char telenum[20];//電話
struct list *next;
}list;
int menu()//主菜單函數(shù)
{
int operation;
printf("\n\n\n\t\t\t **************學(xué)生通訊錄管理系統(tǒng)**************\n\n");
printf("\t\t\t\t\t 0.退出管理系統(tǒng)\n");
printf("\t\t\t\t\t 1.插入通訊記錄\n");
printf("\t\t\t\t\t 2.刪除通訊記錄\n");
printf("\t\t\t\t\t 3.查詢通訊記錄\n");
printf("\t\t\t\t\t 4.顯示通訊錄信息\n");
printf("\n\t\t\t **********************************************\n\n");
printf("請輸入要進行的操作:");
scanf("%d",&operation);
printf("\n");
return operation;
}
list *init(list *p)//創(chuàng)建結(jié)點函數(shù)
{
list *q;
q=(list *)malloc(sizeof(list));
p->next=q;
p=q;
p->next=NULL;
return p;
}
list *scan(list *p)//錄入信息函數(shù)
{
printf("\t\t\t\t\t請輸入學(xué)號:");
scanf("%s",&p->number);
printf("\n");
printf("\t\t\t\t\t請輸入姓名:");
scanf("%s",&p->name);
printf("\n");
printf("\t\t\t\t\t請輸入電話:");
scanf("%s",&p->telenum);
printf("\n");
return p;
}
void print(list *p)//顯示信息函數(shù)
{
printf("\t\t\t\t----------------------------------\n");
printf("\t\t\t\t\t\t學(xué)號:%s\n",p->number);
printf("\t\t\t\t\t\t姓名:%s\n",p->name);
printf("\t\t\t\t\t\t電話:%s\n",p->telenum);
printf("\t\t\t\t----------------------------------\n");
}
list *find(list *head,char *name)//查找函數(shù)
{
list *p;
p=head;
if(!(head->next))
{
printf("\t\t\t\t 該通訊錄為空!\n\n");
}
else
{
printf("請輸入同學(xué)姓名:");
scanf("%s",name);
printf("\n");
while(p)
{
if(strcmp(p->name,name)==0)
break;
else
p=p->next;
}
if(p)
{
printf("\t\t\t\t %s同學(xué)的通訊錄為:\n",name);
print(p);
}
else
printf("\t\t\t\t 通訊錄中沒有該同學(xué)的記錄");
}
return p;
}
list *add(list *p)//插入函數(shù)
{
scan(p);
p=init(p);
return p;
}
list *dele(list *head,char *name)//刪除函數(shù)
{
printf("\t\t\t\t 請輸入要刪除的姓名:");
scanf("%s",name);
printf("\n");
list *p,*q;
p=head;
if(!(head->next))
{
printf("\t\t\t\t 該通訊錄為空!\n");
}
else
{
while(p)
{
if(strcmp(p->name,name)==0)
break;
else
{
q=p;
p=p->next;
}
}
if(p)
{
if(p==head)
head=head->next;
else
q->next=p->next;
free(p);
printf("\t\t\t\t 刪除成功\n");
}
else
printf("\t\t\t\t 刪除失敗\n");
}
return head;
}
void display(list *head)
{
list *p;
p=head;
if(!p)
{
printf("\t\t\t\t 該通信錄為空\n");
}
else
{
while(p->next)
{
print(p);
p=p->next;
}
}
printf("\n\n");
}
int main()
{
list*p,*head;
p=(list *)malloc(sizeof(list));
p->next=NULL;
head=p;
char name[10];
int set=1;
while(set)
{
switch(menu()){
case 0: exit(0);break;
case 1: p=add(p);break;
case 2: head=dele(head,name);break;
case 3: head=find(head,name);break;
case 4: display(head);break;
}
}
return 0;
}
運行結(jié)果為:

QQ瀏覽器截圖20191127150005.png
實驗二:航空客運訂票系統(tǒng)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct list //航班信息結(jié)構(gòu)體list
{
char start[20];//出發(fā)點
char finish[20];//目的地
char fli_num[20];//航班號
char week[20];//星期幾
char name[20];//訂票人姓名
struct list *next;//指向該結(jié)構(gòu)體的指針
}list;
list *init(list *p)//創(chuàng)建結(jié)點函數(shù)
{
list *q;
q=(list *)malloc(sizeof(list));
p->next=q;
p=q;
p->next=NULL;
return p;
}
list *scan(list *p)//輸入函數(shù)
{
printf("\t\t請輸入【出發(fā)點】:");
scanf("%s",p->start);
printf("\n");
printf("\t\t請輸入【目的地】:");
scanf("%s",p->finish);
printf("\n");
printf("\t\t請輸入【航班號】:");
scanf("%s",p->fli_num);
printf("\n");
printf("\t\t請輸入【星期】:");
scanf("%s",p->week);
printf("\n");
return p;
}
void print(list *p)//輸出函數(shù)
{
printf("\t\t\t\t\t----------------------------------\n");
printf("\t\t\t\t\t\t\t 出發(fā)點:%s\n",p->start);
printf("\t\t\t\t\t\t\t 目的地:%s\n",p->finish);
printf("\t\t\t\t\t\t\t 航班號:%s\n",p->fli_num);
printf("\t\t\t\t\t\t\t 星期:%s\n",p->week);
if(strlen(p->name)!=0)
printf("\t\t\t\t\t\t\t 訂票人姓名:%s\n",p->name);
printf("\t\t\t\t\t---------------------------------\n");
}
list *add_flight(list *p)//插入航班函數(shù)
{
p=init(p);
p=scan(p);
return p;
}
list *dele_flight(list *head,char *fli_num)//刪除航班函數(shù)
{
list *p,*q;
p=head;
if(!(head->next))
{
printf("\t\t\t航班信息錄為空!\n");
}
else
{
printf("\t\t\t請輸入需要刪除航班的編號:");
scanf("%s",p->fli_num);
printf("\n");
while(p->next)
{
if(strcmp(p->fli_num,fli_num)==0)
break;
else
{
q=p;
p=p->next;
}
}
}
if(p){
if(p==head)
head=head->next;
else
q->next=p->next;
free(p);
printf("\t\t\t刪除成功!\n");
}
else{
printf("\t\t\t刪除失??!通訊錄中沒有該航班的記錄\n");
}
return head;
}
list *find_flight(list *head,char *fli_num)//查找航班函數(shù)
{
list *p;
p=head;
if(!(head->next))
{
printf("\t\t\t 該航班信息錄為空,請?zhí)砑覾n");
}
else
{
printf("\t\t\t 請輸入航班號:");
scanf("%s",p->fli_num);
printf("\n");
while(p)
{
if(strcmp(p->fli_num,fli_num)==0)
break;
else
p=p->next;
}
}
if(p)
{
printf("\t\t\t 該航班具體信息為:\n");
print(p);
}
else
printf("\t\t\t 沒有航班信息,請?zhí)砑?!\n");
return head;
}
void display_flight(list *head)//顯示航班函數(shù)
{
list *p;
p=head;
if(!(head->next))
{
printf("\t\t\t 該航班信息錄為空\n");
}
else
{
while(p->next)
{
print(p);
p=p->next;
}
}
}
int second_menu()//航班管理菜單函數(shù)
{
int operation_two;
printf("\t\t\t ---------------航班管理------------------\n");
printf("\t\t\t\t\t 1.插入航班信息\n");
printf("\t\t\t\t\t 2.刪除航班信息\n");
printf("\t\t\t\t\t 3.查找航班信息\n");
printf("\t\t\t\t\t 4.顯示航班信息\n");
printf("\t\t\t\t\t 5.返回上一菜單欄\n");
printf("\t\t\t -----------------------------------------\n");
printf("請輸入要選擇的操作:");
scanf("%d",&operation_two);
printf("\n");
return operation_two;
}
int main_menu()//主菜單函數(shù)
{
int operation_one;
printf("\n\n\t\t\t ---------------航空客運訂票系統(tǒng)---------------\n");
printf("\t\t\t\t\t 1.航班管理菜單\n");
printf("\t\t\t\t\t 2.訂票辦理菜單\n");
printf("\t\t\t\t\t 3.退票辦理菜單\n");
printf("\t\t\t\t\t 4.退出系統(tǒng)\n");
printf("\t\t\t ----------------------------------------------\n");
printf("請輸入要選擇的操作:");
scanf("%d", &operation_one);
printf("\n");
return operation_one;
}
void return_lastmenu()
{
main_menu();
}
list *order_ticket(list *head,char *name,char *start,char *finish)//訂票辦理函數(shù)
{
char *a;
list *p;
p=head;
if(!(head->next))
printf("\t\t\t 航班信息記錄為空,請?zhí)砑覾n");
else
{
while(p->next)
{
if(strcmp(p->start,start)==0&&strcmp(p->finish,finish)==0)
print(p);
else
p=p->next;
}
}
if (p)
{
printf("\t\t\t 請選你要訂票的航班號:");
scanf("%s", a);
p = find_flight(head, a);
name = strcat(p->name, name);
strcpy(p->name, name);
printf("\t\t\t 訂票成功\n");
}
return head;
}
list *refund_ticket(list *head, char *name)//退票辦理函數(shù)
{
char *b;
list *p;
p = head;
if (!(head->next))
printf("\t\t\t 航班信息記錄為空,請?zhí)砑覾n");
else
{
while (p)
{
if (strcmp(name, p->name) == 0)
print(p);
else
p = p->next;
}
}
name = 0;
printf("\t\t\t 請輸入你要刪除的航班號:");
scanf("%s", b);
p = find_flight(head, b);
strcpy(p->name, name);
printf("\t\t\t 刪除成功\n");
return head;
}
int main()
{
list *head, *p;
p = (list *)malloc(sizeof(list));
p->next = NULL;
head = p;
char name[20];
char start[20];
char finish[20];
char fli_num[20];
int set = 1;
while (set)
{
switch (main_menu())
{
case 1: {
set = 2;
while (set == 2)
{
switch (second_menu())
{
case 1:p = add_flight(p); break;
case 2:head = dele_flight(head, fli_num); break;
case 3:head = find_flight(head, fli_num); break;
case 4:display_flight(head); break;
case 5:set = 1; break;
}
}
break; }
case 2:head = order_ticket(head, name, start, finish); break;
case 3:head = refund_ticket(head, name); break;
case 4:exit(0); break;
}
}
return 0;
}
運行結(jié)果為:

QQ瀏覽器截圖20191205160457.png
可以運行出來但不能實現(xiàn)查找,顯示等功能
實驗三:簡易文本編輯器
#include"stdio.h"
#include"malloc.h"
#include"string.h"
#include"stdlib.h"
#include"conio.h"
#define Link_Size 100
int NUM, C, N; //定義全局變量 NUM用來記錄行號,C用來記錄字串在主串中出現(xiàn)總次數(shù)
typedef struct _list //行表結(jié)構(gòu)
{
char data[800]; //記錄字符
int length; //記錄長度
struct _list*next; //后繼指針
struct _list*pre; //前驅(qū)指針
int row; //記錄整篇文章行數(shù)
}LinkList;
LinkList *head; //定義全局變量*head,文章首行頭指針
void HeadWord() //頭菜單函數(shù)
{
system("cls"); //清屏函數(shù),使用了頭文件#include"stdlib.h"
printf("\t\t\t\t\t ******************\n");
printf("\t\t\t\t\t*** 歡迎使用簡易文本編譯器 ***\n");
printf("\t\t\t\t\t ******************\n");
}
LinkList *CreatWord() //創(chuàng)建文本函數(shù)
{
LinkList *temp;
char ch;
int i, j; //用i記錄所在行的字符數(shù)量,j來記錄有多少行
head->next = (LinkList*)malloc(sizeof(LinkList));
head->pre = NULL;
temp = head->next;
temp->pre = NULL;
temp->length = 0;
for (i = 0; i < 800; i++)
temp->data[i] = '\0';
printf("開始創(chuàng)建文本,請輸入文章(輸入#號結(jié)束):\n");
for (j = 0; j < Link_Size; j++)
{
for (i = 0; i < 800; i++)
{
ch = getchar();
temp->data[i] = ch;
temp->length++;
if (ch == '#')
{
NUM = j; //當輸入“#”時候,用j記錄行號,并跳出此時所在的for循環(huán)
break;
}
}
if (ch == '#')
{
temp->length = i; //當輸入“#”時候,用i記錄該行有多少文字,并跳出創(chuàng)建文本循環(huán)
temp->next = NULL;
break;
}
temp->next = (LinkList *)malloc(sizeof(LinkList));
temp->next->pre = temp;
temp = temp->next;
for (i = 0; i < 800; i++)
temp->data[i] = '\0';
}
temp->row = NUM + 1; //在循環(huán)中NUM是從0開始,所以行號+1
system("cls");
return temp;
}
void PrintWord() //輸出文本函數(shù)
{
int i, j;
LinkList *p;
p = head->next;
system("cls");
HeadWord();
printf("\n 當前文章的內(nèi)容是:");
for (j = 0; j <= NUM && p != NULL; j++) //為什么是j<=NUM而不是<
{
for (i = 0; (i < 800) && (p->data[i]) != '#'; i++)
{
printf("%c", p->data[i]);
}
p = p->next;
}
}
void CountWord() //文章內(nèi)容統(tǒng)計模塊
{
LinkList *temp; //WORD 代表大寫字母個數(shù)
char ch; //word 代表小寫字母個數(shù)
int i, j, t; //space 代表空格數(shù)
int WORD = 0, word = 0, space = 0, num = 0, punct = 0, sum = 0; //num 代表數(shù)字個數(shù)
int line=0; //line 代表文章行數(shù)
temp = head->next; //punch 代表標點符號
for (j = 0; j <= NUM; j++) //sum 代表WORD + word + num
{
for (i = 0; (i < 800) && (temp->data[i]) != '#'; i++)
{
ch = temp->data[i];
if ((ch >= 'A') && (ch <= 'Z'))
WORD++;
else if ((ch >= 'a') && (ch <= 'z'))
word++;
else if ((ch >= '0') && (ch <= '9'))
num++;
else if (ch == ' ')
space++;
else if (ch == 33 || ch == 34 || ch == 39 || ch == 44 || ch == 46 || ch == 58 || ch == 59 || ch == 63)
{
punct++;
}
else if (ch == '\n')
line++;
}
sum = WORD + word + num;
}
while (1)
{
printf("\n");
HeadWord();
printf("\t\t\t\t****************************************************\n");
printf("\t\t\t\t\t **** 文章內(nèi)容統(tǒng)計菜單 ****\n");
printf("\t\t\t\t****************************************************\n\n");
printf("\t\t\t\t\t\t1、文章中大寫字母的個數(shù) \n");
printf("\t\t\t\t\t\t2、文章中小寫字母的個數(shù) \n");
printf("\t\t\t\t\t\t3、文章中數(shù)字的個數(shù) \n");
printf("\t\t\t\t\t\t4、文章中標點符號的個數(shù) \n");
printf("\t\t\t\t\t\t5、文章中空格的個數(shù) \n");
printf("\t\t\t\t\t\t6、文章中所有字數(shù) \n");
printf("\t\t\t\t\t\t7、文章所擁有的行數(shù) \n");
printf("\t\t\t\t\t\t8、退出返回主菜單 \n");
printf("\t\t\t\t\t\t9、直接退出本系統(tǒng) \n\n");
printf("\t\t\t\t****************************************************\n");
printf("\t\t\t\t 請選擇需統(tǒng)計項目:");
scanf_s("%d", &t); //scanf后加_s
switch (t)
{
case 1:
system("cls");
HeadWord();
printf("\n\t\t 文章中大寫字母的個數(shù):%d\n", WORD);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 2:
system("cls");
HeadWord();
printf("\n\t\t 文章中小寫字母的個數(shù):%d\n", word);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 3:
system("cls");
HeadWord();
printf("\n\t\t 文章中數(shù)字的個數(shù):%d\n", num);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 4:
system("cls");
HeadWord();
printf("\n\t\t 文章中標點符號的個數(shù):%d\n", punct);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 5:
system("cls");
HeadWord();
printf("\n\t\t 文章中空格的個數(shù):%d\n", space);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 6:
system("cls");
HeadWord();
printf("\n\t\t 文章中所有字數(shù):%d\n", sum);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 7:
system("cls");
HeadWord();
printf("\n\t\t 文章中所有行數(shù):%d\n", line);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
}
if (t == 8)
{
system("cls"); break; //運行后會返回到主菜單
}
if (t == 9) exit(0);
}
}
void SearchWord(char *str1, LinkList* temp) //指定字符串出現(xiàn)次數(shù)函數(shù)
{
char Data[20];
int i=0, j, k = 0, sum = 0; //i行數(shù),j每行字數(shù),k指定字符串數(shù)組個數(shù),sum指定字符串出現(xiàn)次數(shù)
int l = 1, x; //l指定字符串第幾次出現(xiàn)
temp = head->next;
strcpy_s(Data, str1); //strcpy后加_s,字符串復(fù)制函數(shù),將2復(fù)制到1
while (temp)
{
for (j = 0, x = 0; j < 800; j++, x++)
{
if (temp->data[j] == '\n')
{
i++;
x = 0;
}
if ((temp->data[j]) == Data[k])
{
k++;
if (Data[k] != '\0')
{
continue;
}
else if (Data[k] == '\0')
{
x = x - k+1;
sum++;
printf("\t\t\t\t 第%3d次出現(xiàn)在第%3d行 第%3d列\(zhòng)n\n", sum, i+1, x);
x=x+k-1;
k = 0;
}
}
}
temp = temp->next;
}
printf("\t\t\t 字符串總共出現(xiàn)次數(shù)為:%d\n\n", sum);
C = sum;
N = i * 800 + j; //計算出總字數(shù)
}
void DeleteWord(char *str2) //刪除指定字符串函數(shù)
{
char Data[20];
LinkList *temp, *term;
int i, j, k, m, y, num;
strcpy_s(Data, str2); //strcpy后加_s
for (y = 0; y < C; y++)
{
num = 800;
k = 0, m = 0;
temp = head;
for (i = 0; i <= NUM; i++)
{
term = temp;
temp = temp->next;
for (j = 0; j < 800; j++)
{
if ((temp->data[j]) == Data[k]) k++;
else if (Data[k] != '\0') { j = j - k; k = 0; }
if (Data[k] == '\0')
{
num = j;
break;
}
}
if (num < 800) break;
}
for (; i <= NUM; i++)
{
for (; j < 800; j++)
{
temp->data[j - k + 1] = temp->data[j + 1];
}
term = temp;
temp = temp->next;
j = 0;
}
}
}
LinkList *InsertWord(LinkList *temp) //插入字符或字符串
{
char Data1[800], Data2[800];
int h, l, o;
int h1 = 0, l1 = 1;
int i, j;
printf("\n\t\t 請輸入要插入的字符或字符串:"); //先輸入要插入的字符串
getchar();
gets_s(Data2); //gets函數(shù)換成了gets_s
printf("\n\t\t 當前文章內(nèi)容為:"); //顯示文章內(nèi)容
PrintWord();
printf("\n\t\t 請輸入要插入的行:"); //插入哪一行
scanf_s("%d", &h);
printf("\n\t\t 請輸入要插入的列:"); //插入哪一列
scanf_s("%d", &l);
int n = strlen(Data2);
while (temp)
{
for (i = 0; i < 800; i++)
{
if (temp->data[i] == '\n')
{
h1++;
}
else
continue;
if (h1 == h)
{
strcpy_s(Data1, temp->data);
for (j = 0; j < 400; j++)
temp->data[i + l + n + j] = Data1[i + l + j];//空出位置
for (j = 0; j < n; j++)
temp->data[i + l + j] = Data2[j]; //進行插入
}
}
temp = temp->next;
}
return temp;
}
LinkList * ReplaceWord(LinkList *temp) //字符串替換函數(shù)
{
char Data1; //用來接收要被替換的字符或字符串
char Data2; //用來接收要用哪個字符或字符串代替
int n1, n2;
int i;
printf("\n\t\t 請輸入要被替換的字符或字符串:");
getchar();
scanf_s("%c", &Data1);
printf("\n\t\t 請輸入要用哪個字符或字符串代替:");
getchar();
scanf_s("%c", &Data2);
while (temp)
{
for (i = 0; i < 800; i++)
{
if (temp->data[i] == Data1)
temp->data[i] = Data2;
}
temp = temp->next;
}
printf("\n");
return temp;
}
void Bmenu(LinkList *temp)
{
char str1[20];
char str2[20];
int a;
do
{
HeadWord();
printf("\n\t\t\t\t****************************************************\n");
printf("\t\t\t\t\t **** 文章內(nèi)容處理菜單 ****\n");
printf("\t\t\t\t****************************************************\n\n");
printf("\t\t\t\t\t 1、查找文章中的字符或者字符串 \n");
printf("\t\t\t\t\t 2、刪除文章中的字符或者字符串 \n");
printf("\t\t\t\t\t 3、向文章中插入字符或者字符串 \n");
printf("\t\t\t\t\t 4、替換文章中字符或者字符串 \n");
printf("\t\t\t\t\t 5、顯示當前文章內(nèi)容 \n");
printf("\t\t\t\t\t 6、返回主菜單 \n");
printf("\t\t\t\t\t 7、直接退出系統(tǒng) \n\n");
printf("\t\t\t\t****************************************************\n");
printf("\t\t\t\t請選擇:");
scanf_s("%d", &a);
switch (a)
{
case 1:
system("cls");
HeadWord();
printf("\t\t\t 請輸入您需要查找的字符或字符串:");
getchar();
gets_s(str1); //gets函數(shù)換成了gets_s
printf("\n");
SearchWord(str1, temp);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 2:
system("cls");
HeadWord();
printf("\t\t\t\t 請輸入您需要刪除的字符或字符串:");
getchar();
gets_s(str2); //gets函數(shù)換成了gets_s
SearchWord(str2, temp);
DeleteWord(str2);
printf("\t\t\t\t\t 刪除 %3s 后的文章為:\n\n", str2);
PrintWord();
printf("\n\n");
printf(" 按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 3:
system("cls");
HeadWord();
InsertWord(temp);
printf("\t\t\t 插入字符或字符串后文章為:");
PrintWord();
printf("\n 按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 5:
system("cls");
HeadWord();
PrintWord();
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 4:
system("cls");
HeadWord();
ReplaceWord(temp);
printf("\t\t\t\t\t 替換后的文章為:\n\n");
PrintWord();
printf("\n\n");
printf(" 按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
}
if (a == 6)
{
system("cls");
break;
}
if (a == 7) exit(0);
} while (1);
}
void AboutWord()
{
printf("\n\t\t\t\t\t\t 關(guān) 于 本 實 驗 \n");
printf("\t\t\t\t****************************************************\n\n");
printf("\t\t\t\t\t\t1807004426 阮國璽 \n\n");
printf("\t\t\t\t\t\t1807004432 王寒奇\n\n");
printf("\t\t\t\t\t\t1807004425 郝錦陽\n\n");
printf("\t\t\t\t\t\t1807004444 金胤宏\n\n");
printf("\t\t\t\t\t 本實驗由這四人制作完成\n\n");
printf("\t\t\t\t****************************************************\n");
printf("\n");
}
void save(LinkList *temp) //文件保存函數(shù)
{
FILE *fp;
fp = fopen("F:/a", "w");
fputs(temp->data, fp);
fclose(fp);
printf("以存到F:/a 中成功");
}
void load(LinkList *temp) //文件讀取函數(shù)
{
FILE *fp;
char ch;
int n;
fp = fopen("F:/a", "r");
for (int i = 0; i < 800; i++)
{
ch = fgetc(fp);
temp->data[i] = ch;
if (ch == '#')
break;
putchar(ch);
}
fclose(fp);
printf("\n讀盤成功");
}
void menu(LinkList *temp)
{
int t;
do {
HeadWord();
printf("\n");
printf("\t\t\t\t****************************************************\n");
printf("\t\t\t\t\t\t**** 主菜單 ****\n");
printf("\t\t\t\t****************************************************\n");
printf("\n");
printf("\t\t\t\t\t\t 1、文章內(nèi)容輸入 \n");
printf("\t\t\t\t\t\t 2、顯示當前文章內(nèi)容 \n");
printf("\t\t\t\t\t\t 3、進入文章內(nèi)容統(tǒng)計菜單 \n");
printf("\t\t\t\t\t\t 4、進入文章內(nèi)容處理菜單 \n");
printf("\t\t\t\t\t\t 5、進行存盤 \n");
printf("\t\t\t\t\t\t 6、進行讀盤 \n");
printf("\t\t\t\t\t\t 7、關(guān)于本實驗\n");
printf("\t\t\t\t\t\t 8、退出文本編輯器 \n");
printf("\n");
printf("\t\t\t\t****************************************************\n");
printf("\t\t\t\t\t 注:第一次運行本程序時請選擇 1 號功能 \n");
printf("\t\t\t\t****************************************************\n");
printf(" \t\t\t\t請選擇:");
scanf_s("%d", &t);
if ((t > 8) || (t < 1))
{
printf("對不起, 無此功能, 請輸入正確的功能序號!\n");
}
else
switch (t)
{
case 1:
system("cls");
HeadWord();
temp = CreatWord();
break;
case 2:
system("cls");
PrintWord();
printf("\n");
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 3:
system("cls");
CountWord();
break;
case 4:
system("cls");
Bmenu(temp);
break;
case 7:
system("cls");
HeadWord();
AboutWord();
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 5:
system("cls");
HeadWord();
save(temp);
printf("按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
case 6:
system("cls");
HeadWord();
load(temp);
printf("\n 按回車鍵繼續(xù)····· ");
getchar();
getchar();
system("cls");
break;
}
if (t == 8) break;
} while (1);
}
int main()
{
head = (LinkList *)malloc(sizeof(LinkList));
LinkList *temp = head;
menu(temp);
}
運行結(jié)果:

QQ截圖20200107190203.png
可以實現(xiàn)全部功能