XI`AN TECHNOLOGICAL UNIVERSITY
课程设计报告
课程名称
专
班
姓
学
业:
级:
名:
号:
指导教师:
成
绩:
年 月 日
一、题目:电话簿管理系统
此电话簿管理系统主要利用单链表或者结构数组实现(最好用单链表
实现),具有如下的四大功能模块。
1. 输入记录模块
从键盘逐个输入每个人的电话信息记录。
2. 查询记录模块
按照姓名查询或者按照电话进行查询,把满足条件的相关人信息显示
出来。(1)按照姓名查询;(2)按照电话查询;(3)按照姓名和电话
同时查询。
3. 更新记录模块
修改某一个人的电话信息;按照记录序号对电话簿排序(升序和降
序)。统计电话簿的信息的个数。插入一个电话记录;删除一个电话
记录。
4. 输出记录模块
显示所有电话簿的信息。
二、分析过程、思路
该系统的主要功能是对联系人进行管理,主要包括有输入模块、
输出模块、查询模块、修改模块、插入模块,因此该系统应该采用模
块化程序设计,先用 switch(多分支选择结构)来让用户选择要进
行的功能,然后再针对某一个功能来设计相应的程序。如图(1)。
图(1)
1
三、算法
以修改模块为例
四、函数模块介绍
1、输入模块
该模块主要功能为对用户所数据存入电脑中,方便读取。
2
首先建立一个包含姓名(name)、电话()、地址()的结构体。
然后使用自己定义的函数 create()在内存中创建联系人数据。
用户可以通过键盘选择 1,然后进入输入联系人的界面,按照提示用
键盘输入姓名、电话号码、地址。并且这里面还存在一个判断的过程,
如果用户输入“#”,直接从输入模块中退出,并且按 1 进行清屏。
如果用户没有输入“#”,则程序会自动在内存中开辟一个长度为 ID
的内存来存放信息。
2、输出模块
该模块主要功能是对用户所输入的信息进行输出,定义一个指针
变量*p,让 p=head,然后通过 printf 函数对全部的联系人信息进行
输出。
3、查询模块
该模块主要的功能是能让用户方便的对联系人进行查找,本程序
有两种查找方法,一是按姓名查找,二是按电话号码查找。其主要是
通过字符串比较函数 strcmp 把用户所输入的信息与之前输入的进行
逐个对比,如果 strcmp(p1->name(如果是按电话号码查找则为
tele),c==0,则说明用户之前所输入的信息中有,然后对其进行输
出。如果逐个对比后没有用户所输入的数据,则会提示用户“未找到
符合记录!”。
4、修改模块
修改有三种模式可以选择,一是修改联系人姓名,二是修改联系
人电话号码,三是修改联系人地址。该功能能够让用户自由的对联系
人信息进行更改,方便使用。
3
5、插入模块、删除模块
该模块可以让用户根据自己的需求随心所欲的添加/删除联系
人,对联系人进行实时的更新,方便用户使用。
五、源程序
#include
#include
#include
#include
#define ID struct id
struct id
{
char name[20];
char tele[20];
char addr[20];
ID *next;
};
ID *creat()
//添加数据模块
{
ID *p1,*p2,*head;
char str[20];
p1=p2=head=NULL;
4
printf("\t\t\t 开始输入记录(姓名 # 结束)!\n");
while(1)
{
printf("请输入姓名:\n");
scanf("%s",str);
//输入字符
if(strcmp(str,"#")==0) break;
p1=(ID*)malloc(sizeof(ID));
strcpy(p1->name,str);
printf("请输入电话号码:\n");
scanf("%s",p1->tele);
printf("请输入地址:\n");
scanf("%s",p1->addr);
if(head==NULL)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
5
}
p2->next=NULL;
return(head);
}
/*输入/添加记录*/
ID *insert(ID *head)
{
ID *temp,*p1,*p2;
printf("插入操作开始!!!\n");
temp=(ID *)malloc(sizeof(ID));
printf("请输入姓名:\n");
scanf("%s",temp->name);
printf("请输入电话号码:\n");
scanf("%s",temp->tele);
printf("请输入地址:\n");
scanf("%s",temp->addr);
if (head==NULL)
{
head=temp;
temp->next=NULL;
}
6
else
{
p1=head;
while(p1!=NULL)
{
p2=p1;
p1=p1->next;
}
p2->next=temp;
temp->next=NULL;
}
printf("插入成功");
return (head);
}
/*删除记录*/
ID *delet(ID *head)
{
ID *p1,*p2;
char str[20];
printf("请输入要删除的姓名:");scanf("%s",str);
p1=head;
if (head==NULL)
7