下午两点,阳光斜斜地穿过华清大学西门外那条狭窄的街道。 安奕和林浩站在人行道上,面前是一栋三层小楼。楼体被刷成了深蓝色,二楼外墙上挂着巨大的霓虹招牌——“蓝极速网吧”。招牌的蓝色灯管在白天也亮着,发出嗡嗡的电流声,像某种不安的蜂鸣。 “就是这里。”安奕说。 他的声音很平静,但林浩能听出里面藏着某种确定。 林浩推了推眼镜,仰头看着招牌。招牌右下角有一行小字:“全新联想电脑,128MB内存,17寸纯平显示器”。这在2000年的BJ网吧里,算是顶配了。 “你怎么知道这家?”林浩问。 “听说的。”安奕说,“西区最大,机器最好。” 他没说谎,只是没说全。 两人推开玻璃门。 一股热浪扑面而来,混合着几十台电脑散发的热量、烟味、汗味,还有泡面和廉价香水的混杂气息。空调在角落里嗡嗡作响,但显然力不从心。室内温度至少比外面高五度。 安奕眯了眯眼。 眼前的场景和他记忆中的一模一样——两百多平的大厅,密密麻麻摆着七八十台电脑。几乎每台机器前都坐着人,大多是年轻人,穿着T恤短裤,头发油腻,眼睛死死盯着屏幕。CS的枪声、传奇的砍杀音效、QQ消息的滴滴声,还有各种叫骂和欢呼,交织成一片嘈杂的声浪。 大厅深处有个收银台,用玻璃隔开。台前围了五六个人,正在排队。 “先上机。”安奕低声说。 两人走到收银台前排队。 安奕的目光扫过收银台内部——一台老式台式机,屏幕上开着个简陋的计费软件。收银员是个二十出头的女孩,头发染成黄色,正手忙脚乱地操作着。 “身份证。”女孩头也不抬。 安奕递上学生证——华清大学的学生证在网吧可以当身份证用。 女孩接过,在登记本上写下名字和上机时间。本子是那种最普通的横线笔记本,已经用了大半本,字迹潦草。 “押金二十,一小时三块。”女孩说。 安奕掏出钱。 女孩收了钱,从抽屉里拿出一张手写的小票,上面用圆珠笔写着“机号47,时间14:07”。然后她指了指大厅:“47号在那边,自己找。” 整个过程,她没看安奕一眼。 安奕接过小票,转身时瞥了一眼收银台旁边的墙壁。 墙上贴着一张纸,用马克笔写着:“会员充值100送20,200送50”。字迹歪歪扭扭,下面还有一行小字:“会员卡丢失不补,余额不退”。 典型的霸王条款。 林浩也办好了手续,两人找到47号和48号机。 机器确实是新的联想电脑,显示器是17寸纯平,在这个年代算是高端配置。键盘和鼠标上贴着透明保护膜,但边缘已经卷起,沾着油污。 安奕坐下,开机。 Windows 98的启动画面出现,蓝底白字的进度条缓慢移动。三十秒后,桌面终于显示出来——背景是默认的蓝天白云,桌面上密密麻麻的图标:CS、传奇、红警、星际争霸、QQ、联众游戏大厅…… 他点开计费软件。 那是个极其简陋的程序,界面粗糙,功能单一。只有上机、下机、充值、查询余额四个按钮。安奕点开查询余额,输入自己的机号。 屏幕上显示:“余额:20.00元”。 没有消费记录,没有上机时长,只有一个孤零零的数字。 安奕关掉窗口,开始观察周围。 他的位置在大厅中部,视野很好。左边是一排靠墙的机器,右边是过道。正前方五米外,就是收银台。 他看了十分钟。 这十分钟里,收银台前发生了三件事: 第一件,一个染着红头发的年轻人下机,收银员在计费软件上操作了半天,最后说:“你上了四个半小时,十三块五。” 红发青年皱眉:“我两点来的,现在才……等等,我看看手机。”他掏出诺基亚3310,“现在两点四十,我才上了四十分钟!” “不可能。”收银员指着屏幕,“系统显示你就是十点上的机。” “我十点还在家睡觉呢!” 两人吵了起来。最后来了个穿黑T恤的保安,把红发青年拉到一边说了几句什么,红发青年骂骂咧咧地又掏了十块钱,摔在收银台上走了。 第二件,一个戴眼镜的男生想办会员卡,收银员从抽屉里拿出一张硬纸卡,用圆珠笔在上面写下“会员号:037”,然后问:“充多少?” “一百。” 收银员在登记本上找到037号那一行,写下“+100”。然后她打开一个铁盒子,从里面拿出一沓十元钞票,数出十张递给男生。 整个过程,没有任何电子记录。会员余额只存在于那个笔记本上,和收银员的大脑里。 第三件,最里面那排机器有人喊:“网管!35号机死机了!” 一个瘦小的网管跑过去,按了几下键盘,摇摇头:“系统崩了,得重启。” “我游戏还没存盘呢!” “没办法,重启吧。” 网管按下重启键。机器黑屏,然后重新进入Windows启动画面。那个玩家骂了一句,掏出烟点上,一脸烦躁。 安奕把这些都看在眼里。 他转头看向林浩。 林浩也在观察,眼镜后的眼睛闪着光。他注意到安奕的目光,凑过来低声说:“计费系统时间不对,会员管理纯手工,机器故障处理粗暴……这管理水平,简直了。” “还有。”安奕说,“你看收银台抽屉。” 林浩看过去。 收银员正在找零,拉开抽屉时,林浩看到里面堆满了现金——十元、二十元、五十元、一百元的钞票混在一起,像一堆废纸。没有任何分类,没有保险箱,甚至没有锁。 “一天流水至少上万。”安奕说,“就这么放着。” 林浩倒吸一口凉气。 这时,大厅深处传来一声怒吼。 “又对不上!妈的!” 声音粗哑,带着浓重的东北口音。 安奕循声望去。 收银台后面有道门,门开着一条缝。声音就是从那里传出来的。接着,门被猛地拉开,一个胖子走了出来。 胖子四十多岁,身高一米七五左右,体重至少两百斤。穿着花衬衫,脖子上挂着条金链子,光头,满脸横肉。他手里拿着一本账本,脸色铁青。 “小丽!”他冲着收银员吼,“昨天晚班的账怎么回事?少了三百!” 收银员小丽吓得一哆嗦:“老板,我……我不知道啊,我交班的时候明明对上了……” “对你妈!”胖子把账本摔在收银台上,“你自己看!现金少了三百,账本上没记!是不是你偷拿了?” “我没有!”小丽眼圈红了。 “没有?那钱能自己长腿跑了?” 大厅里的人都看了过来,但没人敢说话。只有游戏音效还在响着,显得格外刺耳。 胖子骂了几句,又抓起账本,转身回了里屋。门被重重关上,发出砰的一声。 安奕和林浩对视一眼。 “时机到了。”安奕说。 他站起身,走向收银台。 小丽还在抹眼泪,看到安奕过来,勉强挤出笑容:“同学,要续费吗?” “不是。”安奕说,“我想见你们老板。” 小丽愣了一下:“老板他……现在心情不好。” “我知道。”安奕说,“我就是来帮他解决心情不好的问题的。” 小丽犹豫了几秒,还是敲了敲里屋的门:“老板,有客人找。” “不见!”里面传来吼声。 “他说……他能帮您对账。” 里面沉默了几秒。 门开了。 胖子老板站在门口,上下打量着安奕。他的眼睛很小,但很锐利,像刀子一样刮过安奕的脸。 “你谁啊?”他问,语气不善。 “华清大学计算机系的学生。”安奕说,声音平静,“我们在做一个课题,关于网吧管理系统的调研。听说您这儿是西区最大的网吧,想跟您聊聊。” “学生?”胖子皱眉,“我没空陪学生玩。” “不是玩。”安奕说,“我们可以免费帮您做一次管理诊断。找出您账对不上的原因,还有您这儿其他管理漏洞。” 胖子眯起眼睛。 “免费?” “完全免费。”安奕说,“就当是我们课题的实践部分。” 胖子盯着安奕看了足足十秒钟。 然后他侧身:“进来吧。” 里屋是个办公室,不大,十几平米。一张老板桌,两个文件柜,一张沙发。桌上堆满了各种单据、账本、烟灰缸里塞满了烟头。空气里弥漫着烟味和汗味。 胖子在老板椅上坐下,指了指对面的椅子:“坐。” 安奕坐下,林浩站在他身后。 “你说你能找出账对不上的原因?”胖子开门见山,“怎么找?” “先让我看看您的管理流程。”安奕说,“从客人进门到离开,整个流程。” 胖子哼了一声,但还是简单说了一遍。 和安奕观察的差不多——手工登记上机时间,简陋的计费软件,手工记录会员余额,现金管理混乱,机器故障处理全靠网管经验。 “问题很明显。”安奕听完后说,“第一,计费软件时间不同步,导致计费错误。第二,会员管理纯手工,容易出错和舞弊。第三,现金没有电子记录,对账困难。第四,机器状态无法远程监控,故障响应慢。” 胖子没说话,但眼神变了。 这些他都知道,但从一个学生嘴里这么清晰地说出来,还是让他有些意外。 “你怎么知道这些的?”他问。 “观察。”安奕说,“我刚才在外面坐了二十分钟,看到了至少三个管理漏洞。” 他详细说了红发青年的计费纠纷、会员卡的手工操作、以及现金管理的混乱。 胖子听完,脸色更难看了。 “那你说,怎么解决?” “给我们一台电脑。”安奕说,“一个下午时间。我们写个小程序,模拟演示一下解决方案。” 胖子犹豫了。 “老板。”安奕又说,“反正您今天下午也対不上账,不如让我们试试。最坏的结果,就是浪费您一台机器一下午的电费。但如果成了,您以后每天能少亏几百块。” 这句话戳中了胖子的痛点。 他咬了咬牙:“行!小丽,给他们开台机器,就……就收银台旁边那台备用机!” “谢谢老板。”安奕站起身,“对了,怎么称呼您?” “姓王,王大海。”胖子说,“你呢?” “安奕。这是我同学林浩。” “安奕……”王大海念叨了一句,摆摆手,“去吧去吧,我倒要看看你们能搞出什么名堂。” 收银台旁边的备用机是一台配置稍低的电脑,但足够用。 安奕和林浩坐下,开机。 “要写什么?”林浩问,声音里带着兴奋。 “一个简化版的‘磐石’演示程序。”安奕说,“只实现核心功能——精确计费、电子会员管理、机器状态监控、还有简单的报表。” “一下午够吗?” “够。”安奕说,“用现成的模块改。” 他从口袋里掏出软盘——里面存着“磐石”系统的核心代码。插入软驱,拷贝文件。 林浩看着屏幕上滚动的代码,眼睛越来越亮。 “这个架构……太漂亮了。”他低声说,“分层清晰,模块解耦,扩展性也好。” “别光看。”安奕说,“动手。你负责界面和报表模块,我负责计费和监控。” “好!” 两人开始敲代码。 键盘的咔嗒声在收银台旁边响起,和网吧里的游戏音效形成奇特的对比。小丽好奇地探头看,但看不懂那些黑底白字的命令行界面,又缩了回去。 时间一分一秒过去。 安奕的手指在键盘上飞舞。他不需要思考——这些代码他写过无数遍,每一个函数、每一个变量名都刻在记忆里。他只是在复现,但复现得极其精准。 林浩则沉浸在界面设计里。他有着美术功底,对UI的审美远超这个时代。虽然只是演示程序,但他还是尽量让界面看起来简洁、直观、专业。 下午四点,大厅里的人渐渐多了起来。 排队的人从收银台一直排到门口。小丽忙得满头大汗,手写登记本上的字迹越来越潦草。又有两个人因为计费问题吵了起来,王大海从里屋冲出来,吼了几句才平息。 他看了一眼安奕和林浩的屏幕。 屏幕上已经不再是黑底白字的命令行,而是一个有着蓝色标题栏、白色背景的窗口。窗口左侧是菜单栏,右侧是数据显示区。 “怎么样了?”王大海问,语气比之前缓和了一些。 “差不多了。”安奕说,“再给我们半小时。” “行。” 王大海又回了里屋,但这次门没关严。 四点半,安奕敲下最后一行代码。 “编译。” 林浩点击编译按钮。屏幕上进度条快速移动,几秒钟后,弹出一个提示框:“编译成功”。 “运行。” 安奕双击生成的exe文件。 一个全新的界面弹了出来。 蓝色渐变背景,白色面板,黑色字体。顶部是“蓝极速网吧管理系统演示版”几个大字,下面是四个主要功能模块的图标:上机管理、会员管理、机器监控、报表统计。 “王老板。”安奕朝里屋喊了一声。 王大海走出来,看到屏幕,愣了一下。 “这……这是你们一下午搞出来的?” “演示版。”安奕说,“只有核心功能,但足够展示解决方案。” 他点开“上机管理”模块。 界面分成左右两部分。左边是操作区,有“新客上机”、“会员上机”、“下机结账”等按钮。右边是实时数据区,显示当前在线的机器号、上机时间、消费金额。 安奕模拟了一个新客上机。 他点击“新客上机”,弹出对话框,输入临时编号“001”,选择机号“50”,点击确定。 屏幕上立刻显示:“50号机已上机,时间:16:32:15,计费开始”。 “时间从服务器同步。”安奕解释,“所有机器的时间都和服务器一致,不会出现计费错误。” 王大海眼睛一亮。 安奕又点开“会员管理”。 界面显示一个表格,列有会员号、姓名、手机号、余额、最近消费时间。安奕点击“新增会员”,输入测试数据。 “会员信息全部电子化。”他说,“开卡、充值、消费,都有完整记录。会员卡丢失可以挂失补办,余额可以转移。” 王大海凑近屏幕,仔细看着。 “这个查询功能……”他指着表格上方的搜索框。 “可以按会员号、姓名、手机号查询。”安奕演示了一下,“也可以按余额范围、最近消费时间筛选。” 王大海没说话,但呼吸明显变重了。 安奕点开第三个模块:“机器监控”。 这是一个模拟的机房平面图,上面有八十个小方格,每个代表一台机器。方格的颜色表示状态——绿色是在线正常,红色是故障,黄色是离线。 安奕点击其中一个红色方格。 弹出一个对话框:“35号机,故障类型:系统崩溃,故障时间:16:20:33,处理状态:未处理”。 “网管在后台看到这个,就可以直接去处理。”安奕说,“而且系统会记录故障类型和处理时间,方便分析哪些机器容易出问题。” 王大海的拳头握紧了。 最后,安奕点开“报表统计”。 界面弹出几个图表:今日收入曲线、会员消费占比、机器使用率、故障统计。 他点击“生成日报表”。 屏幕上立刻出现一张清晰的表格:今日上机人次、总收入、现金收入、会员充值、机器平均使用率、故障次数……每一项都有具体数字。 “所有数据自动统计。”安奕说,“每天下班前,点一下这个按钮,五分钟就能对完账。” 办公室里安静了。 只有外面大厅传来的游戏音效,还有空调的嗡嗡声。 王大海盯着屏幕,眼睛一眨不眨。 他的脸在屏幕光的映照下,显得有些苍白。额头上渗出了细密的汗珠,但他没擦。 足足一分钟,他没说话。 安奕也没说话,只是静静等着。 林浩站在旁边,手心全是汗。他能听到自己的心跳,咚咚咚,像打鼓一样。 终于,王大海抬起头。 他的眼神完全变了——之前的怀疑、烦躁、不屑,全部消失了。取而代之的是一种灼热,一种看到救命稻草的灼热。 “同学。”他的声音有些沙哑,“你这‘课题’……” 他顿了顿,咽了口唾沫。 “卖不卖?”