数据结构课程设计火车票务系统的设计与实现 地铁建设问题1.docx
《数据结构课程设计火车票务系统的设计与实现 地铁建设问题1.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计火车票务系统的设计与实现 地铁建设问题1.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构课程设计火车票务系统的设计与实现地铁建设问题1
【设计目的】
数据结构是计算机专业的核心课程,是一门实践性很强的课程。
课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C(C++)程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。
严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用,学以至用,才能真正的培养学生的能力。
【设计要求】
1、课程设计题目共两题,每个学生必须独立完成;
2、课程设计时间为1.5周;
3、设计语言C(C++)不限;
4、课余时间完成源程序和课程设计报告等文档书写工作,上机时间只能做调试工作。
上机时带上源程序、数据结构教材、C语言教材。
题目一火车票务系统的设计与实现
设计一个火车票务系统,并完成如下功能:
列车记录包含6项:
车次、始发站、终点站、发车时间、到站时间、票价
Z38、武昌、北京西、21:
06、07:
01、272
(1)列车信息录入:
输入列车基本信息。
(2)列车信息删除:
删除车次信息。
(列车线路停运)
(3)列车信息修改:
删除车次信息。
(列车时间、票价等信息有变动)
(4)列车信息输出:
根据格式对齐输出列车信息。
(5)列车信息查询:
可根据车次号、始发站、终点站查询满足条件的列车信息。
(6)列车信息排序:
可根据票价对列车信息进行排序并输出。
【需求分析】
一 根据题目要求系统主界面应有以下几个功能:
1录入信息
2显示信息
3查询信息
4增加信息
5修改信息
6删除信息
7排序
对于各种有关信息操作,必须包括有车次、始发站、终点站、发车时间、到站时间、票价
二查询包括:
由车次,起点站和终点站的分别查询
三排序:
:
由票价排序
【设计分析】
头文件:
#include
#include
#defineMAX100
#defineN50
typedefstructtime//时间类型
{
intx,y,z;//分别对应年,月,日
}TIME;
typedefstructcnode//票信息类型
{
intno;//票号
intid;//购票人证件号
TIMEdate;//购票日期
structcnode*next;
}CNODE;
typedefstructtnode//车次信息类型
{
chardata;//车次编号
structtnode*lchild,*rchild;
CNODE*head;
}TNODE;
voidcreate();//按车次建立二叉排序树
voidinsert(int);//增加新的车次(二叉排序树的插入)
voiddel();//取消车次(二叉排序树节点删除)
voidinorder(TNODE*);//中序遍历车次二叉排序树(仅显示车次信息)
voidinorder_all(TNODE*);//中序遍历车次二叉排序树(显示车次及售票信息)
voidpreorder(TNODE*);//先序遍历车次二叉排序树(仅显示车次信息)
TNODE*search();//按车次编号搜索
CNODE*insert_c(CNODE*);//插入新的售票信息(单张)
CNODE*insert_c_more(CNODE*);//插入新的售票信息(批量)
CNODE*del_c(CNODE*,CNODE*);//退票处理(删除售票信息)
CNODE*search_c(CNODE*,int);//按票号查询
voidsearch_c_id(CNODE*,int);//按购票人证件号搜索(限定某车次)
voidsearch_c_id_all(TNODE*,int);//按购票人证件号搜索(所有车次)
voidsearch_date(CNODE*,TIME);//按购票日期搜索(限定某车次)
voidsearch_date_all(TNODE*,TIME);//按购票日期搜索(所有车次)
voidprint_c(CNODE*);//输出售票纪录(单张)
voidprint_c_all(CNODE*);//输出售票纪录(批量)
TNODE*root=NULL;
voidmain()
{
inti,func,no,ok;
TNODE*t;
CNODE*c;
TIMEd;
printf("\n\n\n");
for(i=0;i<15;i++)printf("=");
printf("列车售票信息管理系统");
for(i=0;i<15;i++)printf("=");
printf("\n");
printf("\t1.车次信息管理\n");
printf("\t2.售票记录管理\n");
printf("\t3.售票记录查询\n");
printf("\t4.售票记录一览\n");
printf("\t5.退出系统\n");
for(i=0;iprintf("\n请选择您所需要的功能:
");
fflush(stdin);
scanf("%d",&func);
switch(func){
case1:
printf("\n\n车次信息管理>>>>\n");
for(i=0;iprintf("\n\t1.增加新的车次");
printf("\n\t2.取消车次");
printf("\n\t3.返回上级菜单\n");
for(i=0;iprintf("\n请选择您所需要的功能:
");
fflush(stdin);
scanf("%d",&func);
switch(func){
case1:
create();
printf("\n售票信息更新成功!
\n\n");
break;
case2:
del();break;
case3:
main();break;
default:
printf("\n[错误]功能号输入有误!
请重新输入!
");
}
break;
case2:
printf("\n\n售票记录管理>>>>\n");
for(i=0;iprintf("\n\t1.增加新的售票记录");
printf("\n\t2.退票");
printf("\n\t3.返回上级菜单\n");
for(i=0;iprintf("\n请选择您所需要的功能:
");
fflush(stdin);
scanf("%d",&func);
switch(func){
case1:
t=search();
if(t!
=NULL)t->head=insert_c_more(t->head);
break;
case2:
t=search();
printf("需要退票的票号:
");
scanf("%d",&no);
t->head=del_c(t->head,search_c(t->head,no));
break;
case3:
main();break;
default:
printf("\n[错误]功能号输入有误!
请重新输入!
");
}
break;
case3:
printf("\n\n售票记录查询>>>>\n");
for(i=0;iprintf("\n\t1.按票号搜索");
printf("\n\t2.按购票者证件号搜索");
printf("\n\t3.按购票日期搜索");
printf("\n\t4.返回上级菜单\n");
for(i=0;iprintf("\n请选择您所需要的功能:
");
fflush(stdin);
scanf("%d",&func);
switch(func){
case1:
t=search();
if(t!
=NULL){
printf("\n请输入您所要查询的票号:
");
scanf("%d",&no);
c=search_c(t->head,no);
if(c==NULL)printf("[错误]没有该票号的纪录!
该票还未售出或为废票!
自动返回上级菜单\n...");}
break;
case2:
printf("\n请输入您所要查询的购票者证件号:
");
scanf("%d",&no);
search_c_id_all(root,no);
printf("搜索完毕!
自动返回上级菜单\n...");
break;
case3:
do{
printf("\n请输入您所要查询的日期(格式:
yy-mm-dd):
");
scanf("%d-%d-%d",&d.x,&d.y,&d.z);
if(d.y<13&&d.y>0){
if(d.y==1||d.y==3||d.y==5||d.y==7||d.y==8||d.y==10||d.y==12)
if(d.z<32&&d.z>0)ok=1;
elseif(d.z==2)
if(d.z<30&&d.z>0)ok=1;
else
if(d.z<31&&d.z>0)ok=1;
}
elseok=0;
if(!
ok)printf("\n[错误]日期输入有误!
请重新输入!
");
}while(!
ok);
printf("\n指定车次吗?
(1->是,0->否):
");
scanf("%d",&ok);
if(ok)search_date(search()->head,d);
elsesearch_date_all(root,d);
break;
case4:
main();break;
default:
printf("\n[错误]功能号输入有误!
自动返回上级菜单\n...");
}
break;
case4:
printf("\n\n售票记录一览>>>>\n");
for(i=0;iprintf("\n\t1.仅浏览车次");
printf("\n\t2.指定车次已售票记录");
printf("\n\t3.所有车次已售票记录");
printf("\n\t4.测试:
先序遍历车次");
printf("\n\t5.返回上级菜单\n");
for(i=0;iprintf("\n请选择您所需要的功能:
");
fflush(stdin);
scanf("%d",&func);
switch(func){
case1:
printf("\n+++仅浏览车次\n");
if(root==NULL)printf("[错误]无车次纪录!
");
else{inorder(root);printf("\n");}
break;
case2:
printf(