交通处罚单管理系统

交通处罚单管理系统
交通处罚单管理系统

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();

}

相关主题
相关文档
最新文档