Skip to content →

Category: Tech Blog

Here you can find my random notes on software design and development, software engineering, coding, and all other tech-related stuff.

CrazyBus 项目需求分析最终版

一.人事管理

1. 能够记录每个在职员工的ID号,职务,姓名,照片,出生日期,加入公司的时间,工龄,职位变更,联系电话,家庭住址,政治面貌;

2. 记录出勤,奖惩,客户投诉;

3. 能提供已离职和退休员工其在职期间各种资料和档案。

二.车队管理

1.
记录车队队长,司机及其他相关工作人员;

2. 记录车队车辆数目,车牌号,车辆线路;

3. 车队长能管理该车队员工出勤,安排司机出车时间,临时调整车辆路线;

三.车辆管理

1. 管理公交公司的所有车辆,记录每辆车的车牌号,车型号,当前线路,维修记录,购车日期,各证件审核信息等;

2.
能查询车辆状况(服役年龄,维修记录等);能提醒相应工作人员定期对汽车作维护,证件审核等工作;

3. 已报废或退役车辆的相关记录和去向,可在车辆退役和报废时吊销相关的车牌,证件

四.线路和站点管理

1. 客户,管理员能通过线路号查询此线路的起点、终点,首末班车时间,每两趟公交车的发车间隔时间,票价;

2. 客户,管理员可以通过站点名查询经过此站点的线路号,此站点附近有名的地点;

3.
管理员可以通过线路号查询线路的效益(如按时间查询卖出的票数等);

4. 管理员可以查询运行在特定线路上的汽车车牌号及汽车数量;

5. 管理员可以调整线路经过的站点(增删站点),可以调整首末班车时间(按季节调整),发车间隔,票价等;

6. 管理员可以调整特定线路上的汽车(比如将一辆车换跑另一条线路等);

7. 管理员可以查询用户对特定线路或站点的建议及意见;

8.
管理员可以按时间查询特定线路的收入情况;

五.业绩考核

1. 管理员可以按时间查询员工的工作记录(比如出勤情况,司机的出车记录等);

2. 管理员能按时间查询司机的出车收入情况;

六.安全管理

1. 管理员可以按时间,按线路,按车队,按车牌号,按司机查询安全记录;

2. 管理员可以按事故原因中的关键字查询安全记录;

七.客户反馈管理

1. 客户可以给线路,车队,车辆,司机提意见和建议;

2.
管理员可以通过线路号,车队号,车牌号,司机ID,时间,关键字查询用户反馈记录;

八.客户查询管理

1. 输入起点和终点或者含有多个中途经过的站点,可以给出相应的换乘路线以及所经过的站点、站点数、各线路号、换乘次数、总里程数等信息。

2. 可以用街道名称或者标志建筑物来表示站点。

3. 线路查询,即查询该车次经由的所有站点。

4.
站点查询,即经过该站点的所有线路。

九.票务管理

1. 记录每趟车的收入。

2. 查询办卡的各项事宜。

3. 办里,挂失,退款各种类型的卡。

4. 查询办卡客户的消费记录,余额,办卡日期等,更改密码。

 

Leave a Comment

开发日记之三:小结一下

经过两个多月的酝酿和半个多月的逃课写代码的过程,终于于今天晚上8:00基本完成了我们项目的C/S部分的基本功能,下一步将进入模块测试和系统优化阶段,以及实现B/S部分的功能。

逃课两个多星期,写代码写的腰酸背痛,就技术方面来讲,解决了一下问题:

1.了解了NetBeans使用的GroupLayout,感谢豆芽的指点,看NetBeans生成的代码,然后拷贝,稍加修改,就可以向GroupLayout的面板中添加自己的模块,方法虽然流氓了一点,但也不失为一种好方法;

2.知道了数据库序列的使用,就是NEXTVAL,
CURRVAL;

