分享
 
 
 

开源密码管理软件项目说明

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一、简介

软件名称:开源密码管理软件

开发语言:Java

MIDP版本:1.0

开发环境:CodeWarrior+J2ME WTK1.03

测试环境:J2ME WTK1.04+中文补充包

简介:

随着社会的发展和进步,每个人需要记忆的密码信息很多,如银行卡密码、邮箱密码、论坛密码等等,记忆这些种类繁多的密码,给人们带来了很大的不便。

本软件实现在用户手机中,存储和管理用户的各类密码信息。主要功能:

1、增加密码。存储新的密码,在新的密码中,用户可以存储密码ID,即密码用途,密码和备注信息等。

2、查看密码。查看、修改和删除已有的密码休息。

3、设置密码。可以为该软件设置进入密码。即在手机中使用该软件时,用户需要输入该密码方可进入。已提供删除该密码功能。

如果您有什么好的建议,请与我联系,cqucyf@263.net

二、使用J2ME WTK编译和运行该源代码

1、在Ktoolbar中新建一个项目:

项目名称:任意(例如pm)

MIDlet类名:pm.core.PasswordManagerMidlet

2、将该源代码拷贝到您的J2ME WTK安装目录下的apps中,

路径为:项目名称\src\\pm\core\目录下

例如您的J2ME WTK安装在C:\J2mewtk目录,项目名称为pm,则完整路径为:

C:\J2mewtk\apps\pm\src\pm\core

3、使用KToolbar编译和运行该项目。

备注:如果需要在模拟器中显示中文名称,可以在打开该项目的情况下,在KToolBar的setting(设置)\MIDlets下修改name为“开源密码管理软件”即可。

三、源代码

/**

* 版权所有,2004-

* 作者:陈跃峰

* email:cqucyf@263.net

* 该代码,您可以任意使用,转贴,但是请在任何时候都不要删除该信息

* 若以商业方式使用,请于作者联系

* 版本号:0.90

* 完成时间:2004-7-07

* 修改时间:2004-8-17

*/

package pm.core;

import java.io.*;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

import javax.microedition.io.*;

import javax.microedition.rms.*;

/**

* 密码管理软件

* 实现将常用的密码信息都保存在手机中。如银行密码、邮箱密码等等,该软件不访问网络,所以绝对不会泄漏您的个人隐私。

*/

