完整word版淮海工学院计算机工程学院数据结构课程设计通讯管理系统word文档良心出品.docx
- 文档编号:29454874
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:31
- 大小:128.19KB
完整word版淮海工学院计算机工程学院数据结构课程设计通讯管理系统word文档良心出品.docx
《完整word版淮海工学院计算机工程学院数据结构课程设计通讯管理系统word文档良心出品.docx》由会员分享,可在线阅读,更多相关《完整word版淮海工学院计算机工程学院数据结构课程设计通讯管理系统word文档良心出品.docx(31页珍藏版)》请在冰豆网上搜索。
完整word版淮海工学院计算机工程学院数据结构课程设计通讯管理系统word文档良心出品
淮海工学院计算机工程学院
课程设计报告
设计名称:
数据结构课程设计
选题名称:
通讯录管理系统
姓名:
学号:
专业班级:
系(院):
计算机工程学院
设计时间:
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< L->r[i].postcode< } 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 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() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 淮海 工学院 计算机 工程学院 数据结构 课程设计 通讯 管理 系统 文档 良心 出品