2023年12月14日发(作者:奔驰b200多少钱)
实验一 车辆违章管理系统
一、系统功能模块结构图
本系统主要具备以下三个功能
1.车辆及违章信息的录入。
2.基于车牌号查询每台车辆的违章情况。
3.基于车牌号统计每台车辆的罚款总金额。
车辆违章管理系统
车辆及违章信息的录入
基于车牌号查询每台车辆的违章情况。
基于车牌号统计每台车辆的罚款总金额。
二、数据结构设计及用法说明
需处理的车辆及违章基本信息包括:车牌号、车主姓名、违章停车次数、闯红灯次数、超速次数。这些信息采用结构体数据类型表示更为方便,因为违章信息数量的不确定性,所以信息应采用链表进行存储,这更符合实际应用
所以采用的数据结构如下
typedef struct Pe
{
char vno[8];
int times1;
int times2;
int times3;
/*车牌号*/
/*违章停车次数*/
/*闯红灯次数*/
/*超速次数*/
char name[15]; /*车主姓名*/
struct Pe *next /*结构体指针*/
}PECCANCY;
其中char vno[8] 用来存储车牌号, char name[15]存储车主姓名int times1记录违章停车次数,int times2记录闯红灯次数,int times3记录超速次数,struct Pe
*next为结构体指针,用于链表链接。
三、程序结构
开始
Switch中的表达式caidan
功能一 功能二 功能三
输入车牌号 输入车牌号 输入车牌号
N
存在
Y
N
Y
存在
N
存在
Y
输出不存在 输出违章信息
创建链表
违章停车
switch
闯红灯
次数+1
超速
次数+1
输出不存在 输出罚款金额
次数+1
四、各模块的功能
本程序一共具有3个功能。因此,一共将程序分为3个模块。
模块一是车辆及违章信息的录入。
具体流程为: 根据输入的车牌号判断原有的链表是否存在这个车牌号。如果存在,则要输入这个车牌号所违章的项目,并在相应的违章记录次数上+1.如果原链表不存在这个车牌号,则需要创建新的节点,并提示输入完整的信息。最后将这个节点用尾插法插入链表中。
模块二、基于车牌号查询违章记录
具体流程为:根据输入的车牌号判断链表中是否存在这个车牌号。如果存在,将这个节点的所有信息输出。如果不存在,则输出不存在。
模块三、根据车牌号统计每辆车的罚款总金额
具体流程为:根据输入的车牌号判断链表中是否存在这个车牌号。如果存在,将这个节点的罚款输出。如果不存在,则输出不存在。
int LocateElem(PECCANCY *L,char a[]) 是元素查找函数,其中PECCANCY *L传递头指针,,char a[])传递车牌号
五、实验结果
运行程序。打印菜单项。输入1,提示输入车牌号.输入12345678.。程序提示不存在这个信息,要求输入违章项目,输入1.违章次数+1.返回主菜单。
输入1,输入车牌号12345678.要求输入违章项目。输入2。闯红灯次数+1.返回主菜单。
输入1.输入车牌号。45612378. 程序提示不存在这个信息,要求输入违章项目,输入1.违章次数+1.返回主菜单。
输入2.输入车牌号78945612.程序提示不存在这个信息。返回主菜单。
输入2.输入车牌号12345678.程序输出该车违章信息。其中违章停车一次,闯红灯一次,超速0次。返回主菜单。
输入3. 输入车牌号78945612.程序提示不存在这个信息。返回主菜单。
输入3.输入车牌号12345678.输出罚款300.
六、体会
链表只是接触是在学习算法与数据结构课程中,虽然已经掌握基本语法,但第一次用链表的时候感觉力不从心。编写程序速度较慢。同时,c语言很久没有使用,感觉比较生疏,很多基本的语句都会出错。
完成这个实验让我明白,只有不断地编写程序才能提高自己,才能是自己更快的找到完成程序的算法。同时,第一的实验也为第二个实验开了个好头。
附录:程序清单
#include
#include
#include
typedef struct Pe /*建立结构体*/
{
char vno[8];
char name[15];
int times1;
int times2;
int times3;
/*车牌号*/
/*车主姓名*/
/*违章停车次数*/
/*闯红灯次数*/
/*超速次数*/
struct Pe *next; /*指针节点*/
}PECCANCY;
int LocateElem(PECCANCY *L,char a[])/*元素查找函数*/
void main()
{ int caidan; /*关于菜单项的变量*/
int i,j,k,money;
char names[15],carnumber[9];
PECCANCY *head,*r,*s,*q; /*建立链表结点*/
head=(PECCANCY*)malloc(sizeof(PECCANCY));
{
PECCANCY *p=L->next;
int n=1;
while(p!=NULL&&strcmp(a,p->vno)!=0)
{p=p->next;
}
if(p==NULL)
else
}
return(n);
return(0);
n++;
r=(PECCANCY*)malloc(sizeof(PECCANCY));
r=head; /*r始终指向尾节点*/
head->next=NULL;
for(;;)
{
printf(\"请输入您要查询的功能 n1.车辆及违章信息的录入。n2.基于车牌号查询每台车辆的违章情况。n3.基于车牌号统计每台车辆的罚款总金额。n\");/*菜单项*/
scanf(\"%d\",&caidan) ;
switch(caidan)
{
case 1: /*第一种服务*/
printf(\"请输入违章车辆的车牌号\");/*输入违章车辆车牌号*/
scanf(\"%s\",carnumber);
k=LocateElem(head,carnumber);
if(k==0)
{
s=(PECCANCY*)malloc(sizeof(PECCANCY));/*创建新节点*/
strcpy(s->vno,carnumber);
s->times1=0;
s->times2=0;
s->times3=0;
printf(\"原纪录不存n\");
/*scanf(\"%s\",names);
strcpy(s->name,names);*/
printf(\"请输入违章人所违反项目n 1.违章停车n2.闯红灯n3.超速n\");
scanf(\"%d\",&j);
switch(j)
{
case 1:s->times1++; break;
case 2:s->times2++;break;
case 3:s->times3++;break;
}
printf(\"已将违章情况记录下来n\");
r->next=s; /*尾插法*/
}
else
{ q=(PECCANCY*)malloc(sizeof(PECCANCY));
q=head;
for(i=0;i r=s; r->next=NULL; q=q->next; printf(\"请输入违章人所违反项目n 1.违章停车n2.闯红灯n3.超速n\"); scanf(\"%d\",&j); switch(j) { case 1:q->times1++;break; case 2:q->times2++;break; case 3:q->times3++;break; } } break; case 2: /*第二种服务*/ printf(\"请输入车牌号\"); scanf(\"%s\",carnumber); k=LocateElem(head,carnumber); if(k==0) {printf(\"无此车牌号记录\"); continue; } else{ q=(PECCANCY*)malloc(sizeof(PECCANCY)); q=head; for(i=0;i q=q->next; printf(\"请输入需要查询违章人所违反项目n 1.违章停车n2.闯红灯n3.超速n\"); scanf(\"%d\",&j); switch(j) { case 1:printf(\"违章停车次数为:%dn\",q->times1); break; case 2:printf(\"闯红灯次数为:%dn\",q->times2);break; case 3:printf(\"违章停车次数为:%dn\",q->times3);break; } }break; case 3: /*第三种服务*/ printf(\"请输入车牌号\"); scanf(\"%s\",carnumber); k=LocateElem(head,carnumber); if(k==0) {printf(\"无此车牌号记录\");} else{ q=(PECCANCY*)malloc(sizeof(PECCANCY)); q=head; for(i=0;i { q=q->next;} money=q->times1*100+q->times2*200+q->times3*500; } printf(\"%d\",money); }} }
更多推荐
输入,车牌号,违章,信息
发布评论