public class PasswordManagerMidlet extends MIDlet implements CommandListener {

//显示对象

Display display;

//主题

String title = "开源密码管理软件";

//软件主界面

List lstMain;

//主界面确定按钮

Command cmdEnterMain;

//退出按钮

Command cmdExit;

//增加密码界面

Form frmAddPassword;

//密码ID

TextField tfId;

//密码

TextField tfPsswordAdd;

//确认密码

TextField tfConfirmPasswordAdd;

//备注信息

TextField tfRemark;

//确定按钮

Command cmdEnterAdd;

//返回按钮

Command cmdBackAdd;

//查看密码主界面

List lstView;

//查看详细信息按钮

Command cmdInfo;

//返回按钮

Command cmdBackViewMain;

//查看密码中的显示详细信息窗口

TextBox tbViewInfo;

//删除按钮

Command cmdDelView;

//修改按钮

Command cmdModify;

//返回按钮

Command cmdBackViewInfo;

//查看密码中的修改密码窗口

Form frmViewModifyPassword;

//密码文本框

TextField tfPasswordView;

//确认密码文本框

TextField tfConfirmPasswordView;

//修改按钮

Command cmdModifyView;

//返回按钮

Command cmdBackViewModify;

//设置密码界面

Form frmSetPassword;

//密码

TextField tfPassword;

//确认密码

TextField tfConfirmPassword;

//确定按钮

Command cmdEnterSetPassword;

//返回按钮

Command cmdBackSetPassword;

//删除按钮

Command cmdDelSetPassword;

//帮助界面

Form frmHelp;

//帮助界面的返回按钮

Command cmdBackHelp;

//关于界面

Form frmAbout;

//关于界面的返回按钮

Command cmdBackAbout;

//提示窗口

Alert alert;

//启动时的输入密码界面

Form frmStartPassword;

//密码输入文本框

TextField tfStartPassword;

//密码界面中的确定按钮

Command cmdEnterStart;

//密码

String password = "";

//记录对象

RecordStore rs;

//存储密码ID内容

String[] id;

//保存显示的密码ID对应的索引号,数组下标为0的代表第一个密码ID,1的代表第二个,依次类推

int[] idIndex;

/**

* 初始化界面元素

*/

public PasswordManagerMidlet() {

//初始化显示对象

display = Display.getDisplay(this);

//初始化主窗体

lstMain = new List(title,List.IMPLICIT);

lstMain.append("增加",null);

lstMain.append("察看",null);

lstMain.append("设置",null);

lstMain.append("帮助",null);

lstMain.append("关于",null);

//初始化主界面确定按钮

cmdEnterMain = new Command("确定",Command.OK,1);

//添加到主界面

lstMain.addCommand(cmdEnterMain);

//初始化退出按钮

cmdExit = new Command("退出",Command.EXIT,1);

//添加到主界面

lstMain.addCommand(cmdExit);

//初始化增加密码界面

frmAddPassword = new Form(title);

tfId = new TextField("密码ID:","",100,TextField.ANY);

tfPsswordAdd = new TextField("密码:","",20,TextField.PASSWORD);

tfConfirmPasswordAdd = new TextField("1确认密码:","",20,TextField.PASSWORD);

tfRemark = new TextField("备注:","",100,TextField.ANY);

cmdEnterAdd = new Command("确定",Command.OK,1);

cmdBackAdd = new Command("返回",Command.BACK,1);

//添加到增加密码界面

frmAddPassword.append(tfId);

frmAddPassword.append(tfPsswordAdd);

frmAddPassword.append(tfConfirmPasswordAdd);

frmAddPassword.append(tfRemark);

frmAddPassword.addCommand(cmdEnterAdd);

frmAddPassword.addCommand(cmdBackAdd);

//初始化查看密码主界面

lstView = new List(title,List.IMPLICIT);

cmdInfo = new Command("查看",Command.SCREEN,1);

cmdBackViewMain = new Command("返回",Command.BACK,1);

//添加到查看密码主界面

lstView.addCommand(cmdInfo);

lstView.addCommand(cmdBackViewMain);

//初始化查看密码详细信息界面

tbViewInfo = new TextBox("详细信息","",200,TextField.ANY);

cmdDelView =new Command("删除",Command.SCREEN,1);

cmdModify = new Command("修改",Command.SCREEN,1);

cmdBackViewInfo =new Command("返回",Command.BACK,1);

//添加到查看密码详细信息界面中

tbViewInfo.addCommand(cmdDelView);

tbViewInfo.addCommand(cmdModify);

tbViewInfo.addCommand(cmdBackViewInfo);

//初始化查看密码中的修改密码界面

frmViewModifyPassword = new Form("修改密码");

tfPasswordView = new TextField("密码:","",20,TextField.PASSWORD);

tfConfirmPasswordView = new TextField("确认密码:","",20,TextField.PASSWORD);

cmdModifyView = new Command("确定",Command.OK,1);

cmdBackViewModify = new Command("返回",Command.BACK,1);

//添加到修改密码界面

frmViewModifyPassword.append(tfPasswordView);

frmViewModifyPassword.append(tfConfirmPasswordView);

frmViewModifyPassword.addCommand(cmdModifyView);

frmViewModifyPassword.addCommand(cmdBackViewModify);

//初始化设置密码界面

frmSetPassword = new Form("设置密码");

tfPassword = new TextField("密码:","",20,TextField.PASSWORD);

tfConfirmPassword = new TextField("确认密码:","",20,TextField.PASSWORD);

cmdEnterSetPassword = new Command("确定",Command.OK,1);

cmdBackSetPassword = new Command("返回",Command.BACK,1);

cmdDelSetPassword = new Command("删除",Command.SCREEN,1);

//添加到设置密码界面

frmSetPassword.append(tfPassword);

frmSetPassword.append(tfConfirmPassword);

frmSetPassword.addCommand(cmdEnterSetPassword);

frmSetPassword.addCommand(cmdBackSetPassword);

frmSetPassword.addCommand(cmdDelSetPassword);

//初始化帮助界面

frmHelp = new Form("帮助");

frmHelp.append("开源密码管理软件是一款帮助您管理各种密码的软件,\"增加\"中可以增加新的密码,\"察看\"中可以查看、修改和删除已有的密码,\"设置\"中可以进行该软件的进入密码设置。");

//初始化返回按钮

cmdBackHelp = new Command("返回",Command.BACK,1);

//添加到帮助界面

frmHelp.addCommand(cmdBackHelp);

//初始化关于界面

frmAbout = new Form("关于...");

frmAbout.append("版权所有 2004- 作者:陈跃峰 email:cqucyf@263.net 欢迎您提出该版本的更新建议");

//初始化返回按钮

cmdBackAbout = new Command("返回",Command.BACK,1);

//添加到关于界面

frmAbout.addCommand(cmdBackAbout);

//初始化提示窗口

alert = new Alert(title);

//初始化启动时的密码界面

frmStartPassword = new Form(title);

//初始化启动时的密码输入文本框

tfStartPassword = new TextField("请输入密码","",20,TextField.PASSWORD);

//初始化确定按钮

cmdEnterStart = new Command("确定",Command.OK,1);

//添加到密码界面中

frmStartPassword.append(tfStartPassword);

frmStartPassword.addCommand(cmdEnterStart);

frmStartPassword.addCommand(cmdExit);

//事件处理

lstMain.setCommandListener(this);

frmHelp.setCommandListener(this);

frmAbout.setCommandListener(this);

frmStartPassword.setCommandListener(this);

frmSetPassword.setCommandListener(this);

frmAddPassword.setCommandListener(this);

lstView.setCommandListener(this);

tbViewInfo.setCommandListener(this);

frmViewModifyPassword.setCommandListener(this);

/* //测试代码,添加记录

try{

rs = RecordStore.openRecordStore("password",true);

rs.setRecord(1,new String("123456").getBytes(),0,6);

// System.out.println(i);

rs.closeRecordStore();

}catch(Exception e){

System.out.println("测试代码--添加记录:" + e);

}

//测试代码,删除所有记录集

try{

RecordStore.deleteRecordStore("id");

RecordStore.deleteRecordStore("pwd");

RecordStore.deleteRecordStore("remark");

RecordStore.deleteRecordStore("flag");

//RecordStore.deleteRecordStore("password");

}catch(Exception e){

System.out.println(e);

}

*/

}

/**

* 启动方法

*/

public void startApp () {

try{

//打开密码纪录

rs = RecordStore.openRecordStore("password",false);

//读取密码

byte[] b = rs.getRecord(1);

password = new String(b,"iso8859_1");

//关闭记录

rs.closeRecordStore();

//显示输入密码界面

display.setCurrent(frmStartPassword);

}catch(Exception e){

//没有密码记录,则显示主界面

display.setCurrent(lstMain);

}

}

public void destroyApp(boolean unconditional) {}

public void pauseApp() {}

/**

* 事件处理

*/

public void commandAction(Command c, Displayable s) {

//处理启动时的密码窗口中的确定按钮事件

if(c == cmdEnterStart){

//用户输入的密码

String pwd = tfStartPassword.getString();

//判断用户输入是否为空

if(pwd == null || pwd.length() ==0){ //输入为空

//显示警告提示

displayAlert("请输入密码!");

}else{ //输入不为空

//比较密码

if(pwd.equals(password)){ //密码正确

//显示主界面

display.setCurrent(lstMain);

}else{//密码错误

//显示警告提示

displayAlert("密码错误,请重新输入!");

}

}

}

//处理退出事件

if(c == cmdExit){

destroyApp(false);

notifyDestroyed();

}

//处理主界面中的选择

if(c == cmdEnterMain){

int index = lstMain.getSelectedIndex();

//System.out.println(index);

//选择“增加”

if(index == 0){

//显示增加密码界面

display.setCurrent(frmAddPassword);

}

//选择“查看”

if(index == 1){

//获得密码ID列表

try{

//打开flag记录集

RecordStore rsTemp = RecordStore.openRecordStore("flag",true);

//打开ID记录集

rs = RecordStore.openRecordStore("id",true);

//获得记录集中记录的个数

int num = rs.getNumRecords();

//初始化密码ID索引数组

idIndex = new int[num];

//创建存储ID的数组

id = new String[num];

//将ID信息读入ID数组中

int j = 0;//代表数组的下标

for(int i = 1;i <= num;i++){

//如果flag记录集中的值为0,则读,1代表删除,则不读

String flagTemp = new String(rsTemp.getRecord(i));

//System.out.println("" + i + ":" + flagTemp);

if(flagTemp.equals("0")){

idIndex[j] = i; //获得显示的内容于记录集中的索引号的对应关系

id[j] = new String(rs.getRecord(i),"gb2312");

j++;

}

}

//清空lstView中的显示

for(int i = lstView.size() - 1;i >= 0;i--){

lstView.delete(i);

}

//将ID信息显示在lstView中

for(int i = 0;i < j;i++){

lstView.append(id[i],null);

}

//显示lstView

display.setCurrent(lstView);

}catch(Exception e){

System.out.println("查看密码失败:" +e);

//查看失败

displayAlert("查看密码失败!");

}

}

//选择“设置”

if(index == 2){

//显示设置密码界面

display.setCurrent(frmSetPassword);

}

//选择“帮助”

if(index == 3){

//显示帮助界面

display.setCurrent(frmHelp);

}

//选择“关于”

if(index == 4){

//显示关于界面

display.setCurrent(frmAbout);

}

//未选择

if(index == -1){

displayAlert("请选择您要察看的项目");

}

}

//处理设置密码界面中的返回按钮

if(c == cmdBackSetPassword){

//显示主界面

display.setCurrent(lstMain);

}

//处理设置密码界面中的确定按钮

if(c == cmdEnterSetPassword){

//密码

String pwd1 = tfPassword.getString();

//确认密码

String pwd2 = tfConfirmPassword.getString();

//判断用户是否输入为空

if(pwd1.length() !=0 && pwd2.length() != 0){

//判断密码和确认密码是否相同

if(pwd1.equals(pwd2)){

//设置密码

try{

//打开密码纪录

rs = RecordStore.openRecordStore("password",true);

//System.out.println("rs.getNumRecords():" + rs.getNumRecords());

//判断是否已设置密码

if(rs.getNumRecords() > 0){

//设置密码

rs.setRecord(1,pwd1.getBytes(),0,pwd1.length());

}else{ //未设置密码

rs.addRecord(pwd1.getBytes(),0,pwd1.length());

}

//关闭记录

rs.closeRecordStore();

//提示修改成功

displayAlert("密码设置成功");

}catch(Exception e){

//System.out.println(e);

//设置失败

displayAlert("密码设置失败!");

}

}else{

//提示用户密码和确认密码必须相同

displayAlert("密码和确认密码不相同");

}

}else{

//提示用户密码和确认密码不能为空

displayAlert("请检查密码和确认密码是否为空!");

}

}

//处理帮助界面中的返回按钮

if(c == cmdBackHelp){

//显示主界面

display.setCurrent(lstMain);

}

//处理关于界面中的返回按钮

if(c == cmdBackAbout){

//显示主界面

display.setCurrent(lstMain);

}

//处理增加密码界面中的返回按钮

if(c == cmdBackAdd){

//显示主界面

display.setCurrent(lstMain);

}

//处理增加密码界面中的确定按钮事件

if(c == cmdEnterAdd){

String idAdd = tfId.getString().toString(); //id

String passwordAdd = tfPsswordAdd.getString();//密码

String confirmPasswordAdd = tfConfirmPasswordAdd.getString();//确认密码

String remarkAdd = tfRemark.getString();//备注

//判断是否完整输入,备注可以为空

if(idAdd.length() != 0 && passwordAdd.length() != 0 && confirmPasswordAdd.length() != 0){

//比较密码和确认密码是否相同

if(passwordAdd.equals(confirmPasswordAdd)){

//写入记录集中

try{

//写入ID

rs = RecordStore.openRecordStore("id",true);

rs.addRecord(idAdd.getBytes(),0,idAdd.getBytes().length);

rs.closeRecordStore();

//写入密码

rs = RecordStore.openRecordStore("pwd",true);

rs.addRecord(passwordAdd.getBytes(),0,passwordAdd.getBytes().length);

rs.closeRecordStore();

//写入备注

rs = RecordStore.openRecordStore("remark",true);

rs.addRecord(remarkAdd.getBytes(),0,remarkAdd.getBytes().length);

rs.closeRecordStore();

//写入是否删除的标记,0代表正常,1代表删除

rs = RecordStore.openRecordStore("flag",true);

rs.addRecord(new String("0").getBytes(),0,1);

rs.closeRecordStore();

//提示密码增加成功

displayAlert("密码增加成功!");

}catch(Exception e){

//显示警告信息

displayAlert("增加密码失败!");

}

}else{

//显示警告信息

displayAlert("密码和确认密码是否相同!");

}

}else{

//显示警告信息

displayAlert("请检查输入是否完整!");

}

}

//处理查看密码主界面中的返回按钮

if(c == cmdBackViewMain){

//显示主界面

display.setCurrent(lstMain);

}

//处理查看密码主界面中的查看按钮事件

if(c == cmdInfo){

int index = lstView.getSelectedIndex(); //需要查看的信息id

//如果没有记录,则直接返回

if(index == -1) return;

//获得信息

String s1 = getInfoById(idIndex[index]);

if(s != null){

//显示到tbViewInfo中

tbViewInfo.setString(s1);

}else{

//显示提示信息,查看失败

displayAlert("无法获得详细信息");

}

//显示密码详细信息界面

display.setCurrent(tbViewInfo);

}

//处理密码详细信息界面中的返回按钮事件

if(c == cmdBackViewInfo){

//显示查看密码主界面

display.setCurrent(lstView);

}

//处理密码详细信息界面中的修改按钮事件

if(c == cmdModify){

//显示修改密码界面

display.setCurrent(frmViewModifyPassword);

}

//处理密码详细信息界面中的删除按钮事件

if(c == cmdDelView){

//查看密码界面中被选中的索引号

int index = lstView.getSelectedIndex();

//删除纪录集中的内容

try{

//向记录集中的flag内容中写入删除标记

rs = RecordStore.openRecordStore("flag",true);

rs.setRecord(idIndex[index],new String("1").getBytes(),0,1);

rs.closeRecordStore();

//返回主界面

display.setCurrent(lstMain);

}catch(Exception e){

System.out.println(e);

//显示警告信息

displayAlert("删除密码失败,请重试!");

}

}

//处理修改密码界面中的返回按钮事件

if(c == cmdBackViewModify){

int index = lstView.getSelectedIndex(); //需要查看的信息id

//获得信息

String s1 = getInfoById(idIndex[index]);

if(s != null){

//显示到tbViewInfo中

tbViewInfo.setString(s1);

}else{

//显示提示信息,查看失败

displayAlert("无法获得详细信息");

}

//显示密码详细信息界面

display.setCurrent(tbViewInfo);

}

//处理修改密码界面中的修改按钮事件

if(c == cmdModifyView){

//密码框用户输入

String pwd1 = tfPasswordView.getString();

//确认密码框用户输入

String pwd2 = tfConfirmPasswordView.getString();

//判断用户的输入

if(pwd1.length() != 0 && pwd2.length() != 0){ //用户输入了密码和确认密码

//判断密码和确认密码是否相同

if(pwd1.equals(pwd2)){//相同

int index = lstView.getSelectedIndex(); //需要查看的信息id

//修改密码

try{

//修改密码

rs = RecordStore.openRecordStore("pwd",true);

rs.setRecord(idIndex[index],pwd1.getBytes(),0,pwd1.length());

rs.closeRecordStore();

//显示

//获得信息

String s1 = getInfoById(idIndex[index]);

if(s != null){

//显示到tbViewInfo中

tbViewInfo.setString(s1);

}else{

//显示提示信息,查看失败

displayAlert("无法获得详细信息");

}

//显示密码详细信息界面

display.setCurrent(tbViewInfo);

}catch(Exception e){

//显示修改失败

displayAlert("修改密码失败");

}

}else{//不相同

//显示密码和确认密码不相同

displayAlert("密码和确认密码不同!");

}

}else{ //密码或者确认密码,用户未输入

//提示用户输入

displayAlert("请检查输入是否完整,其中密码和确认密码均不能为空!");

}

}

//设置进入密码界面中的删除按钮事件

if(c == cmdDelSetPassword){

try{

//判断用户是否已设置密码

rs = RecordStore.openRecordStore("password",true);

int numTemp = rs.getNumRecords(); //记录集中的纪录数量

rs.closeRecordStore();

//用户已设置密码

if(numTemp > 0){

//删除,彻底删除

RecordStore.deleteRecordStore("password");

//提示删除密码成功

displayAlert("删除密码成功,请返回!");

}else{//用户未设置密码

//提示尚未设置密码

displayAlert("您尚未设置密码,无法删除!");

}

}catch(Exception e){

//显示删除失败

displayAlert("删除密码失败,请重试!");

}

}

}

/**

*显示提示或者警告信息

*@param msg 信息内容

*/

public final void displayAlert(String msg){

//设置提示信息

alert.setString(msg);

//显示3秒

alert.setTimeout(3000);

display.setCurrent(alert);

}

/**

* 获得指定id的纪录内容,包括密码id,密码和备注信息

* @param id 获得的记录的ID

* @return 记录的内容

*/

public final String getInfoById(int id){

try{

//密码ID

rs = RecordStore.openRecordStore("id",false);

String idView = new String(rs.getRecord(id)).toString();

rs.closeRecordStore();

//密码

rs = RecordStore.openRecordStore("pwd",false);

String pwdView = new String(rs.getRecord(id)).toString();

rs.closeRecordStore();

//备注

rs = RecordStore.openRecordStore("remark",false);

String remarkView = new String(rs.getRecord(id)).toString();

rs.closeRecordStore();

//返回

return "密码id:" + idView + " 密码:" + pwdView + " 备注:" + remarkView;

}catch(Exception e){

System.out.println (e);

return null;

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有