个人关系网的设计与实现系统 课程论文_系统的设计与实现论文

其他范文 时间:2020-02-27 23:44:10 收藏本文下载本文
【www.daodoc.com - 其他范文】

个人关系网的设计与实现系统 课程论文由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“系统的设计与实现论文”。

附件二

【学生用】

西北农林科技大学信息工程学院 《数据结构与C语言综合训练》实习报告

题 目: 个人关系网的设计与实现系统

名 专业班级 指导教师

实践日期 7月8日———7月18日

目 录

一、综合训练目的与要求.............................................................................错误!未定义书签。

二、综合训练任务描述...............................................................................................................1

三、算法设计..............................................................................................................................1

四、详细设计及说明...................................................................................................................5

五、调试与测试..........................................................................................................................7

六、实习日志..............................................................................................................................8

七、实习总结..............................................................................................................................9

八、附录:核心代码清单..........................................................................................................10

一、综合训练目的与要求

本综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。本课综合训练的目的和任务:

1.巩固和加深学生对算法分析课程基本知识的理解和掌握; 2.培养利用算法知识解决实际问题的能力;

3.掌握利用程序设计语言进行算法程序的开发、调试、测试的能力; 4.掌握书写算法设计说明文档的能力;

5.提高综合运用算法、程序设计语言、数据结构知识的能力。

正文

二、综合训练任务描述

总体任务是完成我们学习实践的工作,完成我们的实习报告。具体我个人完成的项目是个人关系网的设计与实现系统。

(1)用顺序表储存信息(2)建立无向图

(3)用switch,case语句建立菜单,便于查询信息

(4)输入人数、信息,输出关系,查询两个人的关系,从而建立起个人关系网

三、算法设计

(1)文字描述

根据题意要求,先要建立图,用结点代表个人信息,边代表人与人之间的关系,利用顺序表储存信息,再设计出菜单函数,这样便于查询。总的来说,用三个任务,就是输入信息,输出信息,建立无向图,并查询两个人之间的关系。所以我必须建立输入信息函数,输出信息函数,建立图,并建立菜单四个重要的模块。(2)框图

图1(3)伪代码

#define vexnum 4

//图的最大顶点个数 #define M 10

//储存人名数组的大小

using namespace std;

