地铁收费系统

  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 }
时间: 2024-12-06 12:05:54

地铁收费系统的相关文章

设计模式之策略模式在地铁票价系统中的应用

引言 设计模式是面向对象编程的一个非常精彩的部分.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性,它能帮助我们将应用组织成容易了解,容易维护,具有弹性的架构.本文通过一个简单的案例来讲述策略模式在地铁票价系统中的应用. 案例描述 乘客从一个车站乘坐地铁到另一个车站,他/她需要购买一张票.铁路部门对于票价有一些特别的票价规定: 按照市物价主管部门批复的轨道交通网络票价体系,即:轨道交通实行按里程计价的多级票价,0~6公里3元,6公里之后每10公里增加1元;票价计算采用最短路径

【机房收费系统】多么痛的领悟

这次机房收费系统,是所有的项目中,自己完成的最不满意的了. 时间之长,效率之慢.一开始,就感觉无从下手,但总会相信自己能慢慢的进入状态.终于有机会自己练练手了,也自认为之前自己设计模式学的还不错,也终于有机会能自己想想设计模式了.该是一件多么帅的事.拖了这么久,到现在只用上了外观 抽象工厂 模板 个人版就这么结束了.真心不想再拖一天了. 话说,并不觉得自己敲代码会比别人差多少.一开始敲完三层,又开始画图.还是一头的雾水.设计数据库,终于有了一点自己的想法也重温了之前学习的数据库原理,还是比较欣慰

机房收费系统个人重构版:软工文档中那些图

[前言]    图.提到这个字的时候脑海中就会出现许很多多的图像,它的重要性相信大家都明确.相比于文字来说它更生动形象正好符合人类大脑的记忆规律.非常多人也知道动画片制作原理也是用一张张图片仅仅只是转换的速度足够快而已,另外大家所熟知的思维导图等等.下面咱们这里介绍的是软件project中涉及的图! [图] 在上一篇博文<机房收费系统个人重构版:透过文档谈文档驱动开发>介绍了软工各个阶段的文档中都该有什么图.可是没有具体具体介绍各种图,在结束整个机房重构后,深感文档是整个开发的精髓.而图又是文

【机房收费系统】验收

自己的机房收费系统开始的算是很晚的,因为开始的晚,就导致了一件事情,拖,因为开始的时候,搬家,搬学习的地方,然后itoo的项目也开始,事情都堆在一块儿,然后就做不动了,自己身为组长,突然就感觉到了压力.下面总结一下自己通过这次机房合作的不足. 不能合理的分配任务 因为是三个人一起合作,所以就很自然地每人负责一到两层,之前也请教过师哥,说敲代码三天就可以差不多完成,结果到敲的时候才发现,有的组员敲代码还是很吃力的,但是我一开始的时候没有认识到这种情况,就只是催催催,导致组员更加的不想去敲代码,然后

机房收费系统(合作版)总结——技术篇(一)

背景: 机房收费系统合作了大半年,老孟和森森走了,给我留下了一堆代码,一个半拉数据库,还有一堆我自己都看不透的文档.莫名其妙的我就从小组员直接变成了项目组长,刚开始我以为很简单,因为我觉得前期我们也很激情,在系统设计想法是一堆一堆的,比如业务逻辑架空问题,数据访问如何优化问题上我们都提出自己的很多想法.但是当我重新建立信心捡起来的时候,我发现原来我在软件工程方面忽略了好多问题,我经过一段时间的查询资料分析发现:项目尤其是在需求和分析这两个方面没有意识,导致系统从一开始就进入了设计阶段. 所以,我

机房收费系统合作——再看数据库设计

机房合作我负责了最简单的D层,接口层,工厂层.反正D层是我来写,于是数据库索性也就顺便设计了.已经是第三次敲机房收费系统了,每次都是相隔半年左右吧.需求搞得透透的了,数据库也就好设计了.基本跟第二次没什么大的区别,就是把Student表和Card表分开了. 重构的时候,我的数据库几乎什么都用到了:事务,存储过程,触发器,视图,联合查询等等.所以,这次设计数据库还是SO Easy的..并且,为了让婵婵和牛迁迁师哥写的方便,我把组合查询都写成了存储过程!!!!费了一番功夫,但是D层简单了不少.还记得

总结个人版机房收费系统

个人版机房收费系统是在学习完vb.net语言和三层架构思想后的第一个系统,我们要从C/S向B/S进发过程中一个铺路石,在没开始C/S之前,虽然没有什么直接的联系.但学习就是有很多共同的地方,在这个过程中有很多知识是在巩固,有很多东西新接触或者实践.我最大的感受就是,走过了这个过程就一定会带走些什么. 个人版机房收费和第一版系统有很多相同的地方,这些相同的地方就在进行重构的过程中,帮助我们i+1. 比如: 1.开发语言:虽然一个用的是vb一个是vb.net.但不得不说有了第一版的经验,重构版用起来

职责链模式——机房收费系统下机结账

在机房收费系统中,学生下机结账最让人头疼了.因为学生的消费时间(下机时间-上机时间-上机准备时间)有三种情况: 1.消费时间<=0,也就是下机时间与上机时间的间隔在上机准备时间范围内,这种情况是不收费的. 2.消费时间<=最少上机时间,这种情况下消费时间按照最少上机时间收费. 3.消费时间>最少上机时间,这种情况还要考虑递增单位时间.比如递增单位时间是10分钟,消费时间是42分 钟,42/10=4.....2,这种情况要按照50分钟收费. 以上消费时间就分了三种情况,更复杂的是第二种和第

【VB.NET 机房收费系统】___爱上视图(View)

简介 计算机数据库中的视图是一个虚拟表,其中内容有查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中与存储的数据值集形式存在,行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成. ----官方正解 神马虚拟表的,都是浮云--好用才是王道.先来说说如何创建视图. 新建视图 [VB.NET 机房收费系统]--学生查看余额 为例.本人不得不强调的一点是,在你所建立的学生表和卡表中表务必设置主键,不设置的后果就是 相信聪明的你们一定不会犯这么低级的错误