汽车过磅系统.docx
- 文档编号:2253033
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:19
- 大小:54.25KB
汽车过磅系统.docx
《汽车过磅系统.docx》由会员分享,可在线阅读,更多相关《汽车过磅系统.docx(19页珍藏版)》请在冰豆网上搜索。
汽车过磅系统
怀化学院计算机系
《高级语言程序设计》课程设计报告书
简单的汽车过磅系统的设计和实现
学生姓名:
×××
学号:
0806401042
年级专业及班级:
2008级01班
指导老师及职称:
×××教授
专业:
计算机科学与技术专业
湖南·怀化
提交日期:
2009年09月
简单的汽车过磅系统的设计和实现
学生:
谭芳
指导老师:
蒋启明
(怀化学院计算机系,怀化418008)
摘要:
本次课程设计的目的是设计一个简单的汽车过磅系统,要求统计当天过磅的汽车车辆总数、运载货物总重量,以及统计按不同车型统计当天收费总金额、所有车型的总金额,并且按收费金额排序,显示各车型型号与收费金额,使其统计结果保存在文本文档中。
本次设计主要采用的语言工具是C语言,编程环境是VC.6。
系统由若干个函数组成,用到了结构体、函数调用、文件读写和常见的循环等手法,经过多次的调试与修改,终于很好的完成了这一次的课程设计任务。
通过这一次的作业,我学到了很多的知识,明白了亲自实践的重要性。
关键词:
结构体函数调用循环VC.6
1前言
本次课程设计的目的是设计一个简单的汽车过磅系统,难度为三颗星,并且要求具有以下基本功能:
1、输入记录功能(从键盘输入车型、车辆重量)
2、统计当天过磅的汽车车辆总数、运载货物总重量。
3、统计各种车型车辆总数、各种车型运载货物总重量。
4、统计当天收费总金额、各种车型收费总金额。
5、按收费总金额排序,显示各车型型号、收费金额。
6、查询功能(按车型查询货物重量、金额)。
7、统计结果保存在文本文件中。
8、从文本文件中读取数据、显示。
针对题目的各项要求,我运用C语言工具在VC.6的环境中,通过结构体数组、函数的调用、循环的使用以及文件的打开与关闭等常用方法来解决设计过程中遇到的问题,编写出了一个满足要求的简单系统。
2设计分析
根据题目的要求,从输入记录功能这一项就想到要定义一个结构体包含所有的要输入的信息,由于记录的数据需要保存,所以系统中将用到文件的开闭、读写等功能。
由于该系统提供了多项功能,于是考虑用一个switch语句,而控制该语句开关的值从调用函数中返回。
由于此设计要实现多个功能,所以为了是源代码清晰明了,所以的函数不采取嵌套的方式,而是对每个功能都使用一个子程序实现,然后通过调用来达到目的的要求。
3实现方法
本程序通过C语言来实现,在VC6.0下运行
3.1函数功能介绍
3.1.1定义一个车型的结构体,其中包括下一个车型结构体的地址,本车型的过磅收费金额,和车辆总数。
typedefstructbil
{
structbil*next;
doublebill;
inti;
}Bill;
3.1.2函数功能的描述
1voidwelcome();欢迎界面,在界面上打印欢迎界面
2voidmenu();菜单界面3voidinput(Car*head);输入数据的函数
4voidstate_1(Car*head);统计当天过磅的汽车车辆总数、运载货物总重量
5voidstate_2(Car*head);统计各种车型车辆总数、各种车型运载货物总重量
6voidstate_3(Car*head);统计当天收费总金额、各种车型收费总金额
7voidshow();显示函数
8voidsearch();查询函数
9voidsort(Bill*head,doublebill,inti);排序
10voidshow1();显示函数
3.2函数功能的实现
3.2.1源码分析
程序预处理:
#include
#include
3.2.2被调用函数
voidmain()
{
charcommand;
head.next=NULL;//前面已经定义了head为car类型,将其中的next(是一个指针类型)赋为空;
welcome();//调用“欢迎界面”的函数;
system("cls");//清除屏幕;
while
(1)//1为真,while循环成立直到输入N结束;
{
menu();//调用菜单函数,将菜单打印在屏幕上面,并执行menu中的其他操作;
puts("回到总菜单YorN");
//下面的循环表示:
直到你输入的数据时Y或者N,循环才停止,其他的都会显示“错误输入”
while(command=getchar(),command!
='Y'&&command!
='N')
{
if(command!
='\n')getchar();
puts("错误输入!
");
}getchar();//读掉你输入的回车键
system("cls");//清屏
if(command=='N'){system("cls");puts("谢谢使用!
");
return;}//输入的是N的话,整个程序结束。
如果是Y的话界面又跳到了菜单那里,也就是程序跳到主函数的while
(1)那里继续进行操作;
}
}
//进入欢迎界面函数
voidwelcome()//欢迎界面
{
puts("\t\t\t欢迎使用汽车过磅系统");
puts("任意输入进入系统!
");
if(getchar()!
='\n')getchar();//吸收任意输入的字符,接着进入系统
}
//进入菜单界面的函数
voidmenu()
{
charcommand;
puts("[0]退出系统");
puts("[1]输入数据");
puts("[2]统计当天过磅的汽车车辆总数、运载货物总重量并显示");
puts("[3]统计各种车型车辆总数、各种车型运载货物总重量并显示");
puts("[4]统计当天收费总金额、各种车型收费总金额并显示");
puts("[5]按收费总金额排序,显示各车型型号、收费金额");
puts("[6]查询功能(按车型查询货物重量、金额)");
puts("[7]从文本文件中读取数据、显示");
printf("\n\n请从菜单中选择一项输入(0~7):
");
while(command=getchar(),command<'0'||command>'7')//进入菜单界面后,提示你输入数字,如果你输入的不是0~7之间的数字就会打印“输入错误”
{
if(command!
='\n')getchar();
puts("错误输入!
");
}getchar();
system("cls");//清除平面的函数switch(command)//用一个switch语句,当你输入的数字(存放在command中)与其中的数字对应时就执行哪一个case语句
{
case'0':
;return;//选择0退出系统
case'1':
input(&head);break;//输入1就调用input函数即输入数据(包括车型和车的总重量)
case'2':
state_1(&head);break;
case'3':
state_2(&head);break;
case'4':
state_3(&head);break;
case'5':
show();break;
case'6':
search();break;
case'7':
show1();
}
}
voidinput(Car*head)//输入数据,它的形参就是前面定义的car类型head的地址;
{
charcommand;
Car*p,*q;//把p何q均定义为指向car类型的指针;
puts("当您要结束输入时请在输入车型时,输入“0”.\n\n车型分别有2,3,4,5,6五种!
回车开始输入!
\n\n请按回车键开始输入你要统计当天的数据!
\n");
//下面这个while循环的表示,如果你输入的不是回车键,它会提示你输入错误,并通过循环要你继续输入,直到你输入的是回车键循环才结束
while(command=getchar(),command!
='\n')
{
getchar();
puts("错误输入!
");
}
system("cls");//清屏
p=head;//把head这个指针赋给p指针这个时候两个指针都指向head这个结构体,即节点;
p->next=NULL;
while
(1)
{
q=(Car*)malloc(sizeof(Car));//定义一个指针后为它开一个空间,才能够对它继续操作,故该操作为q开辟一个大小为car类型的空间,sizeof(Car)这个函数得到car类型的大小,malloc()是c语言中开辟空间的函数
printf("车型:
");
scanf("%d",&q->model);//输入一个整数,即车的型号,放到指针q指向的model里面
if(q->model==0){getchar();system("cls");return;}//如果你要结束输入的话就输入一个零即可;
if(q->model>6||q->model<2)//车的型号在2与6之间,其他的均是“输入错误”
{
puts("输入错误");
break;
}
printf("车重:
");
scanf("%lf",&q->weight);//输入一个整数,即车的总重量,放到q指向的weight里面;
getchar();
//以下代码表示:
把前一个节点的里面的next成员指向刚才上面的q节点,使每相邻两个节点串联起来,最后形成一个链
p->next=q;
p=q;
p->next=NULL;//默认最后一个节点里面的next指向空;
}
system("cls");//清屏
}
voidstate_1(Car*head)//形参为传入链的头指针,因为有了头指针,整个链中car都可以找到;
{
charcommand;
Car*p;
inttotal=0;//初始化当天过磅的汽车车辆总数
doublesum=0;//初始化运载货物总重量,定义为double型
p=head->next;//p指向头结点的下一个节点
while(p)//循环成立的条件是,当p=NULL的时候就结束;即p指向为空,也就是,循环执行到最后输入的那组数据后就结束;
{
++total;//每循环一次,p指向的那个car类型的节点就算一次车数,下一行代码就是把这辆车的总重量减去本身车中后放到货物总重量sum中去;
sum+=p->weight-p->model;//本来应该是减去车重的,但定义车的类型的时候,每两车的类型恰好是个类型车本身的重量,故免去了车自身重这个变量;
p=p->next;//然后让p指向下一个car(如果存在的话),并继续循环完成相应的操作;
}
printf("车辆数:
%d\t运载货物总重量:
%.2f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汽车 过磅 系统