火车票管理系统 地铁建设问题数据结构实验报告.docx
- 文档编号:26462373
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:17
- 大小:391.03KB
火车票管理系统 地铁建设问题数据结构实验报告.docx
《火车票管理系统 地铁建设问题数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《火车票管理系统 地铁建设问题数据结构实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
火车票管理系统地铁建设问题数据结构实验报告
计算机科学与技术学院课程设计成绩单
课程名称:
数据结构指导教师:
赵红武
姓名
谈腾
性别
男
学号
201113237022
班级
计0904班
综合成绩
成绩等级
程序运行情况
(占总成绩20%)
□能正确运行□基本能正确运行□能运行但结果不完善
(20分)(15分)(10分)
程序功能的完善程度
(占总成绩10%)
□完善□基本完善□不完善
(10分)(8分)(5分)
程序结构的合理性
(占总成绩10%)
□合理□基本合理□不太合理
(10分)(8分)(5分)
对问题的答辩情况
(占总成绩40%)
□概念正确有创新□能正确回答所有问题□基本能正确回答
(40分)(35分)(30分)
□部分问题回答概念不清晰
(20分)
学生的工作态度与独立工作能力
(占总成绩10%)
□工作态度认真能独立完成任务□工作态度认真但独立性较差
(10分)(8分)
□工作态度基本认真但缺乏独立性
(5分)
设计报告的规范性
(占总成绩10%)
□符合规范□基本符合规范□规范性较差
(10分)(8分)(5分)
优秀:
90分~100分良好:
80分~89分中等:
70~79分及格:
60~69分不及格0分~59分
武汉科技大学计算机科学与技术学院制表
计算机科学与技术学院
课程设计报告
课程名称:
数据结构
专业:
计算机科学与技术
班级:
计0904班
学号:
201113237022
姓名:
谈腾
指导老师:
赵红武
实验一:
火车票务系统的设计与实现
1、需求分析
火车票务管理系统具有以下需求:
(1)列车信息录入:
输入列车基本信息。
(2)列车信息删除:
删除车次信息。
(列车线路停运)
(3)列车信息修改:
删除车次信息。
(列车时间、票价等信息有变动)
(4)列车信息输出:
根据格式对齐输出列车信息。
(5)列车信息查询:
可根据车次号、始发站、终点站查询满足条件的列车信息。
(6)列车信息排序:
可根据票价对列车信息进行排序并输出。
2、设计分析
火车票务系统根据需求分为界面和6个模块,分别为火车票信息显示模块、输入模块、修改模块、删除模块、查询模块、排序模块。
(1)界面
用户进入火车票务系统首页的界面,出现所有功能选项,可以根据序号进入各个功能模块进行操作。
(2)显示模块
每当需要显示所有车次信息的时候,调用该模块显示出所有车票的信息。
(3)输入模块
进入输入模块之后,系统依次要求输入火车票车次、发车地点、到达地点、票价、发车时间和到达时间信息,当输入完一趟车次的火车票信息后,系统提示是否继续,用户按y继续,按n退出该模块,回到首页。
(4)修改模块
首先系统显示所有车次信息列表,用户根据需要修改的车次的序号,输入要修改的序号,系统进入修改程序,依次重新输入车次信息即可。
(5)删除模块
进入修改模块之后,系统自动显示所有车次信息,用户输入需要删除的车次的序号,回车键系统提示是否删除,确认y后该条信息被删除。
(6)查询模块
查询模块提供三种查询方式,1.按终点站查询2.按票价查询3.按车次查询,用户选择序号进入各个子模块,然后再根据提示输入相关信息即可查询到车票信息,每个子模块都有退出功能,方便用户退出该模块系统。
(7)排序模块
系统默认根据票价的升序排列车票信息,用户进入该模块之后自动按排序方式显示出所有车次车票信息。
3、编码调试
一、主要代码
(1)火车票数据结构
typedefstructticket
{
chartrainnumber[10];//车次
charstartstation[10];//始发站
chardestination[10];//终点站
intprice;//票价
charstartime[10];//发站时间
charendtime[10];//到站时间
}elemtype;
typedefstructlnode//定义结点
{
elemtypedata;
structlnode*next;
}lnode,*linklist;
(2)显示模块
statusdataout_L(linklist&L)//将现有的车票打印出来
{
linklistp;
inti=1;
p=L->next;
printf("\n\t序号\t车次\t始发站\t终点站\t票价\t发站时间\t到站时间\n");
while(p)
{
printf("\n\t%ld\t%s\t%s\t%s\t%d\t%s\t\t%s\n",i,p->data.trainnumber,p->data.startstation,p->data.destination,p->data.price,p->data.startime,p->data.endtime);
p=p->next;
i++;
}
return1;
}
(3)插入火车票信息模块,修改模块代码和它类似,首先要查询链表位置。
statuscreatelist_L(linklist&L)
{
charc;intflag=1;
while(flag==1)
{
linklistp;
p=(linklist)malloc(sizeof(lnode));
printf("\n请输入该车票的车次:
");
scanf("%s",p->data.trainnumber);
printf("\n请输入该车票的始发站:
");
scanf("%s",p->data.startstation);
printf("\n请输入该车票的终点站:
");
scanf("%s",p->data.destination);
printf("\n请输入该车票的票价:
");
scanf("%d",&p->data.price);
printf("\n请输入该车票的发车时间:
");
scanf("%s",&p->data.startime);
printf("\n请输入该车票的到站时间:
");
scanf("%s",&p->data.endtime);
p->next=L->next;
L->next=p;
printf("\n继续吗?
(YorN):
");
scanf("%s",&c);
if(c=='Y'||c=='y')
{
flag=1;
}
elseflag=0;
}
return1;
}
(4)删除模块
statuslistdelete_L(linklist&L,inti)
{
linklistp,q;
intj=0;
p=L;
while(p->next&&j { p=p->next; ++j; } q=p->next; p->next=q->next; free(q); return1; } (5)排序模块 statuslistticketprice_l(linklist&L,intcount)//按票价排序 { inti,j; i=count; linklistp,t,h,s; for(;i>=1;i--) { p=L->next; t=L; h=L; if(i==1)continue; if(p->data.price if(p->data.price>p->next->data.price&&i==2) { s=p->next; L->next=s; p->next=s->next; s->next=p; continue; } p=L->next; if(p->data.price>p->next->data.price) s=p; elses=p->next; p=p->next; j=i-1; while(p&&j>=1) { if(s->data.price s=p; t=p; p=p->next; j--; } if(s==t)continue; while(h->next) { if(h->next==s) { h->next=s->next; s->next=t->next; t->next=s; break; } elseh=h->next; } } return1; } 2、主要功能界面截图 系统首页 输入车次信息 列车信息输出 列车信息查询 根据票价升序排序 4、系统总结 火车票务系统采用单链表的数据结构,在VC环境下用C语言写的,系统基本能实现需求分析的功能,满足设计分析的要求,界面简洁美观,操作方便上手。 通过本次实验,对数据结构链表的操作增强了了解,在实现代码功能中遇到一些问题,经过分析解决得到了很大提高。 实验二: 地铁建设问题 1、需求分析 城市要在各个辖区之间修建地铁来加快经济发展,但由于建设地铁的费用昂贵,因此需要合理安排地铁的建设路线,使乘客可以沿地铁到达各个辖区,并使总的建设费用最小。 地铁建设系统要实现的功能: (1)使用恰当的数据结构存储辖区名称和距离信息。 (2)根据读入的辖区距离信息,计算出应该建设哪些辖区的地铁路线。 (3)输出应该建设的路线,以及所需建设的总里程信息。 2、设计分析 用一个文本文档保存各个城市名称和路径长度信息,通过程序计算出最短路径并显示应该建设的地铁路线信息。 采用图的数据结构存储结点和路径信息,用普里姆算法求最短路径。 通过操作文件的方式读取文本内容,程序读取结点和边的信息,再根据普里姆算法求出最短路径,直接把结果呈现出来。 3、编码调试 1、主要代码 (1)边结构体和图结构体设计 typedefstruct/*边结构体*/ { intstart_vex,stop_vex;/*边的起点和终点*/ AdjTypeweight;/*边的权*/ }Edge; typedefstruct/*图结构*/ { intvexNum;/*图的顶点个数*/ intedgeNum;/*图中边的数目*/ Edgemst[MAXVEX-1]; VexTypevexs[MAXVEX];/*顶点信息*/ AdjTypearcs[MAXVEX][MAXVEX];/*边的邻接矩阵*/ }GraphMatrix; (2)初始化图,通过文件读取信息 voidGraphInit(GraphMatrix*g)/*用包含图的信息的文件初始化图*/ { inti,j,t; floatw;/*边的权值*/ VexTypeva,vb;/*用于定位图的顶点(字符串)在邻接矩阵中的下标*/ FILE*fp; fp=fopen("spaningtree.txt","r"); fscanf(fp,"%d",&g->vexNum);/*读入图的顶点数和边数*/ fscanf(fp,"%d",&g->edgeNum); for(i=0;i for(j=0;j<=i;j++) g->arcs[i][j]=g->arcs[j][i]=MAX; for(i=0;i fscanf(fp,"%s",g->vexs[i]); for(t=0;t { fscanf(fp,"%s%s%f",va,vb,&w); i=LocateVex(g,va); j=LocateVex(g,vb); g->arcs[i][j]=g->arcs[j][i]=w; } fclose(fp); } (3)普里姆算法求最短路径 voidPrim(GraphMatrix*pgraph)/*用邻接矩阵求图的最小生成树-普里姆算法*/ { inti,j,min; intvx,vy;/*起始,终止点*/ floatweight,minweight; Edgeedge;/*用于交换边*/ for(i=0;i { pgraph->mst[i].start_vex=0;/*起始点为0号顶点*/ pgraph->mst[i].stop_vex=i+1;/*终止点为其他各顶点*/ pgraph->mst[i].weight=pgraph->arcs[0][i+1];/*权值为0号顶点到其他各顶点的路径权值,无路径则为MAX*/ } for(i=0;i { minweight=MAX;min=i; for(j=i;j if(pgraph->mst[j].weight { minweight=pgraph->mst[j].weight; min=j; } /*mst[min]是最短的边(vx,vy)(vx∈U,vy∈V-U),将mst[min]加入最小生成树*/ edge=pgraph->mst[min]; pgraph->mst[min]=pgraph->mst[i]; pgraph->mst[i]=edge; vx=pgraph->mst[i].stop_vex;/*vx为刚加入最小生成树的顶点的下标*/ for(j=i+1;j { vy=pgraph->mst[j].stop_vex; weight=pgraph->arcs[vx][vy]; if(weight { pgraph->mst[j].weight=weight; pgraph->mst[j].start_vex=vx; } } } } 2、程序运行截图 程序运行截图 4、系统总结 本次实验采用图结构和普里姆算法,对这部分不是很熟悉,参考了很多资料,做完程序后有了进一步的提高,把理论和实践结合了起来。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 火车票管理系统 地铁建设问题数据结构实验报告 火车票 管理 系统 地铁 建设 问题 数据结构 实验 报告