栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

参赛选手成绩统分表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

参赛选手成绩统分表

#include "stdafx.h"
#include "textdb.h"
#include "dsptdef.h"
#include
#include
#define MAXSIZE 100

struct MAN
{
    int name;
    int score[MAXSIZE];//n个评委的分数
    int max;
    int min;
    int sum;
    int smax;
    int smin;//最值的数量
    float aver;
};


typedef struct Node//结点
{
    struct MAN data;//数据域
 
    struct Node *pNext;//指针域
}NODE, *PNODE;


void OnScoreManByRule1(const char* pszTextTblName)
{

    TDB_HANDEL* handle = TDB_Open("C:\Users\11856\Desktop\优秀的C语言\DSPT-S\Data\score.txt");
    
    TDB_MoveFirstRow(handle); //找最小值
    int a[MAXSIZE];
    int i=0;
    while (TDB_MoveNextRow(handle))//换行
    {   
        a[i]=TDB_ColumnValInt(handle, 1);
        for (int c = 2; c < TDB_GetColumnNum(handle); c++)//循环比较每一行的所有元素
        {
            if(a[i] > TDB_ColumnValInt(handle, c))//将最小值存入a[maxsize]
            {
                a[i]= TDB_ColumnValInt(handle, c);
            }
        }
        i++;
    }
    TDB_MoveFirstRow(handle);
    PNODE pHead = (PNODE)malloc(sizeof(NODE));//定义一个头结点并且为头结点分配内存
    
    PNODE pTail = pHead;//定义一个指向头结点的指针
    pTail->pNext = NULL;//清空指针域
    NODE man;//学生结构

    int r=1;

    while (TDB_MoveNextRow(handle))//循环存入
    {

        man.data.name=r;//序号
        man.data.sum=0;
        for (int c = 1; c < TDB_GetColumnNum(handle); c++)
        {            
            man.data.score[c-1] = TDB_ColumnValInt(handle, c);
            man.data.min=a[r-1];
            man.data.sum=man.data.sum+TDB_ColumnValInt(handle, c);//求和
        }
        r++;
        PNODE pNew = (PNODE)malloc(sizeof(NODE));//为新节点分配内存
        //初始化结点的数据域
        pNew->data = man.data;
        
        //将新结点挂到老结点后
        pTail->pNext = pNew;
        
        //清空新结点的指针域
        pNew->pNext = NULL;
        
        //将pTail移到新结点上
        pTail = pNew;
    }
    
    TDB_MoveFirstRow(handle);//找最大值
    PNODE s = pHead->pNext;
    s->data.max=s->data.score[0];
       while (s!=NULL)
       {
           for (int c = 1; c < TDB_GetColumnNum(handle); c++)
           {
              if(s->data.max < s->data.score[c])
              {
                 s->data.max=s->data.score[c];               
              }    
           }
           s = s->pNext;           
       }

    TDB_MoveFirstRow(handle);
    float L=0;//行长度;
    for (int c = 1; c < TDB_GetColumnNum(handle); c++)
    {
        L++;
    }
    s = pHead->pNext;
       while (s!=NULL)
       {
           for (int c = 1; c < TDB_GetColumnNum(handle); c++)
           {          
                 s->data.aver=(s->data.sum - s->data.max - s->data.min)/(L-2);    //求去掉最值后的平均分               
                  
           }
           s = s->pNext;       
       }

    NODE temp;
    for(PNODE m=pHead->pNext; NULL != m; m=m->pNext)
    {
        for(PNODE n=m->pNext; NULL !=n; n=n->pNext)
        {
            if(m->data.aver < n->data.aver)
            {            
                temp.data  = m->data;
                m->data =  n->data;
                n->data = temp.data;
            }
        }
    }

TDB_MoveFirstRow(handle);//输出部分
PNODE p = pHead->pNext;
ShowMsg("名次t 选手  tt综合成绩n");
r=1;
while (TDB_MoveNextRow(handle))
{
        
        ShowMsg("  %-3dt ",r);
        ShowMsg("选手%-3d",p->data.name);
        ShowMsg("t%3.3f ",p->data.aver);
        //ShowMsg("sum=%dt",p->data.sum);
        //ShowMsg("max=%dt",p->data.max);
        //ShowMsg("min=%dt",p->data.min);
        
        ShowMsg("rn");
        p = p->pNext;
        r++;
}
    ShowMsg("n");
    


    TDB_Close(handle);
}


