编写出交通罚单管理系统程序代码,包含输入,删改,浏览,查询,统计因何种原因而被处罚罚单等功能。
/*
15、交通处罚单管理系统
功能要求:
1)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。
2)、输入功能:录入罚单信息,最终存入指定文件。
3)、删除功能:删除符合条件的罚单。
4)、查询功能:按车牌号、驾驶证号、开单交警等查询罚单信息。
5)、统计功能:统计某时间段内的符合某条件的罚单记录。
6)、保存功能:把当前的操作结果保存到文件中。
罚单信息应至少包括以下数据:罚单编号、车牌号、驾驶证号、经办交警号、时间、处罚金额等。
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<windows.h>
struct FD
{
char id[10]; //罚单编号
char carID[10]; //车牌号
char driveID[15]; //驾驶证号
char policeID[10]; //经办交警号
time_t lt1; //时间
float je;//处罚金额
};
struct NODE
{
struct FD fd;
struct NODE *next;
};
//格式字符串
char inputStr[]="%s%s%s%s%f",outStr[]="罚单号\t车牌号\t驾驶证\t交警号\t时间\t\t金额";
struct NODE *head;
int init()
{
struct NODE *p,*q;
struct FD fTmp;
FILE *fp;
p=head=(struct NODE *)malloc(sizeof(struct NODE));
p->next=NULL;
//读数据并构建链表
fp=fopen("c:\\fd.dat","rb");
if(fp==NULL)
return 0;
while(!feof(fp))
{
q=(struct NODE *)malloc(sizeof(struct NODE));
fread(&fTmp,sizeof(struct FD),1,fp);
q->fd= fTmp;
q->next=NULL;
p->next=q;
p=p->next;
}
fclose(fp);
return 1;
}
void addNode(struct FD tTmp) //在链表尾添加一节点,同时写入文件
{
FILE *fp;
struct NODE *p=head->next,*q;
q=head;
while(p)
{
q=p;
p=p->next;
}
p=(struct NODE *)malloc(sizeof(struct NODE));
p->fd=tTmp;
p->next=NULL;
q->next=p;
//写入文件
fp=fopen("c:\\fd.dat","ab+");
//fseek(fp,0L,SEEK_END);
fwrite(&tTmp,sizeof(struct FD),1,fp);
fclose(fp);
}
struct FD inputData()
{
struct FD fd={"",0};
puts("请按以下格式输入数据,用空格隔开:\n");
puts(outStr);
scanf(inputStr,&fd.id,&fd.carID,&fd.driveID ,&fd.policeID,&fd.je);
time_t lt1;
time( <1 );
fd.lt1=lt1;
return fd;
}
void showLink()
{
struct NODE *p=head->next;
struct tm *newtime;
char tmpbuf[20];
while(p)
{
newtime=localtime(&p->fd.lt1);
strftime( tmpbuf, 20, "%Y-%m-%d", newtime);
printf("%s\t%s\t%s\t%s\t%s\t%.1f\n",p->fd.id,p->fd.carID,p->fd.driveID,p->fd.policeID,tmpbuf,p->fd.je);
p=p->next;
}
}
void deleteNode(int index,char *s) //0罚单编号 1车牌号 2驾驶证号
{
struct NODE *p,*q;
int flag=0;
p=head->next; q=head;
while(p)
{
if( strcmp( index==0?p->fd.id:(index==1?p->fd.carID:p->fd.driveID) ,s)==0)
{
flag=1;
p=p->next;
q->next=p;
printf("删除成功!\n");
break;
}
q=q->next;
p=p->next;
}
if(flag==0)
printf("没有找到相关数据!\n");
}
void searchNode(int index,char *s) //0罚单编号 1车牌号 2驾驶证号
{
struct NODE *p=head->next;
struct tm *newtime;
char tmpbuf[20];
int flag=0;
while(p)
{
if( strcmp( index==0?p->fd.id:(index==1?p->fd.carID:p->fd.driveID) ,s)==0)
{
flag=1;
newtime=localtime(&p->fd.lt1);
strftime( tmpbuf, 20, "%Y-%m-%d", newtime);
printf("%s\t%s\t%s\t%s\t%s\t%.1f\n",p->fd.id,p->fd.carID,p->fd.driveID,p->fd.policeID,tmpbuf,p->fd.je);
//break;
}
p=p->next;
}
if(flag==0)
printf("没有找到相关数据!\n");
}
void count(char *start,char *end)//统计功能
{
struct NODE *p=head->next;
struct tm *newtime;
char tmpbuf[20];
while(p)
{
newtime=localtime(&p->fd.lt1);
strftime( tmpbuf, 20, "%Y-%m-%d", newtime);
//printf("Here:%d\n",strcmp(start,p->tmpbuf));
if( strcmp(start,tmpbuf)<0 && strcmp(end,tmpbuf)>0 )
{
printf("%s\t%s\t%s\t%s\t%s\t%.1f\n",p->fd.id,p->fd.carID,p->fd.driveID,p->fd.policeID,tmpbuf,p->fd.je);
//break;
}
p=p->next;
}
}
void saveData()
{
struct NODE *p=head->next;
FILE *fp;
//读数据并构建链表
fp=fopen("c:\\fd.dat","wb");
while(p)
{
fwrite(&p->fd,sizeof(struct FD),1,fp);
p=p->next;
}
fclose(fp);
}
void menu()
{
init();
char txt[80],c,st[20],et[20];
while(1)
{
system("cls");
puts("\n★★★★★★★★★★★罚单管理系统★★★★★★★★★★★\n");
puts("\t1、显示");
puts("\t2、输入");
puts("\t---查询---");
puts("\t\t3、按罚单号查询");
puts("\t\t4、按车牌号查询");
puts("\t\t5、按驾驶证查询");
puts("\t---删除--- ");
puts("\t\t6、按罚单号删除");
puts("\t\t7、按车牌号删除");
puts("\t\t8、按驾驶证删除");
puts("\t\ts、保存");
puts("\t9、统计");
puts("\t0、退出");
c=getchar();
switch(c)
{
case '1':showLink();
system("pause");
system("cls");
break;
case '2':addNode(inputData());break;
//case '3':
/*
index=-1;
strcpy(txt,"");
puts("请输入查询项目(0:罚单号 1:车牌号 2:驾驶证号)与查询内容,用逗号隔开:");
scanf("%d %s",&index,txt);
if(index==-1 || strcmp(txt,"")==0) break;
searchNode(index,txt);
break;
*/
case '3':
strcpy(txt,"");
puts("请输入罚单号:");
scanf("%s",txt);
if(strcmp(txt,"")==0) break;
searchNode(0,txt);
system("pause");
break;
case '4':
strcpy(txt,"");
puts("请输入车牌号:");
scanf("%s",txt);
if(strcmp(txt,"")==0) break;
searchNode(1,txt);
system("pause");
break;
case '5':
strcpy(txt,"");
puts("请输入驾驶证号:");
scanf("%s",txt);
if(strcmp(txt,"")==0) break;
searchNode(2,txt);
system("pause");
break;
case '6':
strcpy(txt,"");
puts("请输入罚单号:");
scanf("%s",txt);
if(strcmp(txt,"")==0) break;
deleteNode(0,txt);
system("pause");
break;
case '7':
strcpy(txt,"");
puts("请输入车牌号:");
scanf("%s",txt);
if(strcmp(txt,"")==0) break;
deleteNode(1,txt);
system("pause");
break;
case '8':
strcpy(txt,"");
puts("请输入驾驶证号:");
scanf("%s",txt);
if(strcmp(txt,"")==0) break;
deleteNode(2,txt);
system("pause");
break;
case '9': //统计
st[0]=et[0]=0;
puts("请输入起止日期:(例2011-09-01 2012-04-15)");
scanf("%s %s",st,et);
if(st[0]==0 || et[0]==0) break;
count(st,et);
system("pause");
break;
case 's':
puts("保存数据会覆盖原文件数据,是否继续(y/n)?");
c=getchar();
c=getchar();
if(c=='y' || c=='Y')
{
saveData();
printf("数据保存完成!\n");
}
system("pause");
break;
case '0':
exit(0);
break;
}
}
}
int main()
{
menu();
return 0;
}
https://max.book118.com/html/2018/0907/8133045012001123.shtm