《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(c200){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(cd)z=d;elsez=c;return(z);}把起点站跟终点站比较,取出较大者:intmax(intc,intd){intz;if(cd)z=c;elsez=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);elseprintf(请注意:要到公园前站转线\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(体育