typedef struct {

int **arcs;//边的信息

char vex[vexnum][M];//顶点信息

int vexs;//边的大小 } Graph;

void DestroyGraph(Graph &G)//清除图中记录 {

int i;

for(i = 0;i

free(G.arcs[i]);}

void Print(Graph G)//打印图中信息 {

int i, j;

cout

for(i = 0;i

cout

for(i = 0;i

{

for(j = 0;j

{

switch(G.arcs[i][j])

}

} }

void FindRelationship(Graph G){

cout

char name1[10];

char name2[10];//

cin>>name1;//

cin>>name2;

scanf(“%s %s”, name1, name2);//输入两个要查找关系的人

int i, j, k, t;

i = j = k = t = 0;

for(i = 0;i

{

if(!strcmp(name1, G.vex[i]))//在表中找到名字为name1的人

}

for(j = 0;j

{

if(!strcmp(name2, G.vex[j]))

//在表中找到名字为name2的人

}

if(i == G.vexs && j!= G.vexs)

//说明name1在图中,而name2不在图中

else if(i!= G.vexs && j == G.vexs)//说明name2在图中,而name1不在图中

else if(i == G.vexs && j == G.vexs)

//说明name1和name2都不在图中

else

{

switch(G.arcs[k][t])

} }

void GetRecord(Graph &G)//录入信息到图中 {

int i, j;

G.vexs = vexnum;

//输入顶点的信息

printf(“本系统容量为%d人n请输入要存入关系网中的人名:n”, vexnum);

for(i = 0;i

{

scanf(“%s”, G.vex[i]);//输入要录入图中的人的名字

}

//给边分配存储空间

G.arcs =(int **)malloc(vexnum*sizeof(int *));

for(i = 0;i

//输入边的信息

for(i = 0;i

{

for(j = i;j

{

if(j!= i)

}

} }

四、详细设计及说明

(1)菜单的建立

利用switch,case语句处理菜单,其基本语法如下:

switch(controllingExpreion)

{

case constantExpreion1 :

case constantExpreion2 :

case constantExpreion3 :

statements;//当满足constantExpreion1、constantExpreion2、constantExpreion3任何一个都执行statements

break;

case constantExpreion :

statements;

break;

...default :

statements;

break;

} 输入的菜单:

图2

(2)信息的输入如下:

void GetRecord(Graph &G){

int i, j;

G.vexs = vexnum;

//输入顶点的信息

printf(“本系统容量为%d人n请输入要存入关系网中的人名:n”, vexnum);

for(i = 0;i

{

scanf(“%s”, G.vex[i]);

}

//给边分配存储空间

G.arcs =(int **)malloc(vexnum*sizeof(int *));

for(i = 0;i

{

G.arcs[i] =(int *)malloc(vexnum*sizeof(int));

}

//输入边的信息

for(i = 0;i

{

for(j = i;j

{

if(j!= i)

{

printf(“请输入%s和%s的关系:n提示:0:陌生;1:同学;2:朋友;3:同事n”, G.vex[i], G.vex[j]);

scanf(“%d”, &G.arcs[i][j]);

G.arcs[j][i] = G.arcs[i][j];

}

else

{

G.arcs[i][j] = 100;

}

}

} }

图3(3)信息的输出如下:

图4(4)两个人关系的查询:

图5

五、调试与测试

调试方法,调试结果的分析与讨论,调试过程中遇到的主要问题及采取的解决措施。测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考,算法的改进设想。

六、实习日志

7月8日:这是我的第一次,也是第一天实习。我们首先按照老师和班干部的指示,选择了自己适合并拿手的试题,我选择了个人关系网的设计与实现题目,我感觉这个题目看似简洁明了,动手起来却是非常难操作,思路也不是特别的清楚,于是今天我主要把数据结构的图的知识复习了一遍。

7月9日:经过昨天对图知识的研究,进一步巩固了图的建立,但依然没有明确的思路,于是我请教了老师,她告诉我应该用结点、边的含义来分别表示个人信息和关系,再利用邻接矩阵或邻接表建立无向网,就这样,我按照老师的思路,试着做了一些编程,最后我还先完成了一篇实习计划书。

7月10日———7月12日:在这三天时间里,我正式开始编译程序,通过前两天我上网查阅相关知识、复习课本、通过老师讲解的途径,基本上有了大至的思路,所以我就开始编程,在开始结段还挺顺利的,一直把图的定义、建立很好的完成了,但当我进一步编程时,我有感觉了无从下手,所以我立即查阅资料,但网上资料有限,使我一度陷入困境之中,非常烦恼,实在没办法,就去请教了同学,在同学的帮助下,我很快的找到了思路,并很快的把菜单完成,最后经过不断的调试不断的改正。完成了这个程序,对图、菜单知识有了更深入的了解。

7月13日:我们放假,我们同学很好的放松了心情,并为接下来的实习工作做好准备。

7月14日———7月17日:我很好的完成了代码,应该来说,大部分的工作已经完成,就剩下实习报告的书写了,但我告诉自己,不能放松,一定要坚持到最后,所以我在老师的安排下,认真的完成报告内容的各项要求,并不断的完善,争取把最好的实习报告和实习成果展现给大家。

7月18日:进行答辩,完成各项实习任务,并对这次实习进行深刻的回顾和学习。

七、实习总结

学习完了C语言和数据理论课程,接下来我们必须学以致用,否则学什么都没有意义。通过这次综合训练,我感慨颇多,不光是知识方面的提升,更是在解决问题能力上有了提升。

(1)努力学习,巩固知识

当我面对这次实习时,我有一些忐忑,因为我担心自己能力不够,以至于不能完成这项任务。所以刚开始面对这个问题时,我只能去查阅相关知识,复习学过的理论知识。在这个过程中,我感到自己平时学的很不够,正应了“书到用时方恨少”这句话。所以我希望用自己的经历告诉大家,我们还是平时就要学好文化知识,不断的温习、巩固,这样才能为我们所用,真正的提升自己的能力。(2)不骄不躁,乐于请教

其实,在这次实习中,我面临了很多的困难,不仅是知识方面的缺陷,还有精神毅力上的退缩。经过我的一番准备,我有思路解决问题时,刚开始还很顺利,这时,心里有了小得瑟,就想这很快就能解决了,但当我面对菜单如何巧妙建立时,我很为难,就自此陷入困境之中,在做了很多的尝试失败之后,就有了些许灰心,最终,在同学的帮助之下,我能顺利完成代码编程,非常感谢同学帮助,也告诉自己,在自己不懂时,应该虚心请教他人,不能碍于面子,切记不骄不躁。(3)热情洋溢,大胆创新

在编程过程中,大家都能感觉到非常的枯燥、乏味,但没有办法,这是我们的任务,很有可能使我们未来的工作,所以我们必须对编程要有极大的信心,保持着热情,可以追求编程中的快乐和成就感,当你能顺利的解决很大的困难时,你就会感到非常的自豪,这也是我们编程工作者的辛勤果实。还有这次编程我用的是C++语言,不同于一

般同学采用的C语言做法,我感到即使用又简便,很快能解决很多问题,所以当我们不能用传统方法解决困难问题时,我们可以采用另一种方法,换个思路,我们可能有意想

不到的发现。

面对新的问题、新的挑战,我们应该提高自己的能力,更好的解决它。

八、附录:核心代码清单

typedef struct {

int **arcs;//边的信息

char vex[vexnum][M];//顶点信息

int vexs;//边的大小 } Graph;void DestroyGraph(Graph &G)//清除图中记录 {

int i;

for(i = 0;i

{

free(G.arcs[i]);

}

free(G.arcs);}

void Print(Graph G)//打印图中信息 {

int i, j;

cout

for(i = 0;i

{

printf(“t”);

cout

}

cout

for(i = 0;i

{

cout

for(j = 0;j

{

switch(G.arcs[i][j])

{

case 0: //边的信息为0.打印关系为陌生

cout

break;

case 1:

//边的信息为1,打印关系为同学

cout

break;

case 2:

//边的信息为2,打印关系为朋友

cout

break;

case 3:

//边的信息为3,打印关系为同事

cout

break;

default:

//否则,边的信息为100,打印关系为本人

cout

break;

}

}

cout

} }

总代码:

#include #include #include #include

#define vexnum 4

//图的最大顶点个数 #define M 10

//储存人名数组的大小

using namespace std;

typedef struct {

int **arcs;//边的信息

char vex[vexnum][M];//顶点信息

int vexs;//边的大小 } Graph;

void DestroyGraph(Graph &G)//清除图中记录 {

int i;

for(i = 0;i

{

free(G.arcs[i]);

}

free(G.arcs);}

void Print(Graph G)//打印图中信息 {

int i, j;

cout

for(i = 0;i

{

printf(“t”);

cout

}

cout

for(i = 0;i

{

cout

for(j = 0;j

{

switch(G.arcs[i][j])

{

case 0: //边的信息为0.打印关系为陌生

cout

break;

case 1:

//边的信息为1,打印关系为同学

cout

break;

case 2:

//边的信息为2,打印关系为朋友

cout

break;

case 3:

//边的信息为3,打印关系为同事

cout

break;

default:

//否则,边的信息为100,打印关系为本人

cout

break;

}

}

cout

} }

void FindRelationship(Graph G){

cout

char name1[10];

char name2[10];//

cin>>name1;//

cin>>name2;

scanf(“%s %s”, name1, name2);//输入两个要查找关系的人

int i, j, k, t;

i = j = k = t = 0;

for(i = 0;i

{

if(!strcmp(name1, G.vex[i]))//在表中找到名字为name1的人

{

k = i;//记录下他的位置

break;

}

}

for(j = 0;j

{

if(!strcmp(name2, G.vex[j]))

//在表中找到名字为name2的人

{

t = j;//记录下他的位置

break;

}

}

if(i == G.vexs && j!= G.vexs)

//说明name1在图中,而name2不在图中

{

printf(“%s不在关系网中n”, name1);

}

else if(i!= G.vexs && j == G.vexs)//说明name2在图中,而name1不在图中

{

printf(“%s不在关系网中n”, name2);

}

else if(i == G.vexs && j == G.vexs)

//说明name1和name2都不在图中

{

printf(“%s和%s都不在关系网中n”, name1, name2);

}

else

{

switch(G.arcs[k][t])

{

case 0:

//边的信息为0.打印关系为不认识

cout

break;

case 1:

//边的信息为1,打印关系为同学

cout

break;

case 2:

//边的信息为2,打印关系为朋友

cout

break;

case 3:

//边的信息为3,打印关系为同事

cout

break;

default:

//否则,边的信息为100,打印关系为本人

cout

break;

}

} }

void GetRecord(Graph &G)//录入信息到图中 {

int i, j;

G.vexs = vexnum;

//输入顶点的信息

printf(“本系统容量为%d人n请输入要存入关系网中的人名:n”, vexnum);

for(i = 0;i

{

scanf(“%s”, G.vex[i]);//输入要录入图中的人的名字

}

//给边分配存储空间

G.arcs =(int **)malloc(vexnum*sizeof(int *));

for(i = 0;i

{

G.arcs[i] =(int *)malloc(vexnum*sizeof(int));

}

//输入边的信息

for(i = 0;i

{

for(j = i;j

{

if(j!= i)

{

printf(“请输入%s和%s的关系:n提示:0:陌生;1:同学;2:朋友;3:同事n”, G.vex[i], G.vex[j]);

scanf(“%d”, &G.arcs[i][j]);//各个关系用代号0,1,2,3,表示

G.arcs[j][i] = G.arcs[i][j];//此图为无向图,具有对称性

}

else

{

G.arcs[i][j] = 100;

//本人与本人的关系是本人,边的信息用一个较大值代替

}

}

} }

int main(){

Graph G;//定义一个图

int n;

cout

1:信息输入

2:信息输出

3:查询"

cout

while(1)

{

cin>>n;

switch(n)

{

case 0:

//输入为零则退出本系统

cout

exit(0);

case 1:

//输入为1,调用信息录入函数,执行信息录入功能

GetRecord(G);

cout

break;

case 2:

//输入为2,调用输出函数,执行信息输出功能

Print(G);

cout

break;

case 3:

//输入为3,调用查找函数,执行查找两个人的关系

FindRelationship(G);

cout

break;

default:

//若输入的不是上述编号,提示输入错误

cout

cout

break;

}

}

DestroyGraph(G);

//删除图中记录

return 0;}

公交查询系统设计与实现论文

公交查询系统设计与实现论文1引言随着城市经济的发展、规模的扩大以及人口的增长,城市交通问题日益突出。降低出行时间将使所有的公交利用者产生效益,快速的交通、更好的信息......

试题库管理系统设计与实现论文

刀豆文库小编为你整合推荐4篇试题库管理系统设计与实现论文,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......

制糖生产管理系统设计与实现论文

摘要:制糖企业的生产管理是有一定的具体流程的,生产管理是糖厂制糖管理中的一个重要环节,所以对于制糖生产管理有一定的规划与设计可以提高制糖的效率。如今,我国的网络信息技......

展馆漫游系统设计与实现论文

展馆漫游系统设计与实现论文摘 要:本系统以电子技术系展馆为真实蓝本,通过建模软件Autodek 3ds max实现整体三维场景模型搭建及三维交互软件Unity3d实现漫游交互模块的开发设......

论文管理系统的设计与实现

论文管理系统的设计与实现1绪论1.1引言1.1引言随着时代的进步,网络已经成为人们生活中不可缺少的一部分。人们对网络经历了由陌生到熟悉的过程,网络为人们的生活、学习、工作......

下载个人关系网的设计与实现系统 课程论文word格式文档
下载个人关系网的设计与实现系统 课程论文.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文