通讯录管理.doc
《通讯录管理.doc》由会员分享,可在线阅读,更多相关《通讯录管理.doc(29页珍藏版)》请在冰豆网上搜索。
计算机科学与技术学院
《C高级语言程序设计》课程设计报告
(2014/2015学年第一学期)
学生姓名:
薛晋
学生专业:
网络工程
学生班级:
132003班
学生学号:
201320030328
指导教师:
赵俊忠
2015年 1月 10日
计算机科学与技术学院
课程设计任务书
课程设计名称
《C高级语言程序设计》课程设计
课程设计题目
通讯录管理
学生姓名
薛晋
专业班级
网工132003
学号
201320030328
课程设计任务内容
[问题描述]将通讯录的姓名、性别,年龄、电话等进行结构体的声明,再定义结构数组以便进行统一处理。
之后设计菜单函数,显示操作项目,并对添加、显示、查找、删除、排序等功能模块进行调用,以实现管理系统的整体功能。
是用户的工作平台,也是用户与系统对话的平台。
像删除、查找等模块都有子菜单,这样使条理更清晰,并且加入通讯录的容量,使用户可以了解通讯录的存储。
[基本要求]
(1)程序基于结构体数组设计出了通讯录管理系统的基本功能,能对成员的学号、姓名、年龄、电话等进行添加、显示、查找、删除等操作,并且能通过电话号通讯录。
[测试要求]
(1)通信录信息通过链表形式存储,按电话号码降序存储。
按电话号码查询学生信息功能在排序的链表基础上实现。
指导教师:
赵俊忠
时间:
2015年1月10日
目录
一功能需求描述 1
二系统设计描述 2
2.1任务分解 2
2.2函数名以及功能 2
三算法描述 3
3.1流程介绍 3
3.1.1添加流程 3
3.1.2显示流程 4
3.1.3查找流程 5
3.1.4删除流程 5
3.1.5排序流程 6
3.1.6退出流程 6
四开发过程描述 7
4.1:
源代码 7
五设计心得体会 20
附录一:
必选题(链表) 21
源代码:
21
一功能需求描述
在C语言中,数组这样的构造数据类型可以将多个数据用一个名字来命名,为储存和处理带来很大的方便。
但是现实生活中还存在着大量需要作为一个整体来处理的数据,而这些数据的类型又不尽相同。
例如要处理通讯录数据,需要处理学生的学号(num)、姓名(name)、性别(sex)、年龄(age)、电话(phone)、和工作(job)等数据。
这样一组相互关联的数据如果用简单的变量储存,则难以反映出它们的内在联系,而且是程序冗长晦涩;而数组则无法容纳不同变量的元素。
结构体(structure,也称“结构”)就是C语言所提供的处理一组不同类型数据的类型。
但是这种类型需要用户自行定制,因为处理学生的结构体形式与处理教师的结构体形式不同,处理人的结构体形式与处理企业、处理产品、处理公文等的结构体形式均不同,等等。
因此,在结构体的大框架内,还要根据具体需要来定制自己的结构体类型[1]。
一个结构体只能存放一个对象的信息,但经常都是对一组对象来处理若干数据,这样就会用到结构体数组,结构体数组可以将若干待处理对象编成数组形式,然后再把每个对象的信息又存放到结构体中,这样就实现了对若干不同的对象来处理若干不同类型的数据。
因此结构体把数组在生活当中有广泛的应用[2]。
随着全球信息化水平逐步提高,通讯系统逐步成熟,通信成为我们生活中不可缺少的一部分。
通信系统的发达,通信方式的增多,记录信息量的增大,对于通信信息的处理将越来越复杂,仅仅靠人工操作已经满足不了人们的需求,使用功能全、信息量大的管理系统是一个不错的选择。
本次课程设计主要运用C语言中的结构体、数组、链表等数据结构,设计一个简单的管理系统应用程序。
本次课设主要考察了对函数的编写,对指针和数组的相关操作、结构体的定义和使用、算法的分析及设计、流程图的绘制等项目,对于熟悉编程环境、掌握编程流程、了解编程规范都有积极作用。
通过这次课设我们可以了解到数据结构算法的基本思想、锻炼编程思维,养成良好的编程习惯以及严谨的编程态度,为以后的设计打下良好的基础。
本程序基于结构体数组设计出了通讯录管理系统的基本功能,能对成员的学号、姓名、年龄、电话等进行添加、显示、查找、删除等操作,并且能通过姓名通讯录,符合一般管理系统的功能。
二系统设计描述
2.1任务分解
首先,将通讯录的姓名、性别,年龄、电话等进行结构体的声明,再定义结构数组以便进行统一处理。
之后设计菜单函数,显示操作项目,并对添加、显示、查找、删除、排序等功能模块进行调用,以实现管理系统的整体功能。
是用户的工作平台,也是用户与系统对话的平台。
像删除、查找等模块都有子菜单,这样使条理更清晰,并且加入通讯录的容量,使用户可以了解通讯录的存储,总体设计框图如图1所示。
主菜单
1
添加通讯录
2
显示通讯录
3
查找通讯录
4
删除通讯录
5
排序通讯录
6
退出并保存
图1程序的总体框图
2.2函数名以及功能
voidHandleChoice_f(int);//功能选择
voidAddRecord_f();//加入记录
voidInsertNode_f(Node*);//插入节点
Node*InsertPoint_f(char*);//寻找插入点
voidMakeNewHead_f(Node*);//
voidAddToEnd_f(Node*);//
voidMoveToEnd_f();//
voidDisplayList_f();//显示全部记录
voidDeleteRecord_f();//删除记录
voidDelNode_f(Node*);//删除节点
voidDelList_f();//删除链表
voidSearchByPhoneNum_f();//按电话查找记录
voidWriteFile_f();//记录写入文件并关闭程序
voidLoadFile_f();//加载原有记录
intlind_num(plistp_head);
plistlind_shun(plistp_head);//排序
boolbig_char(char*ch0,char*ch1);
三算法描述
3.1流程介绍
本程序一共有六个流程,即添加流程、显示流程、查找流程、删除流程、排序流程、保存流程及退出流程,为分别实现上述六种功能,下面介绍一下这六个流程。
3.1.1添加流程
通过此流程可以实现对信息的添加,首先先对容量进行测试如果没有容量则提示信息已满,若有容量,则显示通讯录使用量和总容量,再对姓名、学号等逐项输入,输入完毕后系统会提示是否继续添加,若是,则继续添加,若否则返回菜单函数。
开始
N
Y
内存分配允许?
输入信息
内存错误
InsertNode_f
结束
图2添加功能的流程图
3.1.2显示流程
通过此流程可以对录入的信息进行输出,只有当有录入信息时才会输出,否
则显示“没有此学生”。
流程图如图3所示。
结束
N
Y
开始
“没有此记录”
是否有该记录?
显示通讯录信息
图3显示功能的流程图
3.1.3查找流程
通过此流程可以实现对录入信息的查找,此程序支持三种查找方式,按学号、姓名、电话查找,然后判断是否有此人,有则输出该用户信息,并且显示通讯录使用容量和剩余容量,否则输出“没有此人信息”并进行重新选择。
流程图如图4所示。
结束
Y
开始
输入查找人姓名
9姓名
N
判断是否有此人?
“没有此记录”
输出此人信息
图4查找功能的流程图
3.1.4删除流程
通过此流程可以对录入的信息进行删除。
此程序提供学号、姓名、电话来查找删除人若没有此人,则显示没有此人信息,并返回删除菜单。
若有此人,系统会询问用户是否删除信息,是则删除,否则不删除,并返回删除菜单。
流程图如图5所示。
开始
输入删除人姓名
9姓名
N
Y
判断是否有此人?
显示信息
没有此人信息
节点删除释放空间
结束
图5删除功能的流程图
3.1.5排序流程
通过此函数可以实现对录入信息进行排序。
的功能此程序提供按学号和姓名的排序,此函数的算法即冒泡法排序通过对排序量进行交换,从而达到排序的目的。
图6排序功能的流程图
开始
以号码排序
返回首节点
3.1.6退出流程
开始
写入文件
删除整个链表
结束
四开发过程描述
4.1:
源代码
#include//标准输入输出头文件
#include//字符数组定义的头文件
#include//头文件
#defineboolint
#definefalse0//宏定义
#definetrue1//宏定义
typedefstructnode*plist;//定义指针类型结构plist
#defineNodestructnode//宏定义Node=structnode
Node//结构体类型定义
{
charszName[20];
charszSex[4];
charszAge[4];
charszPhoneNum[12];
charszJob[30];
Node*next;//结构体中指针
};
Node*strpHead;//全局变量,链表头指针
Node*strpCurrent;//用于指向当前正在操作的结点
//函数原型声明
voidHandleChoice_f(int);//功能选择
voidAddRecord_f();//加入记录
voidInsertNode_f(Node*);//插入节点
Node*InsertPoint_f(char*);//寻找插入点
voidMakeNewHead_f(Node*);//
voidAddToEnd_f(Node*);//
voidMoveToEnd_f();//
voidDisplayList_f();//显示全部记录
voidDeleteRecord_f();//删除记录
voidDelNode_f(Node*);//删除节点
voidDelList_f();//删除链表
voidSearchByPhoneNum_f();//按电话查找记录
voidWriteFile_f();//记录写入文件并关闭程序
voidLoadFile_f();//加载原有记录
intlind_num(plistp_head);
plistlind_shun(plistp_head);//排序
boolbig_char(char*ch0,char*ch1);