数据结构 课 程 设 计
题
目
系 (部)
班
姓
学
级
名
号
通讯录的制作
电子与信息工程系
09 级计算机科学与技术
张泽昊
2009222239
指导教师
付争方
2010 年 12 月 27 日
电子与信息工程系
《数据结构》课程设计任务书
设计
题目
已知技术
参数和设
计要求
通讯录的制作
设计目的:用《数据结构》中的双向链表作数据结构,结合 C语言基本知
识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中
去。
设计内容:本系统应完成一下几方面的功能:
输入信息——enter();
显示信息——display( );
查找以姓名作为关键字——search ( ) ,
删除信息——delete( );
存盘——-save
装入——load( )
设计要求:
1)每条信息至包含:姓名 (NAME )街道 (STREET)城市 (CITY)邮
编 (EIP)国家 (STATE)几项
2)作为一个完整的系统,应具有友好的界面和较强的容错能力
( ),
3)上机能正常运行
设 计 内
容 与 步
骤
1、结点结构的设计
2、算法设计与分析
3、程序设计、实现、调试
4、课程设计说明书
设计工作
计划与进
度安排
设计考核
要求
1、设计工作4学时
2、实现与调试 16学时
3、课程设计说明书 8 学时
1、考勤30%
2、课程设计说明书70%
计算机教研室制
2009222239
张泽昊
通讯录的制作
张泽昊
安康学院 计算机科学与技术 09 级 陕西省 安康市 725000
摘要:设计“通讯录管理系统”使其具有数据添加、删除、显示和查询等功能。使学生进一
步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以
及它们在程序中的使用方法。使学生掌握软件设计的基本内容和设计方法,并培养学生进行
规范化软件设计的能力。使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程
序设计的基本能力。
关键字:数据结构、通讯录、设计能力、调试
1 引言
在设计中我们利用双循环链表存储方式对信息进行存储 ,利用基本的输入输出 ,定义
五个信息选项,然后保存到一个文件里。读者可以利用姓名为关键字对所需要的信息进行查
找。也可以根据姓名进行删除,但由于我们知识的有限性,我们只能对信息进行简单的处理,
希望我们能在以后的学习中进一步改善。
2 课程设计报告内容:
2.1 系统功能模块图如下:
通讯录管理
建立
通讯录
添 加
保 存
查 找
删 除
退 出
2.2 设计结构体及函数表:
2.2.1结构体:
struct record
{
char name[20];
char street[20];
1
通讯录的制作
char city[20];
char eip[20]; //邮编
char state[20];
}people[500];//500 个记录,可修改
struct pnode
{
record data;
struct pnode *next, *prior;//双循环链表
};
typedef pnode * linklist;
2.2.2函数目录表:
void mainmenu();//主菜单
void searchmenu();//查询菜单
void enter();//添加新纪录
void search();//按条件搜索记录
void display();//显示全部记录
void load();//载入文件
void save();//写入文件
void del();//删除记录
void listinsert();//插入结点函数
void initlist();//初始化链表函数
2.3 实现主程序和各模块的调用关系:
void main() //主函数
{
initlist();//初始化链表
load();//载入文件
listinsert(); //增设新节点
while (1)
mainmenu(); //进入主菜单,有非法输入仍停留在主菜单
}
void mainmenu()//主菜单
{ 菜单界面;
printf("%c ",ch=getch());
switch (ch)
{
case '1':enter();break;
case '2':searchmenu();break;
case '3':del();break;
case '4':save();break;
2
2009222239 张泽昊
case '5':exit(0);
default:mainmenu();
}
}
void searchmenu()//查询菜单
{ 查询菜单;
printf("%c",ch=getch());
switch (ch)
{
case '1':display();break;
case '2':search();break;
case '3':mainmenu();break;
}
}
3 详细设计:
3.1 各个操作的算法实现:
3.1.1链表初始化
void initlist()//链表初始化函数
{
l=(linklist)malloc(sizeof(pnode));//动态申请内存
l->next=l;
l->prior=l;
}
3.1.2载入可能存在的通讯录文件
//无文件,新建立文件
void load()//装载已有文件信息
{
……;
……;
//已有文件,导入文件
……;
……;
}
3.1.3增加新结点
void listinsert()//增加新结点
{ //插入新结点,读入内存信息
……;
……;
3
通讯录的制作
}
3.1.4添加新纪录(可循环)
void enter()//添加新纪录
{ //信息输入
……;
……;
//是否继续添加?
……;
……;
}
3.1.5按姓名查找(同时显示全部符合要求的结果,包括没有保存到磁盘的)
//输入姓名
void search()
{
……;
……;
//输出查询结果
……;
……;
//检索可能的重名纪录
……;
……;
}
3.1.6显示所有记录(包括没有保存到磁盘的)
void display()//显示所有纪录
{ //显示内存中的所有记录
……;
……;
}
3.1.7删除指定记录(可循环)
//输入要删除的姓名
void del() //删除纪录
{
……;
……;
//查找符合条件的记录,对于每条记录询问是否删除;
//满足条件的输出结束,询问是否删除其他记录,循环
……;
……;
}
3.1.8保存到磁盘文件(实时写入文件)
void save()//
4