學生通訊錄的制作 如何制作簡易電子版通訊錄

對以下通訊錄選用順序表或單鏈表進行存儲,設計一個程序實現:
(1)顯示通訊錄中所有記錄 。
(2)查找并輸出學生姓名為張江的學生的所有信息 。
(3)在通訊錄中的第三行添加一個新同學的信息(內容自定) 。
(4)刪除通訊錄中第五行的學生信息 。

學生通訊錄的制作 如何制作簡易電子版通訊錄

文章插圖

#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct
{
int xh;
char name[10];
char tel[11];
}STU;
typedef STU elemtype;
typedef struct
{
elemtype data[10];
int length;
}sqlist;
void main()
{
void Lnitlist(sqlist *&L);
void cin(sqlist *&L,int a);
void cout(sqlist *&L);
void seek(sqlist *L);
bool ListInsert(sqlist *&L);
bool ListDelete(sqlist *&L);
void endcout(sqlist *&L);
sqlist *L;
int a;
printf(“你需要輸入幾個學生的信息n”);
scanf(“%d”,&a);
Lnitlist(L);
cin(L,a);
cout(L);
seek(L);
ListInsert(L);
ListDelete(L);
endcout(L);
}
void Lnitlist(sqlist *&L)
{
L=(sqlist *)malloc(sizeof(sqlist));
L->length=0;
}
void cin(sqlist *&L,int a)
{
int i;
for(i=0;i<a;i++)
{
printf(“請分別輸入學號,名字,電話n”);
scanf(“%d%s%s”,&L->data[i].xh,L->data[i].name,&L->data[i].tel);
}
L->length=a;
}
void cout(sqlist *&L)
{
int i,s=L->length;
for(i=0;i<s;i++)
printf(“學號為%d的同學叫%s電話為%s的n”,L->data[i].xh,L->data[i].name,L->data[i].tel);
}
void seek(sqlist *L)
{
char s[10],*p;
p=s;
int i,j=1;
elemtype e;
printf(“請輸入姓名n”);
while(j)
{
scanf(“%s”,s);
for(i=0;i<L->length;i++)
{
if(strcmp(p,L->data[i].name)==0)
{
e=L->data[i];
j–;
printf(“%s同學的學號為%d電話為%sn”,p,e.xh,e.tel);
break;
}
}
if(i==L->length)
printf(“查無此人,請重新輸入n”);
}
}
bool ListInsert(sqlist *&L)
{
int i,j;
elemtype e;
printf(“請輸入新同學信息n”);
scanf(“%d%s%s”,&e.xh,&e.name,&e.tel);
printf(“你要把他放在第幾位?n”);
scanf(“%d”,&i);
if(i<1 || i>L->length+1)
return false;
i–;
for(j=L->length;j>i;j–)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(sqlist *&L)
{
int i,j;
printf(“請輸入你要刪除第幾個同學n”);
scanf(“%d”,&i);
if(i<1 || i>L->length)
return false;
i–;
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length–;
return true;
}
void endcout(sqlist *&L)
{
int i,s=L->length;
for(i=0;i<s;i++)
printf(“學號為%d的同學叫%s電話為%s的n”,L->data[i].xh,L->data[i].name,L->data[i].tel);
}
運行
你需要輸入幾個學生的信息
5
請分別輸入學號,名字,電話
178101 楊文 13788041567
請分別輸入學號,名字,電話
178102 張江 13478920019
請分別輸入學號,名字,電話
178103 劉龍 15077471314
請分別輸入學號,名字,電話
178104 黃麗 15834372384
請分別輸入學號,名字,電話
178105 周勇 18977413478
學號為178101的同學叫楊文電話為13788041567的
學號為178102的同學叫張江電話為13478920019的
學號為178103的同學叫劉龍電話為15077471314的
學號為178104的同學叫黃麗電話為15834372384的
學號為178105的同學叫周勇電話為18977413478的
請輸入姓名
張江
張江同學的學號為178102電話為13478920019
請輸入新同學信息
178106 王輝 13623778223
你要把他放在第幾位?
3
請輸入你要刪除第幾個同學
5
學號為178101的同學叫楊文電話為13788041567的
學號為178102的同學叫張江電話為13478920019的
學號為178106的同學叫王輝電話為13623778223的
學號為178103的同學叫劉龍電話為15077471314的
學號為178105的同學叫周勇電話為18977413478的
解題分析
通訊錄中每個學生的信息作為一個數據元素,其類型可定義為:
typedef struct
{int xh;
char xm[10];
int tel;
}STU;
以順序表作為存儲結構時,順序表的類型可定義為:
typedef STU ElemType;
typedef struct
{ElemType data[10];
int length;
}SqList ;
以單鏈表作為存儲結構時,單鏈表中每個結點的類型可定義為:
typedef STU ElemType;
typedef structLNode
{ElemType data;
struct LNode *next;
} LinkNode ;
題目要實現的功能:
(1)顯示通訊錄中所有記錄 。
(2)查找并輸出學生姓名為張江的學生的所有信息 。
(3)在通訊錄中的第三行添加一個新同學的信息(內容自定)
(4)刪除通訊錄中第五行的學生信息 。
實現以上功能就是要編寫主調函數來調用順序表或單鏈表的基本運算算法 。
如:先調用初始化運算完成建立一個空的順序表或單鏈表,然后輸入通訊錄的所有信息,從而得到一個非空順序表或單鏈表…….
在已得到非空表的基礎上,再通過調用輸出、查找、插入和刪除順序表或單鏈表元素的運算算法來完成各項功能 。
【學生通訊錄的制作 如何制作簡易電子版通訊錄】關鍵搞清楚算法調用時要提供哪些參數,這些參數要根據所屬的類型在調用前先定義好 。