收藏 分销(赏)

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

上传人:xrp****65 文档编号:8897750 上传时间:2025-03-07 格式:DOCX 页数:19 大小:52.89KB 下载积分:10 金币
下载 相关 举报
C课程设计--地铁价格查询系统.docx_第1页
第1页 / 共19页
C课程设计--地铁价格查询系统.docx_第2页
第2页 / 共19页


点击查看更多>>
资源描述
《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)详细设计 开始 声明函数name_passed_station(),change_line(),subway(), Max(),min(),stull() 定义变量a,b,c,d,j,n 调用stull() 输出界面 输入c (101<=c&&c<=116)||(201<=c&&c<=220) 输入错误,请重输 输入d (101<=d&&d<=117)||(201<=d&&d<=220) 输入错误,请重输 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);调用函数见附图函数调用部分 c<200 a=max(c,d);b=min(c,d); j=a-b;subway(j);change_line( c, d);name_passed_station( c, d);调用函数见附图函数调用部分 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); 输入n n=='Y' 返回开始 结束 附图: max() Int c,d ,z c>d z=c z=d return(z) min() Int c,d ,z z=c return(z) c>d z=d subway(int j) 判断I值 输出票价 结束 change_line(int c,int d) c/100==d/100 输出不用转线 输出在公元前转线 结束 name_passed_station(int c,int d) int i,j c/100==1&&d/100==1) c/100==2&&d/100==2 i=c%100;i<=d%100;i++ c/100==2&&d/100==2 输出各站名 输出各站名 c<=109&&d<=212&&d>=201 c<=109&&d>=212 c>=109&&d<=212&&d>=201 i=c%10;i<=9 j=d%100;j<=11 输出站点 输出站点 i=c%10;i<=9 j=13;j<=d%100 输出站点 输出站点 i=9;i<=c%100 j=d%100;j<=11 输出站点 输出站点 c>=109&&d>=212 i=9;i<=c%100 输出站点 j=13;j<d%100 输出站点 d)调试分析 界面显示为: 若输入正确,即在101~116和201~220范围内,则输出: 若输入范围不在101~116和201~220,则输出错误提示: 若要继续查询,则按 “Y”,清除之前的记录,重新执行; 若要停止,则按“N”,输出: 五.总结: 在课程设计过程中,我意识到原来编一个程序不是那么简单的,还要考虑到很多问题,比如:你所编的程序有什么功能,主要有什么用途,软件有什么开发潜能等,还有软件有什么改进的思想。虽然有难度,可是我觉得很有挑战性,在程序的设计过程中,我还加深了对C语言数据结构的认识,真的使我受益菲浅。因为C语言知识不是那么好,所以所用的结构都是比较简单的,如只用到for,while,switch等语句,不过对于我来说算是可以的了,会比较适合我自己的难度^_^。在编译过程中也遇到难题,因为考虑到转站问题,要分开多种情况来讨论,有时单单用for语句难以实现,不过经过多次的调试,终于解决了问题。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服