C课程设计--地铁价格查询系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言程序设计》
课程设计报告
一.目的
通过本教学环节的充分编程实践和实际应用,进一步熟悉与巩固C语言语法知识和程序设计的基本方法,通过应用进一步体会数据就够重常用算法的实质,建立算法优劣的概念以及算法评估分析和比较的方法。

借助适当题材的程序设计实训,加深体会利用数据结构的算法和C语言程序设计解决实际问题的思维过程。

通过一定的文档要求,培养学生良好的程序设计风格,包括程序结构形式,行文格式和程序正文格式等。

二.内容
利用C语言这种程序设计语言设计一个应用程序,实现的题目和具体内容自拟
三.实验要求
进行简单的需求分析、设计说明,写出程序结构框架,阐明设计思路、用到的原理和方法。

程序规模适中,着重于内核功能,对界面无要求。

要求采用面向对象的程序设计方法来进行课程设计。

四.算法思想
该程序为地铁的价格查询系统,用到C语言中的选择结构程序设计,循环控制,函数。

其中,选择结构程序设计用到了if语句的嵌套,switch语句;循环控制用到了for,do……while语句实现循环,还有break语句,循环的嵌套;函数就用到了函数的嵌套调用。

该系统难点在于转站问题,不过已经解决了。

a)需求分析:
1.该系统主要提供地铁的价格查询功能,外附显示所要乘坐的站数以及经过
的地铁站,转站等功能。

2.该系统还可以让地铁的乘客清晰地知道自己乘坐所需要的付费,还有知道
一共要经过多少个站,经过哪些站等,让乘客对自己的行程有个了解。

3.该系统的界面清晰易懂,乘客看着界面可以明白地知道自己所在的位置以
及可以轻松地选择目的地。

其中,界面如下所示:
◎欢迎使用广州地铁价格查询系统◎
**************************************************************
* *
* 广州地铁一号线*
*____________________________________________________________*
* 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 *
* 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 *
* 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 *
* 西坑花芳黄长陈西公农烈东杨体体广*
* 湖口地村沙寿家门园讲士山箕育育州*
* 湾路祠口前所陵口西中东*
* 园路心站*
* *
* 广州地铁二号线*
*____________________________________________________________*
* 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 *
* 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 *
* 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 *
* 琶新磨赤客鹭中晓江市海公纪越广三远广新江*
* 洲港碟岗村江大港南二珠园念秀州元景州市夏*
* 东沙西宫广前堂公火里体*
* 场园车育*
* 站馆*
* *
**************************************************************
4.对输入数据的格式要求为:只要输入数字就行了,可是输入的数字必需在
101~106,201~220之间,否则输出错误提示,乘客需要继续输入,直到输入正确为止,输出结果后会有提示是否要继续。

5.该软件可以在Turbo C/C++ for Windows内测试。

