1. 学生通讯录管理系统的设计与实现
1.1 问题的描述
学生通讯录管理系统是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。
1.2 问题分析和任务定义
(1)输入数据建立通讯录;
(2)查询通讯录中满足要求的信息;
(3)插入新的通讯录信息;
(4)删除不需要的通讯录信息;
(5)查看所有的通讯录信息。
1.3 数据类型和系统设计
(1)存储结构设计
采用链表来存储“学生通讯信息”,其中链表结点有4个分量构成:通讯录成员学号、姓名、电话号码、指向下一个成员的指针。
(2)系统功能设计
本系统设置了5个子功能菜单,5个子功能的设计描述如下:
① 建立通讯录系统。可以一次输入多个成员通讯录的信息,建立通讯录。该功能有由creatIncreLink() 函数实现。
② 插入通讯录记录。每次可以插入一个成员通讯录的信息,如果要连续插入多个成员通讯录信息必须多次选择该功能。该功能由insertYouXu() 函数实现。
③ 查询通讯录记录。可以按两种方式查询所需要的通讯录成员记录,一是按学号查询,而是按姓名查询。分别由searchNum() 和searchName() 函数实现。
④ 删除通讯记录。可以对通讯录中不再需要的信息进行删除。有三种删除方式,按序号进行删除,按学号进行删除和按姓名进行删除。分别由deleteElem() ,delNum() 和delName() 三个函数实现。
⑤ 显示通讯录记录。可以查看通讯录中所有通讯录成员记录。该功能由printList() 函数实现。
(3)系统主界面的设计
为了实现学生通讯管理系统各功能的管理,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图1所示。
图1 “学生通讯录管理系统”主菜单
1.4 编码实现
(1)链表结点类型的定义
typedef struct LNode
{ int number;
double telenum;
char name[20];
struct LNode *next;
}LNode,*LinkList;
(2)建立链表的函数,主要用来建立通讯录。
LinkList creatIncreLink() //创建一个存放通讯录成员的非递减有序表,返回头结点地址
{ LinkList L=(LinkList)malloc(LEN); //头结点
L->next=NULL;
LinkList p;
int num=1;
int number;
double telenum;
char name[20];
printf("请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结束标志\n");
printf("请输入学号 %d:",num);
scanf("%d",&number);
printf("请输入姓名 %d: ",num);
char temp=getchar();
gets(name);
printf("请输入电话号码 %d:",num);
scanf("%lf",&telenum);
while (number>=0)
{
p=(LinkList)malloc(LEN); //新结点
p->number=number;
p->telenum=telenum;
strcpy(p->name,name);
insertYouXu(L,p); //有序的插入新结点
num++;
printf("请输入学号 %d:",num);
scanf("%d",&number);
printf("请输入姓名 %d: ",num);
temp=getchar();
gets(name);
printf("请输入电话号码 %d:",num);
scanf("%lf",&telenum);
} return(L);
}
(3)插入通讯记录
void insertYouXu(LinkList L,LinkList Elem)