通過兩周的程序?qū)W習(xí),我們掌握了很多基本的編程知識啦撮。
這次在老師的帶領(lǐng)之下谁撼,我們完成了通訊錄的相關(guān)編程裕坊。
?
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
?
#include <windows.h>
#define MaxSize 100
//聯(lián)系人數(shù)據(jù)類型構(gòu)造
struct person
{
??????? char name[20];//name
??????? char phone[13];//phone
};
?
?
typedef struct
{?????? struct person data[MaxSize];????????? ??????? //存放順序表元素
?? ? int length;???????????????????????????????????????? //存放順序表的長度
} SqList;???????????????????????????????????????????? //順序表的類型定義
?
/*
函數(shù)功能:初始化順序表
函數(shù)形參: SqList *&L
函數(shù)返回值:無
*/
void InitList(SqList *&L)
{
??????? L=(SqList *)malloc(sizeof(SqList));?? ??????? //分配存放線性表的空間
??????? L->length=0;
}
/*
函數(shù)功能:創(chuàng)建順序表
函數(shù)形參: SqList *L,struct perspn a[],int n
函數(shù)返回值:無
*/
void CreateList(SqList *L,struct person a[],int n)????? //建立順序表
{
??????? int i;
?
??????? for (i=0;i<n;i++)
???????????????? L->data[i]=a[i];
??????? L->length=n;
}
/*
函數(shù)功能:判斷順序表是否為空
函數(shù)形參: SqList *L
函數(shù)返回值:1代表空表舟肉,0代表非空表
*/
int ListEmpty(SqList *L)
{
??????? return(L->length==0);
}
?
/*
函數(shù)功能:創(chuàng)輸出順序表
函數(shù)形參: SqList *L
函數(shù)返回值:無
*/
void DispList(SqList *L)
{
??????? int i;
?
??????? for (i=0;i<L->length;i++)
???????????????? {printf("name:%s \n",L->data[i].name);
??????? printf("name:%s \n",L->data[i].phone);
??????? }
??????? printf("\n");
}
/*
函數(shù)功能:求順序表表長
函數(shù)形參: SqList *L
函數(shù)返回值:整數(shù)表示? 表的長度
*/
int ListLength(SqList *L)
{
??????? return(L->length);
}
/*
函數(shù)功能:按位序找順序表中元素
函數(shù)形參: SqList *L,struct perspn a[],int n
函數(shù)返回值:0表示未找到修噪,1表示查找到
*/
int GetElem(SqList *L,int i,struct person &e)
{
??????? if (i<1 || i>L->length)
???????????????? return 0;
??????? e=L->data[i-1];
??????? return 1;
}
?
/*
函數(shù)功能:銷毀順序表
函數(shù)形參: SqList *&L
函數(shù)返回值:無
*/
void DestroyList(SqList *&L)
{
??????? free(L);
}
?
/*
函數(shù)功能:根據(jù)元素查找位序
函數(shù)形參:L,e
函數(shù)返回值:0---未查找到 非0---該元素的邏輯位序
*/
int ElemLocate(SqList *L,struct person e)
{
??????? int i;? //說明語句
??????? for(i=0;i<L->length;i++)
???????????????? if(strcmp(e.name,L->data[i].name)==0)? printf("此人電話為: %s",L->data[i].phone);return i+1;
??????? return 0;
}
?
/*
函數(shù)功能;InsertList()在指定位置上插入元素
函數(shù)形參:L,i(邏輯位序),e
函數(shù)返回值:返回0表示插入失斅访摹(位序不合法黄琼,順序表已滿),返回1插入成功
*/
int InsertList(SqList *L,int i,struct person e)
{
??????? int j;
?
??????? //判斷位序合法性整慎,是否溢出
??????? if(i<1||i>L->length) return 0;
??????? if(L->length==MaxSize) return 0;
??????? //插入點后所有數(shù)據(jù)依次后移
??????? for(j=L->length-1;j>=i-1;j--)
???????????????? L->data[j+1]=L->data[j];
??????? L->data[i-1]=e;
??????? L->length++;
??????? return 1;
}
?
/*
函數(shù)功能:指定位置上的元素刪除
函數(shù)形參:L,i,e(保存被刪除元素脏款,類似回收站)
函數(shù)返回值:返回0表示刪除失敗(位序不合法裤园,或空表)撤师,返回1表示成功刪除
*/
int DeleteList(SqList *L,int i,struct person &e)
{
??????? int j;
?
??????? //判斷位序是否合法 是否空表
??????? if(i<1||i>L->length) return 0;
??????? if(L->length==0)??? return 0;
??????? //先保存被刪除元素
??????? e=L->data[i-1];
??????? //刪除操作的實質(zhì)就是刪除點后所有元素前移
??????? for(j=i;j<L->length;j++)
???????????????? L->data[j-1]=L->data[j];
??????? L->length--;
??????? return 1;
?
};
?
?
?
?
void menu()
{
??????? printf("手機通訊錄程序\n");
??????? printf("1--------顯示所有聯(lián)系人\n");
??????? printf("2--------顯示姓名查找聯(lián)系人\n");
??????? printf("3--------增加一個聯(lián)系人\n");
??????? printf("4--------刪除一個聯(lián)系人\n");
??????? printf("0--------退出系統(tǒng)\n");
}
?
int ElemLocate2(SqList *L,struct person e)
{
??????? int i,k;? //說明語句
??????? for(i=0;i<L->length;i++)
???????????????? if(strcmp(e.name,L->data[i].name)==0)?
???????????????????????? k=i+1;
??????? int j;
?
??????? //判斷位序是否合法 是否空表
??????? if(k<1||k>L->length) return 0;
??????? if(L->length==0)??? return 0;
??????? //先保存被刪除元素
??????? e=L->data[k-1];
??????? //刪除操作的實質(zhì)就是刪除點后所有元素前移
??????? for(j=k;j<L->length;j++)
???????????????? L->data[j-1]=L->data[j];
??????? L->length--;
??????? return 1;
}
?
int main()
{
??????? int i=1;
??????? SqList *L;
??????? int select;
??????? struct person phone[]={{"fxc","123456789"},{"fc","23654534"}},e;
??????? printf("正在初始化順序表...\n");
??????? InitList(L);
??????? printf("正在導(dǎo)入數(shù)據(jù)...\n");
??????? CreateList(L,phone,2);
??????? system("PAUSE");
??????? system("CLS");
???????
??????? while(1)
??????? {
??????? menu();
??????? scanf("%d",&select);
??????? switch(select)
??????? ?{
??????? case 1: DispList(L);break;
??????? case 2: printf("請輸入要查找的姓名");scanf("%s",e.name);ElemLocate(L,e);????????? break;
??????? case 3: printf("請輸入要添加的聯(lián)系人");scanf("%s %s",e.name,e.phone);InsertList(L,i,e);DispList(L);??????????? break;
??????? case 4: printf("請輸入要刪除的聯(lián)系人姓名");scanf("%s",e.name);ElemLocate2(L,e);DispList(L);????????? break;
??????? case 0: exit(0);
??????? ?}
??????? }
system("PAUSE");
return 0;
}