| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1447 人关注过本帖
标题:比较字符串问题
只看楼主 加入收藏
za30312
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2016-5-16
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:9 
比较字符串问题
void tongji()            //统计
{
    PRO *p,*pre;
    int a=0,b=0,c=0,d=0,e=0;
    char aa[4],bb[4],cc[4],dd[4],ee[4];
    char str1[400]="质检结果不合格数量:";
    char str2[40]="质检设计缺陷问题数量:";
    char str3[40]="质检装配质量问题数量:";
    char str4[40]="质检加工质量问题数量:";
    char *qwe="合格";
    pre=&head;        //pre指向头结点
    p=head.next;    //p指向第一个结点
    while(p!=NULL)
    {   
        e++;
        GetDlgItemText(hWnd,3,p->lookjieguo,sizeof(p->lookjieguo)/sizeof(char));
        GetDlgItemText(hWnd,7,p->lookwenti,sizeof(p->lookwenti)/sizeof(char));
        if(strcmp(p->lookjieguo,"不合格")==0)                    a++;         
        if(strcmp(p->lookwenti,"设计缺陷"))                      b++;  
        if(strcmp(p->lookwenti,"装配质量"))                      c++;
        if(strcmp(p->lookwenti,"加工质量"));                     d++;
        pre=pre->next;    //p pre指向下一个结点 pre在p之前
        p=p->next;
    }
    itoa(a, aa, 10);
    itoa(b, bb, 10);
    itoa(c, cc, 10);
    itoa(d, dd, 10);
    itoa(e, ee, 10);
    strcat(str1,aa);
    strcat(str1,"\r\n");
    strcat(str1,str2);
    strcat(str1,bb);
    strcat(str1,"\r\n");
    strcat(str1,str3);
    strcat(str1,cc);
    strcat(str1,"\r\n");
    strcat(str1,str4);
    strcat(str1,dd);
    SetDlgItemText(hWnd,44,str1);
} 为什么比较得不到我想要的结果  不知道错在哪
搜索更多相关主题的帖子: 字符串 统计 
2016-07-07 18:45
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 


程序代码:
   if(strcmp(p->lookjieguo,"不合格")==0)                    a++;         
        if(strcmp(p->lookwenti,"设计缺陷"))            b++;  
        if(strcmp(p->lookwenti,"装配质量"))            c++;
        if(strcmp(p->lookwenti,"加工质量"));                    d++;
        pre=pre->next;    //p pre指向下一个结点 pre在p之前
        p=p->next;


这样写看看:
程序代码:
   if((strcmp(p->lookjieguo,"不合格"))==0)                    a++;         
        if((strcmp(p->lookwenti,"设计缺陷"))==0)            b++;  
        if((strcmp(p->lookwenti,"装配质量"))==0)            c++;
        if((strcmp(p->lookwenti,"加工质量"))==0)                    d++;
        pre=pre->next;    //p pre指向下一个结点 pre在p之前
        p=p->next;

或者用strncmp来比较!

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-07-07 18:54
za30312
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2016-5-16
收藏
得分:0 
回复 2楼 lanke711
不行,要不我发全部代码你看看吧
2016-07-07 19:15
za30312
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2016-5-16
收藏
得分:0 
回复 2楼 lanke711

#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct product
{
    char ID[100];   //质检编号
    char producers[20]; //生产者
    char name[20];   //零部件名称
    char department[20]; //生产部门
    char lookjieguo[20]; //质检结果
    char lookwenti[20]; //质量问题
    char lookers[20];  //质检员
    char year[5]; //年
    char month[5]; //月
    char day[5]; //日
    struct product* next;
}PRO;
LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);//函数声明
void add();
int existNode(PRO *node);
void insertBack(PRO *p);
void freeList();
PRO* findBack();
void query();
PRO* findByName(char *ID);
void clean();
void dispaly();
void dispaly(HWND hWnd,PRO *p);
void del();
void mdy();
void output();
void input();
void tongji();