3.知道了数据库触发器的使用,触发器是用来监听数据库表中数据的变化的,要定时完成某个任务,还得用job;

4.知道了数据库函数和过程,自己也还写了几个,并能配合job定时完成特定任务;

5.数据库游标,写存储过程和函数的时候学会的;

6.数据库约束和视图的使用;

7.数据库中的chr(10), chr(13), ||;

8.数据库的to_char(), to_date(),
length()等函数;

9.jdbc连接数据库;

10.java中的Date,Calenda,SimpleDateFormat等类以及自己定义类和接口;

11.JavaBean的基本使用;

12.JTable, JComboBox,JList以及DefaultTableModel, DefaultComboBoxModel, DefaultListModel;

13.Swing线程:invokeLater(), invokeAndWait();

14.BoxLayout,GroupLayout,BorderLayout,CardLayout
;

15.java事件监听;

写了这些,怎么觉得自己很傻?这些不都是以前都应该会的吗?

唉,傻就傻吧,以后加油。

 

Leave a Comment

开发日记之二:体会颇多

“嘴”上谈来终觉浅,绝知此事要躬行。

我们在讨论的时候觉得好像没有太大的问题,每次讨论也是嘻嘻哈哈,每个人都一副成竹在胸的样子;而具体画E-R图的时候,却感觉不是那么愉快了:一方面是因为我们前期的讨论不到位,基本上没有达到讨论应有的效果,在基本所有问题上都没有达成共识,所以画图的时候每个人还是固执己见,都认为自己的观点更好,导致大家吵架吵了一遍又一遍;令一方面是需求分析做得不够,在项目初期对项目的分析不全面、不透彻,也没有到公司去做需求,需求上的东西有一些是我们自己捏造出来的,有一些不完全符合实际,导致画图的时候模棱两可。

还有一个很大的问题:对数据库的理解不够透彻。虽然大家上学期都学了数据库这门课程,但我们不得不承认自己认识的浅陋,抛开我们对知识点的遗忘不说,我们对E-R模型以及范式的理解深度不够是肯定的。几乎每个人都画了E-R图,但每个人的质量都不高,而且画出来的图也不全面,不是关系没有理清楚,就是实关系的基数没标好,总之没有达到应有的水平。

更要命的是,大家都觉得自己的东西没有问题,自己做的就是对的,不容易接受他人的想法和观点。架是吵了很多,有时候争得脸红脖子粗的,但似乎也于事无补,却导致进程陷入僵局。

最后迫于交文档的期限,大家才又重新开始画图。但即使在这个时候,大家的努力配合仍然不够,四个人的精力始终不能放到一件事情上去。我作为组长,肯定有我自己的问题,没能使大家的力量往一处使。希望以后在这方面可以加强。

E-R图画了好几遍,又经过缝缝补补,终于开始有了一点轮廓,开始还想用范式来验证一下,结果发现根本无法入手──这便又是需求没做好的缘故了。最后抱着以后再好好想想约束的想法,把E-R图确定了下来。又根据E-R图,初步确定了数据库的表结构。尽管有些模块的具体实现还没有敲定,但数据库的基本轮廓算是确定下来了。

这个项目的前期工作基本上就已经确定下来了,即使前期做得不够,也只能靠后期好好实现了。需求分析要尽可能的保持原状,对于数据库,其基本的表结构也已经确定。剩下的工作就是具体实现了,希望大家在后期的工作中团结一致,心往一起想,劲往一处使,以最高的热情与斗志,迎接挑战,做好每一个细节,充分完成、完善我们的项目!

现在才发现需求分析的重要性,也许我们的每一步,都会牵扯到项目后面的实现,所以,我们应该做好每一件我们应该做得事情。前面的错误过失也许无法再补救,但现在我们做的,以及以后我们需要做的,却不能再马马虎虎、嘻嘻哈哈了!

 

Leave a Comment

开发日记之一:前期感受

