打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用手机背单词
userphoto

2005.12.09

关注


习惯了用电脑背单词,也一直想用手机来背单词,那样方便很多,任何时候,在任何地方都可以背的。

可惜还没学j2me,不会编手机上的java软件,前几天在手机上看电子书的时候突然想到一个idea。

其实背单词软件关键的功能就是当单词出现的时候隐藏该单词的解释,当用户想好后按下某个按钮再显示出来。

既然这样,我们就可以做这样一本电子书,让其里面的单词与其解释部分不同时出现在同一页上。

比如 Nokia6230 的电子书显示内容部分小字体可以显示8行,大字体可以显示6行,以大字体为例,也就是说该电子书里面每一个单词后面就空出5行空行出来,然后再显示其解释,再空5行,再显示下一个单词,这样就可以保证在任何时候都只显示单词或是解释。

当然还要考虑到音标,也就是第一行单词,二行空,三行音标,四、五、六行空,解释,空五行,下一个单词。

也就是说,给你一个单词表(由金山词霸的生词本导出生成),在每个单词及解释中间插入5行空行就行了。

但是要是人工操作非常麻烦,当有大量单词的时候简直。。。
所以编了下面这个小程序,也就是实现把单词表转化为我们要的格式,并可以批量处理。

当然除了6230其它能看电子书的手机也能用,在程序里面选择"手机显示行数",输入你的手机显示行数就可以了,比如6230大字体总共可以显示6行,就输入6。


使用方法:

一,先用金山词霸的生词本导出单词列表(导出格式选择"纯文本文本格式"),导出文件名为1.txt,2.txt .... n.txt(便于批量处理)

二,把该程序copy到生词表所在目录,并建立一个done目录,打开该程序并按里面提示做。

