思特沃克作业

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

include

using namespace std;

define MAX 10

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];

// 将字符串类型的数据 转化成结构体类型中
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);

}

代码片` “`
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

using namespace std;

define MAX 10

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];

// 将字符串类型的数据 转化成结构体类型中
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;
}

}
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:
在visual Studio 下的运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值