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日

悬赏问题

  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像