PRO head;        //头结点
PRO ss;
RECT rect,rect2,rect3,rect4,rect5,rect6,rect7,rect8,rect9,rect10,rect11,rect12,rect13;
int i,j=0;  //循环变量
HDC hDC;
PAINTSTRUCT paint;
HWND hWnd;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{   
    head.next=NULL;
    char *cName = "myWindow";//定义个字符指针表示窗口类的名字
    WNDCLASS wc;//定义变量
    MSG Msg;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);;//设置窗口背景为白色
    wc.hCursor = NULL;//窗口的光标不设置
    wc.hIcon = NULL;//窗口图标设置
    wc.hInstance = hInstance;//当前程序的句柄,hInstance是由主函数传递
    wc.lpfnWndProc = WinProc;//窗口处理过程的窗口函数。
    wc.lpszClassName =(LPSTR)cName;//窗口类的名字。
    wc.lpszMenuName = NULL;//目录名,不设置
    wc.style = CS_HREDRAW | CS_VREDRAW; //窗口类的风格
    RegisterClass(&wc);//在系统中注册窗口
    hWnd = CreateWindow(cName,TEXT("窗口的标题"),WS_OVERLAPPEDWINDOW,50, 20, 800, 600,            
                      NULL, NULL, hInstance, NULL) ;
     ShowWindow(hWnd,nShowCmd);//显示窗口
     UpdateWindow(hWnd);//更新窗口
     while(GetMessage(&Msg,NULL,0,0))
    {
        TranslateMessage(&Msg);//翻译消息
        DispatchMessage(&Msg);//分派消息
    }
    return Msg.message;//程序结束后返回消息
}
LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{//处理消息过程
 static HWND btnHwnd ;
 static HWND inputHwnd ;
    switch(Msg)//对消息进行判断
    {
 case WM_PAINT:
  hDC=BeginPaint(hWnd,&paint);//获取设备上下文
  rect.top=20;//设置矩形框的属性
  rect.right=20;
  rect.bottom=40;
  rect.left=90;

  rect2.top=20;
  rect2.right=5;
  rect2.bottom=130;
  rect2.left=110;

  rect3.top=20;
  rect3.right=5;
  rect3.bottom=130;
  rect3.left=750;
  
  rect4.top=20;
  rect4.right=0;
  rect4.bottom=220;
  rect4.left=110;

  rect5.top=20;
  rect5.right=20;
  rect5.bottom=220;
  rect5.left=750;

  rect6.top=20;
  rect6.right=20;
  rect6.bottom=310;
  rect6.left=110;

  rect7.top=20;
  rect7.right=20;
  rect7.bottom=310;
  rect7.left=750;

  rect8.top=20;
  rect8.right=20;
  rect8.bottom=400;
  rect8.left=110;

  rect9.top=20;
  rect9.right=20;
  rect9.bottom=400;
  rect9.left=750;

  rect10.top=20;
  rect10.right=20;
  rect10.bottom=490;
  rect10.left=110;

  rect11.top=20;
  rect11.right=300;
  rect11.bottom=400;
  rect11.left=750;

  rect12.top=20;
  rect12.right=425;
  rect12.bottom=400;
  rect12.left=750;

  rect13.top=20;
  rect13.right=550;
  rect13.bottom=400;
  rect13.left=750;

  DrawText(hDC,"文件:",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"质检编号:",-1,&rect2,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"生产者:",-1,&rect3,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"零部件名称:",-1,&rect4,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"生产部门:",-1,&rect5,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"质检结果:",-1,&rect6,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"质量问题:",-1,&rect7,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"质量员:",-1,&rect8,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"质量日期:",-1,&rect9,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"结果:",-1,&rect10,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"年",-1,&rect11,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"月",-1,&rect12,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  DrawText(hDC,"日",-1,&rect13,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
  EndPaint(hWnd,&paint);
  return 0;
  
 case WM_CREATE: //响应窗口的创建事件
  //创建按钮
  btnHwnd = CreateWindow( TEXT("button"), TEXT("导入"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,   50, 350, 60, 30, hWnd, (HMENU)10, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE ), NULL ) ;
  btnHwnd = CreateWindow( TEXT("button"), TEXT("添加"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,   140, 350, 60, 30, hWnd, (HMENU)11, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE ), NULL ) ;
  btnHwnd = CreateWindow( TEXT("button"), TEXT("查找"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,   230, 350, 60, 30, hWnd, (HMENU)12, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE ), NULL ) ;
  btnHwnd = CreateWindow( TEXT("button"), TEXT("删除"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,   320, 350, 60, 30, hWnd, (HMENU)13, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE ), NULL ) ;
  btnHwnd = CreateWindow( TEXT("button"), TEXT("统计"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,   410, 350, 60, 30, hWnd, (HMENU)14, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE ), NULL ) ;
  btnHwnd = CreateWindow( TEXT("button"), TEXT("修改"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,   500, 350, 60, 30, hWnd, (HMENU)15, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE ), NULL ) ;
  btnHwnd = CreateWindow( TEXT("button"), TEXT("保存"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,   590, 350, 60, 30, hWnd, (HMENU)16, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE ), NULL ) ;
  //创建文本框
  /*文件框22*/inputHwnd = CreateWindow( TEXT("edit"), NULL,WS_CHILD | WS_VISIBLE  | WS_BORDER |ES_LEFT | ES_MULTILINE , 110, 20,550, 20, hWnd, (HMENU)22, ((LPCREATESTRUCT) lParam) -> hInstance,NULL ) ;
  for(i=0;i<4;i++)
  {
   inputHwnd = CreateWindow( TEXT("edit"), NULL,WS_CHILD | WS_VISIBLE  | WS_BORDER |ES_LEFT | ES_MULTILINE , 110, 65+45*i, 220, 20, hWnd, (HMENU)(i+1), ((LPCREATESTRUCT) lParam) -> hInstance,NULL ) ;
  }
  for(i=0;i<3;i++)
  {
   inputHwnd = CreateWindow( TEXT("edit"), NULL,WS_CHILD | WS_VISIBLE  | WS_BORDER |ES_LEFT | ES_MULTILINE , 440, 65+45*i, 220, 20, hWnd, (HMENU)(i+5), ((LPCREATESTRUCT) lParam) -> hInstance,NULL ) ;
  }
  /*年77*/inputHwnd = CreateWindow( TEXT("edit"), NULL,WS_CHILD | WS_VISIBLE  | WS_BORDER |ES_RIGHT | ES_MULTILINE , 440, 65+45*3, 70, 20, hWnd, (HMENU)77, ((LPCREATESTRUCT) lParam) -> hInstance,NULL ) ;
  /*月88*/inputHwnd = CreateWindow( TEXT("edit"), NULL,WS_CHILD | WS_VISIBLE  | WS_BORDER |ES_RIGHT| ES_MULTILINE , 535, 65+45*3, 40, 20, hWnd, (HMENU)88, ((LPCREATESTRUCT) lParam) -> hInstance,NULL ) ;
  /*日99*/inputHwnd = CreateWindow( TEXT("edit"), NULL,WS_CHILD | WS_VISIBLE  | WS_BORDER |ES_RIGHT | ES_MULTILINE , 600, 65+45*3, 40, 20, hWnd, (HMENU)99, ((LPCREATESTRUCT) lParam) -> hInstance,NULL ) ;
  /*大框44*/inputHwnd = CreateWindow( TEXT("edit"), NULL, WS_VSCROLL|WS_CHILD | WS_VISIBLE  | WS_BORDER |ES_LEFT | ES_MULTILINE|ES_WANTRETURN, 110, 250, 550, 90, hWnd, (HMENU)44, ((LPCREATESTRUCT) lParam) -> hInstance,NULL ) ;

  return 0 ;
 case WM_COMMAND://响应命令
     {   
         SetDlgItemText(hWnd,44,NULL);
         switch(LOWORD(wParam))
         {
         case 10:// 是ID号为11的按钮点击 导入
             {                     
                 input();
                 break;
             }
         case 11:// 是ID号为11的按钮点击 添加
             {                     
                 add();
                 break;
             }
         case 12:// 是ID号为12的按钮点击 查找
             {                 
                 query();
                 break;
             }
         case 13:// 是ID号为12的按钮点击 删除
             {                 
                 del();
                 break;
             }
        case 14:// 是ID号为12的按钮点击 统计
             {                 
                 tongji();
                 break;
             }
        case 15:// 是ID号为12的按钮点击 修改
             {         
                 mdy();
                 break;
             }
        case 16:// 是ID号为12的按钮点击 保存
             {
                 output();
                 break;
             }
         }
        return 0;
     }
         case WM_DESTROY://如果是点击关闭窗口时的消息
             PostQuitMessage(0);//退出消息队列
             return 0;//返回0,结束函数
     }
     //如果是其余的消息,调用默认消息处理函数,将消息该函数处理并将返回值返回
     return DefWindowProc(hWnd,Msg,wParam,lParam);
}
void tongji()            //统计
{
    PRO *p,*pre;
    int a=0,b=0,c=0,d=0,e=0;
    char aa[4],bb[4],cc[4],dd[4],ee[4];
    char str1[400]="质检结果不合格数量:";
    char str2[40]="质检设计缺陷问题数量:";
    char str3[40]="质检装配质量问题数量:";
    char str4[40]="质检加工质量问题数量:";
    char *qwe="合格";
    pre=&head;        //pre指向头结点
    p=head.next;    //p指向第一个结点
    while(p!=NULL)
    {   
        e++;
        GetDlgItemText(hWnd,3,p->lookjieguo,sizeof(p->lookjieguo)/sizeof(char));
        GetDlgItemText(hWnd,7,p->lookwenti,sizeof(p->lookwenti)/sizeof(char));
        if((strcmp(p->lookjieguo,"合格"))==0)                a++;
        if((strcmp(p->lookwenti,"设计缺陷"))==0)            b++;
        if((strcmp(p->lookwenti,"装配质量"))==0)            c++;
        if((strcmp(p->lookwenti,"加工质量"))==0)            d++;
        pre=pre->next;    //p pre指向下一个结点 pre在p之前
        p=p->next;
    }
    itoa(a, aa, 10);
    itoa(b, bb, 10);
    itoa(c, cc, 10);
    itoa(d, dd, 10);
    itoa(e, ee, 10);
    strcat(str1,aa);
    strcat(str1,"\r\n");
    strcat(str1,str2);
    strcat(str1,bb);
    strcat(str1,"\r\n");
    strcat(str1,str3);
    strcat(str1,cc);
    strcat(str1,"\r\n");
    strcat(str1,str4);
    strcat(str1,dd);
    SetDlgItemText(hWnd,44,str1);
}
void input()
{
    FILE *fp;
    PRO *p;
    int count;
    char filename[20];
    GetDlgItemText(hWnd,22,filename,sizeof(filename)/sizeof(char));
    fp=fopen(filename,"r");
    if(fp==NULL)
    {
        SetDlgItemText(hWnd,44,"文件打开失败!");
        return;
    }
    while(!feof(fp))
    {
        p=(PRO*)malloc(sizeof(PRO));
        count=fscanf(fp,"%10s%10s%10s%10s%10s%10s%10s%5s%5s%5s",p->ID,p->lookers,p->lookjieguo,p->lookwenti,p->producers,p->name,p->department
            ,p->year,p->month,p->day);
        if(count<10)
        {
            free(p);
            break;
        }
        if(existNode(p))
        {
            SetDlgItemText(hWnd,44,"存在相同质检信息");
            free(p);
        }
        else
        {
            insertBack(p);
            SetDlgItemText(hWnd,44,"导入成功");
        }
    }
    fclose(fp);
    SetDlgItemText(hWnd,44,"导入成功");
    return;
}
void output()
{
    FILE *fp;
    PRO *p;
    char filename[20];
    GetDlgItemText(hWnd,22,filename,sizeof(filename)/sizeof(char));
    fp=fopen(filename,"w");
    if(fp==NULL)
    {
        SetDlgItemText(hWnd,44,"文件打开失败");
        return;
    }
    p=head.next;    /*p指向第一个结点*/
    while(p!=NULL)
    {
        fprintf(fp,"%10s%10s%10s%10s%10s%10s%10s%5s%5s%5s\n",p->ID,p->lookers,p->lookjieguo,p->lookwenti,p->producers,p->name,p->department,p->year,p->month,p->day);
        p=p->next;
    }
    SetDlgItemText(hWnd,44,"保存成功!");
    fclose(fp);
    return;
}
void mdy()
{
    PRO *p,temp;
    GetDlgItemText(hWnd,1,temp.ID,sizeof(temp.ID)/sizeof(char));
    GetDlgItemText(hWnd,2,temp.name,sizeof(temp.name)/sizeof(char));
    GetDlgItemText(hWnd,3,temp.lookjieguo,sizeof(temp.lookjieguo)/sizeof(char));
    GetDlgItemText(hWnd,4,temp.lookers,sizeof(temp.lookers)/sizeof(char));
    GetDlgItemText(hWnd,5,temp.producers,sizeof(temp.producers)/sizeof(char));
    GetDlgItemText(hWnd,6,temp.department,sizeof(temp.department)/sizeof(char));
    GetDlgItemText(hWnd,7,temp.lookwenti,sizeof(temp.lookwenti)/sizeof(char));
    GetDlgItemText(hWnd,77,temp.year,sizeof(temp.year)/sizeof(char));
    GetDlgItemText(hWnd,88,temp.month,sizeof(temp.month)/sizeof(char));
    GetDlgItemText(hWnd,99,temp.day,sizeof(temp.day)/sizeof(char));
   
    p=findByName(temp.ID);    //查找NO对应的结点地址
    strcpy(p->ID,temp.ID);
    strcpy(p->name,temp.name);
    strcpy(p->lookjieguo,temp.lookjieguo);
    strcpy(p->lookers,temp.lookers);
    strcpy(p->producers,temp.producers);
    strcpy(p->department,temp.department);
    strcpy(p->lookwenti,temp.lookwenti);
    strcpy(p->year,p->year);
    strcpy(p->month,p->month);
    strcpy(p->day,p->day);
    SetDlgItemText(hWnd,44,"修改成功!");
    clean();
}
void query()
{
    PRO *p;
    char ID[20];
    GetDlgItemText(hWnd,1,ID,sizeof(ID)/sizeof(char));
    p=findByName(ID);    //查找
    if(p==NULL)
    {
        SetDlgItemText(hWnd,44,"质检编号不存在");
    }
    else
    {
        dispaly(hWnd,p);
    }
}
void del()            //删除
{
    PRO *p,*pre;
    char ID[20];
    GetDlgItemText(hWnd,1,ID,sizeof(ID)/sizeof(char));
    pre=&head;        //pre指向头结点
    p=head.next;    //p指向第一个结点
    while(p!=NULL)
    {
        if(strcmp(p->ID,ID)==0)   break;
        pre=pre->next;    //p pre指向下一个结点 pre在p之前
        p=p->next;
    }
    if(p!=NULL)        //如果找到
    {
        pre->next=p->next;    //将p所指向的结点从链表删除
        free(p);
        clean();
        SetDlgItemText(hWnd,44,"删除成功");
        return;
    }
    else
    {
        SetDlgItemText(hWnd,44,"编号不存在,没能删除");
    }
    clean();
    return;
}
void add()
{   
    int d1,d2,d3;
    PRO *p;
    p=(PRO *)malloc(sizeof(PRO));    /*新建结点*/
    if(p==NULL)
    {
        SetDlgItemText(hWnd,44,"动态内存分配失败!");
        return;
    }
    ZeroMemory(p->ID,sizeof(p->ID));
    GetDlgItemText(hWnd,1,p->ID,sizeof(p->ID)/sizeof(char));
    GetDlgItemText(hWnd,2,p->name,sizeof(p->name)/sizeof(char));
    GetDlgItemText(hWnd,3,p->lookjieguo,sizeof(p->lookjieguo)/sizeof(char));
    GetDlgItemText(hWnd,4,p->lookers,sizeof(p->lookers)/sizeof(char));
    GetDlgItemText(hWnd,5,p->producers,sizeof(p->producers)/sizeof(char));
    GetDlgItemText(hWnd,6,p->department,sizeof(p->department)/sizeof(char));
    GetDlgItemText(hWnd,7,p->lookwenti,sizeof(p->lookwenti)/sizeof(char));
    GetDlgItemText(hWnd,77,p->year,sizeof(p->year)/sizeof(char));
    GetDlgItemText(hWnd,88,p->month,sizeof(p->month)/sizeof(char));
    GetDlgItemText(hWnd,99,p->day,sizeof(p->day)/sizeof(char));
    d1 = atoi(p->year);
    d2 = atoi(p->month);
    d3 = atoi(p->day);

   
    if(d1>2016||d1<0)
    {   
        SetDlgItemText(hWnd,44,"年份错误,请重新输出");
        return;
    }
   
    if(d2>12||d2<1)
    {   
        SetDlgItemText(hWnd,44,"月份错误,请重新输出");
        return;
    }
   
    if(d2==4||d2==6||d2==9||d2==11)   
    {
        if(d3<1||d3>30)
        {
            SetDlgItemText(hWnd,44,"日份错误,请重新输出");
            return;
        }
    }
    if(d2==1||d2==3||d2==5||d2==7||d2==8||d2==10||d2==12)   
    {   
        if(d3<1||d3>31)
        {
            SetDlgItemText(hWnd,44,"日份错误,请重新输出");
            return;
        }
    }
    if(d2==2)
    {
        if(((d1%4==0)&&(d1%100!=0))||(d1%400==0))  
        {
            if(d3<1&&d3>29)
            {
                SetDlgItemText(hWnd,44,"日份错误,请重新输出");   
                return;
            }
        }
    }
    if(existNode(p))
    {
        SetDlgItemText(hWnd,44,"存在相同的质检编号");
    }
    else
    {
        insertBack(p);        //在链表后面插入一个结点
        SetDlgItemText(hWnd,44,"添加成功!");   
    }
    clean();
    return;
}

// ZeroMemory(ss.ID,sizeof(ss.ID));
  //获取文本框中内容
 //GetDlgItemText(hWnd,2,ss.ID,sizeof(ss.ID)/sizeof(char));
/*
函数功能:判断参数表示的产品信息结点是否在链表中已经存在
人口参数:node表示产品信息的结点   
返回值:若找到返回1,否则返回0
*/
int existNode(PRO *node)
{
    PRO *p;
    p=head.next;    //p指向第一个结点
    while(p!=NULL)    //当p不为NULL
    {
        if(strcmp(p->ID,node->ID)==0)    return 1;
        p=p->next;    //p指向下一个结点
    }
    return 0;
}
/*
函数功能:查找尾结点的地址
返回值:存放尾结点的地址
*/
PRO* findBack()
{
    PRO *p;
    p=&head;
    while(p->next!=NULL)
    {
        p=p->next;    //p指向下一个结点
    }
    return p;
}
/*
函数功能:使用尾插法在链表后面插入一个结点
人口参数:p为待插入的结点地址
*/
void insertBack(PRO *p)
{
    PRO *tail;
    tail=findBack();
    tail->next=p;
    p->next=NULL;
    return;
}
/*
函数功能:释放链表中所有存放产品信息的结点
*/
void freeList()
{
    PRO *p;
    p=head.next;    //p指向第一个结点
    while(p!=NULL)    //如果p不为NULL
    {
        head.next=p->next;    //保存p的下一个结点的地址
        free(p);            //释放p指向的存储单元
        p=head.next;        //将p指向下一个结点
    }
    return;
}
/*
函数功能:根据姓名查找存放通讯录信息结点的地址
人口参数:ID为质检编号
返回值:若找到,返回存放质检信息结点的地址,否则返回NULL
*/
PRO* findByName(char *ID)
{
    PRO *p;
    p=head.next;
    while(p!=NULL)
    {
        if(strcmp(p->ID,ID)==0)    break;
        p=p->next;    //指向下个结点
    }
    return p;
}
void clean()
{
    SetDlgItemText(hWnd,1,NULL);//在文本框中显示
    SetDlgItemText(hWnd,2,NULL);
    SetDlgItemText(hWnd,3,NULL);
    SetDlgItemText(hWnd,4,NULL);
    SetDlgItemText(hWnd,5,NULL);
    SetDlgItemText(hWnd,6,NULL);
    SetDlgItemText(hWnd,7,NULL);
    SetDlgItemText(hWnd,77,NULL);
    SetDlgItemText(hWnd,88,NULL);
    SetDlgItemText(hWnd,99,NULL);
}
void dispaly(HWND hWnd,PRO *p)    //显示
{
    SetDlgItemText(hWnd,1,p->ID);//在文本框中显示
    SetDlgItemText(hWnd,2,p->name);
    SetDlgItemText(hWnd,3,p->lookjieguo);
    SetDlgItemText(hWnd,4,p->lookers);
    SetDlgItemText(hWnd,5,p->producers);
    SetDlgItemText(hWnd,6,p->department);
    SetDlgItemText(hWnd,7,p->lookwenti);
    SetDlgItemText(hWnd,77,p->year);
    SetDlgItemText(hWnd,88,p->month);
    SetDlgItemText(hWnd,99,p->day);
}
2016-07-07 19:16
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:2 
我调试了一下。导入数据是成功的。查询数据是正常的。
但是在统计的时候,数据完全不变。说明没有遍历到导入的数据。
strcmp比较字符串是没有问题的。
楼主再检查一下这个统计函数的代码。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-07-07 20:23
za30312
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2016-5-16
收藏
得分:0 
回复 5楼 lanke711
while(p!=NULL)
    {   
        e++;
        GetDlgItemText(hWnd,3,p->lookjieguo,sizeof(p->lookjieguo)/sizeof(char));
        GetDlgItemText(hWnd,7,p->lookwenti,sizeof(p->lookwenti)/sizeof(char));
        if((strcmp(p->lookjieguo,"合格"))==0)                a++;
        if((strcmp(p->lookwenti,"设计缺陷"))==0)            b++;
        if((strcmp(p->lookwenti,"装配质量"))==0)            c++;
        if((strcmp(p->lookwenti,"加工质量"))==0)            d++;
        a++;
        pre=pre->next;    //p pre指向下一个结点 pre在p之前
        p=p->next;
    }
我在里面加了一个 a++   循环的次数和我的结点正好相同 能否说明我遍历了?
2016-07-07 20:51
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
我不知道你的代码块怎么遍历的。
我在调试运行时,填写了几个不同的数据。
查询的时候,数据是完全正常的。
但是在统计时,我输入某个编号,发现只有编号改变,其它的数据完全不变。我试着输入几个其它编号,数据完全不会改变。
你再断点一下看看。。



普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-07-07 22:20
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:3 
我试着保存两组数据(输入一组保存一次),最终只有第一次输入的那一组被保存。
统计不应该以读取当前窗口的数据来比较,而是遍历数据。

2016-07-07 22:34
za30312
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2016-5-16
收藏
得分:0 
回复 8楼 linlulu001
PRO *p;
    int a=0,b=0,c=0,d=0,e=0;
    char aa[4],bb[4],cc[4],dd[4],ee[4];
    char str1[400]="质检结果不合格数量:";
    char str2[40]="质检设计缺陷问题数量:";
    char str3[40]="质检装配质量问题数量:";
    char str4[40]="质检加工质量问题数量:";
    p=head.next;    //p指向第一个结点
    while(p!=NULL)
    {   
        e++;
        if(strcmp(p->lookjieguo,"不合格"))          a++;          //质检结果不合格 a+1  
        if(strcmp(p->lookwenti,"设计缺陷"))          b++;            
        if(strcmp(p->lookwenti,"装配质量"))          c++;
        if(strcmp(p->lookwenti,"加工质量"))          d++;
        p=p->next;
    }
解决了,谢谢  我链表有些问题    还有也就是你说的    屏幕上已经没有我想要的数据了   
我学了一个学期的C   就感觉 链表和指针有些复杂   虽然链表看着好理解  但不会很灵活去运用
2016-07-07 23:29
za30312
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2016-5-16
收藏
得分:0 
回复 7楼 lanke711
PRO *p;
    int a=0,b=0,c=0,d=0,e=0;
    char aa[4],bb[4],cc[4],dd[4],ee[4];
    char str1[400]="质检结果不合格数量:";
    char str2[40]="质检设计缺陷问题数量:";
    char str3[40]="质检装配质量问题数量:";
    char str4[40]="质检加工质量问题数量:";
    p=head.next;    //p指向第一个结点
    while(p!=NULL)
    {   
        e++;
        if(strcmp(p->lookjieguo,"不合格"))          a++;          //质检结果不合格 a+1  
        if(strcmp(p->lookwenti,"设计缺陷"))          b++;            
        if(strcmp(p->lookwenti,"装配质量"))          c++;
        if(strcmp(p->lookwenti,"加工质量"))          d++;
        p=p->next;
    }
解决了,谢谢  我链表有些问题    还有也就是你说的    屏幕上已经没有我想要的数据了   
我学了一个学期的C   就感觉 链表和指针有些复杂   虽然链表看着好理解  但不会很灵活去运用
2016-07-07 23:29
快速回复:比较字符串问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038389 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved