/**************************************************************/
/* 通訊錄管理系統 */
/* 製作:zky */
/* 時間:09/10/** */
/**************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct student /*學生資訊結構體*/
{
int id;
char name[20];
char sex[5];
int age;
char telephone[20];
int roomphone;
char homeadress[20];
}ST;
typedef struct date
{
struct student stu;
struct date *next;
}LNode,*LinkList;
LinkList Start_List(int n) /*建立*/
{
void pri(LinkList l);
LinkList L,k,s;
struct student x;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=1; i<=n; i++)
{
printf("/t第%d項元素",i);
s=(LinkList)malloc(sizeof(LNode));
printf("/n共7項資訊,逐個輸入,請注意字元類型/n請輸入學號(int):");
scanf ("%d",&x.id);
printf("請輸入姓名(char):");
scanf("%s",&x.name);
printf("請輸入性別(char):");
scanf("%s",&x.sex);
printf("請輸入年齡(int):");
scanf("%d",&x.age);
printf("請輸入手機號(char):");
scanf("%s",&x.telephone);
printf("請輸入宿舍號碼(int):");
scanf("%d",&x.roomphone);
printf("請輸入住址(char):");
scanf("%s",&x.homeadress);
s->stu=x;
s->next=L->next;
L->next=s;
}
pri(L);
return L;
}
LinkList List_Search(LinkList L,int i) /*尋找定位*/
{
LinkList p=L;
int j=0;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
LinkList Term_Search(LinkList L,int i) /*條件(學號)查詢*/
{
}
LinkList SwapInset_Link(LinkList L,int i,ST r) /*插入/替換*/
{
int j;
LinkList p,s;
p=List_Search(L,i);
s=(LinkList)malloc(sizeof(LNode));
s->stu=r;
s->next=p->next;
p->next=s;
return p;
}
LinkList Del_List(LinkList L,int n) /*刪除*/
{
LinkList p,s;
p=List_Search(L,n);
if(p==NULL)
{
printf("*****!錯誤!*****/n");
}
else
{
if(p->next==NULL)
{
printf("******空,無元素******/n");
}
else
{
s=p->next;
p->next=s->next;
free(s);
}
}
return p;
}
void pri(LinkList l) /*輸出函數*/
{
LinkList s;
int i=1;
s=l->next;
printf("通訊錄中成員資訊為:");
printf("/n/t%-7s%10s%8s%10s%8s%15s %10s","學號","姓名","性別","年齡","手機","宿舍號碼","家庭地址");
while(s!=NULL)
{
printf("/n%d",i);
printf("/t%-7d%10s%8s%10d%8s%15d %5s/n",s->stu.id,s->stu.name,s->stu.sex,s->stu.age,s->stu.telephone,s->stu.roomphone,s->stu.homeadress);
s=s->next;
i++;
}
}
int main()
{
printf("*********************歡迎使用通訊錄管理系統**************************");
int d,i;
int flg;
LinkList P,s;
P=(LinkList)malloc(sizeof(LNode));
printf("/n請輸入建立名單數量:");
scanf("%d",&d);
P=Start_List(d);
loop:printf("/n *****①插入 ②刪除*****");
printf("/n *****③替換 ④尋找*****");
printf("/n *****⑤退出 ***********");
printf("/n 請輸入需要進行的操作,輸入數字:");
scanf("%d",&d);
if(d==1)
{
struct student n;
printf("/n插入元素位置:(共7項逐個輸入,注意輸入字元類型,輸入錯誤後果自負)");
scanf("%d",&d);
printf("/n輸入資訊:");
printf("/n學號(整型):");
scanf ("%d",&n.id);
printf("姓名(字串):");
scanf("%s",&n.name);
printf("性別(字串):");
scanf("%s",&n.sex);
printf("年齡(整型):");
scanf("%d",&n.age);
printf("手機號:(字串)");
scanf("%s",&n.telephone);
printf("宿舍號碼:(整型)");
scanf("%d",&n.roomphone);
printf("住址:(字串)");
scanf("%s",&n.homeadress);
s=SwapInset_Link(P,d,n);
pri(P);
goto
loop;
}
if(d==2)
{
printf("/n請輸入需要刪除的元素:");
scanf("%d",&d);
s=Del_List(P,d-1);
pri(P);
P=s;
goto
loop;
}
if(d==3)
{
struct student x;
printf("請輸入需要替換的元素位置:");
scanf("%d",&d);
printf("請輸入新的元素資訊:/n");
printf("/n學號(int):");
scanf ("%d",&x.id);
printf("姓名(char):");
scanf("%s",&x.name);
printf("性別(char):");
scanf("%s",&x.sex);
printf("年齡(int):");
scanf("%d",&x.age);
printf("手機號(char):");
scanf("%s",&x.telephone);
printf("宿舍號碼(int ):");
scanf("%d",&x.roomphone);
printf("住址(char):");
scanf("%s",&x.homeadress);
P=SwapInset_Link(P,d,x);
pri(P);
goto
loop;
}
if(d==4)
{
printf("請輸入需要尋找元素的序號:");
scanf("%d",&d);
s=List_Search(P,d);
if(P!=NULL)
{
printf("/n%-5s%10s%10s%10s%15s%15s %10s","學號","姓名","性別","年齡","手機","宿舍號碼","家庭地址");
printf("/n%-5d%10s%10s%10d%15s%15d %5s/n",s->stu.id,s->stu.name,s->stu.sex,s->stu.age,s->stu.telephone,s->stu.roomphone,s->stu.homeadress);
}
if(P==NULL)
{
printf("/n/t******************");
printf("/n/t**!!查無此元素!!**");
printf("/n/t*******************");
}
goto
loop;
}
if(d==5)
{
exit(0);
}
return 0;
}