C课程设计地铁价格查询系统样本.docx
《C课程设计地铁价格查询系统样本.docx》由会员分享,可在线阅读,更多相关《C课程设计地铁价格查询系统样本.docx(19页珍藏版)》请在冰豆网上搜索。
![C课程设计地铁价格查询系统样本.docx](https://file1.bdocx.com/fileroot1/2023-4/16/8ed44227-a326-44b3-bfcd-1ba1f911e368/8ed44227-a326-44b3-bfcd-1ba1f911e3681.gif)
C课程设计地铁价格查询系统样本
《C语言程序设计》
课程设计汇报
一.目标
经过本教学步骤充足编程实践和实际应用,深入熟悉和巩固C语言语法知识和程序设计基础方法,经过应用深入体会数据就够重常见算法实质,建立算法优劣概念和算法评定分析和比较方法。
借助合适题材程序设计实训,加深体会利用数据结构算法和C语言程序设计处理实际问题思维过程。
经过一定文档要求,培养学生良好程序设计风格,包含程序结构形式,行文格式和程序正文格式等。
二.内容
利用C语言这种程序设计语言设计一个应用程序,实现题目和具体内容自拟
三.试验要求
进行简单需求分析、设计说明,写出程序结构框架,说明设计思绪、用到原理和方法。
程序规模适中,着重于内核功效,对界面无要求。
要求采取面向对象程序设计方法来进行课程设计。
四.算法思想
该程序为地铁价格查询系统,用到C语言中选择结构程序设计,循环控制,函数。
其中,选择结构程序设计用到了if语句嵌套,switch语句;循环控制用到了for,do……while语句实现循环,还有break语句,循环嵌套;函数就用到了函数嵌套调用。
该系统难点在于转站问题,不过已经处理了。
a)需求分析:
1.该系统关键提供地铁价格查询功效,外附显示所要乘坐站数和经过地铁站,转站等功效。
2.该系统还能够让地铁乘客清楚地知道自己乘坐所需要付费,还有知道一共要经过多少个站,经过哪些站等,让乘客对自己行程有个了解。
3.该系统界面清楚易懂,乘客看着界面能够明白地知道自己所在位置和能够轻松地选择目标地。
其中,界面以下所表示:
◎欢迎使用广州地铁价格查询系统◎
**************************************************************
**
*广州地铁一号线*
*____________________________________________________________*
*1111111111111111*
*0000000001111111*
*1234567890123456*
*西坑花芳黄长陈西公农烈东杨体体广*
*湖口地村沙寿家门园讲士山箕育育州*
*湾路祠口前所陵口西中东*
*园路心站*
**
*广州地铁二号线*
*____________________________________________________________*
*22222222222222222222*
*00000000011111111112*
*12345678901234567890*
*琶新磨赤客鹭中晓江市海公纪越广三远广新江*
*洲港碟岗村江大港南二珠园念秀州元景州市夏*
*东沙西宫广前堂公火里体*
*场园车育*
*站馆*
**
**************************************************************
4.对输入数据格式要求为:
只要输入数字就行了,可是输入数字必需在101~106,201~220之间,不然输犯错误提醒,乘客需要继续输入,直到输入正确为止,输出结果后会有提醒是否要继续。
5.该软件能够在TurboC/C++forWindows内测试。
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);
}
第二模块:
函数定义模块
把起点站序号跟终点站序号比较,取出较少着:
intmin(intc,intd)
{
intz;
if(c>d)
z=d;
else
z=c;
return(z);
}
把起点站跟终点站比较,取出较大者:
intmax(intc,intd)
{
intz;
if(c>d)
z=c;
else
z=d;
return(z);
}
输出所要费用:
voidsubway(intj)
{
switch(j)
{
case0:
printf("Sorry,你已经在本站,不用再乘座了。
Thanks!
^_^\n");break;
case1:
case2:
case3:
printf("收费2元,Thanks!
^_^\n");break;
case4:
case5:
case6:
printf("收费3元,Thanks!
^_^\n");break;
case7:
case8:
case9:
printf("收费4元,Thanks!
^_^\n");break;
case10:
case11:
case12:
printf("收费5元,Thanks!
^_^\n");break;
case13:
case14:
case15:
printf("收费6元,Thanks!
^_^\n");break;
case16:
case17:
case18:
printf("收费7元,Thanks!
^_^\n");break;
case19:
case20:
printf("收费8元,Thands!
^_^\n");
}
}
该函数检验是否需要转线
voidchange_line(intc,intd)
{
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)
{
case1:
printf("西湖\t");break;
case2:
printf("坑口\t");break;
case3:
printf("花地湾\t");break;
case4:
printf("芳村\t");break;
case5:
printf("黄沙\t");break;
case6:
printf("长寿路\t");break;
case7:
printf("陈家祠\t");break;
case8:
printf("西门口\t");break;
case9:
printf("公园前\t");break;
case10:
printf("农讲所\t");break;
case11:
printf("烈士陵园\t");break;
case12:
printf("东山口\t");break;
case13:
printf("杨箕\t");break;
case14:
printf("体育西路\t");break;
case15:
printf("体育中心\t");break;
case16:
printf("广州东站\t");break;
}
}
(2)起点站和终点站全部在二号线
if(c/100==2&&d/100==2)
{
for(i=c%100;i<=d%100;i++)
switch(i)
{
case1:
printf("琶洲\t");break;
case2:
printf("新港东\t");break;
case3:
printf("磨碟沙\t");break;
case4:
printf("赤岗\t");break;
case5:
printf("客村\t");break;
case6:
printf("鹭江\t");break;
case7:
printf("中大\t");break;
case8:
printf("晓港\t");break;
case9:
printf("江南西\t");break;
case10:
printf("市儿宫\t");break;
case11:
printf("海珠广场\t");break;
case12:
printf("公园前\t");break;
case13:
printf("纪念堂\t");break;
case14:
printf("越秀公园\t");break;
case15:
printf("广州火车站\t");break;
case16:
printf("三元里\t");break;
case17:
printf("远景\t");break;
case18:
printf("广州体育馆\t");break;
case19:
printf("新市\t");break;
case20:
printf("江夏\t");break;
}
}
情况二:
需要转线——分四种情况
(1)起点站和终点站全部是在公园前站前面
if(c<=109&&d<=212&&d>=201)
{
for(i=c%10;i<=9;i++)
switch(i)
{
case1:
printf("西湖\t");break;
case2:
printf("坑口\t");break;
case3:
printf("花地湾\t");break;
case4:
printf("芳村\t");break;
case5:
printf("黄沙\t");break;
case6:
printf("长寿路\t");break;
case7:
printf("陈家祠\t");break;
case8:
printf("西门口\t");break;
case9:
printf("公园前\t");break;
}
for(j=d%100;j<=11;j++)
switch(j)
{
case1:
printf("琶洲\t");break;
case2:
printf("新港东\t");break;
case3:
printf("磨碟沙\t");break;
case4:
printf("赤岗\t");break;
case5:
printf("客村\t");break;
case6:
printf("鹭江\t");break;
case7:
printf("中大\t");break;
case8:
printf("晓港\t");break;
case9:
printf("江南西\t");break;
case10:
printf("市儿宫\t");break;
case11:
printf("海珠广场\t");break;
}}
(2)起点站在公园前站前面,而终点站在公园前站后面
if(c<=109&&d>=212)
{
for(i=c%10;i<=9;i++)
switch(i)
{
case1:
printf("西湖\t");break;
case2:
printf("坑口\t");break;
case3:
printf("花地湾\t");break;
case4:
printf("芳村\t");break;
case5:
printf("黄沙\t");break;
case6:
printf("长寿路\t");break;
case7:
printf("陈家祠\t");break;
case8:
printf("西门口\t");break;
case9:
printf("公园前\t");break;
}
for(j=13;j<=d%100;j++)
switch(j)
{
case13:
printf("纪念堂\t");break;
case14:
printf("越秀公园\t");break;
case15:
printf("广州火车站\t");break;
case16:
printf("三元里\t");break;
case17:
printf("远景\t");break;
case18:
printf("广州体育馆\t");break;
case19:
printf("新市\t");break;
case20:
printf("江夏\t");break;
}
}
(3)起点站在公园前站后面,终点站在前面
if(c>=109&&d<=212&&d>=201)
{
for(i=9;i<=c%100;i++)
switch(i)
{
case9:
printf("公园前\t");break;
case10:
printf("农讲所\t");break;
case11:
printf("烈士陵园\t");break;
case12:
printf("东山口\t");break;
case13:
printf("杨箕\t");break;
case14:
printf("体育西路\t");break;
case15:
printf("体育中心\t");break;
case16:
printf("广州东站\t");break;
}
for(j=d%100;j<=11;j++)
switch(j)
{
case1:
printf("琶洲\t");break;
case2:
printf("新港东\t");break;
case3:
printf("磨碟沙\t");break;
case4:
printf("赤岗\t");break;
case5:
printf("客村\t");break;
case6:
printf("鹭江\t");break;
case7:
printf("中大\t");break;
case8:
printf("晓港\t");break;
case9:
printf("江南西\t");break;
case10:
printf("市儿宫\t");break;
case11:
printf("海珠广场\t");break;
}
}
(4)起点站和终点站全部在公园前站后面
if(c>=109&&d>=212){
for(i=9;i<=c%100;i++)
switch(i)
{
case9:
printf("公园前\t");break;
case10:
printf("农讲所\t");break;
case11:
printf("烈士陵园\t");break;
case12:
printf("东山口\t");break;
case13:
printf("杨箕\t");break;
case14:
printf("体育西路\t");break;
case15:
printf("体育中心\t");break;
case16:
printf("广州东站\t");break;
}
for(j=13;jswitch(j)
{
case13:
printf("纪念堂\t");break;
case14:
printf("越秀公园\t");break;
case15:
printf("广州火车站\t");break;
case16:
printf("三元里\t");break;
case17:
printf("远景\t");break;
case18:
printf("广州体育馆\t");break;
case19:
printf("新市\t");break;
case20:
printf("江夏\t");break;
}}
c)具体设计
附图:
d)调试分析
界面显示为:
若输入正确,即在101~116和201~220范围内,则输出:
若输入范围不在101~116和201~220,则输犯错误提醒:
若要继续查询,则按“Y”,清除之前统计,重新实施;
若要停止,则按“N”,输出:
五.总结:
在课程设计过程中,我意识到原来编一个程序不是那么简单,还要考虑到很多问题,比如:
你所编程序有什么功效,关键有什么用途,软件有什么开发潜能等,还有软件有什么改善思想。
即使有难度,可是我认为很有挑战性,在程序设计过程中,我还加深了对C语言数据结构认识,真使我受益菲浅。
因为C语言知识不是那么好,所以所用结构全部是比较简单,如只用到for,while,switch等语句,不过对于我来说算是能够了,会比较适合我自己难度^_^。
在编译过程中也碰到难题,因为考虑到转站问题,要分开多个情况来讨论,有时单单用for语句难以实现,不过经过数次调试,最终处理了问题。