交通处罚单管理系统
C语言课程设计
交通处罚单管理系统
中国地质大学(武汉)工程学院052097班18
2011-8-22
要求:交通处罚单涉及到车辆,驾驶员和开单交警的信息,还有交通处罚单号码,处罚时间等信息。
功能:(1)要求可以输入,删除,浏览交通处罚单信息。
(2)可以按车辆,驾驶员和开单交警查询。
(3)统计某时间段某个驾驶员的交通处罚单数目及交通处罚单号码。
提示:
(1)需求分析:交通处罚单信息用文件存储,提供文件的输入输出操作;要求可以输入,删除,浏览交通处罚单信息,因而要提供信息的输入,删除和显示操作;要实现按车辆,驾驶员和开单交警查询,则要提供查找操作;另外提供统计操作和键盘式选择菜单以实现功能选择。
(2)总体设计:整个管理系统被设计为信息输入模板,信息删除模板,信息浏览模板,信息查询模板和信息统计模板等。
源代码:
#include
#include
#include
#define N 100
struct Plist //处罚单
{
char vno[20]; //车牌号
char dname[20]; //驾驶员姓名
char pname[20]; //交警姓名
char pno[20]; //交警编号
char no[20]; //处罚单编号
char date[20]; //处罚日期
} list[N]; //处罚单数组
void input(); //输入模块
void dele(); //删除模块
void browse(); //浏览模块
void search(); //查询模块
void count(); //统计模块
void menu(); //主菜单
void vno_search(); //按车牌号查询
void dna_search(); //按驾驶员姓名查询
void pna_search(); //按开单交警姓名查询
void main()
{
menu();
getchar();
}
void menu()
{
int n;
int r;
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();
}
else r=0;
}while(r==1);
switch(n)
{
case 1:input();break;
case 2:dele();break;
case 3:browse();break;
case 4:search();break;
case 5:count();break;
case 6:exit(0);
}
}
void input()
{
FILE*fp;
int num;
int i,j;
if((fp=fopen("list.txt","r+"))==NULL)
{
if((fp=fopen("list.txt","w"))==NULL)
{
printf("文件打开或创建失败!\n");
printf("\npress enter to return menu\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,&li st[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,li st[j].no,list[j].date);
}
fclose(fp);
printf("\n保存成功!");
printf("\npress enter to return menu\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("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
printf("\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,&li st[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].p no,list[j].no,list[j].date);
}
fclose(fp);
printf("\n保存成功!");
printf("\npress enter to return menu\n");
getchar();
getchar();
menu();
}
void dele()
{
int j;
int num;
int f=-1;
FILE*fp1,*fp2;
char s1[20];
if((fp1=fopen("list.txt","r"))==NULL)
{
printf("can not open file\n");
printf("\npress enter to return menu\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].n o,&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("\npress enter to return menu\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,l ist[j].no,list[j].date); } fclose(fp2); printf("\n删除成功!\n"); printf("\npress enter to return menu\n"); getchar(); getchar(); menu(); } if(f<0) { printf("\n没有找到该学号的记录:\n"); printf("\npress enter to return menu\n"); getchar(); getchar(); menu(); } } void browse() { int j; int num; FILE*fp; if((fp=fopen("list.txt","r"))==NULL) { printf("can not open file\n"); printf("\npress enter to return menu\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("\npress enter to return menu\n"); getchar(); getchar(); } void search() { int n; int r; do { system("cls"); printf("\n请选择查询类型:\n\t1-按车牌号2-按驾驶员姓名:按开单交警姓名4-返回主菜单\n"); printf("\n请输入数字选择:"); scanf("%d",&n); if(n<1||n>4) { r=1; getchar(); } else r=0; }while(r==1); switch(n) { case 1:vno_search();break; case 2:dna_search();break; case 3:pna_search();break; case 4:menu(); } } void vno_search() { int f=-1; int num; int j; char no[20]; FILE*fp; if((fp=fopen("list.txt","r"))==NULL) { printf("文件打不开!\n"); printf("\npress enter to return menu\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("\npress enter to return sub menu\n"); getchar(); getchar(); search(); } void dna_search() { int f=-1; int num; int j; char name[20]; FILE*fp; if((fp=fopen("list.txt","r"))==NULL) { printf("文件打不开!\n"); printf("\npress enter to return menu\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("\npress enter to return sub menu\n"); getchar(); getchar(); search(); } void pna_search() { int f=-1; int num; int j; char name[20]; FILE*fp; if((fp=fopen("list.txt","r"))==NULL) { printf("文件打不开!\n"); printf("\npress enter to return menu\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("\npress enter to return sub menu\n"); getchar(); getchar(); search(); } void count() { int f=-1; int num; //所有罚单单数 int j; int total=0; //某驾驶员的罚单数 char name[20]; char time1[20]; char time2[20]; FILE*fp; if((fp=fopen("list.txt","r"))==NULL) { printf("文件打不开!\n"); printf("\npress enter to return menu\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].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("\npress enter to return menu\n"); getchar(); getchar(); menu(); }