交通处罚单管理系统390430459.docx
《交通处罚单管理系统390430459.docx》由会员分享,可在线阅读,更多相关《交通处罚单管理系统390430459.docx(22页珍藏版)》请在冰点文库上搜索。
交通处罚单管理系统390430459
交通处罚单管理系统390430459
C语言设计实习报告
工程学院土木工程052097班
姓名:
彭文博
班号:
052097
学号:
20202000692
题目:
交通处罚单治理系统
指导老师:
梁老师
日期:
20202026
一,题目要求:
【要求】:
交通处罚单涉及到车辆,驾驶员和开单交警的信息,还有交通处罚单的号码,处罚时刻等信息。
【功能】:
(1)要求能够输入,删除,扫瞄交通处罚单信息。
(2)能够按车辆,驾驶员和开单交警查询。
(3)统计某时刻段某个驾驶员的交通处罚数目及交通处罚单号码。
二,需求分析:
交通处罚单信息用文件储备,提供文件的输输出操作;要求能够输入,输出,删除,扫瞄交通处罚单信息,因而要提供输入,删除和显示操作;要实现按车辆,驾驶员和开单交警查询,那么要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。
三,总体设计:
整个治理系统被设计为信息输入模块,信息删除模块,信息扫瞄模块,信息查询模块,信息
统计模块。
四,详细设计及实现:
1,处罚单治理系统界面函数
此函数包括的功能是建立新的罚单,按司机姓名查询罚单并扫瞄相关信息,按交警姓名查询罚单并扫瞄相关信息,按罚单号查询罚单并扫瞄相关信息,删除罚单,数据统计和退出处罚单治理系统。
voidMenu()
printf("\n\t\t\t\t交通处罚单治理系统\n");
printf("········································");
printf("菜单:
1-信息录入2-信息删除3-信息扫瞄4-信息查询5-信息统计6-退出系统\n");
printf("········································");
printf("请从输入数字选择相应的功能:
");2,各功能模块设计
(1)创建新的交通处罚单
处罚单包含的内容有处罚单号,车牌号,司机姓名,交警姓名,和处罚日期,因此相应的函数也应包含这些内容,在那个函数所操纵的操作会依次提示输入以上内容。
专门的,罚单号不能有重复,假设输入的罚单号有重复,操作界面会提示罚单好重复,请重新输入。
voidinput()
{
FILE*fp;
intnum;
inti,j;
if((fp=fopen("list.txt","r+"))==NULL)
{
if((fp=fopen("list.txt","w"))==NULL)
{
printf("文件打开或创建失败!
\n");
printf("\npressentertoreturnmenu\n");
getchar();
menu();
}
printf("\n请输入处罚单数量:
");
scanf("%d",&i);
printf("\n\n");
for(j=0;j
{
printf("输入第%d张处罚单的:
\n",j+1);
printf("\n车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期〔如)\n");
printf("\n注意:
中间用空格隔开!
\n");
scanf("%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
for(j=0;j
{
fprintf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
fclose(fp);
printf("\n储存成功!
");
printf("\npressentertoreturnmenu\n");
getchar();
getchar();
menu();
}
(2)按司机姓名查询罚单:
先输入命令2,再输入待查找司机姓名.在那个地点函数会在记录在案的处罚单进行循环查找,假如有该司机的罚单记录,就会相应显示在屏幕上。
假如没有该司机的处罚记录,就会打印:
没有相关信息。
voiddna_search()
{
intf=-1;
intnum;
intj;
charname[20];
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("文件打不开!
\n");
printf("\npressentertoreturnmenu\n");
getchar();
menu();
}
for(j=0;!
feof(fp);j++)//读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp);
printf("\n请输入驾驶员的姓名:
");
scanf("%s",name);
printf("\n罚单的信息为:
\n\n");
printf("车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n");
for(j=0;j{
if(strcmp(name,list[j].dname)==0)
{
f=j;
printf("\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
}
if(f<0)
printf("\n没有找到该班号的记录!
\n");
printf("\npressentertoreturnsubmenu\n");
getchar();
getchar();
search();
}
(3)按交警姓名查询罚单:
先输入命令3,再输入待查找交警姓名.在那个地点函数会在记录在案的处罚单进行循环查找,假如有该交警所开的的罚单记录,就会相应显示在屏幕上。
假如没有该交警开的处罚记录,就会打印:
没有相关信息。
其中
voidpna_search()
{
intf=-1;
intnum;
intj;
charname[20];
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("文件打不开!
\n");
printf("\npressentertoreturnmenu\n");
getchar();
menu();
}
for(j=0;!
feof(fp);j++)//读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp);
printf("\n请输入开单交警的姓名:
");
scanf("%s",name);
printf("\n罚单的信息为:
\n\n");
printf("车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n");
for(j=0;j{
if(strcmp(name,list[j].pname)==0)
{
f=j;
printf("\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
}
if(f<0)
printf("\n没有找到该班号的记录!
\n");
printf("\npressentertoreturnsubmenu\n");
getchar();
getchar();
search();
}
(4)按车牌号查询罚单:
先输入命令1,再输入待查找车牌号码.在那个地点函数也会对记录在案的处罚单进行循环查找,假如有该车牌号记录,就会相应显示在屏幕上。
假如没有该车牌号的处罚信息,就会打印:
没有相关信息。
voidvno_search()
{
intf=-1;
intnum;
intj;
charno[20];
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("文件打不开!
\n");
printf("\npressentertoreturnmenu\n");
getchar();
menu();
}
for(j=0;!
feof(fp);j++)//读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp);
printf("\n请输入车牌号:
");
scanf("%s",no);
printf("\n罚单的信息为:
\n\n");
printf("车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n");
for(j=0;j{
if(strcmp(no,list[j].vno)==0)
{
f=j;
printf("\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
}
if(f<0)
printf("\n没有找到该班号的记录!
\n");
printf("\npressentertoreturnsubmenu\n");
getchar();
getchar();
search();
}
(5)删除罚单
操作者先输入删除命令2,在按操作要求输入要删除的处罚单号码,系统扫瞄处罚单,找到相关信息后,在删除这张处罚信息,再把那个信息的尾地址结到下一个信息的头地址上从而达到删除此信息的作用.
voiddele()
{
intj;
intnum;
intf=-1;
FILE*fp1,*fp2;
chars1[20];
if((fp1=fopen("list.txt","r"))==NULL)
{
printf("cannotopenfile\n");
printf("\npressentertoreturnmenu\n");
getchar();
getchar();
menu();
}
for(j=0;!
feof(fp1);j++)//读取文件
{
fscanf(fp1,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp1);
printf("请输入要删除的处罚单的编号\n");
scanf("%s",s1);
for(j=0;j{
if(strcmp(s1,list[j].no)==0)
{
f=j;
if(f{
for(j=f;j{
strcpy(list[j].vno,list[j+1].vno);
strcpy(list[j].dname,list[j+1].dname);
strcpy(list[j].pname,list[j+1].pname);
strcpy(list[j].pno,list[j+1].pno);
strcpy(list[j].no,list[j+1].no);
strcpy(list[j].date,list[j].date);
}
}
if((fp2=fopen("list.txt","w"))==NULL)
{
printf("文件打不开!
\n");
printf("\npressentertoreturnmenu\n");
getchar();
menu();
}
for(j=0;j{
fprintf(fp2,"\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
fclose(fp2);
printf("\n删除成功!
\n");
printf("\npressentertoreturnmenu\n");
getchar();
getchar();
menu();
}
}
if(f<0)
{
printf("\n没有找到该学号的记录:
\n");
printf("\npressentertoreturnmenu\n");
getchar();
getchar();
menu();
}
}
(6)统计
此操作会第一提示操作者输入查询的起始时刻和终止时刻.判定.如是第一个时刻大于第二个时刻,相应会提示〝输入错误〞,假设输入正确,会提示连续输入待查司机姓名.给i赋初值0.每循环查找到一个记录就给i的值加1.最后在显示屏上显示出i的值.假如查找此段时刻内没有该司机罚单信息,那么打印〝目前还没有该处罚单。
voidcount()
{
intf=-1;
intnum;//所有罚单单数
intj;
inttotal=0;//某驾驶员的罚单数
charname[20];
chartime1[20];
chartime2[20];
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("文件打不开!
\n");
printf("\npressentertoreturnmenu\n");
getchar();
menu();
}
for(j=0;!
feof(fp);j++)//读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
num=j;
fclose(fp);
printf("\n请依照提示输入驾驶员的姓名和一个时刻段,统计某个驾驶员在某段时刻内的处罚单数目和罚单号\n");
printf("\n\n请输入驾驶员的姓名:
");
scanf("%s",name);
printf("\n请输入一个较早的时刻:
");
scanf("%s",time1);
printf("\n请输入一个最近的时刻:
");
scanf("%s",time2);
for(j=0;j{
if((strcmp(list[j].dname,name)==0)&&(strcmp(list[j].date,time1)>=0)&&(strcmp(list[j].date,time2)<=0))
{
f=j;
total++;
printf("\n罚单号:
%s\n",list[j].no);
}
}
if(f<0)
printf("\n没有找到记录!
\n");
printf("\n罚单总数为:
%d\n",total);
printf("\npressentertoreturnmenu\n");
getchar();
getchar();
menu();
}
〔7〕扫瞄模块
在那个模块里,输入命名3后,程序会将差不多存在的所有处罚单信息都在屏幕上显示出来:
voidbrowse()
{
intj;
intnum;
FILE*fp;
if((fp=fopen("list.txt","r"))==NULL)
{
printf("cannotopenfile\n");
printf("\npressentertoreturnmenu\n");
getchar();
getchar();
menu();
}
for(j=0;!
feof(fp);j++)//读取文件
{
fscanf(fp,"%s%s%s%s%s%s",&list[j].vno,&list[j].dname,&list[j].pname,&list[j].pno,&list[j].no,&list[j].date);
}
fclose(fp);
num=j;
printf("\n已添加%d条记录\n\n",num);
printf("车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期\n");
for(j=0;j{
printf("\n%s\t%s\t%s\t%s\t%s\t%s",list[j].vno,list[j].dname,list[j].pname,list[j].pno,list[j].no,list[j].date);
}
printf("\npressentertoreturnmenu\n");
getchar();
getchar();
menu();
}
(8)退出模块:
在那个模块里,输入命令6后,假设程序发觉文件里有处罚信息,会相应的储存该信息,然后退出程序,假设没有信息,那么会提示〝不能打开文件!
〞,然后退出程序。
五,实现结果:
1,数据源
〔1〕处罚单号01车牌号码000001司机姓名zhao警察姓名peng交警号11处罚日期20202025
〔2〕处罚单号02车牌号码000002司机姓名zhang警察姓名peng交警号11处罚日期20202025
〔3〕处罚单号03车牌号码000003司机姓名li警察姓名peng交警号11处罚日期20202025
〔4〕处罚单号04车牌号码000004司机姓名wang警察姓名chen交警号22处罚日期20202026
〔5〕处罚单号05车牌号码000005司机姓名刘liu警察姓名chen交警号22处罚日期20202026
2,运行结果
〔1〕主菜单函数
〔2〕输入处罚信息
〔3〕信息扫瞄
〔4〕信息的查找方式
〔5〕按车牌号查询
〔6〕按驾驶员姓名查询
〔7〕按开单交警姓名查询
〔8〕删除处罚单模块
〔9〕数据统计模块
六,总结:
通过这八天的上机实习,编写并运行C语言程序,让我对C语言又有了进一步的认识并巩固了往常所学的知识,在编写C程序的过程中,我得到了老师和同学耐心的指导和关心,专门多问题差不多上在老师和同学的关心下才解决的,没有你们的关心我不可能顺利的完成此次编程,感谢你们。
往常对C的概念比较模糊,然而在这次实习中我发觉了C在生产生活中有着广泛的应用,比如我这次编写的交通交通处罚单治理系统,还有其他同学编写的一些程序等等。
在实际交通治理中运用此类程序会节约大量的体力和脑力劳动。
而且使得交通治理比较容易,幸免了以往的那种繁琐的人力劳动。
准确率也会大幅度上升,可不能造成因为人为失误造成不必要的苦恼。
通过该实例的设计分析,我初步把握了模块化设计方法,明白得和运用结构化程设计的思想和方法。
学会了用流程图表示算法,把握和提高了利用C语言进行程序设计的能力。
在各方面都得到了提高。
更重要的是这次实习让我了解到了我的不足,该如何让自己的编程能力得到提高,在今后的学习生活里我会多多的上机编程,让自己能力得到进一步的提高。