b)概要设计
第一模块:函数调用模块(分两种情况讨论):
第一种情况:起点站和输出站都在同一号线
if(c/100==d/100)
{
a=max(c,d);
b=min(c,d);
j=a-b;
subway(j);
change_line( c, d);
name_passed_station( c, d);
}
第一种情况:起点站和终点站不在同一号线(又分两种情况):
(1)起点站在一号线,终点站在二号线在:
if(c<200)
{
a=max(109,c)-min(109,c);
b=max(212,d)-min(212,d);
j=a+b;
subway(j);
change_line( c, d);
name_passed_station( c, d);
}
(2)起点站在二号线,终点站在一号线:
else
{
a=max(212,c)-min(212,c);
b=max(109,d)-min(109,d);
j=a+b;
subway(j);
change_line( c, d);
name_passed_station(c, d);
}
第二模块:函数定义模块
把起点站序号跟终点站序号比较,取出较少着:int min(int c,int d)
{
int z;
if(c>d)
z=d;
else
z=c;
return(z);
}
把起点站跟终点站比较,取出较大者:
int max(int c,int d)
{
int z;
if(c>d)
z=c;
else
z=d;
return(z);
}
输出所要的费用:
void subway(int j)
{
switch(j)
{
case 0: printf("Sorry,你已经在本站,不用再乘座了。

Thanks! ^_^\n");break;
case 1:
case 2:
case 3: printf("收费2元,Thanks! ^_^\n");break;
case 4:
case 5:
case 6: printf("收费3元, Thanks! ^_^\n");break;
case 7:
case 8:
case 9: printf("收费4元, Thanks! ^_^\n");break;
case 10:
case 11:
case 12: printf("收费5元, Thanks! ^_^\n");break;
case 13:
case 14:
case 15: printf("收费6元, Thanks! ^_^\n");break;
case 16:
case 17:
case 18: printf("收费7元, Thanks! ^_^\n");break;
case 19:
case 20: printf("收费8元,Thands! ^_^\n");
}
}
该函数检查是否需要转线
void change_line(int c,int d)
{
if(c/100==d/100)
printf("不需要转线,可直达^_^\n");
else
printf("请注意:要到公园前站转线\n");
}
输出途径的站名,分两种情况:
情况一:不需要转线
(1)起点站和终点站都在一号线
if(c/100==1&&d/100==1)
{
for(i=c%100;i<=d%100;i++)
switch(i)
{
case 1: printf("西湖\t");break;
case 2: printf("坑口\t");break;
case 3: printf("花地湾\t");break;
case 4: printf("芳村\t");break;
case 5: printf("黄沙\t");break;
case 6: printf("长寿路\t");break;
case 7: printf("陈家祠\t");break;
case 8: printf("西门口\t");break;
case 9: printf("公园前\t");break;
case 10: printf("农讲所\t");break;
case 11: printf("烈士陵园\t");break;
case 12: printf("东山口\t");break;
case 13: printf("杨箕\t");break;
case 14: printf("体育西路\t");break;
case 15: printf("体育中心\t");break;
case 16: printf("广州东站\t");break;
}
}
(2)起点站和终点站都在二号线
if(c/100==2&&d/100==2)
{
for(i=c%100;i<=d%100;i++)
switch(i)
{
case 1: printf("琶洲\t");break;
case 2: printf("新港东\t");break;
case 3: printf("磨碟沙\t");break;
case 4: printf("赤岗\t");break;
case 5: printf("客村\t");break;
case 6: printf("鹭江\t");break;
case 7: printf("中大\t");break;
case 8: printf("晓港\t");break;
case 9: printf("江南西\t");break;
case 10: printf("市儿宫\t");break;
case 11: printf("海珠广场\t");break;
case 12: printf("公园前\t");break;
case 13: printf("纪念堂\t");break;
case 14: printf("越秀公园\t");break;
case 15: printf("广州火车站\t");break;
case 16: printf("三元里\t");break;
case 17: printf("远景\t");break;
case 18: printf("广州体育馆\t");break;
case 19: printf("新市\t");break;
case 20: printf("江夏\t");break;
}
}
情况二:需要转线——分四种情况
(1)起点站和终点站都是在公园前站前面
if(c<=109&&d<=212&&d>=201)
{
for(i=c%10;i<=9;i++)
switch(i)
{
case 1: printf("西湖\t");break;
case 2: printf("坑口\t");break;
case 3: printf("花地湾\t");break;
case 4: printf("芳村\t");break;
case 5: printf("黄沙\t");break;
case 6: printf("长寿路\t");break;
case 7: printf("陈家祠\t");break;
case 8: printf("西门口\t");break;
case 9: printf("公园前\t");break;
}
for(j=d%100;j<=11;j++)
switch(j)
{
case 1: printf("琶洲\t");break;
case 2: printf("新港东\t");break;
case 3: printf("磨碟沙\t");break;
case 4: printf("赤岗\t");break;
case 5: printf("客村\t");break;
case 6: printf("鹭江\t");break;
case 7: printf("中大\t");break;
case 8: printf("晓港\t");break;
case 9: printf("江南西\t");break;
case 10: printf("市儿宫\t");break;
case 11: printf("海珠广场\t");break;
} }
(2)起点站在公园前站前面,而终点站在公园前站后面if(c<=109&&d>=212)
{
for(i=c%10;i<=9;i++)
switch(i)
{
case 1: printf("西湖\t");break;
case 2: printf("坑口\t");break;
case 3: printf("花地湾\t");break;
case 4: printf("芳村\t");break;
case 5: printf("黄沙\t");break;
case 6: printf("长寿路\t");break;
case 7: printf("陈家祠\t");break;
case 8: printf("西门口\t");break;
case 9: printf("公园前\t");break;
}
for(j=13;j<=d%100;j++)
switch(j)
{
case 13: printf("纪念堂\t");break;
case 14: printf("越秀公园\t");break;
case 15: printf("广州火车站\t");break;
case 16: printf("三元里\t");break;
case 17: printf("远景\t");break;
case 18: printf("广州体育馆\t");break;
case 19: printf("新市\t");break;
case 20: printf("江夏\t");break;
}
}
(3)起点站在公园前站后面,终点站在前面
if(c>=109&&d<=212&&d>=201)
{
for(i=9;i<=c%100;i++)
switch(i)
{
case 9: printf("公园前\t");break;
case 10: printf("农讲所\t");break;
case 11: printf("烈士陵园\t");break;
case 12: printf("东山口\t");break;
case 13: printf("杨箕\t");break;
case 14: printf("体育西路\t");break;
case 15: printf("体育中心\t");break;
case 16: printf("广州东站\t");break;
}
for(j=d%100;j<=11;j++)
switch(j)
{
case 1: printf("琶洲\t");break;
case 2: printf("新港东\t");break;
case 3: printf("磨碟沙\t");break;
case 4: printf("赤岗\t");break;
case 5: printf("客村\t");break;
case 6: printf("鹭江\t");break;
case 7: printf("中大\t");break;
case 8: printf("晓港\t");break;
case 9: printf("江南西\t");break;
case 10: printf("市儿宫\t");break;
case 11: printf("海珠广场\t");break;
}
}
(4)起点站和终点站都在公园前站后面
if(c>=109&&d>=212) { for(i=9;i<=c%100;i++)
switch(i)
{
case 9: printf("公园前\t");break;
case 10: printf("农讲所\t");break;
case 11: printf("烈士陵园\t");break;
case 12: printf("东山口\t");break;
case 13: printf("杨箕\t");break;
case 14: printf("体育西路\t");break;
case 15: printf("体育中心\t");break;
case 16: printf("广州东站\t");break;
}
for(j=13;j<d%100;j++)
switch(j)
{
case 13: printf("纪念堂\t");break;
case 14: printf("越秀公园\t");break;
case 15: printf("广州火车站\t");break;
case 16: printf("三元里\t");break;
case 17: printf("远景\t");break;
case 18: printf("广州体育馆\t");break;
case 19: printf("新市\t");break;
case 20: printf("江夏\t");break;
} }
c)详细设计
附图:
d)调试分析
界面显示为:
若输入正确,即在101~116和201~220范围内,则输出:
若输入范围不在101~116和201~220,则输出错误提示:
若要继续查询,则按“Y”,清除之前的记录,重新执行;
若要停止,则按“N”,输出:
五.总结:
在课程设计过程中,我意识到原来编一个程序不是那么简单的,还要考虑到很多问题,比如:你所编的程序有什么功能,主要有什么用途,软件有什么开发潜能等,还有软件有什么改进的思想。

虽然有难度,可是我觉得很有挑战性,在程序的设计过程中,我还加深了对C语言数据结构的认识,真的使我受益菲浅。

因为C语言知识不是那么好,所以所用的结构都是比较简单的,如只用到for,while,switch等语句,不过对于我来说算是可以的了,会比较适合我自己的难度^_^。

在编译过程中也遇到难题,因为考虑到转站问题,要分开多种情况来讨论,有时单单用for语句难以实现,不过经过多次的调试,终于解决了问题。

相关文档
最新文档