交通处罚单管理系统课程设计.docx
《交通处罚单管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《交通处罚单管理系统课程设计.docx(42页珍藏版)》请在冰点文库上搜索。
交通处罚单管理系统课程设计
课
程
设
计
报
告
专业:
电气工程及其自动化
年级:
学号:
姓名:
成绩:
批改时间:
红河学院工学院编制
说明
1、本报告供学生课程设计时使用。
2、学生应认真阅读课程设计要求。
3、课程设计报告里面的内容要手工填写,以备存档使用(源程序可打印)。
4、课程设计的总评成绩根据课程的性质,按一定比例计入该门课程成绩。
5、课程设计报告中的各模块填写的内容是评分的主要依据,如果不够书写,可以自行添加附页。
6、按规定的时间提交报告给教师评定成绩,由任课教师交到工学院存档。
课程设计目录
课程名称:
高级语言程序设计
序号
课程设计名称
起止页码
29
交通处罚单管理系统
设计任务
题目
名称
交通处罚单管理系统
班级
指导
教师
地点
成绩
学年
开始
日期
结束
日期
一、问题分析(围绕设计题目,进行课程设计开始前的准备过程,在此以问题分析的形式展开,从设计的总体性上对所承担的设计题目的思考,分析,此模块内容请手工填写)
(1)需求分析:
交通处罚单信息用文件存储,提供文件的输输出操作;要求可以输入,输出,删除,浏览交通处罚单信息,因而要提供输入,删除和显示操作;要实现按车辆,驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。
(2)总体设计:
整个管理系统被设计为信息输入模块,信息删除模块,信息浏览模块,信息查询模块,信息统计模块。
二、设计流程图(问题分析与算法设计,并画出流程图,此模块内容请打印)
1、主函数
[主函数流程图]
2·[输入模块流程图]
3·[删除模块流程图]
4·[查询模块流程图]
5·[统计模块流程图]
6·
[一个任务结束时是选择浏览还是返回的函数的流程图]
2、主函数
[主函数流程图]
[主函数程序]
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();
}
3、各功能模块设计
(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)主菜单函数
(2)输入处罚信息
(3)按司机姓名查找并浏览相关处罚信息模块
(4)按交通警察姓名查找并浏览相关信息模块
(5)按车牌号码查询并浏览相关信息模块
(6)删除处罚单模块
(7)数据统计模块
程序代码
#include
#include
#include
#defineN100
structPlist//处罚单
{
charvno[20];//车牌号
chardname[20];//驾驶员姓名
charpname[20];//交警姓名
charpno[20];//交警编号
charno[20];//处罚单编号
chardate[20];//处罚日期
}list[N];//处罚单数组
voidinput();//输入模块
voiddele();//删除模块
voidbrowse();//浏览模块
voidsearch();//查询模块
voidcount();//统计模块
voidmenu();//主菜单
voidvno_search();//按车牌号查询
voiddna_search();//按驾驶员姓名查询
voidpna_search();//按开单交警姓名查询
main()
{
menu();
getchar();
}
voidmenu()
{
intn;
intr;
do
{
system("cls");
printf("\n\t\t\t\t交通处罚单管理系统\n");
printf("?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
");
printf("菜单:
1-信息录入2-信息删除3-信息浏览4-信息查询5-信息统计6-退出系统\n");
printf("?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
");
printf("请从输入数字选择相应的功能:
");
scanf("%d",&n);
if(n<1||n>6)
{
r=1;
getchar();
}
elser=0;
}
while(r==1);
switch(n)
{
case1:
input();
break;
case2:
dele();
break;
case3:
browse();
break;
case4:
search();
break;
case5:
count();
break;
case6:
exit(0);
}
}
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车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20101112)\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();
}
printf("\n请输入处罚单数量:
");
scanf("%d",&i);
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+i;
if(num>N)
{
printf("\n结构体数组数的N太小,请先修改N的值\n");
printf("\npressentertoreturnmenu\n");
getchar();
getchar();
menu();
}
printf("\n");
for(j=0;j
{
printf("输入第%d张处罚单的:
\n",j+1);
printf("\n车牌号、驾驶员姓名、交警姓名、交警号、处罚单号、日期(如20101112)\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();
}
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;