个人关系网的设计与实现系统 课程论文由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“系统的设计与实现论文”。
附件二
【学生用】
西北农林科技大学信息工程学院 《数据结构与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引言随着时代的进步,网络已经成为人们生活中不可缺少的一部分。人们对网络经历了由陌生到熟悉的过程,网络为人们的生活、学习、工作......