需求分析:
1.添加聯系人
2.通過關鍵字查詢
3.檢視所有聯系人 和詳細資訊
4.删除聯系人
5.排序
系統設計:
1.結構體儲存聯系人資訊.
2 結構體數組存儲多個聯系人
3 檔案儲存資料 提高效率
宏定義: FOMAT 格式化輸出 DATA 對結構體中所有成員的引用
知識點:
1. C++ I/O 标準庫詳解
C++輸入輸出的概念:
從作業系統的角度看,每一個與主機相連的輸入輸出裝置都被看作一個檔案。
程式的輸入指的是從輸入檔案将資料傳送給程式,程式的輸出指的是從程式将資料傳送給輸出檔案。
C++輸入輸出包含以下三個方面的内容:
- 對系統指定的标準裝置的輸入和輸出。即從鍵盤輸入資料,輸出到顯示器螢幕。這種輸入輸出稱為标準的輸入輸出,簡稱标準I/O。
- 以外存磁盤檔案為對象進行輸入和輸出,即從磁盤檔案輸入資料,資料輸出到磁盤檔案。以外存檔案為對象的輸入輸出稱為檔案的輸入輸出,簡稱檔案I/O。
- 對記憶體中指定的空間進行輸入和輸出。通常指定一個字元數組作為存儲空間(實際上可以利用該空間存儲任何資訊)。這種輸入和輸出稱為字元串輸入輸出,簡稱串I/O。
在C++的輸入輸出中,編譯系統對資料類型進行嚴格的檢查,凡是類型不正确的資料都不可能通過編譯。是以C++的I/O操作是類型安全(type safe)的。
可擴充性是C++輸人輸出的重要特點之一,它能提高軟體的重用性,加快軟體的開 發過程。
C++通過I/O類庫來實作豐富的I/O功能。
輸入和輸出是資料傳送的過程,資料如流水一樣從一處流向另一處。C++形象地将此過程稱為流(Stream)。C++的輸入輸出流是指由若幹位元組組成的宇節序列。在輸入操作時,位元組流從輸入裝置(如鍵盤、磁盤)流向記憶體,在輸出操作時,位元組流從記憶體流向輸出裝置(如螢幕、列印機、磁盤等)。流中的内容可以是ASCII字元、二進制形式的資料、圖形圖像、數字音頻視訊或其他形式的資訊。
實際上,在記憶體中為每一個資料流開辟一個記憶體緩沖區,用來存放流中的資料。當用cout和插入運算符“<<”向顯示器輸出資料時,先将這些資料送到程式中的輸出緩沖區儲存,直到緩沖區滿了或遇到endl,就将緩沖區中的全部資料送到顯示器顯示出來。在輸入時,從鍵盤輸入的資料先放在鍵盤的緩沖區中,當按Enter鍵時,鍵盤緩沖區中的資料輸入到程式中的輸入緩沖區,形成cin流,然後用提取運算符“ >>”從輸入緩沖區中提取資料送給程式中的有關變量。總之,流是與記憶體緩沖區相對應的,或者說,緩沖區中的資料就是流。
在C++中,輸入輸出流被定義為類。C++的I/O庫中的類稱為流類(stream class)。 用流類定義的對象稱為流對象。
表1.1 I/O類庫
https://blog.csdn.net/u012372584/article/details/39186129 更多I/O 詳解
2 .getch(): 所在頭檔案:conio.h 函數用途:從控制台讀取一個字元,但不顯示在螢幕上
程式結尾加上getch()讓程式運作視窗(dos視窗)停留顯示。會等待你按下任意鍵之後,把該鍵字元所對應的ASCII碼賦給ch,再執行下面的語句。
3. %-10s
- 左對齊 10 寬度 s字元串
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<conio.h>
#include<dos.h>
//telebook 結構體占用的位元組數
#define LEN sizeof(struct telebook)
#define FORMAT "%-10s%-15s%-25s%-30s\n"
#define DATA info[i].name,info[i].tel,info[i].email,info[i].address
struct telebook{
char name[10];
char tel[15];
char email[25];
char address[30];
};
struct telebook info[100];//結構體數組 每一個元素都是一個telebook結構體
//函數聲明
void input();
void add();
void search();
void update();
void del();
void display();
void sort();
void menu();
void menu(){
system("cls");//調用system函數來清零
printf("\n\n\n\n\n");
printf("\t\t|--------contact--------------|\n");//\t tab
printf("\t\t| 0. exit |\n");
printf("\t\t| 1. add |\n");
printf("\t\t| 2. search |\n");
printf("\t\t| 3. update |\n");
printf("\t\t| 4. del |\n");
printf("\t\t| 5. sort |\n");
printf("\t\t| 6.displayall |\n");
printf("\t\t| --------------------------|\n");
printf("\t\t| please choose(0-6) |\n");
}
int main(){
int n;
menu();
scanf("%d",&n);
while(n){
switch(n){
case 1: input(); break;
case 2: search(); break;
case 3: update(); break;
case 4: del(); break;
case 5:sort(); break;
case 6: display(); break;
default: break;
}
getch();
menu();
scanf("%d",&n);
}
return 0;
}
void input(){
int i,count=0;
char ch[2];
FILE *fp;//指向檔案的指針變量
//打開失敗的話
if((fp=fopen("data.txt","a+"))==NULL) {
//以附加形式打開檔案,不存在則建立,存在則附加資訊在檔案尾部 ,檔案打開失敗 指針會傳回空值
printf("can not open\n");
return;
}
while(!feof(fp)){
//檢測結束符 EOF就是結束 feof函數遇到EOF傳回0
//沒有結束的話,統計檔案中的記錄條數,讀取到結構體數組中
if(fread(&info[count],LEN,1,fp)==1)
//接受資料初始位址 位元組數 每次讀取資料項個數 輸入流(從哪個檔案讀)
count++;
}
fclose(fp);//記憶體操作 關閉檔案
//目前是通訊錄是否為空
if(count==0)
printf("no record\n");
//不為空先清零
else{
system("cls");
display();
}
//打開失敗的話
if((fp=fopen("data.txt","wb"))==NULL) {
//隻寫 打開
printf("open fail\n");
return;
}
for(i=0;i<count;i++)
//把info内容又寫回磁盤檔案data中
fwrite(&info[count],LEN,1,fp);
printf("please input(y/n)");
scanf("%s",ch);
while(strcmp(ch,"y")==0) {
printf("name:");
scanf("%s",&info[count].name);
//看看是不是存過了
for(i=0;i<count;i++){
if(strcmp(info[i].name,info[count].name)==0){
printf("already exists");
getch();
fclose(fp);
return;
}
}
printf("tel:");
scanf("%s",&info[count].tel);
printf("email:");
scanf("%s",&info[count].email);
printf("address:");
scanf("%s",&info[count].address);
//新錄入資訊寫到磁盤檔案中
if(fwrite(&info[count],LEN,1,fp)!=1)
{
printf("save fail");
getch();
}
else{
printf("%s saved!\n",info[count].name);
count++;
}
printf("continue? y/n:");
scanf("%s",ch);
//持續輸入 scanf
}
fclose(fp);
printf("ok");
}
void search(){
FILE *fp;
int i,count=0;
char ch[2],name[15];
//先取到記憶體中
if((fp=fopen("data.txt","rb"))==NULL)
{//以二進制形式打開
printf("open fail\n");
return;
}
while(!feof(fp))
if(fread(&info[count],LEN,1,fp)==1)
count++;//記錄總數
fclose(fp);
//判斷通訊錄為空的情況
if(count==0)
{
printf("no record\n");
return;
}
printf("please input the name:");
scanf("%s",name);
for(i=0;i<count;i++)
if(strcmp(name,info[i].name)==0)
{
printf("find it,display?(y/n)\n");
scanf("%s",ch);
if(strcmp(ch,"y")==0)
{
printf("name tel email address\t\n");
printf(FORMAT,DATA);
}
break;
}
if(i==count) printf("can not find");
}
void update()
{
FILE *fp;
int i,j,count=0;
char name[15];
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("open fail\n");
return;
}
while(!feof(fp))//是否到尾部
if(fread(&info[count],LEN,1,fp)==1)
count++;
if(count==0)//沒記錄
{
printf("no record!\n");
fclose(fp);
return;
}
display();
printf("update name:");
scanf("%s",name);
for(i=0;i<count;i++){
if(strcmp(name,info[i].name)==0)
{
printf("find!update name:");
scanf("%s",&info[i].name);
printf("tel:");
scanf("%s",&info[count].tel);
printf("email:");
scanf("%s",&info[count].email);
printf("address:");
scanf("%s",&info[count].address);
printf("update succesful!");
//just儲存到了數組中還要寫回磁盤就是檔案
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("open fail!");
return;
}
for(j=0;j<count;j++)
if(fwrite(&info[j],LEN,1,fp)!=1)
{
printf("save failed!");
getch();
}
fclose(fp);
return;
}
}
printf("can not find");
}
void del()
{
FILE *fp;
int i,j,count=0;
char ch[2];
char name[15];
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("can not open\n");
return;
}
while(!feof(fp))
if(fread(&info[count],LEN,1,fp)==1)
count++;
fclose(fp);
if(count==0)
{
printf("no record");
return;
}
display();
printf("the name:");
scanf("%s",name);
for(i=0;i<count;i++)
{
if(strcmp(name,info[i].name)==0)
{
printf("find it del?y/n");
scanf("%s",ch);
if(strcmp(ch,"y")==0)
//i後的元素前移
for(j=i;j<count;j++)
info[j]=info[j+1];
count--;
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("open failed\n");
return;
}
for(j=0;j<count;j++)
if(fwrite(&info[j],LEN,1,fp)!=1)
{
printf("can not save");
getch();
}
fclose(fp);
printf("del!");
return;
}
}
printf("not find");
}
void sort()
{
FILE *fp;
struct telebook t;//中間量
int i=0,j=0,count=0;
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("can not open\n");
return;
}
while(!feof(fp))
if(fread(&info[count],LEN,1,fp)==1)
count++;
fclose(fp);
if(count==0)
{
printf("no record");
return;
}
for(i=0;i<count-1;i++)
for(j=i+1;j<count;j++)
if(strcmp(info[i].name,info[j].name)>0)
{
t=info[i];
info[i]=info[j];
info[j]=t;
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("can not open\n");
return;
}
for(j=0;j<count;j++)
if(fwrite(&info[j],LEN,1,fp)!=1)
{
printf("save failed!");
getch();
}
fclose(fp);
printf("saved");
}
void display()
{
FILE *fp;
int i,count=0;
// fp=fopen("data.txt","rb");
if((fp=fopen("data.txt","rb"))==NULL)
{//以二進制形式打開
printf("open fail\n");
return;
}
while(!feof(fp)){
//檢測結束符 EOF就是結束 feof函數遇到EOF傳回0
//沒有結束的話,統計檔案中的記錄條數,讀取到結構體數組中
if(fread(&info[count],LEN,1,fp)==1)
//接受資料初始位址 位元組數 每次讀取資料項個數 輸入流(從哪個檔案讀)
count++;
}
fclose(fp);
printf("name tel email address\t\n");
for(i=0;i<count;i++)
printf(FORMAT,DATA);
}
優化學習目标:用連結清單實作的通訊錄
作者:const
https://blog.csdn.net/cheng__lu/article/details/80373467
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <WinSock2.h> /*socket通信,系統頭檔案*/
#include <windows.h>
#define OK 1
#define ERROR 0
#define MIX 100
typedef int Status ;
typedef char ElemType;
//結點定義
typedef struct telebook //通訊錄結點資料域
{
char name[MIX]; //姓名
char telephone[MIX]; //電話号碼
char address[MIX]; //位址
char Email[MIX]; //郵箱
}telebook;
typedef struct LNode //連結清單結點
{
telebook data; //結點資料域
struct LNode *next; //結點指針域
}LNode,*LinkList;
//讀取文本資訊
void readFile(LinkList &L);
//單連結清單的初始化
Status InitList_L(LinkList &L);
void Find_Name(LinkList &L); //按姓名查詢
void Find_Num(LinkList &L); //按姓名查詢
Status CreateFromTail(LinkList &L); //采用尾插法在尾部插入元素
//初始條件:線性表L已經存在
//在單鍊線性表L的第i個元素之前插入元素
Status ListInsert_L(LinkList &L);
//在單鍊線性表L的姓名元素之前插入元素
Status ListInsert_LName(LinkList &L);
Status Fund_LName(LinkList &L); //尋找該姓名的位置
//初始條件:線性表L已經存在
//删除第i個元素
Status ListDelete_L(LinkList &L);
Status ListDelete_LName(LinkList &L); //删除姓名為“XXX”的學生記錄
void saveFile(LinkList &L); //儲存通訊錄到檔案
//初始條件:線性表L已經存在
//列印出所有元素
void PrintElem(LinkList L);
void List_free(LinkList L); //銷毀連結清單
//單連結清單的初始化
Status InitList_L(LinkList &L)
{
L =(LNode *)malloc(sizeof(LNode)); //申請結點空間
if(L == NULL) //判斷是否有足夠的記憶體空間
printf("申請記憶體空間失敗\n");
L->next = NULL; //将next設定為NULL,初始長度為0的單連結清單
return OK;
}
void readFile(LinkList &L) //讀取檔案資訊
{
LinkList q,p;
FILE *fp;
p=L;
q=(LNode*)malloc(sizeof(LNode));
char name[20]="telebook.txt"; //建立telebook檔案,按行輸入資訊(姓名 電話 日期 電子郵箱)即可
if((fp= fopen(name,"r"))==NULL)
{
printf("error\n");
exit(0);
}
while(p->next!=NULL )
{
p=p->next;
}
while(fscanf(fp,"%s%s%s%s\n",q->data.name,q->data.telephone,q->data.address,q->data.Email)!=EOF)
{
q->next=NULL;
p->next=q;
p=q;
q=(LNode*)malloc(sizeof(LNode));
}
fclose(fp);
}
void tip()
{
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf(" 歡迎進入通訊錄\n");
printf(" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n\n\n");
printf(" 1:顯示功能 | 2:增加功能 \n\n");
printf(" 3:删除功能 | 4:待定功能 \n\n");
printf(" 5:查詢功能 | 6:待定功能 \n\n");
printf(" 7:待定功能 | 8:待定功能 \n\n");
printf(" 0:退出功能 | \n\n");
printf("--------------------------------------------------------------------------------\n");
}
void tip1()
{
printf("--------------------------------------------------------------------------------\n");
printf(" 1:顯示功能 | 2:增加功能 \n\n");
printf(" 3:删除功能 | 4:待定功能 \n\n");
printf(" 5:查詢功能 | 6:待定功能 \n\n");
printf(" 7:待定功能 | 8:待定功能 \n\n");
printf(" 0:退出功能 | \n\n");
printf("--------------------------------------------------------------------------------\n");
}
void Find_Name(LinkList &L) //按姓名查詢
{
LinkList q,p;
q=L->next;
printf("輸入要查詢的姓名:\n");
p=(LNode*)malloc(sizeof(LNode));
scanf("%s",p->data.name);
while(q!=NULL&&strcmp(q->data.name,p->data.name)!=0)
{
q=q->next;
}
if(q==NULL)
{
printf("通訊錄中沒有這個姓名!\n");
}
else
{ printf("已經找到此聯系人!\n");
printf("-------------------------------------------------------------------------------\n");
printf(" 姓名 電話号碼 位址 郵箱 \n");
printf("-------------------------------------------------------------------------------\n");
printf(" %s %s %s %s \n",p->data.name,p->data.telephone,p->data.address,p->data.Email);
}
}
void Find_Num(LinkList &L) //按号碼查詢
{
LinkList q,p;
q=L->next;
printf("輸入要查詢的号碼:\n");
p=(LNode*)malloc(sizeof(LNode));
scanf("%s",p->data.telephone);
while(q!=NULL&&strcmp(q->data.telephone,p->data.telephone)!=0)
{
q=q->next;
}
if(q==NULL)
{
printf("通訊錄中沒有這個号碼!\n");
}
else
{ printf("已經找到此聯系人!\n");
printf("-------------------------------------------------------------------------------\n");
printf(" 姓名 電話号碼 位址 郵箱 \n");
printf("-------------------------------------------------------------------------------\n");
printf(" %s %s %s %s \n",p->data.name,p->data.telephone,p->data.address,p->data.Email);
}
}
Status CreateFromTail(LinkList &L) //采用尾插法在尾部插入元素
{
LinkList r, s;
r=L; //r指針始終動态指向連結清單的目前表尾
while(r->next)
{//尾插法,直接把指針移位到尾部
r=r->next;
}
s=(LinkList)malloc(sizeof(LNode));
printf("在尾部插入的聯系人資訊為:\n");
printf("-------------------------------------------------------------------------------\n");
printf(" 姓名 電話号碼 位址 郵箱 \n");
printf("-------------------------------------------------------------------------------\n");
scanf("%s%s%s%s",s->data.name,s->data.telephone,s->data.address,s->data.Email);
s->next=NULL;
r->next=s;
saveFile(L);
return OK;
}
//初始條件:線性表L已經存在
//在單鍊線性表L的第i個元素之前插入元素
Status ListInsert_L(LinkList &L)
{
LinkList s,p=L;
int j = 1,i;
printf("輸入要插入的位置:");
scanf("%d",&i);
while (p&&j < i)
{ // 尋找第i個結點
p = p->next;
++j;
}
if (!p || j > i) {printf("----無此位置添加失敗-----\n");return ERROR;} // i小于1或者大于表長
s = (LinkList)malloc(sizeof(LNode)); // 生成新結點
printf("插入的聯系人資訊為:\n");
printf("-------------------------------------------------------------------------------\n");
printf(" 姓名 電話号碼 位址 郵箱 \n");
printf("-------------------------------------------------------------------------------\n");
scanf("%s%s%s%s",s->data.name,s->data.telephone,s->data.address,s->data.Email);
s->next = p->next; // 插入L中
p->next = s;
saveFile(L);
return OK;
} // LinstInsert_L
Status Fund_LName(LinkList &L) //尋找該姓名的位置
{
LinkList s,p=L->next;
int i=0;
s=(LNode*)malloc(sizeof(LNode));
scanf("%s",s->data.name);
while(p!=NULL&&strcmp(p->data.name,s->data.name)!=0)
{
p=p->next;
++i;
}
return i+1;
}
//在單鍊線性表L的姓名元素之前插入元素
Status ListInsert_LName(LinkList &L)
{
LinkList s,q=L,p=L->next;
printf("輸入要在誰的姓名之前添加資訊:");
int i=Fund_LName(L);
int j=1;
while (q&&j < i-1)
{ // 尋找第i-1個結點
q = q->next;
++j;
}
if (p==NULL) {printf("----查無此人添加失敗-----\n");return ERROR;} // 如果沒有找到
s = (LinkList)malloc(sizeof(LNode)); // 生成新結點
printf("插入的聯系人資訊為:\n");
printf("-------------------------------------------------------------------------------\n");
printf(" 姓名 電話号碼 位址 郵箱 \n");
printf("-------------------------------------------------------------------------------\n");
scanf("%s%s%s%s",s->data.name,s->data.telephone,s->data.address,s->data.Email);
s->next = q->next; // 插入L中
q->next = s;
saveFile(L);
return OK;
}
//初始條件:線性表L已經存在
//删除第i個元素
Status ListDelete_L(LinkList &L)
{
LinkList p=L,q;
int j = 1,i;
printf("輸入要删除的位置:");
scanf("%d",&i);
while (p->next && j < i)
{ // 尋找第i個結點,并令p指向其前趨
p = p->next; ++j;
}
if (!(p->next) || j > i) {printf("----查無此人删除失敗-----\n");return ERROR;} // 删除位置不合理
q = p->next;
p->next = q->next; // 删除并釋放結點
free(q);
printf("----删除成功-----\n");
saveFile(L);
return OK;
} // ListDelete_L
Status ListDelete_LName(LinkList &L) //删除姓名為“XXX”的學生記錄
{
LinkList p=L,q;
printf("輸入要删除的學生的姓名:");
int j = 0,i=Fund_LName(L);
while (p->next && j < i-1)
{ // 尋找第i個結點,并令p指向其前趨
p = p->next; ++j;
}
if (!(p->next) || j > i-1) {printf("----查無此人删除失敗-----\n");return ERROR;} // 删除位置不合理
q = p->next;
p->next = q->next; // 删除并釋放結點
free(q);
printf("----删除成功-----\n");
saveFile(L);
return OK;
}
//初始條件:線性表L已經存在
//列印出所有元素
void PrintElem(LinkList L)
{
LinkList p=L->next ;
printf("目前的資訊為:\n");
printf("-------------------------------------------------------------------------------\n");
printf(" 姓名 電話号碼 位址 郵箱 \n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
printf(" %s %s %s %s \n",p->data.name,p->data.telephone,p->data.address,p->data.Email);
p=p->next;
}
printf("\n");
}
void saveFile(LinkList &L) //儲存通訊錄到檔案
{
FILE*fp;
LinkList p;
p=L;
if((fp=fopen("telebook.txt","wt"))==NULL) exit(0); // "wt"方式打開檔案時,如果源檔案中有内容,追加
if(p==NULL||p->next==NULL) //連結清單為空
printf("您的操作有誤,請確定您的通訊錄不為空!\n");
else
{
p=p->next;
while(p!=NULL)
{
fprintf(fp,"%s %s\t %s %s",p->data.name,p->data.telephone,p->data.address,p->data.Email);
fprintf(fp,"\n");
p=p->next;
}
fclose(fp);
printf("通訊錄已儲存!\n");
}
}
void List_free(LinkList L) //銷毀連結清單
{
LinkList p;
while(L!= NULL)
{
p=L;
L=L->next;
free(p);
exit(0);
//system("exit");
}
}
int main()
{ int n;
char class2,class3,class5,class6;
LinkList L;
InitList_L(L); //初始化連結清單
tip(); //printf
readFile(L); //讀取檔案
for(;;)
{
printf("請選擇<1-8>,退出<0>:");
scanf("%d",&n);
if(n>8)
break;
switch(n)
{
/* 功能:讀取檔案并顯示結果,顯示功能*/
case 1:
{
system("cls"); //清屏
PrintElem(L); //顯示檔案結果
tip1();
}
break;
/* 功能:插入,增加功能*/
case 2:
{
system("cls");
printf("-------------------------------------------------------------------------------\n");
printf(" A-在末尾添加****B-添加在第i條之前****C-添加在“xxx”之前****\n");
printf("-------------------------------------------------------------------------------\n");
printf("請選擇>>:");
fflush(stdin); /*fflush(stdin)是用來清空輸入緩沖區,
通常是為了確定不影響後面的資料讀取,
例如在讀完一個字元串後緊接着又要讀取一個字元,
此時應該先執行fflush(stdin)。*/
scanf("%c",&class2);
if(class2=='A'||class2=='a')
CreateFromTail(L);
if(class2=='B'||class2=='b')
ListInsert_L(L);
if(class2=='C'||class2=='c')
ListInsert_LName(L);
tip1();
}
break;
/*删除功能*/
case 3:
{ system("cls");//清屏
printf("-------------------------------------------------------------------------------\n");
printf(" A-删除第i條記錄****B-删除姓名為“xxx”的聯系人********\n");
printf("-------------------------------------------------------------------------------\n");
printf("請選擇>>:");
fflush(stdin);
scanf("%c",&class3);
if(class3=='A'||class3=='a')
ListDelete_L(L);
if(class3=='B'||class3=='b')
ListDelete_LName(L);
tip1();
}
break;
/*修改功能*/
case 4:
{
system("cls");//清屏
tip1();
}
break;
/* 查詢功能 */
case 5:
{
system("cls");//清屏
printf("-------------------------------------------------------------------------------\n");
printf(" A-通過姓名查找聯系人****B-通過電話号碼查找聯系人********\n");
printf("-------------------------------------------------------------------------------\n");
printf("請選擇>>:");
fflush(stdin);
scanf("%c",&class5);
if(class5=='A'||class5=='a')
Find_Name(L);
if(class5=='B'||class5=='b')
Find_Num(L);
tip1();
}
break;
// 功能:排序
case 6:
{ system("cls");//清屏
printf("-------------------------------------------------------------------------------\n");
printf(" A-通過姓名排序通訊錄****B-通過電話号碼排序通訊錄********\n");
printf("-------------------------------------------------------------------------------\n");
printf("請選擇>>:");
fflush(stdin);
scanf("%c",&class6);
if(class6=='A'||class6=='a')
//
if(class6=='B'||class6=='b')
//
tip1();
}
break;
case 8:
{ system("cls");//清屏
tip1();
}
break;
/* 退出 */
case 0:
{
//List_free(L);
system("cls"); //清屏
List_free(L);
}
break;
}
}
return 0;
}