组好队,取完队名,经过讨论终于确定了项目。又通过讨论,基本上确定了需求的大致框架,但是这一步却走得比较困难。

最初看起来非常简单的事情,仔细分析起来却并不简单。虽然说做需求的时候不要想如何去实现,但实际做起来却总想往实现上靠。简单的模型越想越复杂,但还好最终把框架定了下来。

细想一下,要实现这个系统并不简单,单是用户查询这一模块,要想做得好就要费劲脑汁,如何将查询做到快、省、准,如何实现图像的整合,都是我们面临的较大的挑战;还有数据的获取,暂时也没有想到好的解决方案;还有,怎样做才能更贴近实际,而又避免把系统做得臃肿……

现在我们还有很多不足的地方,比如对项目不够重视,缺乏激情,动手能力亟待提高,理论分析做得不太到位,更糟糕的是,对有些模块的认识还是模模糊糊;这些不足,克服了我们就会有很大的进步,然而如果克服不了,这个项目估计就完成不了。现在以我们的能力,要将这一系统做好恐怕还要每个人不懈努力。在今后的两个月里,要重新拾起JAVA,把数据库理论再弄通弄懂,熟悉JDBC,数据库编程,加强数据结构与算法方面的修养,学习XML……

任务虽然艰巨,但是我们不是懦夫,我们不能退却。我们要合理的安排自己的学习活动,相信自己,相信队友,相信我们Crazy_Bus!在未来的一段时间里,我们是室友,是队友,也是战友!想信通过大家的努力拼搏和奋斗,我们一定可以优雅的谢幕!

 

Leave a Comment

C++ STL Notes: String Replacement

Macro

You are asked to do some replacements on a string. Can you work it out?

Input and Output

 

Each test case will begin with a string in a single line, and followed by an integer N which means the number of replacements. The next N lines will give you two strings s1, s2, you should replace all the s1 into s2. For more details, see the
sample below.

Sample Input

 

abc
3
a b
bb a
c d
aaabaaaa
1
aa a

Sample Output

 

ad
aabaa

Note:
For the first sample:
After the first replacement, the string will be bbc.
After the second replacement, the string will be ac.
At last, the string will be ad.

My Code:

#include 
#include 
#include 

using namespace std;

void myreplace(string & strBig, const string & strsrc, const string &strdst)
{
string::size_type pos=0;
string::size_type srclen=strsrc.size();
string::size_type dstlen=strdst.size();
while( (pos=strBig.find(strsrc, pos)) != string::npos)
{
strBig.replace(pos, srclen, strdst);
pos += dstlen;
}
}

int main(int argc, char** argv)
{
string s;
while(cin>>s)
{
int n;
string s1,s2;
cin>>n;
while(n–)
{
cin>>s1>>s2;
myreplace(s,s1,s2);
}
cout<

Leave a Comment

C++ STL Notes: List->unique

Syntax:

void unique();
void unique( BinPred pr );

The function unique() removes all duplicate elements from the list. Equality is tested using the == operator, unless pr is specified as a replacement. The ordering of the elements in a list should not change after a call to unique().

unique() runs in linear time.

E.g: JOJ 2274

Write a program that reads a single line of input, not greater than 10000 characters long, consisting of a number of lower case words separated by spaces, the number of letters of a word no more than 100, and print the words, one per line, in alphabetical order. Print each word only once regardless of how many times it appears in the input.

Sample Input

how green is my
valley

Sample Output

green
how
is
my
valley

My Solution:

 

#include <iostream>
#include <string>
#include <algorithm>
#include <list>

using namespace std;

void Print(string& s)
{
cout<<s<<endl;
}

int main(int argc, char** argv)
{
list<string> slist;
string s;
while(cin>>s)slist.push_back(s);
slist.sort();
slist.unique();//The order of sort() and unique() can NOT be changed!
for_each(slist.begin(),slist.end(),Print);
return 0;
}


Leave a Comment