void OnScoreManByRule2(const char* pszTextTblName)
{
    TDB_HANDEL* handle = TDB_Open("C:\Users\11856\Desktop\优秀的C语言\DSPT-S\Data\score.txt");
    
    TDB_MoveFirstRow(handle); //找最小值
    int a[MAXSIZE];
    int i=0;
    while (TDB_MoveNextRow(handle))//换行
    {   
        a[i]=TDB_ColumnValInt(handle, 1);
        for (int c = 2; c < TDB_GetColumnNum(handle); c++)//循环比较每一行的所有元素
        {
            if(a[i] > TDB_ColumnValInt(handle, c))//将最小值存入a[maxsize]
            {
                a[i]= TDB_ColumnValInt(handle, c);
            }
        }
        i++;
    }
    TDB_MoveFirstRow(handle);
    PNODE pHead = (PNODE)malloc(sizeof(NODE));//定义一个头结点并且为头结点分配内存
    
    PNODE pTail = pHead;//定义一个指向头结点的指针
    pTail->pNext = NULL;//清空指针域
    NODE man;//学生结构

    int r=1;

    while (TDB_MoveNextRow(handle))//循环存入
    {

        man.data.name=r;//序号
        man.data.sum=0;
        for (int c = 1; c < TDB_GetColumnNum(handle); c++)
        {            
            man.data.score[c-1] = TDB_ColumnValInt(handle, c);
            man.data.min=a[r-1];
            man.data.sum=man.data.sum+TDB_ColumnValInt(handle, c);//求和
        }
        r++;
        PNODE pNew = (PNODE)malloc(sizeof(NODE));//为新节点分配内存
        //初始化结点的数据域
        pNew->data = man.data;
        
        //将新结点挂到老结点后
        pTail->pNext = pNew;
        
        //清空新结点的指针域
        pNew->pNext = NULL;
        
        //将pTail移到新结点上
        pTail = pNew;
    }
    
    TDB_MoveFirstRow(handle);//找最大值
    PNODE s = pHead->pNext;
    s->data.max=s->data.score[0];
       while (s!=NULL)
       {
           for (int c = 1; c < TDB_GetColumnNum(handle); c++)
           {
              if(s->data.max < s->data.score[c])
              {
                 s->data.max=s->data.score[c];               
              }    
           }
           s = s->pNext;           
       }

       s = pHead->pNext;
       while (s!=NULL)//再次循环找出最值出现的次数
       {     
           s->data.smax=0;
           s->data.smin=0;
           for (int c = 0; c < TDB_GetColumnNum(handle); c++)
           {
              if(s->data.max == s->data.score[c])
              {    
                 s->data.smax++;               
              }
              if(s->data.min == s->data.score[c])
              {
                 s->data.smin++;               
              }
              
           }
           s = s->pNext;           
       }
           
    TDB_MoveFirstRow(handle);
    float L=0;//行长度;
    for (int c = 1; c < TDB_GetColumnNum(handle); c++)
    {
        L++;
    }
    s = pHead->pNext;
       while (s!=NULL)
       {
           for (int c = 1; c < TDB_GetColumnNum(handle); c++)
           {          
                 s->data.aver=(s->data.sum - s->data.max * s->data.smax - s->data.min * s->data.smin)/(L-2-s->data.smax + s->data.smin);    //求去掉最值后的平均分               
                  
           }
           s = s->pNext;       
       }

    NODE temp;
    for(PNODE m=pHead->pNext; NULL != m; m=m->pNext)
    {
        for(PNODE n=m->pNext; NULL !=n; n=n->pNext)
        {
            if(m->data.aver < n->data.aver)
            {            
                temp.data  = m->data;
                m->data =  n->data;
                n->data = temp.data;
            }
        }
    }


TDB_MoveFirstRow(handle);//输出部分
PNODE p = pHead->pNext;
ShowMsg("名次t 选手  tt综合成绩n");
r=1;
while (TDB_MoveNextRow(handle))
{
        
        ShowMsg("  %-3dt ",r);
        ShowMsg("选手%-3d",p->data.name);
        ShowMsg("t%3.3f ",p->data.aver);
        //ShowMsg("t最大值有%d个",p->data.smax);
        //ShowMsg("t最小值有%d个",p->data.smin);
        //ShowMsg("sum=%dt",p->data.sum);
        //ShowMsg("max=%dt",p->data.max);
        //ShowMsg("min=%dt",p->data.min);
        
        ShowMsg("rn");
        p = p->pNext;
        r++;
        
}
    ShowMsg("n");
    


    TDB_Close(handle);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983018.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号