爱黑武论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10132|回复: 60

一个未完成的小程序(天气预报)想找人合作完成

[复制链接]
发表于 2009-11-27 00:58 | 显示全部楼层 |阅读模式

立即注册,加入爱黑武论坛的大家庭!爱黑武,爱上搞机生活!

您需要 登录 才可以下载或查看,没有账号?注册

x

这个是效果图,自己建的日程

这个是效果图,自己建的日程

这个是真正用程序操作的,但是字段位置没有弄好,显示的是乱码(x86程序)

这个是真正用程序操作的,但是字段位置没有弄好,显示的是乱码(x86程序)

以前一直订着google的免费天气预报,每天下午3:30左右发明天的天气预报,前几天考完试,没什么事做,突发奇想,做一个小程序,做了一个星期举步维艰,大一时候学的c都快忘了,而且这四年自己没有写过超过100行的程序,所以一边自学,一边做,最终还是没有完成,过几天又要忙,而且大四了忙着找工作。。。
程序的作用:订了google的天气预报,内容“山东省 济南 明天天气:5度/2度,晴....”想把这几个提取然后找个地方显示出来,然后程序自动把短信删除。

程序的实现:刚开始研究时候在网上知道短信是存在一个叫main.db的数据库文件里面,日程也在里面我就想直接写一个操作数据库的程序把这段字移过去。然后在边栏里面可以显示出来。其实还可以再复杂一点,后面说

艰苦的制作:研究了几天知道moto短信用的数据库是berkeleydb,从网上下载,编译,自己是个菜鸟级别,用linux写程序还是买了v8之后才用过,而且外部库没有用过,研究数据库的结构,读取,存储,外部库的连接。。。。都是自己一点一点搜的。。痛苦
  现在程序已经完成了在电脑上移动字段的阶段,也就是说把手机里面的main。db复制到电脑上运行程序字段会移动过去,这些只是核心,自动搜索,删除什么的功能还没有,而且没有经过交叉编译,还不能在手机上运行。

程序的展望:这是最简单的实现方法,其实这个程序如果做出来后,可以给窗口程序传递参数,能实现更美观的google天气秀,而且是免费的。

ps:这几天由于自己的无知走了好多弯路,觉得自己闭门造车太慢了,想找个高手学习交流一下把这个程序弄到小8上去
   2楼我发原码,说说我们后面怎么做。
 楼主| 发表于 2009-11-27 00:59 | 显示全部楼层
源码。。。c语言的,其实是很简单,只是我比较菜
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "db.h"//berkeleydb定义的
#define datafil "main.db"
int main()
{
DB *dbp_1;
DB *dbp_2;
DBT key_1, data,key_2;
int ret,t_ret;

//数据库文件里面有若干数据库,下面是打开短信数据库dbg_4_ems_table_in_flash并提取有用信息,具体想知道的咱们详聊
db_create(&dbp_1, NULL, 0);
dbp_1->open(dbp_1,NULL,datafil,"dbg_4_ems_table_in_flash", DB_BTREE, DB_CREATE, 0664);

memset(&key_1, 0, sizeof(key_1));
memset(&data, 0, sizeof(data));
key_1.data = "\03\00\00";//berkeleydb是key,data结构的,这个是key的值,要想实现自动搜索天气短信这个地方要改,我是为了严重弄了个定值
key_1.size = sizeof("\03\00\00");

data.doff =183; //这个是读取有用信息的位置,我可能数的有点错误所以导致做出来的显示乱码,严谨起来这里应该也改成个循环
data.dlen =16;
data.flags=DB_DBT_PARTIAL;

if ((ret = dbp_1->get(dbp_1, NULL, &key_1, &data, 0)) == 0)
  printf(
  "db: %s: key retrieved: data was %s.\n",
  (char *)key_1.data, (char *)data.data
);
else
  dbp_1->err(dbp_1, ret, "db->get");
//这个后面可以添个函数返回天气情况以后给qt窗口程序用
//下面是向日程数据库里面存入天气信息
db_create(&dbp_2, NULL, 0);
dbp_2->open(dbp_2,NULL,datafil,"cal_table_event", DB_BTREE, DB_CREATE, 0664);
key_2.data = "\04\00\00"; //也是个定值要该的地方
key_2.size = sizeof("\04\00\00");

data.flags=DB_DBT_PARTIAL;
data.size = 16;
data.doff =141;
data.dlen =16;
if ((ret = dbp_2->put(dbp_2, NULL, &key_2, &data, 0)) == 0)
  printf("db: %s: key stored.\n", (char *)key_2.data);
  else
  dbp_2->err(dbp_2, ret, "db->put");

//关闭这两个数据库数据位置被该了。我们就打工告成了
if ((t_ret = dbp_1->close(dbp_1, 0)) != 0 && ret == 0)
  ret = t_ret;
//exit(ret);
if ((t_ret = dbp_2->close(dbp_2, 0)) != 0 && ret == 0)
  ret = t_ret;
exit(ret);

}
我还有要说的就是berkeleydb要用到他自己带的库函数,可以去berkeleydb官方网站下载然后自己用,交叉编译器编译。
我现在只编译了pc的
v8的还没有弄

我想修改好源文件+编译好库这个程序能在v8上运行,以后还可以修改,
比如
把“中国移动”改为天气预报什么的都行应该,有兴趣的同学咱们一起做出来吧
发表于 2009-11-27 01:26 | 显示全部楼层
楼主.
我们手机是用UTF8格式的所以或许需要
QString ctr(const char*ChineseString)
{
QTextCodec* gbkstr = QTextCodec::codecForName("UTF-8");
return gbkstr->toUnicode(ChineseString);
}

还有就是,通过解析短信确实很好...
刚才看了是完全免费的推荐给大家订制网站
引用Google原话
接收谷歌短信提醒无需支付任何费用;
如果用户转发谷歌短信提醒,谷歌不会收取任何费用。
转发操作只会产生普通的短信发送费用,取决于手机运营商的资费标准。
http://www.google.com/sms/alerts

我很菜,不会C++,只会shell脚本
发表于 2009-11-27 07:36 | 显示全部楼层
支持好东西了
发表于 2009-11-27 13:20 | 显示全部楼层
支持一下,我是个菜鸟什么都不会,只有支持了
发表于 2009-11-27 13:31 | 显示全部楼层
支持…… [s:57]
发表于 2009-11-27 14:27 | 显示全部楼层
又一高手啊 期待你的作品~
发表于 2009-11-27 16:02 | 显示全部楼层
只学过c++,对C语言不在行
发表于 2009-11-27 16:16 | 显示全部楼层
支持了~高手都谦虚
发表于 2009-11-27 16:59 | 显示全部楼层
这个很需要啊
 Hello,黑武的好机友!回复想偷个懒?点这里: 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|Archiver|手机版|爱黑武论坛 ( 京ICP备2023028323号 | 京公网安备11011202000270号 )

GMT+8, 2024-4-26 05:11 , Processed in 0.040890 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, ihei5.com

快速回复 返回顶部 返回列表