您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 高速公路收费系统 C语言课程设计报告
题目:高速公路计费系统设计功能:在某高速公路出口收费处,对三种类型的车辆计费,大型车每公里0。5元,中型车每公里0。4元,小型车每公里0。3元,来车验条,乘公里数即得该收的款项。在交班时要统计出总数。分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2、完成最低要求:建立一个只有三个入口的计费系统,并能进行统计计算,打印出报表;3、进一步要求:完成任意多个入口的通用系统。要求:1、用C语言实现程序设计;2、利用结构体数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。总体设计确定总体设计的框架后,分阶段完善各个模块的详细设计,并不断编译和调试,找出和更改程序错误,最终完成题目的要求。进入系统首页为主菜单,主菜单下分4个模块:模块1:录入车辆信息进入模块1后按提示要求录入车牌号码、时间、型号大小(用a、b、c分别表示大型、中型、小型)和入站口(1、2、3、4……表示不同入口站名称并分别对应不同公里路程数)。模块2:查询车辆信息菜单1.录入车辆信息2.查询车辆信息3.车辆统计报表4.保存关闭系统进入模块2后按提示要求录入所要查询的车牌号码,即可查询其进站入口,时间,及所需费用等信息模块3:车辆统计报表进入模块3后即可显示操作员之前录入的所有车辆的各个信息,并统计出车辆总数及应收总费用。模块4:保存关闭系统进入模块4后系统自动保存所有车辆信息,并按提示可退出本系统。流程图录入车辆信息查询车辆信息汇总报表保存退出系统菜单输入车牌号码输入进站时间输入车型大小输入入站口是否继续录入是否退出系统输入车牌号码是否继续查询保存数据结束YNYYNN显示车辆信息显示所有车辆信息、车辆总数及应收总费开始程序代码:#includestdio.h#includestdlib.h#includestring.h#includeconio.h#defineN100#defineM4//入口数量,可设置多个路口chara[]={20,30,40,50};//路口k1:20公里,路口k2:30公里,路口k3:40公里,路口k4:50公里charstr[][3]={k1,k2,k3,k4};//入口名称,分别对应上面数组的公里数FILE*fp;intcount;voidinput();voidcheak();voidtongji();voidread();voidmenu();voidwritefile();structvehicle//车辆信息{charnum[15];chartime[6];charsize[2];charroad[3];floatcost;}ve[N];voidmain(){read();while(1){menu();}}voidread()//导入文件{charfilename[20];if((fp=fopen(tql.txt,r))==NULL){printf(无此文件,新建一个文件\n);printf(输入文件名,回车键结束:);scanf(%s,filename);if((fp=fopen(filename,w))==NULL){printf(新建失败);exit(0);}else{printf(新建文件成功,按任意键返回主菜单);getchar();return;}}fseek(fp,0,2);//文件内部指针退回到离文件结尾0位置,即指针指向文件内部末尾处if(ftell(fp)0)//使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。{fseek(fp,0,0);for(count=0;!feof(fp)&&fread(&ve[count],sizeof(structvehicle),1,fp);count++);return;}}voidmenu(){system(cls);chari;printf(\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n\t****************欢迎来到公路计费系统*************\n\n\t\t\t主菜单\n\n);printf(\t********\t录入车辆信息请按1\t********\n\n);printf(\t********\t查询车辆信息请按2\t********\n\n);printf(\t********\t车辆统计报表请按3\t********\n\n);printf(\t********\t保存关闭系统请按4\t********\n\n\t*************************************************\n);i=getch();switch(i){case'1':input();break;case'2':cheak();break;case'3':tongji();break;case'4':writefile();default:break;}}voidinput()//录入车辆信息函数{chari,j;system(cls);printf(\n请录入车辆信息:);printf(\n车牌号码(5位字符)\n);scanf(%s,&ve[count].num);printf(\n进站时间(输入格式**:**)\n);scanf(%s,&ve[count].time);printf(\n车辆型号(a,b,c分别代表大中小)\n);//大车0.5元/每公里;中型车0.4元/每公里;小车0.3元/每公里scanf(%s,&ve[count].size);printf(\n入口通道(输入k1,k2,k3....)\n);scanf(%s,&ve[count].road);i=count;//计算该车路费if(strcmp(ve[i].size,a)==0){for(j=0;jM;j++){if(strcmp(ve[i].road,str[j])==0){ve[i].cost=a[j]*0.5;break;}}}elseif(strcmp(ve[i].size,b)==0){for(j=0;jM;j++){if(strcmp(ve[i].road,str[j])==0){ve[i].cost=a[j]*0.4;break;}}}elseif(strcmp(ve[i].size,c)==0){for(j=0;jM;j++){if(strcmp(ve[i].road,str[j])==0){ve[i].cost=a[j]*0.3;break;}}}elseve[i].cost=00.00;count++;printf(\n\n是否继续录入车辆信息?\n按1继续录入按任意键返回\n);switch(getch()){case'1':input();default:return;}}voidcheak()//查询车辆信息函数{charch,num[10],i,k=0;system(cls);printf(查询车辆信息\n\n);printf(请输入车牌号码\n);scanf(%s,num);for(i=count-1;i=0;i--)//需显示车辆最新进站信息{if(strcmp(ve[i].num,num)==0){k=1;break;}}if(k==1){printf(车牌号码进站时间车型大小进站入口应收费用\n);printf(%s\t,ve[i].num);printf(%s,ve[i].time);printf(%s\t,ve[i].size);printf(%s\t,ve[i].road);printf(%.2f元,ve[i].cost);printf(\n\n\n按1继续查询按任意键返回主菜单);ch=getchar();//用来接收前面指令的最后一个回车键ch=getch();//接收选择键switch(ch){case'1':cheak();default:return;}}else{printf(\n无可显示内容\n\n按1继续查询按任意键返回主菜单\n);ch=getch();switch(ch){case'1':cheak();default:return;}}}voidtongji()//汇总报表{inti,j;floatsum=0.00;system(cls);printf(\n\n\t\t报表汇总\n\n);printf(车牌号码进站时间车型大小进站入口应收费用);for(i=0;icount;i++){printf(\n\n%s,ve[i].num);printf(%s,ve[i].time);printf(%s,ve[i].size);printf(%s,ve[i].road);printf(%.2f,ve[i].cost);}for(j=0;jcount;j++){sum=sum+ve[j].cost;}printf(\n\n\n\t\t\t\t车辆总数:%d辆,count);printf(\n\n\t\t\t\t收费总额:%.2f元,sum);printf(\n\n\n\n按任意键返回\n);getch();}voidwritefile()//文件保存函数{system(cls);inti,ch;if((fp=fopen(tql.txt,w))==NULL){printf(打开文件失败);}for(i=0;icount;i++){if(fwrite(&ve[i],sizeof(structvehicle),1,fp)!=1)printf(无法读入文件);}fclose(fp);printf(\n\n\n\n\n\t\t\t文件保存成功\n\n\n\t\t按1退出程序\t按任意键返回\n);ch=getch();switch(ch){case'1':exit(0);default:return;}}部分截图:主菜单:模块1:录入车辆信息截图模块2:查询车辆信息截图模块3:汇总报表截图模块4:保存退出系统截图C程序设计总结本程序在刚开始调试时有许多错误,但在我不懈努力及同学们的帮助下都被一一克服,现在在操作本程序时可根据提示进行相关操作,界面整洁大方,人机交互界面良好,能正确输出结果。在刚开始的几次调试中曾经出现过不能运行,弹出提示警告框令到调试终止。其中,为力求界面简洁美观,需要多次调试输出数据,图形符号的位置,使其整齐划一,这花了相当一部分时间。在调试check()函数时,当输入完车牌号码并显示出该车辆信息后,当按任意键后屏幕马上跳回菜单页面而无法按设计要求输出选择项,经过查找书本得知要在switch语句前再加上一句getchar()语句用来接收前面指令的最后一个回车键,之后经修改功能得到实现。完成题目要求的基本功能后就考虑完成任意多个路口的通用系统这一功能。本人选择在程序开始部分加设两个数组。一个数组是设置各入站口的名字,另外一个数组是设置各路口的里程数,并且其元素顺序与前一数组一一对应。在后面的程序中只要检测到其路口名即可找出相应公里数并计算车辆的路费。考虑程序简洁性本功能不在人机界面上实现,若需增加入站口,在程序开始部分的数组增加站口及与其对应的里程数即可。收获:在这次设计过程中,不仅复习课本上所学知识,还通过上网查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,勤于实践,尽量把所学的知识综合起来应用,力争写出完美的程序。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。经过这段时间的实践我对《C语言》这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们电子科学与技术专业的学习中占据着十分重要的地位。同时也使我知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较
本文标题:高速公路收费系统 C语言课程设计报告
链接地址:https://www.777doc.com/doc-3694429 .html