课程设计通讯录管理的设计与实现.docx
《课程设计通讯录管理的设计与实现.docx》由会员分享,可在线阅读,更多相关《课程设计通讯录管理的设计与实现.docx(33页珍藏版)》请在冰豆网上搜索。
课程设计通讯录管理的设计与实现
课程设计(大作业)报告
课程名称:
数据结构课程设计
设计题目:
通讯录管理的设计与实现
院系:
信息技术学院
课程设计(大作业)任务书
姓名:
院(系):
信息技术学院
专业:
计算机应用技术学号:
201011020120
任务起止日期:
2011-12-26~2011-12-30
课程设计题目:
通讯录管理的设计与实现
课程设计要求:
1)问题描述
通讯录管理系统一般包括通讯者结点信息的插入、查询、删除、输出功能,通讯者结点的信息一般包括编号、姓名、性别、电话、地址等项。
2)基本功能
(1)通讯录的建立;
(2)通讯者信息的插入;
(3)通讯者信息的查询(按姓名或编号查询);
(4)通讯者信息的删除;
(5)通讯录信息的输出;
工作计划及安排:
1、问题分析和任务定义;(0.5天)
2、数据类型和结点结构设计;(0.5天)
3、算法设计与分析(1.5天)
4、编码实现和上机调试;(1.5天)
5、总结和整理课程设计报告。
(1天)
指导教师签字
2011年12月29日
课程设计(大作业)成绩
课程设计题目:
通讯录管理的设计与实现
总结:
我们经过一个星期的时间把我们的通讯录管理的设计与实现做了出来,时间有些赶,做出来的有点不是很好,我们主要做了菜单模块:
显示通讯员信息的菜单,共用户选择所需功能;输出模块:
添加删除功能:
能根据通讯员人事的变动情况,添加删除记录,利用voidAdd(Linkl)实现添加,利用voidDel(Linkl)实现删除;显示模块:
把通讯员的信息显示出来,通过voidDisp(Linkl)来实现;查询功能:
能根据编号和姓名进行查询通过voidQur(Linkl)实现;编辑功能(高级):
根据查询对相应的记录进行修改,并存储;保存功能:
能对输入的数据进行相应的存储;而我主要的是完成主菜单,添加,删除,显示四个模块和其他的模块的完善,我们分工合作,而另一些部分,我虽然没写,但是组员是在一边写一边跟我讲解每条语句的意思是什么,而我写的时候,组员也在一边听,所以我们都相当于写了全部的模块。
指导教师评语:
成绩:
填表时间:
指导教师签名:
课程设计(大作业)报告
一、题目分析
根据题目要求,人事信息是存放在文件中的,所以应该提供相应的文件的输入输出的功能,在程序中应该有添加,删除,查询,编辑,保存等程序实现相应的操作,另外菜单式的选择方式选择程序的功能也是必须需的。
另外程序中要求存储的模块,采用的方式均为将原文件中的所有数据读入内存,在内存中处理之后以覆盖的方式写入文件中重新储存,这样的方法容易理解、容易编写;而我们使用的是单链表的形式,它的好处就是对于频繁进行插入与删除的线性表适用。
二、总体设计思路
根据以上需求分析,将程序分成以下几个模块:
1.添加和删除
****添加人员信息并保存
(1)
****按名称和编号查询与删除记录并保存
(2)
2.查询与编辑
****按名称和编号查询
****重新编辑信息并保存
3.主菜单
4.文件的导入
5.文件的保存
6.信息的显示
Y
Y
N
三、实验环境
VisualC++
四、方案比较
无法运行的程序代码
1.structemployee//定义一个employee的结构体
{
charnum[10];//通讯员编号
charname[15];//通讯员姓名
charsex[15];//通讯员性别
longinttelephone;//通讯员电话
charaddress[30];//通讯员地址
intage;//通讯员年龄
}
typedefstructnode
{
structemployeedata;
structnode*next;//建立一个链表
}Node;
错误点:
意外的结构节点('struct''node')
2.voidDisp(Node*employee)//输出通讯员信息
{
Node*p;
p=employee->next;
if(!
p)
{
printf("\n>>>>>>>>>提示:
没有资料可以显示!
\n");
return;
}
错误点:
发现“{”在文件范围内(缺少函数头?
)
正确运行的程序代码
1.structemployee
{
charname[15];/*通讯员姓名*/
charnum[10];/*工号*/
charsex[4];//通讯员性别
longinttelephone;//通讯员电话
charaddress[30];//通讯员地址
intage;//通讯员年龄
};
typedefstructnode
{
structemployeedata;
structnode*next;
}Node,*Link;
2.voidDisp(Linkl)//显示单链表l中存储的通讯员记录,内容为employee结构中定义的内容
{
intcount=0;
Node*p;
p=l->next;//l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息
if(!
p)/*p==NULL,NUll在stdlib中定义为0*/
{
printf("\n=====>提示:
没有通讯员记录可以显示!
\n");
return;
}
五、程序代码
//C语言课程设计职工信息管理系统-单链表实现
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
intsaveflag=0;/*是否需要存盘的标志变量*/
structemployee
{
charname[15];/*通讯员姓名*/
charnum[10];/*工号*/
charsex[4];//通讯员性别
longinttelephone;//通讯员电话
charaddress[30];//通讯员地址
intage;//通讯员年龄
};
typedefstructnode
{
structemployeedata;
structnode*next;
}Node,*Link;
//Linkl(注意是:
字母l不是数字1)
voidadd(Linkl);
voiddisp(Linkl);//查看职工所有信息
voiddel(Linkl);//删除功能
Node*Locate(Linkl,charfindmess[],charnameornum[]);
voidQur(Linkl);//查询功能
voidTongji(Linkl);//统计
voidSort(Linkl);//排序
voidModify(Linkl);//修改功能
voidsave(Linkl);//将单链表l中的数据写入文件
voidprinte(Node*p);//本函数用于打印链表中某个结点的数据内容*/
//以下4个函数用于输出中文标题
voidprintstart();
voidWrong();
voidNofind();
voidprintc();
voidmenu()
{
printf("\t*****************************************************************\n");
printf("\t**\n");
printf("\t*通讯员信息管理系统*\n");
printf("\t**\n");
printf("\t*[1]增加职工信息[2]删除职工信息*\n");
printf("\t*[3]查询职工信息[4]修改职工信息*\n");
printf("\t*[5]插入职工记录[6]保存职工信息*\n");
printf("\t*[7]显示数据[0]退出系统*\n");
printf("\t**\n");
printf("\t*****************************************************************\n");
}//voidmenu菜单结束
voidDisp(Linkl)//显示单链表l中存储的通讯员记录,内容为employee结构中定义的内容
{
intcount=0;
Node*p;
p=l->next;//l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息
if(!
p)/*p==NULL,NUll在stdlib中定义为0*/
{
printf("\n=====>提示:
没有通讯员记录可以显示!
\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();//打印横线
printc();//打印各学科标题
printf("\n");
while(p)//逐条输出链表中存储的通讯员信息
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}//voidDisp结束
voidprintstart()//打印横线
{
printf("-----------------------------------------------------------------------\n");
}
voidWrong()//如果你的输入有错误的话就会输出
{
printf("\n=====>提示:
输入错误!
\n");
}
voidNofind()//通讯员信息找不到
{
printf("\n=====>提示:
没有找到该职工!
\n");
}
voidprintc()/*本函数用于输出中文*/
{
printf("工号\t姓名\t性别\t电话\t住址\t年龄\n");
}
voidprinte(Node*p)/*本函数用于打印链表中某个结点的数据内容*/
{
printf("%s\t%s\t%s\t%d\t%s\t%d\t\n",p->data.num,p->data.name,p->data.sex,p->data.telephone,p->data.address,p->data.age);
}
//Locate(l,findmess,"num");
/*该函数用于定位连表中符合要求的结点,并返回该指针*/
Node*Locate(Linkl,charfindmess[],charzcornum[])
{
Node*r;
if(strcmp(zcornum,"num")==0)/*按工号查询*/
{