课程设计通讯录管理系统设计与实现文档格式.docx
- 文档编号:3600695
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:33
- 大小:631.42KB
课程设计通讯录管理系统设计与实现文档格式.docx
《课程设计通讯录管理系统设计与实现文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计通讯录管理系统设计与实现文档格式.docx(33页珍藏版)》请在冰点文库上搜索。
1.严蔚敏,吴伟民.数据结构.清华大学出版社,2007.
2.苏仕华.数据结构课程设计.机械工业出版社,2010.
3.滕国文.数据结构课程设计.清华大学出版社,2010.
指导教师(签名):
教研室主任(签名):
课程设计成绩评定表
出勤
情况
出勤天数
缺勤天数
成
绩
评
定
出勤情况及设计过程表现(20分)
课设答辩(20分)
设计成果(60分)
总成绩(100分)
提问
(答辩)
问题
综
合
指导教师签名:
年月日
1引言
通讯录是用来记载、查询联系人通讯信息的工具。
电子通讯录已成为手机、电子词典等电子设备中不可缺少的工具软件。
通讯录管理系统能有效地管理通讯录相关信息,包括输入、查询、添加、修改、删除等功能,该软件给用户提供了一个简单的人机界面,用户可以根据提示信进行各种操作。
本次设计使用的编程语言是C语言。
通过设计"
通讯录管理系统"
使其具有数据输入、修改、删除、添加、显示和查询等功能。
我们可以进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
这个设计可以使我们掌握软件设计的基本内容和设计方法;
使我们的软件设计的能力得到规范;
使我们掌握使用各种计算机资料和有关参考资料,提高我们进行程序设计的基本能力。
2问题分析
本题目主要涉及线性表的基本操作。
通讯录中的记录通常按记载顺序先后有序,因此选用线性表;
如果考虑到很少删除联系人,并且新增联系人又添加在表尾,则可采用顺序表;
但是如果考虑到在任何位置插入或删除操作,因涉及经常性的插入和删除,则应优先考虑采用链表。
通过上述分析,我选择了单链表存储结构,通讯录存储结构如下
structrecord
{
charname[20];
charphonenum[20];
chartype[20];
charemail[20];
}student[50];
structslnode
recorddate;
structslnode*next;
structslnode*prior;
};
typedefslnode*linklist;
linklistl;
通讯录中需要有查询功能、增加功能、删除功能和修改功能,所以要建立具有这些功能的子函数,对程序实现模块化。
这其中要用到对链表的删除、插入等知识。
删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的,若相等就删除,不相等则后移指针,直至表尾。
插入时也要先找到相应结点,再添加;
查询功能需要可以用姓名、电话号码、类别等多种方式进行查询;
为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。
3总体设计
图1系统模块结构图
添加:
系统提示用户添加新人员信息,输入到文件中,人员的信息包含姓名(name)、电话号码(phonenum)、类型(type)、电子邮件(email)。
显示:
该功能显示所有以保存的人员的姓名、电话号码、类型和电子邮件。
查询:
由用户输入要查找的人员姓名、电话号码或者类型,系统将调用查找函数,使用相关文件命令输出所查找人员的相关信息。
删除:
由用户输入需要删除人员的姓名,系统调用删除函数将此人所有相关信息删除。
修改:
由用户输入需要修改的人员的姓名,系统调用修改函数,用户修改需修改的信息。
保存退出:
完成任务,退出系统。
4详细设计
4.1录入模块
该模块主要实现的功能是从键盘录入人员的信息,人员的信息包含姓名(name)、电话号码(phonenum)、类型(type)、电子邮件(email)。
4.1.1设计思路
这个模块通过函数voidenter()完成,由于每个人员的信息包含多项,所以需要用一个结构体来存储,我定义了一个数组结构体student[num],来存放所有人员的信息。
即student[1],表示第一个人员。
用student[1].name表示第一个人员的姓名student[1].phonenum,student[1].type,student[1].email分别表示第一个人员的电话号码、类型和电子邮件。
用for循环实现了多个人员的录入,并且在其中运用strcmp比较字符串,当录入重复是将提示,从而避免了录入重复的情况。
4.1.2流程图
图2录入模块程序流程图
4.2显示模块
该模块主要实现的功能是显示所有以保存人员的信息。
4.2.1设计思路
这个模块通过函数voiddisplay()实现,该函数首先对系统进行了清屏,然后当num!
=0时输出所有以保存人员的相关信息。
否则打印该通讯录中无任何记录,并返回主菜单。
4.2.2流程图
图3显示模块程序流程图
4.3查询模块
该模块主要实现的功能是对人员的查询,当从键盘上输入某人员的姓名、电话号码或者类型时,与已保存的人员信息进行比较,如相同则输出该人全部信息,否则打印该通讯录无此人。
4.3.1设计思路
这个模块是在函数voidsearch()中完成的,因为题目中要求无论是通过姓名还是电话号码,或者是类型都可以查询,所以我写了voidsearch1(),voidsearch2(),voidsearch3()三个函数来实现。
其中voidsearch1()是通过姓名来查找的,当输入要查找人员的姓名时,与已保存的人员信息进行比较,如相同则输出该人全部信息,否则打印该通讯录无此人;
voidsearch2()是通过电话号码来查找的,当输入要查找人员的电话号码时,与已保存的人员信息进行比较,如相同则输出该人全部信息,否则打印该通讯录无此人;
voidsearch3()是通过类型来查找的,当输入要查找人员的型时,与已保存的人员信息进行比较,如相同则输出该人全部信息,否则打印该通讯录无此人。
最后在voidsearch()中选择用何种方法查找,从而找到需要查找的人员。
4.3.2流程图
图4查询模块程序流程图
4.4删除模块
该模块主要实现的功能是删除用户需要删除的人员信息,当用户输入了要删除的人员姓名时,系统会输出这个人员的所有相关信息,由用户确认是否删除,若选择Y,则删除所需要删除的人员的信息并打印删除成功,否则返回主菜单。
4.4.1设计思路
该功能是通过voiddelete()来实现的,首先由用户输入要删除的人员姓名,然后进行字符串比较,若有此人则输出他的所有相关信息,系统将提示用户是否确认删除,若选择删除,则链表长度减一并打印删除成功。
当此人不是最后一个时,系统将打印是否继续删除相同人员信息,若选择是则继续运行删除函数,否则打印不存在相同姓名人员,并返回主菜单。
4.4.2流程图
图5删除模块程序流程图
4.5修改模块
该模块主要实现的功能是对用户所需修改的人员信息进行修改,当用户输入了要修改的人员姓名时,系统进行字符串比较,若有此人员,系统将打印输入该人员新信息,由用户输入即可。
4.5.1设计思路
该模块通过函数voidmodify()来实现的,首先打开文件由用户输入需要修改的人员的姓名,系统进行字符串比较判断是否有该姓名,如果存在输入该人的新信息进行修改即可。
4.5.2流程图
图6修改模块程序流程图
4.6保存退出模块
该模块主要实现的功能是保存已有记录,然后按任意键退出程序。
4.6.1设计思路
该模块通过函数voidsave()来实现的,该函数主要是把信息存入文件中,并退出程序。
4.7导入模块
该模块主要实现的功能是从文件中导入人员信息。
4.7.1设计思路
该模块通过函数voidload()来实现,打开文件进行通讯录建立操作,通过移动指针将通讯录的信息记录在文件中。
5运行测试
图7程序的开始主菜单页面
图8程序的录入界面
图9程序的查询菜单界面
图10程序的显示界面
图11程序的按姓名查询界面
图12程序的按电话号码查询界面
图13程序的按类型查询界面
图14程序的删除界面
图15程序的删除后界面
图16程序的修改界面
图17程序的修改后界面
图18程序的退出界面
6总结
本次课程设计我选择的题目是通讯录管理系统的程序设计。
通讯录系统是我们很常用一个小系统,开始选择题目是感觉这个应该简单点,我自知C语言和数据结构学的都不够好,但做了之后才知道并不简单。
不过通过设计这个程序,我从中学到了很多。
这个系统中每个人员的信息都要求包括姓名、电话号码、类型和电子邮件。
程序具有数据录入、显示、查询、删除、修改、等功能,所以我采用链表实现,其中还应用了数组的知识。
在编写过程中,开始我只是简单把一些函数罗列在了一起,毫无逻辑性,导致有的错误看不出来,遇到了不少麻烦,甚至改了好多次都没有成功,不过在老师和同学的帮助下,最终的程序基本实现了所要求的功能,但在一些方面还不够完善。
例如在添加模块中,连续输入时可以辨别是否重复,一旦返回主菜单了再次输入时则无法辨别是否与以前所存储的重复。
通过这个小系统的设计我深深的体会到我学习的这些知识还远远不够,为了能做出更好的程序我们必须积累知识,打开思路,因为只有多多练习才能写出较好的程序。
总之,这次的课程设计使我体会较大的是应用比理论学习难得多,它涉及到各种实际问题。
但实习时所用到的这些知识会有更深的记忆,理解也更加透彻。
参考文献
[1]严蔚敏,吴伟民.数据结构.北京:
清华大学出版社,2008.
[2]苏仕华.数据结构课程设计.北京:
机械工业出版社,2010.
[3].滕国文.数据结构课程设计.北京:
清华大学出版社,2010.
附录
#include<
stdio.h>
#include<
stdlib.h>
string.h>
conio.h>
structrecord
intnum=0;
FILE*fp;
voidmainmenu();
voidsearchmenu();
voidenter();
voidsearch();
voidsearch1();
voidsearch2();
voidsearch3();
voiddisplay();
voidload();
voidsave();
voiddelet();
voidmodify();
voidlistinsert();
voidinitlist();
voidmain()
initlist();
load();
listinsert();
while
(1)
mainmenu();
}
voidload()
if((fp=fopen("
student.bin"
"
rb"
))==NULL)
{
printf("
\n\t\t通讯录文件不存在"
);
if((fp=fopen("
student"
wb"
{
printf("
\n\t\t建立失败"
exit(0);
}
else
printf("
\n\t\t通讯录文件已建立"
\n\t\t按任意键进入主菜单"
getch();
return;
exit(0);
fseek(fp,0,2);
if(ftell(fp)>
0)
rewind(fp);
for(num=0;
!
feof(fp)&
&
fread(&
student[num],sizeof(structrecord),1,fp);
num++);
\n\t\t文件导入成功"
\n\t\t按任意键返回主菜单"
\n\t\t通讯录文件中无任何纪录"
}
voidmainmenu()
charchoic;
system("
cls"
printf("
\n\t\t***************欢迎进入通讯录系统***************"
\n\t\t******************1—新添纪录******************"
\n\t\t******************2—查询菜单******************"
\n\t\t******************3—查找联系人****************"
\n\t\t******************4—删除联系人***************"
\n\t\t******************5—修改信息***************"
\n\t\t******************6—保存退出*****************"
\n\t\t************************************************"
\n\t\t请选择:
"
choic=getch();
switch(choic)
case'
1'
:
enter();
break;
2'
searchmenu();
case'
3'
search();
4'
delet();
5'
modify();
6'
save();
default:
mainmenu();
}
voidsearchmenu()
\n\t\t*******************查询菜单*******************"
\n\t\t****************1-显示所有********************"
\n\t\t****************2-按姓名查询******************"
\n\t\t****************3-按电话号码查询******************"
\n\t\t****************4-按类型查询******************"
\n\t\t****************5-返回主菜单******************"
display();
search1();
search2();
search3();
}
voidenter()
inti;
charname[20];
\n\t\t****************请输入学生信息****************\n"
\n\t\t姓名:
scanf("
%s"
&
student[num].name);
\n\t\t电话号码:
student[num].phonenum);
\n\t\t类型:
student[num].type);
\n\t\t电子邮件:
student[num].email);
num++;
\n\t\t是否继续添加?
(Y/N):
if(getch()=='
y'
)
{
输入联系人姓名:
\n"
scanf("
name);
for(i=0;
i<
num;
i++)
if(strcmp(student[i].name,name)==0)
\n\t\t****************输入重复,按任意键返回主菜单****************\n"
getch();
return;
enter();
voiddisplay()
if(num!
=0)
\n\t\t***************以下为通讯录所有信息************"
for(i=0;
\n\t\t姓名:
%s"
student[i].name);
\n\t\t电话号码:
student[i].phonenum);
\n\t\t类型:
student[i].type);
\n\t\t电子邮件:
student[i].email);
\t\t"
if(i+1<
num)
{
printf("
\n\t\t__________________________"
system("
pause"
}
else
\n\t\t通讯录中无任何纪录"
\n\t\t按任意键返回主菜单:
getch();
voidsave()
inti;
if((fp=fopen("
\n\t\t文件打开失败"
if(fwrite(&
student[i],sizeof(structrecord),1,fp)!
=1)
\n\t\t写入文件错误!
fclose(fp);
\n\t\t通讯录文件已保存"
\n\t\t按任意键退出程序\n\t\t"
voidlistinsert()
linklists,p=l;
for(inti=0;
i++)
s=newslnode;
strcpy(s->
date.name,student[i].name);
date.phonenum,student[i].phonenum);
date.type,student[i].type);
date.email,student[i].email);
s->
prior=p->
prior;
s->
next=p;
p->
prior->
next=s;
prior=s;
p=p->
next;
voidinitlist()
{
l=newslnode;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 通讯录 管理 系统 设计 实现
![提示](https://static.bingdoc.com/images/bang_tan.gif)