m0_62801663 2022-02-17 14:02 采纳率: 72%
浏览 53
已结题

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

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

  • 写回答

2条回答 默认 最新

  • piaoyiren 2022-02-17 14:19
    关注
    
    
    /*
    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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 已采纳回答 2月18日
  • 提问应符合社区要求 2月17日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?