关于C语言的系统编写问题

编写出交通罚单管理系统程序代码,包含输入,删改,浏览,查询,统计因何种原因而被处罚罚单等功能。



/*
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( &lt1 );
    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