C语言实习报告 交通处罚单管理系统Word下载.docx
《C语言实习报告 交通处罚单管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《C语言实习报告 交通处罚单管理系统Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
intr;
/*变量n保存选择菜单选择数字,r判断输入的数字是否在功能菜单对应的数字范围内*/dosystem(cls);
printf(ntttt交通处罚单管理系统n);
printf();
printf(菜单:
1-信息录入2-信息删除3-信息浏览4-信息查询5-信息统计6-退出系统n);
printf(请从输入数字选择相应的功能:
);
scanf(%d,&
n);
if(n6)/*对选择的数字进行判断*/r=1;
elser=0;
while(r=1);
/*选择功能*/switch(n)case1:
input();
break;
/*输入模块*/case2:
dele();
/*删除模块*/case3:
browse();
/*浏览模块*/case4:
search();
/*查询模块*/case5:
count();
/*统计模块*/case6:
exit(0);
/*退出*/2各功能模块设计
(1)输入模块【数据结构】在这里,可以把处罚单涉及到的车辆、驾驶员和开单交警,处罚单号码、处罚时间作为结构体成员,要存放的处罚单信息就用结构体数组,整体的数据结构就比较完整、清晰,后续的信息处理及浏览将更加方便。
单独看各种信息可采用字符窜数组进行记录。
结构体数组;
structPlist/处罚单charvno20;
/车牌号chardname20;
/驾驶员姓名charpname20;
/交警姓名charpno20;
/交警编号charno20;
/处罚单编号chardate20;
/处罚日期listN;
/处罚单数组说明:
其中listN中的N为处罚单数量,程序中采用宏定义的方式,可随时在源程序宏定义中修改,本程序宏定义#defineN50。
输入模块程序流程图如下所示。
程序:
程序中涉及到文件的处理,要新建一个文件夹,将输入的信息保存进文件夹voidinput()FILE*fp;
intnum;
inti,j;
if(fp=fopen(list.txt,r+)=NULL)if(fp=fopen(list.txt,w)=NULL)printf(文件打开或创建失败!
printf(npressentertoreturnmenun);
menu();
printf(n请输入处罚单数量:
i);
printf(nn);
for(j=0;
ji;
j+)printf(输入第%d张处罚单的:
n,j+1);
printf(n车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20101112)n);
printf(n注意:
中间用空格隔开!
scanf(%s%s%s%s%s%s,&
listj.vno,&
listj.dname,&
listj.pname,&
listj.pno,&
listj.no,&
listj.date);
jN)printf(n结构体数组数的N太小,请先修改N的值n);
printf(n);
j+)fprintf(fp,n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date);
fclose(fp);
printf(n保存成功!
(2)删除模块该模块删除多余信息,需要先以只读的形式打开,可以以其中一个信息输入内容确定需删除的信息,本程序输入处罚单的编号,根据编号删除记录。
删除记录时,将数据从文件中删除,删除位置后面的记录往前移。
该模块的流程图如下。
voiddele()intj;
intf=-1;
FILE*fp1,*fp2;
chars120;
if(fp1=fopen(list.txt,r)=NULL)printf(cannotopenfilen);
!
feof(fp1);
j+)/读取文件fscanf(fp1,%s%s%s%s%s%s,&
num=j;
fclose(fp1);
printf(请输入要删除的处罚单的编号n);
scanf(%s,s1);
jnum;
j+)if(strcmp(s1,listj.no)=0)f=j;
if(fnum-1)for(j=f;
jnum-1;
j+)strcpy(listj.vno,listj+1.vno);
strcpy(listj.dname,listj+1.dname);
strcpy(listj.pname,listj+1.pname);
strcpy(listj.pno,listj+1.pno);
strcpy(listj.no,listj+1.no);
strcpy(listj.date,listj.date);
if(fp2=fopen(list.txt,w)=NULL)printf(文件打不开!
j+)/保存文件fprintf(fp2,n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date);
fclose(fp2);
printf(n删除成功!
if(f0)printf(n没有找到该学号的记录:
(3)浏览模块该功能时显示删除某些信息后处罚单上的所有记录。
这部分显示处罚单的数量,再打开文件,按结构体数组的形式输出所有信息即可。
其程序如下所示。
程序:
voidbrowse()intj;
FILE*fp;
if(fp=fopen(list.txt,r)=NULL)printf(cannotopenfilen);
feof(fp);
j+)/读取文件fscanf(fp,%s%s%s%s%s%s,&
printf(n已添加%d条记录nn,num);
printf(车牌号驾驶员姓名交警姓名交警编号处罚单编号处罚日期n);
j+)/输出printf(n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date);
(4).查询模块该模块有三个查询类型可供选择,可选择以车牌号、驾驶员姓名、开单交警姓名三种方式来查询,这些都将以菜单的形式选择,所以有一个主菜单和各个分模块。
同样查询模块也必须先打开文件夹。
菜单流程图如下。
分模块的流程图基本相同,现以按车牌号查询为例,编写其流程图。
菜单程序:
voidsearch()intn;
dosystem(cls);
printf(n请选择查询类型:
nt1-按车牌号2-按驾驶员姓名3:
按开单交警姓名4-返回主菜单n);
printf(n请输入数字选择:
if(n4)r=1;
switch(n)case1:
vno_search();
case2:
dna_search();
case3:
pna_search();
case4:
各分模块程序:
按车牌号查询voidvno_search()/*按车牌号查询*/intf=-1;
intj;
charno20;
if(fp=fopen(list.txt,r)=NULL)printf(文件打不开!
printf(n请输入车牌号:
scanf(%s,no);
printf(n罚单的信息为:
nn);
j+)if(strcmp(no,listj.vno)=0)f=j;
printf(n%st%st%st%st%st%s,listj.vno,listj.dname,listj.pname,listj.pno,listj.no,listj.date);
if(f0)printf(n没有找到该车牌号的记录!
printf(npressentertoreturnsubmenun);
按驾驶员姓名查询voiddna_search()/*按驾驶员姓名查询*/intf=-1;
charname20;
printf(n请输入驾驶员的姓名:
scanf(%s,name);
j+)if(strcmp(name,listj.dname)=0)f=j;
if(f0)printf(n没有找到该驾驶员的记录!
按开单交警姓名查询voidpna_search()/*按开单交警姓名查询*/intf=-1;
printf(n请输入开单交警的姓名:
j+)if(strcmp(name,listj.pname)=0)f=j;
if(f0)printf(n没有找到该开单交警的记录!
5.统计模块该模块先输入驾驶员的姓名和一个时间段,就可以统计某个驾驶员在某段时间内的处罚单数目和处罚单号。
程序为:
voidcount()intf=-1;
/所有罚单单数intj;
inttotal=0;
/某驾驶员的罚单数charname20;
chartime120;
chartime220;
printf(n请根据提示输入驾驶员的姓名和一个时间段,统计某个驾驶员在某段时间内的处罚单数目和罚单号n);
printf(nn请输入驾驶员的姓名:
printf(n请输入一个较早的时间:
scanf(%s,time1);
printf(n请输入一个最近的时间:
scanf(%s,time2);
j=0)&
(strcmp(listj.date,time2)=0)f=j;
total+;
printf(n罚单号:
%sn,listj.no);
if(f0)printf(n没有找到记录!
printf(n罚单总数为:
%dn,total);
5.运行结果将程序运行出来后,会的到各模块的界面图。
1主菜单函数:
效果如图所示输入相应的数字即可运行相应的模块。
输入模块,下图为输入和保存的信息。
删除模块信息浏览模块信息查询模块主菜单信息查询模块:
按车牌号查询统计模块6.整体程序源代码:
#include#include#include#defineN100structPlist/处罚单charvno20;
/处罚单数组voidinput();
/输入模块voiddele();
/删除模块voidbrowse();
/浏览模块voidsearch();
/查询模块voidcount();
/统计模块voidmenu();
/主菜单voidvno_search();
/按车牌号查询voiddna_search();
/按驾驶员姓名查询voidpna_search();
/按开单交警姓名查询main()menu();
if(n6)r=1;
case5:
case6:
voidinput()FILE*fp;
i