三,把done目录里面格式化好的文本文件做成JAVA电子书(使用JBookMaker软件,软件作者主页:http://www.bigwater.org)



程序及程序源文件下载::


以下是效果图:






软件界面:






程序源代码:

#include<stdio.h>
#include<iostream.h>
#include<string.h>

// 默认后缀名
char suffix[20]="-J.txt";
// 默认目标文件目录名
char mulu[20]="done";
// 默认手机显示行数(row>=3)
int row=6;
// max用以记录一共有几个单词
int max;

void readFile(FILE *fp){
  char ch;
  rewind(fp);
  while(!feof(fp)){
    ch=fgetc(fp);
    cout<<ch;
  }
  rewind(fp);
}

// 从fp中读出第n个以symbol符号开头的那一行的数据,放入s中
int getStrWord(FILE *fp,int n,char symbol,char *s){
  int i=0;
  char ch,ch1=‘=‘,ch2=‘\n‘;
  rewind(fp);
  if(n>max){
    cout<<"读取"<<symbol<<"符号数据 超出范围";
    return false;
  }
  // 定位文件指针位置
  while(i!=n){
    ch=fgetc(fp);
    if(ch==‘+‘ || ch==‘\\‘ || ch==‘&‘){
      if(ch2==‘\n‘){
        if(ch==symbol && ch1!=symbol){
          i++;
        }
        ch1=ch;
      }
    }
    ch2=ch;
  }
  // 读出写入到s
  ch1=symbol;
  if(symbol==‘\\‘){
    i=0;
  }else{
    s[0]=ch;
    s[1]=‘ ‘;
    s[2]=‘ ‘;
    ch=fgetc(fp);
    i=3;
  }
  while(!feof(fp) && ch1==symbol){
    s[i++]=ch;
    ch2=ch;
    ch=fgetc(fp);
    if(ch==‘+‘ || ch==‘\\‘ || ch==‘&‘){
      if(ch2==‘\n‘){
        ch1=ch;
      }
    }
  }
  s[i-1]=‘\0‘;
  rewind(fp);
  return true;
}

// 返回总共有几个单词
int getMax(FILE *fp){
  int i=0;
  rewind(fp);
  while(!feof(fp)){
    if(fgetc(fp)==‘+‘){
      i++;
    }
  }
  rewind(fp);
  return i;
}

// 转化程序,输入源文件名,目标文件名
int convertFile(char *file1,char *file2){
  int i,j;
  char str[500];
  FILE *fp1,*fp2;
  cout<<"\n\n//----------- 源文件为:"<<file1<<",目标文件为:"<<file2<<" ----------//";
  fp1=fopen(file1,"r");
  if(fp1==false){
    cout<<"\n\n错误:找不到源文件\n\n";
    return false;
  }
  fp2=fopen(file2,"w+");
  if(fp2==false){
    cout<<"\n\n错误:不能创建新文件\n\n";
    return false;
  }
  max=getMax(fp1);
  cout<<"\n\n> 转换开始"<<"\n\n该文件共有 "<<max<<" 个单词";
  for(i=1;i<=max;++i){
    getStrWord(fp1,i,‘+‘,str);
    fputs(str,fp2);
    fputs("\n \n",fp2);

    getStrWord(fp1,i,‘&‘,str);
    fputs(str,fp2);
    fputs("\n",fp2);
    for(j=0;j<(row-3);++j){
      fputs(" \n",fp2);
    }

    getStrWord(fp1,i,‘\\‘,str);
    fputs(str,fp2);
    fputs("\n \n \n",fp2);
    for(j=0;j<(row-3);++j){
      fputs(" \n",fp2);
    }

  }
  fputs("J.T.L\nwww.hartech.cn\n\n",fp2);
  cout<<"\n\n> 转换完成";
  fclose(fp1);
  fclose(fp2);
  return true;
}

// 用户界面
void interface_main(){
  cout<<"\n\n ============================================\n";
  cout<<" || 欢迎使用本转换软件: ||\n";
  cout<<" || ||\n";
  cout<<" || 1-批量文件转换 2-特定文件转换 ||\n";
  cout<<" || 3-更改默认后缀 4-更改目标文件夹 ||\n";
  cout<<" || 5-手机显示行数 6-退出 ||\n";
  cout<<" || www.hartech.cn ||\n";
  cout<<" ============================================\n\n";
  cout<<"请选择要进行的操作:";
}

// 1-批量文件转换
void piliang(){
  int num,i,cout_f=0;
  char name1[20],name2[20];
  cout<<"\n\n请输入文件数量(从1.txt开始到n.txt):";
  cin>>num;
  for(i=1;i<=num;i++){
    if(i<10){
      name1[0]=char(i)+48;
      name1[1]=‘\0‘;
    }else{
      name1[0]=char(i/10)+48;
      name1[1]=char(i%10)+48;
      name1[2]=‘\0‘;
    }
    strcpy(name2,mulu);
    strcat(name2,"/");
    strcat(name2,name1);
    strcat(name1,".txt");
    strcat(name2,suffix);
    if(!convertFile(name1,name2)){
      cout_f++;
    }
  }
  cout<<"\n\n\n批量转换完成。\n";
  cout<<"转换成功文件: "<<(num-cout_f)<<" 个\n";
  cout<<"转换失败文件: "<<cout_f<<" 个\n";
}

// 2-特定文件转换
void teding(){
  char name1[20],name2[20];
  cout<<"\n\n请输入源文件名:";
  cin>>name1;
  cout<<"\n请输入目标文件名:";
  cin>>name2;
  convertFile(name1,name2);
  cout<<"\n特定文件转换完成。\n";
}

// 3-更改默认后缀
void changeSuffix(){
  cout<<"\n\n现后缀为\""<<suffix<<"\",更改为:";
  cin>>suffix;
  cout<<"更改完成,现后缀为\""<<suffix<<"\"";
}

// 4-更改目标文件夹
void changeMulu(){
  cout<<"\n\n现目标文件夹为\""<<mulu<<"\",更改为:";
  cin>>mulu;
  cout<<"更改完成,现目标文件夹为\""<<mulu<<"\"";
}

// 5-手机显示行数
void changeRow(){
  do{
    cout<<"\n\n现手机显示行数为\""<<row<<"\",更改为(行数要大于等于3):";
    cin>>row;
  }while(row<3);
  cout<<"更改完成,现手机显示行数为\""<<row<<"\"";
}


void main(){
  char kind;
  // 默认后缀
  do{
    interface_main();
    cin>>kind;
    switch(kind){
    case ‘1‘:piliang();
      break;
    case ‘2‘:teding();
      break;
    case ‘3‘:changeSuffix();
      break;
    case ‘4‘:changeMulu();
      break;
    case ‘5‘:changeRow();
      break;
    case ‘6‘:break;
    default:cout<<"输入错误,请重新输入";
    }
  }while(kind!=‘6‘);

}


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
一段简单的猜数字游戏的C++源程序
《C语言程序设计》第10章 文件写字字帖
C语言输入输出函数
流式IO(一)
字符三角形
C语言 图书管理系统
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服