文章标题
来源:互联网 发布:mac版spss23 编辑:程序博客网 时间:2024/05/01 20:50
*
编译环境 windows 下的visual Studio 2013
在visual Studio 下的运行结果
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];
*
#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);}
运行结果:
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 瀑布流实现
- awt和Swing
- const限定符
- 第八天学习笔记
- 分治-最接近点问题
- 文章标题
- String literal is not properly closed by a double-quote
- PostgreSQL数据库导出导入
- 背包问题
- Java入门篇--HelloWorld
- C++笔试题目总结
- 关于C++程序中出现error C3872: "0xa0"错误解决办法
- 类和方法学习笔记(python)
- [Hackrank]Get Node Value