完整版C语言课程设计之交通处罚单管理系统.docx
《完整版C语言课程设计之交通处罚单管理系统.docx》由会员分享,可在线阅读,更多相关《完整版C语言课程设计之交通处罚单管理系统.docx(24页珍藏版)》请在冰点文库上搜索。
完整版C语言课程设计之交通处罚单管理系统
C语言课程设计
交通处罚单管理
一、题目要求
交通处罚单涉及到车辆、驾驶员和开单交警的信息,还有交通处罚单号码、处罚时间等信息。
功能:
(1)要求可以输入、删除、浏览交通处罚单信息。
(2)可以按车辆、驾驶员和开单交警查询。
(3)统计某时间段某个驾驶员的交通处罚单数目及交通处罚单号码。
二、需求分析
交通处罚单信息用文件存储,提供文件的输入输出操作;要求可以输入、删除、浏览交通处罚单信息,因而要提供信息的输入、删除和显示操作;要实现按车辆、驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。
三、总体设计
整个管理系统被设计为信息输入模块、信息删除模块、信息浏览模块、信息查询模块和信息统计模块等。
四、详细设计
1、主函数
[主函数流程图]
[主函数程序]
menu()/*主界面*/
{
intn,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/
do
{
printf("\t\t\t欢迎来到交通处罚单管理系统!
\n\n");
printf("\t\t*******************MENU*******************\n\n");
printf("\t\t\t\t1.信息输入\n");
printf("\t\t\t\t2.信息删除\n");
printf("\t\t\t\t3.信息浏览\n");
printf("\t\t\t\t4.信息查询\n");
printf("\t\t\t\t5.信息统计\n");
printf("\t\t\t\t6.退出\n");
puts("\n\n\t\t********************************************\n");
printf("\t\t请输入您的操作(1-6):
[]\b\b");
scanf("%d",&n);
if(n<1||n>6)/*对选择的数字作判断*/
{
w=1;
getchar();
}
else
w=0;
}
while(w==1);/*选择功能*/
switch(n)
{
case1:
shuru();break;
case2:
shanchu();break;
case3:
liulan();break;
case4:
chaxun();break;
case5:
tongji();break;
case6:
exit(0);
}
return(n);
}
voidmain()/*主函数*/
{
menu();
}
2、各功能模块设计
(1)、输入模块
[数据结构]
采用结构体的形式,把处罚单的处罚单号、车牌号码、驾驶员姓名、开单警察ID、处罚时间作为结构体成员,用结构体数组的形式存放若干条处罚单信息。
structfandan
{
intnum;/*处罚单号码*/
intchepai;/*车牌号码*/
charname[8];/*驾驶员名字*/
intid;/*开单警察的信息ID*/
chartime[11];/*处罚时间为年月日排列*/
}dan[N];/*dan[500]中每个数组元素对应一个处罚单信息*/
[注意]
dan[N]中的N为处罚单条数,本程序采用宏定义#defineN500。
[输入模块流程图]
[输入模块程序]
voidshuru()/*输入模块*/
{
inti,j;
FILE*fp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("无法打开文件!
\n");
exit(0);
}
printf("\n你要输入多少条处罚单信息:
");
scanf("%d",&j);
for(i=0;i{
printf("\n请依次输入罚单信息:
\n");
printf("\n罚单号车牌号驾驶员姓名警察ID处罚时间\n");
scanf("%3d%5d%8s%5d%11s",&dan[i].num,&dan[i].chepai,&dan[i].name,&dan[i].id,&dan[i].time);
fprintf(fp,"\n%3d%5d%8s%5d%11s",dan[i].num,dan[i].chepai,dan[i].name,dan[i].id,dan[i].time);
/*输入罚单信息*/
printf("输入信息成功!
\n");
}
fclose(fp);
printf_back();
}
(2)、删除模块
[删除模块流程图]
[删除模块程序]
voidshanchu()/*删除模块*/
{
inti,j,m,n;
FILE*fp;
printf("请输入要删除的处罚单号:
");
scanf("%d",&j);
fp=fopen("data.txt","r");
for(i=0;!
feof(fp);i++)
{
fscanf(fp,"%3d%5d%8s%5d%11s",&dan[i].num,&dan[i].chepai,&dan[i].name,&dan[i].id,&dan[i].time);
}
m=i;/*统计出文件中罚单总数*/
for(i=0;i{
if(j==dan[i].num)
n=i;
}
fclose(fp);
fp=fopen("data.txt","w");
for(i=0;i{
if(i!
=n)
{
fprintf(fp,"\n%3d%5d%8s%5d%11s",dan[i].num,dan[i].chepai,dan[i].name,dan[i].id,dan[i].time);
/*把不要求删除的罚单信息在文件中输入*/
}
}
fclose(fp);
printf_back();
}
(3)、浏览模块
[需求分析]
该模块的功能是显示文件中所有的处罚但记录信息。
[浏览模块流程图]
[浏览模块程序]
voidliulan()/*浏览模块*/
{
inti;
FILE*fp;
fp=fopen("data.txt","r");
for(i=0;!
feof(fp);i++)
{
fscanf(fp,"%3d%5d%8s%5d%11s",&dan[i].num,&dan[i].chepai,&dan[i].name,&dan[i].id,&dan[i].time);
printf("------------------------------\n");
printf("处罚单号:
%d\n",dan[i].num);
printf("车牌号码:
%d\n",dan[i].chepai);
printf("驾驶员姓名:
%s\n",dan[i].name);
printf("开单警察ID:
%d\n",dan[i].id);
printf("处罚时间:
%s\n",dan[i].time);
printf("------------------------------\n");/*逐条输出文件信息*/
}
fclose(fp);
printf_back();
}
(4)、查询模块
[需求分析]
该模块的功能是可以实现按车辆、驾驶员和开单交警查询。
[查询模块流程图]
[查询模块程序]
voidchaxun()/*查询模块*/
{
inti,j,x,flag=0;
FILE*fp;
charm[8];
printf("请输入您想查询的信息:
\n");
printf("1_按车牌号查询\n");
printf("2_按驾驶员姓名查询\n");
printf("3_按开单警察ID查询\n");
scanf("%d",&x);
if(x==1)
{
printf("请输入您要查询的车牌号:
\n");
scanf("%d",&j);
fp=fopen("data.txt","r");
for(i=0;!
feof(fp);i++)
{
fscanf(fp,"%3d%5d%8s%5d%11s",&dan[i].num,&dan[i].chepai,&dan[i].name,&dan[i].id,&dan[i].time);
if(dan[i].chepai==j)
{
printf("处罚单号:
%d\n",dan[i].num);
printf("车牌号码:
%d\n",dan[i].chepai);
printf("驾驶员姓名:
");puts(dan[i].name);
printf("开单警察ID:
%d\n",dan[i].id);
printf("处罚时间:
");puts(dan[i].time);
printf("--------------------------\n");
flag=1;
break;
}
}
if(flag==0)
printf("找不到此罚单信息!
\n");
fclose(fp);
printf_back();
}
elseif(x==2)
{
printf("请输入您要查询的驾驶员姓名:
");
scanf("%s",m);
fp=fopen("data.txt","r");
for(i=0;!
feof(fp);i++)
{
fscanf(fp,"%3d%5d%8s%5d%11s",&dan[i].num,&dan[i].chepai,&dan[i].name,&dan[i].id,&dan[i].time);
if(strcmp(dan[i].name,m)==0)
{
printf("处罚单号:
%d\n",dan[i].num);
printf("车牌号码:
%d\n",dan[i].chepai);
printf("驾驶员姓名:
");puts(dan[i].name);
printf("开单警察ID:
%d\n",dan[i].id);
printf("处罚时间:
");puts(dan[i].time);
printf("-------------------------\n");
flag=1;
break;
}
}
if(flag==0)
printf("找不到此罚单信息!
\n");
fclose(fp);
printf_back();
}
elseif(x==3)
{
printf("请输入您要查询的开单警察ID:
");
scanf("%d",&j);
fp=fopen("data.txt","r");
for(i=0;!
feof(fp);i++)
{
fscanf(fp,"%3d%5d%8s%5d%11s",&dan[i].num,&dan[i].chepai,&dan[i].name,&dan[i].id,&dan[i].time);
if(dan[i].id==j)
{
printf("处罚单号:
%d\n",dan[i].num);
printf("车牌号码:
%d\n",dan[i].chepai);
printf("驾驶员姓名:
");puts(dan[i].name);
printf("开单警察ID:
%d\n",dan[i].id);
printf("处罚时间:
");puts(dan[i].time);
printf("-------------------------\n");
flag=1;
break;
}
}
if(flag==0)
printf("找不到此处罚单信息!
\n");
fclose(fp);
printf_back();
}
else
{printf("输入错误!
\n");
printf_back();
}
}
(5)、统计模块
[需求分析]
该模块的功能是可以实现统计某时间段某个驾驶员的交通处罚单数目及交通处罚单号码。
[统计模块流程图]
3、公共函数
一个任务结束时是选择浏览还是返回的函数:
[一个任务结束时是选择浏览还是返回的函数的流程图]
[一个任务结束时是选择浏览还是返回的函数的程序]
voidprintf_back()/*一个任务结束时是选择浏览还是返回主界面*/
{
voidliulan();
intw;
printf("\nWhatdoyouwanttodo?
\n\n\t
(1).浏览\t
(2).返回主界面[]\b\b");
scanf("%d",&w);
if(w==1)
liulan();
else
menu();
}
五、上机操作
1、数据源
逐条输入处罚单信息中的处罚单号、车牌号码、驾驶员姓名、开单警察ID和处罚时间。
2、编译、连接和运行
3、结果
(1)主菜单函数
(2)输入模块
在主界面出现后输入1回车看到下图:
输入要输入的记录数然后逐条增加,如下图:
(3)浏览模块
(4)删除模块
在主界面出现后输入2回车看到下图:
输入要删除的处罚单号然后如下图:
删除后文件中保留信息的浏览图如下:
(5)查询模块
在主界面出现后输入4回车看到下图:
输入要查询的信息后如下图(如输入1):
若没找到需要查找的信息时如下图:
(6)统计模块
在主界面出现后输入5回车看到下图:
输入需要统计的时间段与驾驶员姓名,如下图:
若查找不到需要统计的信息,如下图: