淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx

上传人:b****1 文档编号:2217524 上传时间:2023-05-02 格式:DOCX 页数:31 大小:129.83KB
下载 相关 举报
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第1页
第1页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第2页
第2页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第3页
第3页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第4页
第4页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第5页
第5页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第6页
第6页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第7页
第7页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第8页
第8页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第9页
第9页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第10页
第10页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第11页
第11页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第12页
第12页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第13页
第13页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第14页
第14页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第15页
第15页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第16页
第16页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第17页
第17页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第18页
第18页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第19页
第19页 / 共31页
淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx

《淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx》由会员分享,可在线阅读,更多相关《淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx(31页珍藏版)》请在冰点文库上搜索。

淮海工学院计算机工程学院数据结构课程设计通讯管理系统.docx

淮海工学院计算机工程学院数据结构课程设计通讯管理系统

淮海工学院计算机工程学院

课程设计报告

设计名称:

数据结构课程设计

选题名称:

通讯录管理系统

姓名:

学号:

专业班级:

系(院):

计算机工程学院

设计时间:

2012.12.24~2013.1.4

设计地点:

软件工程实验室、教室

成绩:

指导教师评语:

 

签名:

年月日

1.课程设计目的

1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。

 

2.课程设计任务与要求:

任务

根据教材《数据结构-C语言描述》(耿国华主编)和参考书《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。

设计题目从任务书所列选题表中选取,每班每题不得超过2人。

学生自选课题

学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。

学生自选课题需在18周前报课程设计指导教师批准方可生效。

要求:

1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。

前期准备工作完备与否直接影响到后序上机调试工作的效率。

在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。

2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。

3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;

4、每位同学需提交可独立运行的程序;

5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);

6、课程设计实践作为培养学生动手能力的一种手段,单独考核。

 

3.课程设计说明书

一需求分析

该程序所做的工作是通讯录的管理系统,实现对联系人信息的添加、查询、浏览、删除、修改等功能。

程序规定:

(1)建立通讯薄,添加联系人的信息到此通讯薄,包括姓名、性别、城市、邮编、手机号、QQ号、Email;

(2)查询功能,按姓名、手机号查询联系人信息;

(3)其他功能:

现有联系人信息的浏览、修改、删除。

结果保存在文件中。

二概要设计

 ∙       系统用到的抽象数据类型定义:

1.ADTLinearList{

数据元素:

D={

,i=1,2,…,n,

为某一数据对象}

关系:

基本操作:

(1)InitList(L);

(2)DestroyList(L);

(3)ClearList(L);

(4)EmptyList(L);

(5)ListLength(L);

(6)Locate(L,e);

(7)GetData(L,i);

(8)InsList(L,i,e);

(9)DelList(L,i,&e);

}ADTLinearList

        系统中子程序及功能要求:

1.InitList(L):

初始化联系人的线性表。

2.CreatSeq(L,n):

建立一个顺序存储的线性表。

3.InsList(L,i,e):

插入联系人信息。

4.Add(L):

添加联系人信息。

5.SeqSearch(l,k):

顺序查找联系人信息。

6.NameSearch(L,k):

按姓名查询联系人信息。

7.NumberSearch(L,k):

按手机号查询联系人信息。

8.NameSort(r[],l):

按姓名进行排序。

9.Display(r[]):

浏览功能函数,按姓名显示所有联系人信息。

10.DelList(L,I,&e):

删除联系人信息。

11.Modifymenu(r[],k):

修改联系人信息。

12.mainmenu():

主菜单,包含添加、查询、浏览、删除、修改、退出功能。

13.searchmenu():

查询菜单,包括按姓名、手机号查询和返回主菜单功能。

14.Output(r[],i):

输出某联系人的信息;

 ∙      各程序模块之间的调用关系(子程序编号见上):

主函数可调用子程序12

子程序12可调用子程序4、13、9、10、11

子程序4可调用子程序2、3、8、9

子程序13可调用子程序6、7

子程序9可调用子程序8

子程序10可调用子程序9

子程序11可调用子程序9

三详细设计

      添加算法的伪代码描述如下:

