交通处罚单管理系统C语言.doc
《交通处罚单管理系统C语言.doc》由会员分享,可在线阅读,更多相关《交通处罚单管理系统C语言.doc(32页珍藏版)》请在冰豆网上搜索。
![交通处罚单管理系统C语言.doc](https://file1.bdocx.com/fileroot1/2022-10/7/f1ccce97-00b5-4bf2-bd72-b2b8cc9a3fc9/f1ccce97-00b5-4bf2-bd72-b2b8cc9a3fc91.gif)
交通处罚单管理系统
内容:
〔要求〕交通处罚单涉及到车辆、驾驶员和开单交警的信息,还有交通处罚单号码,处罚时间等信息。
功能:
(1)要求可以输入、删除、浏览交通处罚单信息。
(2)可以按车辆、驾驶员和开单交警查询。
(3)统计某时间段某个驾驶员的交通处罚单数目及交通处罚单号码。
第二部分:
需求分析
1.交通处罚单信息用文件存储,提供文件的输入输出操作;
2.要求可以输入、删除、浏览交通处罚单信息,因而要提供信息的输入、删除和显示操作;
3.要车辆、驾驶员和开单交警查询,则要提供查找操作;
4.另外提供系统操作和键盘式选择菜单以实现功能选择。
第三部分:
程序总体设计思路
由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。
在编写本程序的过程中,首先,确定目标程序运行的次序与界面,即本程序首先运行【用户系统】菜单界面,菜单界面上为用户提供信息输入,信息删除,信息查询,信息浏览,信息统计,退出菜单共六种操作选择。
此功能用switch语句来实现。
其次,根据目标程序运行的次序与界面,确定设计顺序,设计界面(包括各部分菜单与用户提示信息)。
再次,按照程序运行的各界面下的菜单功能编写各功能模块,并调试程序各功能模块,使各模块能够稳定高效准确地完成对应功能。
第四部分:
程序功能模块划分、图示及流程图
系统的结构图:
交通处罚单管理系统
信息浏览
信息统计
信息删除
信息查找
信息输入
.
【信息输入模块】
该模块的功能是为用户提供信息输入界面,用户可以根据信息提示进行信息输入,用户输入的信息将被保存在文件当中。
【流程图】
请输入车牌号码:
显示已有罚单数目
请输入罚单号:
请输入开单日期:
请输入驾驶员姓名:
【程序】:
voidshuru()
{
FILE*fp;
inti=0;
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("Cannotopenthefile\n");
exit(0);//调用此函数时必须包含
}
printf("请输入车牌号码:
\n");
scanf("%d",&dan[NUM].chepai);
printf("请输入驾驶员姓名:
\n");
scanf("%s",dan[NUM].name);
printf("请输交警ID:
\n");
scanf("%d",&dan[NUM].id);
printf("请输入开单日期(以年/月/日形式输入):
\n");
scanf("%d/%d/%d",&dan[i].date.year,&dan[i].date.month,&dan[i].date.day);
printf("请输入处罚单号:
\n");
scanf("%d",&dan[NUM].num);
for(i=0;i<=NUM;i++)
{
if(fwrite(&dan[i],sizeof(structcfd),1,fp)!
=1)
printf("filewriteerror\n");
}//此处for循环的作用是:
在每次调用输入函数时都能够把结构体数组中已有的数据和本次输入的数据都记录在文件data.txt中
printf("已经有%d个罚单\n",i);
NUM++;//NUM用来记录罚单总数,每调用一次输入函数NUM就加一
fclose(fp);
}
【删除罚单模块】:
按操作者的指令在结构体数组中找到删除的信息,把结构体数组中的信息抄到文件中去忽略要删除的信息达到要删除的目的。
【流程图】:
输入要删除的罚单号
通过for循环在结构体数组找到与之对应的信息
for循环,i==c?
若i==c抄入文件
若i!
=c不抄入文件
【程序】:
voidshanchu()
{
inti;
intc;//待删除罚单号码
intw;//删除处罚单号
FILE*fp;
printf("请输入要删除的处罚单号:
");
scanf("%d",&w);
fp=fopen("data.txt","rb");
for(i=0;i{
if(w==dan[i].num)//查找要删除的罚单号码
c=i;//待删除罚单号码
}
fclose(fp);
fp=fopen("data.txt","wb");
for(i=0;i{
if(i!
=c)
fwrite(&dan[i],sizeof(structcfd),1,fp);//如果罚单号与待删除罚单号不同,就写入文件
}//此处for循环的作用是:
从文件中把待删除的信息删除
NUM--;//全局变量更新
printf("删除成功\n罚单号是%d\n",dan[c].num);
fclose(fp);
}
【信息浏览模块】:
把储存在文件中信息全部输出。
【程序】:
voidliulan()
{
inti;
FILE*fp;
fp=fopen("data.txt","rb");
printf("已有%d个罚单",NUM);
for(i=0;i{
if(fread(&dan[i],sizeof(structcfd),1,fp))
{
printf("第%d罚单信息\n",i+1);
prntf(i);
}
elsebreak;
}
fclose(fp);
}
【信息查询模块】:
用户根据界面的提示选择查询方式,并根据进一步的提示进行相关输入,程序根据用户输入的信息通过for循环找到与之相对应的信息,并输出相关信息。
【流程图】:
根据提示输入查询方式
按警察ID查询
按司机姓名查询
按车牌号查询
通过循环找到与之对应的信息,并将之输出
【程序】:
voidchaxun()
{
inti,w,x,flag;
FILE*fp;
charv[8];//驾驶员名字
printf("请输入你想查询的信息:
\n");
printf("1-按车牌号查询\n");
printf("2-按司机姓名查询\n");
printf("3-按警察ID查询\n");
scanf("%d",&x);
flag=0;//查找成功的标志,查找成功FLAG=1
if(x==3)
{
printf("请输入要查询的警察ID:
\n");
scanf("%d",&w);
fp=fopen("data.txt","rb");
for(i=0;i{
if(fread(&dan[i],sizeof(structcfd),1,fp)!
=1)break;
if(dan[i].id==w)
{
prntf(i);
flag=1;
break;
}
}
if(flag==0)
printf("找不到此处罚单信息!
\n");
fclose(fp);
}
elseif(x==2)
{
printf("请输入要查询的司机姓名:
\n");
scanf("%s",v);
fp=fopen("data.txt","rb");
for(i=0;i{
if(fread(&dan[i],sizeof(structcfd),1,fp)!
=1)break;
if(strcmp(dan[i].name,v)==0)//使用此函数时必须包含string.h
{
prntf(i);
flag=1;
break;
}
}
if(flag==0)
printf("找不到此处罚单信息!
\n");
fclose(fp);
}
elseif(x==1)
{
printf("请输入要查询的车牌号:
\n");
scanf("%d",&w);
fp=fopen("data.txt","rb");
for(i=0;i{
if(fread(&dan[i],sizeof(structcfd),1,fp)!
=1)break;
if(dan[i].num==w)
{
prntf(i);
flag=1;
break;
}
}
if(flag==0)
printf("找不到此处罚单信息!
\n");
fclose(fp);
}
elseprintf("输入错误!
\n");
}
信息统计模块:
用户根据提示输入驾驶员姓名和一个时间段,程序将对储存在文件中的信息逐个进行检验看其是否与输入的信息相对应,若相对应,就会将其输出,并使统计变量加一,最终输出此驾驶员在此时间段内总共有多少罚单。
【流程图】:
输入驾驶员姓名
输入要统计的时间段
通过循环将文件中的每一个信息与输入条件对比,判断是否满足。
输出满足条件的罚单号,并每输出一个罚单号使统计变量加一。
输出驾驶员此段时间罚单总数
【程序】:
voidtongji()
{inta1,b1,c1;//分别用来表示起始时间的年、月、日
inta2,b2,c2;//分别用来表示截止时间的年、月、日
intt;//用来统计驾驶员在此时间段的罚单个数
inti;
charv[8];//要对其进行统计的驾驶员姓名
printf("请输入驾驶员姓名:
");
scanf("%s",v);
printf("请输入要统计的时间段(以年/月/日的形式表示日期):
\n");
printf("请输入起始日期:
");
scanf("%d/%d/%d",&a1,&b1,&c1);
printf("截止时间日期:
");
scanf("%d/%d/%d",&a2,&b2,&c2);
for(i=0;i<=NUM;i++)
{
if(strcmp(v,dan[i].name)==0)
if(dan[i].date.year>a1&&dan[i].date.year{printf("%d\n",dan[i].num);t++;}
elseif(dan[i].date.year>a1&&dan[i].date.year==a2)
{
if(dan[i].date.month{printf("%d\n",dan[i].num);t++;}
elseif(dan[i].date.month==b2&&dan[i].date.day<=c2)
{printf("%d\n",dan[i].num);t++;}
}
elseif(dan[i].date.year==a1&&dan[i].date.year{
if(dan[i].date.month>b1)
{printf("%d\n