文章标题

来源:互联网 发布:入侵网站软件 编辑:程序博客网 时间:2024/05/01 01:56

1.将一个要统计的数据信息存放在一个文件里面,如a.txt
void Readfile(POAct * mypoact)
2.将文本文件里的字符串解析出来,转换成数字存储在自定义类型的变量里,并存放在自定义数组里面
void ToStoreData(POAct * ppact, char * parr)
3.根据题目给出的条件进行运算
void CalclutData(POAct * pact)
4.自定义的数据类型

typedef struct Data{    int year[1];    int month[1];    int day[1];}PData;typedef struct Times       // 时间类型{    int starthours[1];    int startmint[1];    int endhours[1];    int endmint[1];}PTmies;typedef struct OneActivty    //一次活动需要的类型{    struct Data mdata;    struct Times mtime;    int persons;    int Income[1];    int Payment[1];    int rentgyms[1];    int retainedprof[1];}POAct, MPData[MAX];

编译环境 windows 下的visual Studio 2013

#include<stdio.h>#include<iostream>using namespace std;#define MAX 10typedef struct Data{    int year[1];    int month[1];    int day[1];}PData;typedef struct Times       // 时间类型{    int starthours[1];    int startmint[1];    int endhours[1];    int endmint[1];}PTmies;typedef struct OneActivty    //一次活动需要的类型{    struct Data mdata;    struct Times mtime;    int persons;    int Income[1];    int Payment[1];    int rentgyms[1];    int retainedprof[1];}POAct, MPData[MAX];// 将字符串类型的数据 转化成结构体类型中void ToStoreData(POAct * ppact, char * parr)     {    int len = strlen(parr);    if (ppact == NULL) exit(1);    int i = 0;    int value = 0;    int digits = 0;    while (*parr != '\0')    {        for (i; i < 4; ++i)        {            digits = *parr - '0';            value *= 10;            value += digits;            parr++;        }        ppact->mdata.year[0] = value;   //获得了年份        parr++;        value = 0;        for (i = 5; i < 7; ++i)        {            digits = *parr - '0';            value *= 10;            value += digits;            parr++;        }        ppact->mdata.month[0] = value;        parr++;        value = 0;        for (i = 8; i < 10; ++i)        {            digits = *parr - '0';            value *= 10;            value += digits;            parr++;        }        ppact->mdata.day[0] = value;        parr++;                 //获得时间段        value = 0;        for (i = 11; i < 13; ++i)        {            digits = *parr - '0';            value *= 10;            value += digits;            parr++;        }        ppact->mtime.starthours[0] = value;        parr++;        value = 0;                     // 获得时间段        for (i = 14; i < 16; ++i)        {            digits = *parr - '0';            value *= 10;            value += digits;            parr++;        }        ppact->mtime.startmint[0] = value;        parr++;        value = 0;        for (i = 17; i < 19; ++i)        {            digits = *parr - '0';            value *= 10;            value += digits;            parr++;        }        ppact->mtime.endhours[0] = value;        parr++;        value = 0;        for (i = 20; i < 22; ++i)        {            digits = *parr - '0';            value *= 10;            value += digits;            parr++;        }        ppact->mtime.endmint[0] = value;        parr++;        value = 0;                    // 获得人数        for (i = 23; i < len; ++i)        {            digits = *parr - '0';            value *= 10;            value += digits;            parr++;        }        ppact->persons = value;    }    //return ppact;}void CalclutData(POAct * pact){    //计算要租用几个体育馆    int np = 0;    int t = 0;    if (pact->persons < 4)    {        pact->rentgyms[0] = 0;        pact->Income[0] = 0;    }    else    {        pact->Income[0] = pact->persons * 30;        np = pact->persons / 6;        t = pact->persons % 6;        if (np == 0)        {            pact->rentgyms[0] = 1;        }        else if (np == 1)        {            pact->rentgyms[0] = 2;        }        else if (np == 2 || np == 3)        {            if (t >= 4)            {                pact->rentgyms[0] = np + 1;            }            else            {                pact->rentgyms[0] = np;            }        }        else if (np > 3)        {            pact->rentgyms[0] = np;        }    }    //计算一个日期是星期几    int y, m, d, c, w;    y = pact->mdata.year[0];    m = pact->mdata.month[0];    d = pact->mdata.day[0];    if (m == 1 || m == 2)    //判断月份是否为1或2    {         y--;        m += 12;    }    c = y / 100;    y = y - c * 100;    w = (c / 4) - 2 * c + (y + y / 4) + (13 * (m + 1) / 5) + d - 1;    while (w < 0) w += 7;    w %= 7;    int h;                        // 租用的时间       int tprice;                   //临时存储租用体育馆的价格     int tag = 0;                  //作为下面计算的标记    if (w == 0 || w == 6)      // 判断是星期几 星期天和星期六        {        if (tag == 0 && pact->mtime.starthours[0] >= 18 && pact->mtime.endhours[0] <= 22)      //18~22 60         {              tag = 1;              h = pact->mtime.endhours[0] - pact->mtime.starthours[0];              tprice = h * 60;              pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 12 && pact->mtime.endhours[0] > 18)//结束时间超过18点         {             tag = 1;             h = pact->mtime.endhours[0] - 18;             tprice = h * 60 + (pact->mtime.starthours[0] - 12) * 50;             pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 12 && pact->mtime.endhours[0] <= 18)  //12~18 50         {             tag = 1;             h = pact->mtime.endhours[0] - pact->mtime.starthours[0];             tprice = h * 50;             pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 9 && pact->mtime.endhours[0] > 12) // 结束时间超过12点         {             tag = 1;             h = pact->mtime.endhours[0] - 12;             tprice = h * 50 + (12 - pact->mtime.starthours[0]) * 40;             pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 9 && pact->mtime.endhours[0] <= 12)     //9~12   *40         {             tag = 1;             h = pact->mtime.endhours[0] - pact->mtime.starthours[0];             tprice= h  * 40;             pact->Payment[0] = tprice * pact->rentgyms[0];         }          }    else       //周内星期一到星期五 有各自的判断区间    {         if (tag == 0 && pact->mtime.starthours[0] >= 20 && pact->mtime.endhours[0] <= 22)  //20~22 60         {            tag = 1;            h = pact->mtime.endhours[0] - pact->mtime.starthours[0];            tprice = h * 60;            pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 18 && pact->mtime.endhours[0] <= 20)  //18~20 80         {             tag = 1;             h = pact->mtime.endhours[0] - pact->mtime.starthours[0];             tprice = h * 80;             pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 18 && pact->mtime.endhours[0] <= 22)        // 结束时间超过20点    *60         {             tag = 1;             h = pact->mtime.endhours[0] - 20;             tprice = h * 60 + (20 - pact->mtime.starthours[0]) * 50;             pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 12 && pact->mtime.endhours[0] <= 18)  //12~18 50         {             tag = 1;             h = pact->mtime.endhours[0] - pact->mtime.starthours[0];             tprice = h * 50;             pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 12 && pact->mtime.endhours[0] <= 20)  // 结束时间超过18点    *80         {             tag = 1;             h = pact->mtime.endhours[0] - 18;             tprice = h * 80 + (12 - pact->mtime.starthours[0]) * 50;             pact->Payment[0] = tprice * pact->rentgyms[0];         }         if (tag == 0 && pact->mtime.starthours[0] >= 9 && pact->mtime.endhours[0] <= 12)     //9~12   *30         {            tag = 1;             h = pact->mtime.endhours[0] - pact->mtime.starthours[0];             tprice = h * 30;             pact->Payment[0] = tprice * pact->rentgyms[0];         }         else if (tag == 0 && pact->mtime.starthours[0] >= 9 && pact->mtime.endhours[0] <= 18)               // 结束时间超过12点    *50         {             tag = 1;             h = pact->mtime.endhours[0] - 12;             tprice = h * 50 + (12 - pact->mtime.starthours[0]) * 30;             pact->Payment[0] = tprice * pact->rentgyms[0];         }    }    pact->retainedprof[0] = pact->Income[0] - pact->Payment[0];}void Readfile(POAct * mypoact)       // 读文件操作,数据文件存储在当前目录的a.txt下{    FILE * fp = fopen("a.txt", "r+");    if (NULL == fp)    {        exit(1);    }    char strmp[27];    int i = 0;    char *tmp = strmp;    int ret;    while (1)    {        ret = fread(tmp++, 1, 1, fp);        if (*(tmp - 1) == '\n' || ret == 0)        {            *--tmp = 0;            printf("%s\n", strmp);            ToStoreData(mypoact++,strmp);  //调用将字符串转换成成PActOne类型,并存储在结构体数组里面            tmp = strmp;            if (ret == 0) break;            continue;        }    }}void CountCalOne(POAct * pact){    for (int i = 0; i < MAX; ++i)    {        CalclutData(pact++);    }    printf("\n");}void PrintData(POAct * phead)    //打印数据{    if (phead == NULL)        return;    int i = 0;    int totalinc = 0;    int totalpaym = 0;    int profit = 0;    POAct * p = phead;    for(i; i < MAX; ++i)    {        totalinc += (p++)->Income[0];        p--;        totalpaym += (p++)->Payment[0];    }    profit = totalinc - totalpaym;    for (i = 0; i < MAX; ++i)    {        printf("%d-%d-%d %d:%d0~%d:%d0 %d -%d %d\n",phead->mdata.year[0],            phead->mdata.month[0],phead->mdata.day[0],            phead->mtime.starthours[0],phead->mtime.startmint[0],            phead->mtime.endhours[0],phead->mtime.endmint[0],            phead->Income[0],phead->Payment[0],            phead->persons);        phead++;    }    printf("Total Income : %d\n",totalinc);    printf("Total Payment: %d\n",totalpaym);    printf("Profit %d:\n",profit);}void main(){    POAct *mact = NULL;    POAct MData[MAX];    Readfile(MData);    CountCalOne(MData);    PrintData(MData);}

运行结果:
result

0 0
原创粉丝点击