地铁收费系统

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 struct route_record {
  5     int card_num;
  6     char card_kind;
  7     int balance;
  8     
  9     char begin_station[2];
 10     char end_station[2];
 11     
 12     int begin_time_hour;
 13     int begin_time_minute;
 14 
 15     int end_time_hour;
 16     int end_time_minute;
 17 
 18 };
 19 //小写转大写
 20 void lowToUp(char *ch){
 21     if(*ch >= 'a' && *ch <= 'z')
 22         *ch = *ch - ('a' - 'A');
 23 }
 24 //将时间字符串转为int型时间
 25 void timeStringToInt(char *pTime, int *hour, int *minute){
 26     
 27     *hour = (*pTime - '0') * 10 + (*(pTime+1) - '0');
 28     *minute = (*(pTime + 1) - '0') * 10 + (*(pTime+2) - '0');
 29 
 30 }
 31 
 32 //判断是否是有效路径
 33 int isValidRoute(char *pRoute){
 34     char s_label = *pRoute;
 35     char num_label = *(pRoute+1);
 36 
 37     if( ( s_label == 'S' || s_label == 's') && ( num_label - '0' >= 1 && num_label - '0' <= 6) )
 38         return 1;
 39     else
 40         return 0;
 41 }
 42 //判断是否进站时间大于出站时间(有效时间)
 43 //0------无效
 44 //1------有效
 45 
 46 int isValidTime(int beginHour, int beginMinute, int endHour, int endMinute){
 47     if(endHour > beginHour || (endHour == beginHour && endMinute > beginMinute))
 48         return 1;
 49     else
 50         return 0;
 51 }
 52 //判断是否是同一站点
 53 int isSameStation(char *pRouteBeg, char *pRouteEnd){
 54     if( 0 == strcmp(pRouteBeg, pRouteEnd) ){
 55         return 1;
 56     }
 57     else
 58         return 0;
 59 }
 60 //判断是否是特殊时间段
 61 //返回值:
 62 //    0-------不是特殊时间段
 63 //    1-------特殊时间段一
 64 //    2-------特殊时间段二
 65 
 66 int isSpecialTime(int beginHour, int beginMinute) {
 67     if(beginHour >= 7 && beginHour < 9)
 68         return 1;
 69     if( ( beginHour == 16 && beginMinute >= 30 ) ||  ( beginHour == 18 && beginMinute < 30 ) || beginHour == 17)
 70         return 1;
 71     
 72     if(beginHour >10 && beginHour < 11 || (beginHour >= 15 && beginHour < 16))
 73         return 2;
 74 
 75     return 0;
 76 }
 77 
 78 void initialise(){}
 79 void queueRecords(){}
 80 void cancelCard(){}
 81 
 82 
 83 //打折系数
 84 double discount(int time_label, char card_label){
 85     if(time_label == 0 || time_label == 1 && card_label == 'C')//普通时段 特殊时段一 普通卡
 86         return 1.0;
 87     if(time_label == 2 && card_label == 'C') //特殊时段二 普通卡
 88         return 0.5;
 89 
 90     if(time_label == 0 && card_label == 'B') //普通时段   老年卡
 91         return 0.9;
 92     if(time_label == 1 && card_label == 'B') //特殊时段一 老年卡
 93         return 1.0;
 94     if(time_label == 2 && card_label == 'B') //特殊时段二 老年卡
 95         return 0.5;
 96 }
 97 
 98 //请求扣费
 99 void requestCharge(char *infor){
100     int card_num = 0;
101     char card_kind = 0;
102     int balance; char balance_char[4] = {0};
103     
104     char begin_station[3] = {0};
105     char end_station[3] = {0};
106     
107     int begin_time_hour = 0;
108     int begin_time_minute = 0;
109 
110     int end_time_hour = 0;
111     int end_time_minute = 0;
112 
113     int pBlackPos[6] = {0};
114     int i = 0;
115     int j = 0;
116     while('\0' != *(infor+i) ){
117         if(*(infor+i) == ' ')
118             pBlackPos[j++] = i;
119         i++;
120     }
121 
122     card_num = *infor - '0';
123     card_kind = *(infor+2);
124     lowToUp(&card_kind);
125 
126     strncpy(balance_char, infor+pBlackPos[1]+1, pBlackPos[2]-pBlackPos[1]-1);
127     balance = atoi(balance_char);
128 
129     timeStringToInt(infor+pBlackPos[2]+1, &begin_time_hour, &begin_time_minute);
130     timeStringToInt(infor+pBlackPos[4]+1, &end_time_hour, &end_time_minute);
131     
132     strncpy(begin_station, infor+pBlackPos[3]+1,2);
133     strncpy(end_station, infor+pBlackPos[5]+1,2);
134     lowToUp(begin_station);
135     lowToUp(end_station);
136 
137 
138     //两个站点之间的距离
139 
140     //计算车费
141 
142 }
143 //对输入的参数进行分类
144 //  r/R------程序初始化
145 //  c/C------请求扣费
146 //  h/H------查询票卡消费历史记录
147 //  d/D------注销票卡
148 
149 void getInputOrder(char *pOrderString){
150     
151     char order_label = *pOrderString;//
152     switch (order_label){
153         case 'r':
154         case 'R':
155             initialise();
156             break;
157         case 'c':
158         case 'C':
159             requestCharge(pOrderString+2);
160             break;
161         case 'h':
162         case 'H':
163             queueRecords();
164             break;
165         case 'd':
166         case 'D':
167             cancelCard();
168             break;
169         default:
170             break;
171     }
172 
173 }
174 
175 int main()
176 {
177     char routeBeg[3] = "S3";
178     char routeEnd[3] = "S3";
179     char info[] = "C 9 C 20 12:05 S1 11:20 S4";
180 
181     getInputOrder(info);
182     printf("%d\n", isSameStation(routeBeg, routeEnd));
183     //printf("%d\n", isValidRoute(route));
184     return 0;
185 }

 

posted @ 2015-03-29 22:32  soul390  阅读(972)  评论(0编辑  收藏  举报