火车订票系统课程设计.docx
- 文档编号:9619000
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:18
- 大小:42.89KB
火车订票系统课程设计.docx
《火车订票系统课程设计.docx》由会员分享,可在线阅读,更多相关《火车订票系统课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
火车订票系统课程设计
火车订票系统课程设计
德州学院计算机系
课程设计报告
实习名称课程设计报告设计题目火车票订票系统实习时间2012年3月12日-3月18日专业班级计算机科学与技术指导老师沙焕滨教学单位(盖章)
小组分工情况:
学号姓名分工201101001064张旭C语言程序编辑201101001052刘燕君C语言程序调试、报告编写
2012年5月25日
德州学院计算机系C语言课程设计报告
一(实验目的-------------------------------------------------------1二(需求分析-------------------------------------------------------1三(概要设计-------------------------------------------------------2四(详细设计-------------------------------------------------------2五(调试与测试结果分析---------------------------------------------6六(使用说明-------------------------------------------------------7七(感想总结-------------------------------------------------------8八(参考文献-------------------------------------------------------9九(附录-----------------------------------------------------------9
德州学院计算机系c语言课程设计报告
一(实验目的
当今计算机在各行各业领域中其重要作用,不仅代替人力物力财力也节省了大量的时间,提高了工作的效率。
生活中,银行的存款取款转账等各种系统、超市中的物品录入系统、中国13亿人口的信息管理系统、校园中学生信息的管理等等,都离不开计算机的应用。
现今,乘坐火车也成为一种流行的交通工具,方便舒适快捷。
可怎样管理好乘客乘坐信息也一件至关重要的事情,首先坐车就要先设计一个乘客订票系统,使乘客订票更加方便快捷,以免出现不必要的麻烦。
二(需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为八个模块,每一个模块对应一个函数。
在这些函数当中,添加车次数据函数、售票函数、查询总额函数的实现严格按照题目的要求,而显示时间函数和显示车次函数属于附加功能。
读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。
1.添加车次函数主要实现程序最初运行时车次的录入
2.旅客买票函数实现的功能是按照旅客所需车次几所购买车票的数目
3.查询车票总额按照题目的具体要求实现的是总额的查询
4.显示函数实现的是显示目前所有的有效车次信息
除上面介绍的功能之外,程序还具有显示当地时间,以及退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个车次都包含车次、日期,始发、终点以及所受票数和所需费用,在程序当中,将车次类型定义为结构体类型,添加的车次信息直接写入E盘的train.txt文件中,其它函数每次对车次记录的访问,其数据来源都是train.txt文件,这样做不但可以保证学生数据的一致性,而且可以对车次数据进行永久保存,保证每次运行程序都可以采用原来的数据。
1
德州学院计算机系C语言课程设计报告
三(概要设计
本程序主要由九个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。
在这些函数当中,添加学生数据函数、删除数据函数和排序函数是程序中较为核心的部分。
每一个模块对应一个函数,在需求分析中已提到每个模块相关的应用及作用。
火车订票
系统
显示当前车次信息统计某日显示旅客买票退出
时间录入金额
图一火车订票系统的功能示意图
四(详细设计
下面分别对每个模块进行说明分析:
4.1函数及数据成员
在定义成员函数时要注意成员函数的实现与调用,数据成员注意成员的类型,在定义数组时注意数组的要求,数组只能逐个引用数组元素而不能一次引用整个数组。
字符数组的输入、输出可以将整个字符串依次输入或输出。
{intnum;
intdate;
char[0];
charter[20];
intmaipiao;
2
德州学院计算机系C语言课程设计报告
floattickeprice;
};
voidmenu();
intreads(structtraintra[N]);voidsave(structtraintra[N],intn);voidadd();
voidsell();
voidshow();
voidlocaltimes();
voidall();
4.2编写进入订票系统的程序
首先编写一个主程序,定义整型的车次数,利用while语句,“输入您要选择的操作序号,按回车键确认”,然后再利用switch语句选择需要进入的项目。
具体程序操作如下:
voidmain()
{
intn;
while
(1)
{
menu();
printf("\n请输入您要选择的操作序号,按回车键确认:
");
scanf("%d",&n);
switch(n)
{
case1:
localtimes();break;
case2:
add();break;
case3:
show();break;
case4:
sell();break;
case5:
all();break;
3
德州学院计算机系C语言课程设计报告
case6:
exit(0);
default:
printf("输入错误,请输入列表中存在的序号~\n");
}
}
}
voidmenu()
{
printf("*************************北京西站火车订票系统************************");
printf("\n1显示当前时间");
printf("\n2车次信息录入");
printf("\n3显示");
printf("\n4旅客买票");
printf("\n5统计某日销售金额");
printf("\n6退出");}
4.3录入车次信息函数
录入车次信息,首先由程序创建一个新文件,并将录入的车次信息写入该文件(e:
\\train.txt)当中。
具体的程序段如下:
if((fp=fopen("e:
\\train.txt","a"))==NULL)//如果文件已经存在,可以追加车次信息
{
if((fp=fopen("e:
\\train.txt","w"))==NULL)//文件不存在时,创建新文件,输入车次信息
{
printf("文件打开失败~\n");
return;
}
4
德州学院计算机系C语言课程设计报告
}
printf("请输入要车次的数量,按回车键确认:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("\n请输入第%d个车的车次,日期,始发,终点,用空格分开,并
n",i);按回车键确认:
\
scanf("%d%d%s%s",&tra.num,&tra.date,tra.from,tra.ter);
printf("\n请输入第%d个卖出的数量,车次所需的费用,用空格分开,并按回车键确认:
\n",i);
scanf("%d%f",&tra.maipiao,&tra.tickeprice);
fprintf(fp,"%d%d%s%s%d%f\n",tra.num,tra.date,tra.from,tra.ter,tra.m
aipiao,tra.tickeprice);
}
fclose(fp);
}
4.4旅客买票函数
对于买票,这部分程序然调用了reads函数,首先应输入旅客所买车次,然用if函数进行比较,如果成立就进行一下售票以及金额运算,最后调用save函数进行更新。
具体程序如下:
n=reads(tra);
printf("\n请输入待查询的车次号,按回车键确认:
\n");
scanf("%d",&num);
for(i=0;i if(num==tra[i].num)break; if(i>=n) { printf("没有找到该车次信息~\n"); 5 德州学院计算机系C语言课程设计报告 return; } else printf("\n请输入所买票数,按回车键确认: \n"); scanf("%d",&j); tra[i].maipiao=tra[i].maipiao+j; printf("\n购买成功\n"); printf("\n%12d%11d%11s%11s%11d%11.2f\n",tra[i].num,tra[i].date,tra[i].fr om,tra[i].ter,tra[i].maipiao,tra[i].tickeprice); save(tra,n); 4.5查询销售总额 对于也使用比较日期的方法实现的,这部分程序仍然调用了reads函数,整个 排序过程在文件中实现,然后用for循环进行运算,把查询这一天的总额算出。 具体程序如下: if((fp=fopen("e: \\train.txt","r"))==NULL){printf("读取错误,不能打开该 文件! ! \n");return;}else for(i=0;i e,tra[i].from,tra[i].ter,&tra[i].maipiao,&tra[i].tickeprice); printf("请输入你要查询的日期: \n");scanf("%d",&temp.date);for(i=0;i .tickeprice;j=1;}if(j==0)printf("无此日期销售信息,请重新输入")else pintf("今天的总销售额为: %f\n",sum);fclose(fp); 五(调试与测试结果分析 在程序编写完成后,进行了调试,发现了大量的错误,我从提示中对程序进行 了修改,但是还存在很多错误。 我查阅了课本以及参考书,知道了一些语法错误在 运行时系统不会给出提示,即使运行成功,结果也是错误的。 在处理错误的过程中 我们发现对指针及链接的应用不熟练。 通过书本我们重新学习了指针和链接的基本 用法及要求。 知道了如果一个变量声明时在前面使用*号,表明这是个指针型 变量。 换句话说,该变量存储一个地址,而*(此处特指单目运算符*,下同。 6 德州学院计算机系C语言课程设计报告 C语言中另有双目运算符*)则是取内容操作符,意思是取这个内存地址里存储的内容。 指针是C语言区别于其他同时代高级语言的主要特征之一。 指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。 通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值(不同于return(z)这样的仅能得到一个返回值。 指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。 链接程序把所有对象文件中的机器码组合在一起,并解析它们之间的交叉引用。 它还集成了对象模块所使用的库函数的代码。 这是链接程序的一种简化表示,因为这里假定在可执行模块中,模块之间的所有链接都是静态建立的。 实际上有些链接是动态的,即这些链接是在程序执行时建立的。 最后在我们一步步的修改最终调试显示正确并且按照提示能正确进入各个操作以及查询订票系统方面需求。 图二火车订票系统开始的登陆页面 六(使用说明 在使用过程中根据个人的需求以及系统的提示下进入火车订票系统,首先进入 7 德州学院计算机系C语言课程设计报告 系统首页,会出现以下几项: 显示当前时间、车次信息录入、显示、旅客买票、统计某日销售金额、退出,旅客可根据自己的需求选择每一项前的序号,即可进入该系统,然后根据所选项目提示完成操作。 操作完成后系统会自动退出以保证旅客的信息安全不至于泄露。 图三火车订票系统显示当前时间页面 七(感想总结 通过这次学习,使我更加深刻的了解了C语言以及C++的用处,也使我更加喜欢这一学科,不仅巩固了课本上的知识而且学到很多课本外的知识,并且培养了自己耐心细心用心的性格。 回想这次课程设计编写,我认识到实践与理论相结合的重要性,实践提高自身的动手能力,理论为实践做基础,二者缺一不可,相辅相成。 想想刚开始编写的时候可以说是无从下手,从一页页学习课本,一次次的考虑,一遍遍的修改草稿才得以完成,这些东西在我以前的学习生活中从未做过,虽然完成的并不理想但对自身来说也是一次大的进步。 在编写过程中存在着一些方面的不足之处,比如: 在统计金额方面不会使用定 8 德州学院计算机系C语言课程设计报告 义时间的函数,不能把时间函数有效的使用;在结构体的运用当中显得力不从心,从而使程序出现各种各样的问题,有了一些瑕疵。 当然也只能希望在以后的学习中我能够慢慢的把这些问题解决掉。 同时要感谢帮助过我的老师和同学,没有他们的帮助也没有我的进步。 八(参考文献 1谭浩强C程序设计北京: 清华大学出版社,20052刘成等C语言程序设计实验指导与习题集北京: 中国铁道出版社,20063谢延红、王付山C语言程序设计教程北京: 国防工业出版社,2010 九(附录 源程序: #include #include #include"time.h" #include"conio.h" #defineN20 structtrain {intnum; intdate; charfrom[20]; charter[20]; intmaipiao; floattickeprice; }; voidmenu(); intreads(structtraintra[N]);voidsave(structtraintra[N],intn);voidadd(); voidsell(); voidshow(); voidlocaltimes(); voidall(); voidmain() { intn; while (1) { 9 德州学院计算机系C语言课程设计报告 menu(); printf("\n请输入您要选择的操作序号,按回车键确认: "); scanf("%d",&n); switch(n) { case1: localtimes();break; case2: add();break; case3: show();break; case4: sell();break; case5: all();break; case6: exit(0); default: printf("输入错误,请输入列表中存在的序号~\n"); } } } voidmenu() { printf("*************************德州火车订票系统 ************************"); printf("\n1显示当前时间"); printf("\n2车次信息录入"); printf("\n3显示"); printf("\n4旅客买票"); printf("\n5统计某日销售金额"); printf("\n6退出");} intreads(structtraintra[N])//读取车次中的内容 { FILE*fp; inti=0; if((fp=fopen("e: \\train.txt","r"))==NULL) { printf("文件打开失败~\n"); return0; } else { for(i=0;! feof(fp);i++) fscanf(fp,"%d%d%s%s%d%f\n",&tra[i].num,&tra[i].date,tra[i].from,tra [i].ter,&tra[i].maipiao,&tra[i].tickeprice); } 10 德州学院计算机系C语言课程设计报告 fclose(fp); returni; } voidsave(structtraintra[N],intn)//车次信息改变后更新文件 { FILE*fp; inti=0; if((fp=fopen("e: \\train.txt","w"))==NULL) { printf("文件打开失败~\n"); return; } else { for(i=0;i fprintf(fp,"%d%d%s%s%d%f\n",tra[i].num,tra[i].date,tra[i].from,tra[ i].ter,tra[i].maipiao,tra[i].tickeprice); } fclose(fp); } voidadd()/*录入车次信息*/{ FILE*fp; intn,i; structtraintra; if((fp=fopen("e: \\train.txt","a"))==NULL)//如果文件已经存在,可以 追加车次信息 { if((fp=fopen("e: \\train.txt","w"))==NULL)//文件不存在时,创建新 文件,输入车次信息 { printf("文件打开失败~\n"); return; } } Printf("请输入要车次的数量,按回车键确认"); scanf("%d",&n); for(i=1;i<=n;i++) { Printf("\n请输入第%d个车的车次,日期,始发,终点,用空格分开,并 按回车键确认: \n",i); scanf("%d%d%s%s",&tra.num,&tra.date,tra.from,tra.ter); printf("\n请输入第%d个卖出的数量,车次所需的费用,用空格分开并按 回车键确认: \n",i); 11 德州学院计算机系C语言课程设计报告 scanf("%d%f",&tra.maipiao,&tra.tickeprice); fprintf(fp,"%d%d%s%s%d%f\n",tra.num,tra.date,tra.from,tra.ter,tra.m aipiao,tra.tickeprice); } fclose(fp); } voidshow()//车次信息显示函数{ structtraintra[N]; inti,n; n=reads(tra); printf("*********************所有的车次信息如下 n\n");**********************\ printf("序号车次日期始发终点卖出 \n");票价 printf("************************************************************* \n"); for(i=0;i printf("\n%3d%12d%11d%11s%11s%11d%11.2f\n",i+1,tra[i].num,tra[i].date,tr a[i].from,tra[i].ter,tra[i].maipiao,tra[i].tickeprice); getch(); } voidsell()//按顾客要求对车次信息卖票{ structtraintra[N]; intnum,n,j; inti; n=reads(tra); printf("\n请输入待查询的车次号,按回车键确认: \n"); scanf("%d",&num); for(i=0;i if(num==tra[i].num)break; if(i>=n) { printf("没有找到该车次信息~\n"); return; } else printf("\n请输入所买票数,按回车键确认: \n"); 12 德州学院计算机系C语言课程设计报告 scanf("%d",&j); tra[i].maipiao=tra[i].maipiao+j; printf("\n购买成功\n"); printf("\n%12d%11d%11s%11s%11d%11.2f\n",tra[i].num,tra[i].date,tra[i].fr om,tra[i].ter,tra[i].maipiao,tra[i].tickeprice); save(tra,n); } voidall()//统计销售金额 { structtraintra[N],temp; floatsum=0; FILE*fp; inti,j=0; if((fp=fopen("e: \\train.txt","r"))==NULL) {printf("读取错误,不能打开该文件! ! \n"); return; } else for(i=0;i fscanf(fp,"%d%d%s%s%d%f\n",&tra[i].num,&tra[i].date,tra[i].from,tr a[i].ter,&tra[i].maipiao,&tra[i].tickeprice); printf("请输入你要查询日期: \n"); scanf("%d",&temp.date); for(i=0;i if(temp.date==tra[i].date) {sum=sum+tra[i].mai
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 火车 订票 系统 课程设计