voidInitList(SeqListL)/*初始化线性表

{

线性表长度赋值为0;

}

voidCreatSeq(SeqListL,intn)/*建立一个线形表

{

输出建立联系人的个数;

输入个数;

for(i=0;i<联系人;i++)

输入联系人的姓名、性别、城市、邮编、手机号、QQ号、Email;

线性表长度赋为n;

}

intInsList(SeqList*L,inti,RecordTyper[])

{

if(i<0||(i>L->last+1))

{

输出插入位置i不合法;

返回ERROR;

}

if(L->last>=maxsize)

{

输出表已满无法插入;

}

for(k=L->last;k>=i-1;k--)

k位置的信息移到k+1上;

赋i-1上的值为输入的信息;

表长+1;

}

intAdd(SeqListL,)

{调用函数CreatSeq(L)得到一个联系人表;

调用函数NameSort(r[],l)对联系人信息进行排序;

调用函数Display(r[])输出当前联系人的信息;

输出请输入添加的联系人的信息;

输入添加的联系人的信息;

调用函数InsList(&L,i,r)添加联系人;

调用函数NameSort(r[],l)对联系人信息进行排序;

调用函数Display(r[])输出当前联系人的信息;

}

intSeqSearch(SeqListL,KeyTypek)

{

赋记录表[0]的关键值等于k;

i=表长;

while([i]关键值不等于k)

i--;

返回(i);

}

voidNameSearch(SeqListL)

{

输出请输出要查找的联系人的姓名;

输入联系人的姓名charname[];

调用函数SeqSearch(L,name)得到联系人在表的位置a;

if(a==0)

输出该联系人不存在;

else

调用函数Output();

}

voidNumberSearch(SeqListL)

{

输出请输出要查找的联系人的手机号;

输入联系人的手机号intphone;

调用函数SeqSearch(L,phone)得到联系人在表的位置a;

if(a==0)

输出该联系人不存在;

else

调用函数Output();

}

 

voidNameSort(RecordTyper[],intlength)

{

for(i=2;i<=length;i++)

{

r[i]作哨兵;

j=i-1;

while(哨兵的关键值

{

将j位置的关键值移到j+1位置上;

j减小1;

}

将哨兵记录插入到j+1位置上;

}

}

voidDisplay(RecordTyper[],intlength)

{

调用函数NameSort(r,l)对记录表进行排序;

输出姓名性别城市邮编手机号QQ号Email

for(i=1;i〈=length;i++)

{

输出记录i上的信息;

}

}

intDelList(SeqList*L,inti,ElemType*e)i为通过姓名查找所的位置

{

if(i<0||i>表长)

{

输出删除位置不合理;

返回错误;

}

*e指向顺序表记录表中的第i个记录;

for(k=i;k<=表长;k++)

{

将k+1位置上的信息移到k位置上;

}

表长-1;

返回正确;

}

voidModifymenu(RecordTyper[])

{

输出输入要修改的联系人的姓名;

输入姓名;

k=姓名;

调用SeqSearch(r,k),返回联系人的位置;

i=联系人的位置;

输出修改的信息

(1)性别

(2)城市,邮编(3)手机号(4)QQ号,Email;

flag=1;

while(flag)

{

输出请选择;

输入a

switch(a)

{

case1:

输出请输入要修改的性别;

输入修改性别b;

r[i].sex=b;

输出该人的所有信息;

break;

case2:

输出请入要修改的城市和邮编;

输入修改城市b,邮编c;

r[i].city=b;

r[i].postcode=c

输出该人的所有信息;

break;

case3:

输出请入要修改的手机号;

输入修改手机号b;

r[i].phone=b;

输出该人的所有信息;

break;

case4:

输出请入要修改的QQ和Email;

输入修改QQ号b,Emailc;

r[i].qq=b;

r[i].mail=c

输出该人的所有信息;

break;

case5:

flag=0;

调用函数mainmenu()返回主菜单;

break;

}

}

}

voidmainmenu()

{

flag=1;

输出欢迎使用通讯录管理系统

(1)添加

(2)查询

(3)浏览

(4)删除

(5)修改

(6)谢谢使用!

while(flag)

{

输出请选择:

输入数字;

switch(输入数字)

{

case1:

调用函数Add(L);

break;

case2:

调用函数searchmenu();

break;

case3:

调用函数Display(r[]);

break;

case4:

调用函数DelList();

break;

case5:

调用函数Modifymenu();

break;

case6:

flag=0

输出欢迎使用;

break;

}

}

}

voidsearchmenu()

{

flag=1

输出查询功能:

(1)按姓名查询;

(2)按手机号查询;

(3)返回主菜单

while(flag)

{

输出请选择;

输入数字;

switch(数字)

{

case1:

调用函数NameSearch();

break;

case2:

调用函数NumberSearch()

break;

case3:

flag=0;

调用函数mainmenu();

break;

}

}

}

四设计与调试分析

输入1,建立联系人,测试联系人是否建立成功。

输入2,输入添加的联系人的信息,测试是否添加成功。

输入3,测试查询功能,输入1,输入查询的姓名,是否可以查询到该联系人;输入2,输入手机号,是否可以查询到该联系人;输入3,是否可以返回主菜单。

输入4,测试浏览功能,是否能按姓名排序并显示所有的联系人。

输入5,测试删除功能,输入删除的联系人的姓名,看显示的当前的联系人是否已删除该联系人。

输入6,测试修改功能,输入修改的联系人的姓名,依次输入要修改的信息前的数字,输入修改后的内容,看输出的信息是否是修改后的信息。

输入7,测试退出程序,看是否能结束程序。

五用户手册

1、运行环境Windows,VC++6.0

2、执行文件:

通讯录管理系统.exe

3、用户界面:

主菜单包含

(1)建立联系人、

(2)添加、(3)查询、(4)浏览、(5)删除、(6)修改、(7)退出等功能,输入上述各数据,实现各功能。

输入1:

按提示输入初始建立联系人的个数,再分别输入各联系人的姓名、性别、城市、邮编、手机号、QQ号、Email,输完后按Enter键,会有当前联系人的显示。

输入2:

按提示输入要添加的联系人的各类信息,输完后按Enter键,会有当前联系人的显示。

输入3:

进入查询界面,有

(1)按姓名查询、

(2)按手机号查询、(3)返回主菜单。

输入1,输入要查询的联系人的姓名,Enter后会显示所查询联系人的所有信息;输入2,输入要查询联系人的手机号,Enter后会显示所查询联系人的所有信息;输入3,返回主菜单。

输入4:

可以浏览到所有联系人的按姓名排序的信息。

输入5:

进入删除功能,输入要删除的联系人的姓名,会显示删除后的联系人的姓名。

输入6:

进入修改界面,输入要修改联系人的姓名,可以修改

(1)姓名;

(2)性别;(3)城市、邮编;(4)手机号;(5)QQ、Email;输入上诉数字,可以实现相应功能。

输入7:

退出程序。

六测试成果

(1)主菜单:

添加联系人信息:

(2)添加联系人:

(3)查询:

按姓名、手机号

(4)浏览:

(5)删除:

(6)修改:

姓名、性别、城市、手机号、邮编、手机号、QQ号、Email

 

(7)退出:

七附录(源程序清单)

#include

#include

#include

#include

#include

#include

#definemaxsize100

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

typedefstruct

{

charname[20];

charsex[20];

charcity[20];

charpostcode[20];

charphone[20];

charqq[20];

charmail[20];

}Data;

typedefstruct

{

Datar[maxsize];

intlast;

}SeqList;

voidInitList(SeqList*L)

{

L->last=-1;

}

intsave(SeqList*L)

{

ofstreamoutfile("通讯录.txt",ios:

:

out);

if(!

outfile)

{

cerr<<"openerror!

"<

exit

(1);

}

outfile<<"姓名性别城市邮编手机号QQ号Email"<

for(inti=0;i<=L->last;i++)

{

outfile<r[i].name<r[i].sex<r[i].city<

L->r[i].postcode<r[i].phone<r[i].qq<r[i].mail<

}

outfile.close();

return0;

}

voidCreatSeq(SeqList*L)

{

intn;

printf("请输入建立的联系人的个数:

");

scanf("%d",&n);

printf("请输入联系人的姓名、性别、城市、邮编、手机号、QQ号、Email:

\n");

for(inti=0;i<=n-1;i++)

{

scanf("%s",&L->r[i].name);

scanf("%s",&L->r[i].sex);

scanf("%s",&L->r[i].city);

scanf("%s",&L->r[i].postcode);

scanf("%s",&L->r[i].phone);

scanf("%s",&L->r[i].qq);

scanf("%s",&L->r[i].mail);

}

L->last=n-1;

}

intInsList(SeqList*L,inti,Datar)

{

intk;

if((i<1)||(i>L->last+2))

{

printf("插入位置i不合法");

return(ERROR);

}

if(L->last>=maxsize-1)

{

printf("表已满无法插入");

return(ERROR);

}

for(k=L->last;k>=i-1;k--)

{

L->r[k+1]=L->r[k];

}

L->r[i-1]=r;

L->last++;

return(OK);

}

voidOutput(SeqList*L,inti)

{

printf("姓名性别城市邮编手机号QQ号Email\n");

printf("%-12s%-7s%-10s%-8s%-13s%-12s%s\n",L->r[i-1].name,L->r[i-1].sex,L->r[i-1].city,

L->r[i-1].postcode,L->r[i-1].phone,L->r[i-1].qq,L->r[i-1].mail);

}

intSeqSearch1(SeqList*L,chark[20])

{

inti=0;

while((i<=L->last)&&(strcmp(L->r[i].name,k))!

=0)

i++;

if(i<=L->last)

return(i+1);

elsereturn(-1);

}

intSeqSearch2(SeqList*L,chark[20])

{

inti=0;

while((i<=L->last)&&(strcmp(L->r[i].phone,k))!

=0)

i++;

if(i<=L->last)

return(i+1);

elsereturn(-1);

}

voidNameSearch(SeqList*L)

{

inti;

chara[20];

printf("请输入要查找的联系人的姓名:

");

scanf("%s",&a);

SeqSearch1(L,a);

i=SeqSearch1(L,a);

if(i==-1)

{

printf("该联系人不存在\n");

}

else

Output(L,i);

}

voidNumberSearch(SeqList*L)

{

inti;

chara[20];

printf("请输入要查找的联系人的手机号:

");

scanf("%s",&a);

SeqSearch2(L,a);

i=SeqSearch2(L,a);

if(i==-1)

{

printf("该联系人不存在\n");

}

else

Output(L,i);

}

intQKPass(Datar[],intleft,intright)

{

Datax;

intlow,high;

x=r[left];

low=left;

high=right;

while(low

{

while((low=0)

high--;

if(low

{

r[low]=r[high];

low++;

}

while((low

low++;

if(low

{

r[high]=r[low];

high--;

}

}

r[low]=x;

returnlow;

}

voidQKSort(Datar[],intlow,inthigh)

{

intpos;

if(low

{

pos=QKPass(r,low,high);

QKSort(r,low,pos-1);

QKSort(r,pos+1,high);

}

}

voidDisplay(SeqList*L)

{

QKSort(L->r,0,L->last);

printf("姓名性别城市邮编手机号QQ号Email\n");

for(inti=0;i<=L->last;i++)

{

printf("%-12s%-7s%-10s%-8s%-13s%-12s%s\n",L->r[i].name,L->r[i].sex,L->r[i].city,

L->r[i].postcode,L->r[i].phone,L->r[i].qq,L->r[i].mail);

}

}

voidAdd(SeqList*L)

{

Datar;

printf("\n请输入要添加的联系人的信息:

\n");

scanf("%s",&r.name);

scanf("%s",&r.sex);

scanf("%s",&r.city);

scanf("%s",&r.postcode);

scanf("%s",&r.phone);

scanf("%s",&r.qq);

scanf("%s",&r.mail);

InsList(L,L->last+2,r);

printf("\n当前联系人信息:

\n");

Display(L);

}

intDelList(SeqList*L,inti,Data*r)

{

if(i<1||i>L->last+1)

{

printf("删除位置不合法!

\n");

return(ERROR);

}

*r=L->r[i];

for(intk=i;k<=L->last;k++)

L->r[k-1]=L->r[k];

L->last--;

return(OK);

}

voidsearchmenu(SeqList*L);

voidModifymenu(SeqList*L);

voidmainmenu()

{

inti,flag=1,j;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2