车票管理系统报告.docx
- 文档编号:17987521
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:30
- 大小:197.44KB
车票管理系统报告.docx
《车票管理系统报告.docx》由会员分享,可在线阅读,更多相关《车票管理系统报告.docx(30页珍藏版)》请在冰点文库上搜索。
车票管理系统报告
南京晓庄学院数学与信息技术学院
数据结构课程设计报告
题目:
车票管理系统
所在班级:
学生姓名:
指导教师:
研究起止日期:
二○一二年三月至二○一二 年五月
数据结构课程设计实验报告
班级
姓名
学号
实验课程
数据结构
实验名称
车票管理系统
实验成绩
实验日期
2012、4、3
任课教师
一、目的(本次课程设计所涉及并要求掌握的知识点。
)
1.通过课程设计,加深对《C语言程序设计》和《数据结构》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:
数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。
2.学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力
3.便于车站管理部门对汽车班次信息的统计和管理,提高车站部门的工作效率,能够更好的为市民服务,同时也便于乘客了解相关的信息,方便出行。
2、使用环境(本次上机实践所使用的平台和相关软件。
)
操作系统:
WindowsXP或者Windows7
集成开发环境:
MicrosoftVisualC++
三、内容与设计思想
(1.设计思路2.主要数据结构3.主要代码结构4.主要代码段分析)
1、设计思路
(1)能够增加汽车班次信息,如班次号,发车时间,起点站,终点站,行车时间,额载量,已订票人数等。
(2)能够显示班次信息,显示信息总和(如果已发出站的要要显示“已经开出”)。
(3)查询路线:
可按班次号查询,可按终点站查询
(4)售票功能:
当查询出已定票人数小于额定载量且当前系统时间小于发车时间
才能售票,自动更新已售票人数。
(5)退票功能:
输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
总体设计框架:
增加班次信息
退出系统
保存车次信息
退票
售票
查询班次信息
显示班次信息
按终点站查询
按班次查询
班次信息增加功能流程图:
增加班次
输入错误
按Y继续增加班次
输入发车时间
输入起点站
按任意键返回主菜单
信息增加成功
输入额定载量
输入行车时间
按Y继续查找,按任意键返回主菜单
按2终点站查询
按1按班次查询
进入查询界面
查询班次信息流程图:
2、主要数据结构以及代码结构
(1)主程序模块main()函数:
用来调用读取文件函数、功能菜单函数以及保存文件信息函数。
菜单函数
{
打印“车票管理系统”;
打印“系统时间”;
打印“1.增加班次信息”;
打印“2.显示班次信息”;
打印“3.查询班次信息”;
打印“4.售票”;
打印“5.退票”;
打印“6.保存车次信息;";
打印“0.退出系统”;
打印“请选择(0--6)”;
}
(2)增加班次信息函数voidlu(void):
用来增加系统内班次信息
(3)显示班次信息函数voidliulan(structBusesbus[]):
用来显示系统内所有班次的信息
(4)查询班次信息函数voidchaxun(structBusesbus[]):
可以分为两种查询方式,按班次查询和按终点站查询,非常方便使用
(5)售票函数voidshoupiao(structBusesbus[]):
while(选择的是“Y”)
{打印当前时间
打印“班次发车时间起点站终点站行车时间额定载量已定票人数”
for()
{
输出班次信息
提示输入车的班次
}
if(当查询出已定票人数小于额定载量且当前系统时间小于发车时间时)
{提示售票成功!
订票人数加1;
}
if(额定载量小于订票人数)
{
提示票已售完!
;
}
elseif(输入的班次号小于零)
{该车不存在!
}
elseif(当前系统时间晚于发车时间)
{
提示车已发出!
}
提示继续售票按Y,按任意键返回主菜单!
输入一个字符;
}
}
(6)退票函数voidtuipiao(structBusesbus[]):
while(输入的是Y的时候)
{
提示输入要退票的车次;
输入一个字符;
}
if(输入的班次号存在和系统时间比发车时间晚)
{订票人数-1;
提示退票成功!
}
elseif(输入的班次号小于零)
提示该班次不存在!
;
)
elseif(要退票的那辆车的发车时间早过现在系统时间)
{
提示车已发出不能退票!
;
提示继续退票请按(Y),返回主菜单按任意键;
输入一个字符;
}
}
(7)保存信息函数voidsave(structBusesbus[]):
(8)系统退出函数voidxitongtuichu():
结构体定义:
structTimes(定义时钟)
{inthour;
intmin;
intsec;
};
structBuses{//定义汽车
intnumber;//班次
structTimestime;发车时间
charstart[30];//出发站
charend[30];//终点站
floattime_cost;行车时间
intcarry_number;//额定票数
intbooK_number;//已订票人数
};
在程序代码的开始添加一些条件方便函数功能实现:
#defineMax50//最大贮赌量
#definenull0
staticintH=0;
3、程序主要代码分析
intcompare_systime(structBusesbus,tm*T){//与系统时间的比较函数
if(bus.time.hour>=T->tm_hour){
return1;
if(bus.time.min>=T->tm_min){
return1;
if(bus.time.sec>T->tm_sec)
return1;
elsereturn0;
}
return0;
}
return0;
}
此段代码主要为了实现汽车的发车时间与系统当时的时间相比较,如果小于系统时间说明汽车已经发车,大于则还没有发车出发。
voidsort_time(structBusesbus[]){//按发车时间排序
inti,j,k;
structBusesb={0};
for(i=0;i k=i; for(j=i+1;j if(compare_time(bus[i].time,bus[j].time)){ k=j; if(k! =i){ b=copy(b,bus[i]); bus[i]=copy(bus[i],bus[k]); bus[k]=copy(bus[k],b); } } } } } 当我们不断增加班次信息时候比较乱,不一定按照某规则增加的,此函数就是为了进行排序,将增加的班次信息按照发车时间进行排序显示,便于查询。 四、调试过程(1.测试数据设计2.测试结果分析) 菜单主界面: 增加班次信息: 显示班次信息: 查询班次信息: 售票界面: 退票界面: 五、总结 我自己本身对于软件编程是非常感兴趣的,也非常热爱编程,每当学习一门新的语言的时候我都是很努力去学习,去吸收,去理解,大一下学期学习了C语言,上学期又学习了数据结构,使得我们对于C语言更加吸收透彻。 开学到现在已经几个月了,数据结构程序设计题目老师从第一节课就给了我们,我自己尝试了编一些简单的代码实现车票管理系统某个简单的功能,在编程编译的过程中,还是遇到了各种各样的问题,自己花费大量时间去修改调试,自己一起上网查询或者查看书籍等等,实在遇到自己没法解决的问题了就去询问同学和曹老师,曹老师给了我很大的帮助,让我在这门课程中学到了很多很多,曹老师一直都是很耐心的教我们,非常感谢曹老师。 通过本次的课程设计,好好的复习了一下以前学过的知识。 对循环结构、指针、结构体,函数调用,switch语句,for循环语句等有了更为系统的了解,也学会了制作流程图,明白了一个设计精良的程序要的不仅是它的正确输出结果,还要有简明可靠地思路,良好的稳定性等。 通过这次课程设计,让我能把相关的知识联系起来解决要解决的问题。 更为重要的是,经过这次课程设计,我学会了要有模块化的思想进行程序设计,提高了对问题的分析和解决能力。 增强了程序设计过程中对程序的调试能力,知道如何解决调试过程中遇到的问题,从中提高对问题分析的能力。 总之,设计程序是一件很需要毅力的事,不仅让我懂得了一个程序设计者基本的工作素质要求,也让我懂得今后无论做什么事情都需要决心、耐心、细心、专心、恒心、信心。 六、附录 1、原代码 2、参考文献 程序源代码: #include #include #include #include #include #include #include #defineMax50//最大贮赌量 #definenull0 staticintH=0; structTimes//定义时钟 { inthour; intmin; intsec; }; structBuses{//定义汽车 intnumber; structTimestime; charstart[30]; charend[30]; floattime_cost; intcarry_number; intbooK_number; }; structBusesbus[Max]; time_tnow=time(0); tm*tnow=localtime(&now); voidload();//载入车次信息 voidlu(void);//声明录入函数 voidchaxun(structBusesbus[]);//声明查询路线函数 voidsave(structBusesbus[]);//声明保存函数 intcaidan();//声明菜单录数 voidliulan(structBusesbus[]);//声明浏览函数 voidtuipiao(structBusesbus[]);//退票 voidshoupiao(structBusesbus[]);//声明售票函数 voidxitongtuichu();//声明退出函数 //工具函数 structBusescopy(structBusesb1,structBusesb2);//赋值 voidsort_time(structBusesbus[]);//声明按时间发车的先后顺序排序 intcompare_time(structTimest1,structTimest2);//时间比较函数 intcompare_systime(structBusesbus,tm*T);//比较发车时间与当前系统时间的函数 voidprint(structBusesbus);//声明输入出函数 intnumber_search(structBusesbus[],intnum);//声明按班次查询函数 intend_search(structBusesbus,charends[]);//声明按终点查询函数 voidmain(){//主函数 while (1){ system("cls"); switch(caidan()){ case1: lu();break; case2: liulan(bus);break; case3: chaxun(bus);break; case4: shoupiao(bus);break; case5: tuipiao(bus);break; case6: save(bus);break; case0: xitongtuichu();break; } } } intcompare_systime(structBusesbus,tm*T){//与系统时间的比较函数 if(bus.time.hour>=T->tm_hour){ return1; if(bus.time.min>=T->tm_min){ return1; if(bus.time.sec>T->tm_sec) return1; elsereturn0; } return0; } return0; } structBusescopy(structBusesb1,structBusesb2){ b1.booK_number=b2.booK_number; b1.carry_number=b2.carry_number; strcpy(b1.end,b2.end); b1.number=b2.number; strcpy(b1.start,b2.start); b1.time.hour=b2.time.hour; b1.time.min=b2.time.min; b1.time.sec=b2.time.sec; b1.time_cost=b2.time_cost; returnb1; } voidliulan(structBusesbus[]){//浏览车次 getchar(); system("cls"); inti; printf("\n\t\t\t\t车辆时刻表\n"); printf("\t\t\t**************************\n"); printf("\t班次发车时间起点站终点站行车时间额定载量已定票人数"); printf("\n\t--------------------------------------------------------------\n"); sort_time(bus); for(i=0;i print(bus[i]); } printf("\t--------------------------------------------------------------\n"); printf("\t\t\t\t%d条记录! \n",H); printf("\t按任意键返回主菜单..."); getchar(); } intcompare_time(structTimest1,structTimest2){//比较时间大小 if(t1.hour>t2.hour){ return1; if(t1.min>=t2.min){ return1; if(t1.sec>=t2.sec) return1; elsereturn0; } return0; } return0; } voidsort_time(structBusesbus[]){//按发车时间排序 inti,j,k; structBusesb={0}; for(i=0;i k=i; for(j=i+1;j if(compare_time(bus[i].time,bus[j].time)){ k=j; if(k! =i){ b=copy(b,bus[i]); bus[i]=copy(bus[i],bus[k]); bus[k]=copy(bus[k],b); } } } } } intnumber_search(structBusesbus[],intn){//按班次查询 inti; for(i=0;i if(bus[i].number==n) returni; } return-1; } intend_search(structBusesbus,charends[]){//按终点站查询 if(strcmp(bus.end,ends)==0) return1; else return-1; } voidprint(structBusesbus){ if(! compare_systime(bus,tnow)) printf("\t%-6d%-2d: %-2d: %-2d%6s%8s%8.1f%10d%10d(已发出)\n",bus.number,bus.time.hour, bus.time.min,bus.time.sec,bus.start,bus.end,bus.time_cost,bus.carry_number,bus.booK_number); else printf("\t%-6d%-2d: %-2d: %-2d%6s%8s%8.1f%10d%10d\n",bus.number,bus.time.hour, bus.time.min,bus.time.sec,bus.start,bus.end,bus.time_cost,bus.carry_number,bus.booK_number); } intcaidan(){ inta; system("cls");//以下是菜单图案 printf("\n\n"); printf("\t\t车票管理系统\n"); printf("\t\t*****************(%d年%d月%d日)\n", 1900+tnow->tm_year,tnow->tm_mon+1,tnow->tm_mday); printf("\t\t|-----------------|\n"); printf("\t\t|1.增加班次信息|\n"); printf("\t\t|2.显示班次信息|\n"); printf("\t\t|3.查询班次信息|\n"); printf("\t\t|4.售票|\n"); printf("\t\t|5.退票|\n"); printf("\t\t|6.保存车次信息|\n"); printf("\t\t|0.退出系统|\n"); printf("\t\t|-----------------|\n"); printf("\n\t\t请选择(0-6): "); scanf("%d",&a); return(a); } voidsave(structBusesbus[]){//保存函数体 getchar(); FILE*fp; inti; if((fp=fopen("Bus_system","wb"))==null){ printf("不能打开文件\n"); return; } for(i=0;i if(fwrite(&bus[i],sizeof(structBuses),1,fp)! =1) printf("文件保存出错! \n"); fclose(fp); printf("文件保存成功! "); getchar(); } voidlu(){//录入函数 inti=H,f=1; charflag='Y'; while(toupper(flag)=='Y'){ system("cls"); printf("\n\t\t车次信息录入\n请输入车的班次: "); scanf("%d",&bus[i].number); getchar(); while(number_search(bus,bus[i].number)>=0){ printf("你输入的班次已存在请重新输入! : "); scanf("%d",&bus[i].number); getchar(); } printf("请输入时间如: (20: 30: 00): "); scanf("%d: %d: %d",&bus[i].time.hour,&bus[i].time.min,&bus[i].time.sec); getchar(); printf("请输入车的起点站: "); scanf("%s",bus[i].start); getchar(); printf("请输入车的终点站: "); scanf("%s",bus[i].end); getchar(); printf("请输入行车时间: "); scanf("%f",&bus[i].time_cost); getchar(); printf("请输入车的额定载量: "); scanf("%d",&bus[i].carry_number); getchar(); bus[i].booK_number=0; H++; i++; printf("信息录入成功! \n"); printf("继续录入请按(Y),返回主菜单按任意键..."); flag=getchar(); } } voidchaxun(structBusesbus[]){//查询路线 inta,i=0; intm=0; charflag='Y'; while(toupper(flag)=='Y'){ charend[30]; system("cls"); printf("1.按班次查询2.终点站查询请选择(1-2): "); scanf("%d",&a); while(a! =1&&a! =2){ printf("注意只能选择1或2! \n请重新输入: "); scanf("%d",&a); getchar(); } switch(a) { case1: { printf("请输入车次号: "); scanf("%d",&m); getchar(); i=number_search(bus,m); if(i>=0){ printf("\n\t\t\t\t车辆时刻表\n"); printf("\t\t\t**************************\n"); printf("\t班次发车时间起点站终点站行车时间额定载量已定票人数"); printf("\n\t--------------------------------------------------------------\n"); print(bus[i]); printf("\t----------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 车票 管理 系统 报告