C课设高速公路收费系统设计.docx
《C课设高速公路收费系统设计.docx》由会员分享,可在线阅读,更多相关《C课设高速公路收费系统设计.docx(12页珍藏版)》请在冰豆网上搜索。
C课设高速公路收费系统设计
C课设:
高速公路收费系统设计
学校:
西安理工大学
姓名:
陈国平
班级:
电气106
学号:
3100421166
(C程序代码和程序运行部分结果)
#include
#include
#include
#include
#defineN1000000
structvehicle/*定义储存车辆信息的结构体*/
{charnum[8];/*车牌号码*/
charvariety;/*车辆类型a,b,c(大,中,小)*/
intentera;/*进入口1,2,3……分别为各个入口*/
}ve[N];
intcount=0;
FILE*fp;
/*函数声明*/
voidreadfile();/*从文件导入*/
voidmenu();/*主菜单函数*/
voidinput();/*输入车辆信息函数*/
voidshow();/*显示应收金额*/
voidmmoney();/*统计总金额*/
voidwritefile();/*保存车辆信息*/
voidxianshi();/*显示车辆信息*/
voidmain()
{
readfile();
while
(1)
{
menu();
}
}
voidreadfile()/*从文件导入*/
{
if((fp=fopen("vehicle.txt","r"))==NULL)
{
printf("\n\t\t\t\t文件为空,请添加信息");
if((fp=fopen("vehicle.txt","w"))==NULL)
{
printf("\n\t\t\t建立失败");
exit(0);
}
else
{
printf("\n\t\t文件已建立");
printf("\n\t\tPressanykeytogettomainmenu!
");
getch();
return;
}
exit(0);
}
fseek(fp,0,2);/*文件指针fp指到到文件末尾*/
if(ftell(fp)>0)/*文件不为空*/
{
fseek(fp,0,0);/*文件指针指到文件开始位置*/
for(count=0;!
feof(fp)&&fread(&ve[count],sizeof(structvehicle),1,fp);count++);
fclose(fp);
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键进入系统");
getch();
return;
}
printf("\n\t\t\t已成功打开文件!
");
fclose(fp);
printf("\n\t\t\tPressanykeytogetbacktomainmenu");
getch();
return;
}
voidmenu()
{charn;
printf("\n\n\n\n");
printf("\t\t**********欢迎使用高速公路计费系统**********\n");
printf("\t\t主菜单\n");
printf("\t\t*********1.输入车辆信息*********\n");
printf("\t\t*********2.显示应收金额*********\n");
printf("\t\t*********3.显示金额总数*********\n");
printf("\t\t*********4.保存退出系统*********\n");
printf("\t\t*********5.显示车辆信息*********\n");
printf("请输入数字选择操作类型:
\n");
n=getchar();
switch(n)
{
case'1':
input();break;
case'2':
show();break;
case'3':
mmoney();break;
case'4':
writefile();break;
case'5':
xianshi();break;
default:
break;
}
}
voidinput()
{
printf("请输入车辆信息\n");
printf("车牌号:
\n");
scanf("%s",ve[count].num);
getchar();
printf("车辆类型(a,b,c分别代表大,中,小):
\n");
scanf("%c",&ve[count].variety);
printf("入口(1,2,3代表三个入口):
\n");
scanf("%d",&ve[count].entera);
count++;
printf("\n输入完毕,按任意键返回主菜单");
getch();
return;
}
voidshow()
{charnum[8];
intenterb,i;
doublel1=200,l2=300,l3=400;
/*定义三个入口到出口的路程分别是l1l2l3(200300400)公里*/
printf("请输入车牌号:
\n");
scanf("%s",num);
printf("请输入进入口:
\n");
scanf("%d",&enterb);
i=count-1;
if(strcmp(ve[i].num,num)==0&&ve[i].entera==enterb)
{
printf("车辆信息:
\n");
printf("车牌号:
%s\n",ve[i].num);
printf("车辆类型:
%c\n",ve[i].variety);
printf("入口站:
%d\n",ve[i].entera);
}
switch(ve[i].variety)
{case'a':
switch(ve[i].entera)
{case1:
printf("此车应收费%f",0.5*l1);break;
case2:
printf("此车应收费%f",0.5*l2);break;
case3:
printf("此车应收费%f",0.5*l3);break;
default:
break;
}break;
case'b':
switch(ve[i].entera)
{case1:
printf("此车应收费%f",0.4*l1);break;
case2:
printf("此车应收费%f",0.4*l2);break;
case3:
printf("此车应收费%f",0.4*l3);break;
default:
break;
}break;
case'c':
switch(ve[i].entera)
{case1:
printf("此车应收费%f",0.3*l1);break;
case2:
printf("此车应收费%f",0.3*l2);break;
case3:
printf("此车应收费%f",0.3*l3);break;
default:
break;
}break;
default:
break;
}
if(strcmp(ve[i].num,num)==0&&ve[i].entera==enterb)
printf("输入正确,此计费正确\n");
elseprintf("输入错误,此收费错误\n");
printf("\n按任意键返回主菜单");
getch();
return;
}
voidmmoney()
{inti;
doubled=0;
doublel1=200,l2=300,l3=400;
for(i=0;iswitch(ve[i].variety)
{case'a':
switch(ve[i].entera)
{case1:
d=d+0.5*l1;break;
case2:
d=d+0.5*l2;break;
case3:
d=d+0.5*l3;break;
default:
break;
}break;
case'b':
switch(ve[i].entera)
{case1:
d=d+0.4*l1;break;
case2:
d=d+0.4*l2;break;
case3:
d=d+0.4*l3;break;
default:
break;
}break;
case'c':
switch(ve[i].entera)
{case1:
d=d+0.3*l1;break;
case2:
d=d+0.3*l2;break;
case3:
d=d+0.3*l3;break;
default:
break;
}break;
default:
break;
}
printf("总金额为:
%f\n",d);
printf("按任意键返回主菜单");
getch();
return;
}
voidwritefile()
{
inti;
if((fp=fopen("vehicle.txt","w"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for(i=0;i{
if(fwrite(&ve[i],sizeof(structvehicle),1,fp)!
=1)
{
printf("\n\t\t写入文件错误!
\n");
}
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);
}
voidxianshi()
{inti;
for(i=0;i{printf("第%d辆车的信息\n",i+1);
printf("车牌号码为%s\n",ve[i].num);
printf("车辆类型为%c\n",ve[i].variety);
printf("车辆入口为%d\n",ve[i].entera);
}
printf("按任意键返回主菜单");
getch();
return;
}