说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

建立应用软件注册安全机制-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
建立应用软件注册安全机制-Delphi资料

软 件 的 安 全 性 是 个 永 恒 的 话 题, 一 直 困 扰 着 人 们, 程 序 员 们 常 常 因 此 熬 夜。Novell 公 司 的 网 络 操 作 系 统NetWare 以 其 完 善 可 靠 的 安 全 管 理 机 制 著 称, 为 实 现 用 户 登 录 的 安 全 性 和 防 止 非 法 入 侵 者 闯 入, 系 统 提 供 了 几 种 有 效 的 限 制 措 施 和 检 测 功 能。 本 文 讨 论 如 何 建 立 完 善 的 软 件 注 册 安 全 机 制, 有 效 地 管 理 用 户 登 录, 为 应 用 软 件 提 供 可 靠 的 保 护, 并 在Delphi 3.0 下 实 现。

Delphi 作 为 一 个 优 秀 的 编 程 工 具, 功 能 极 其 强 大, 令 开 发 周 期 大 大 缩 短, 生 成 的 代 码 运 行 速 度 快, 使 得Windows 软 件 设 计 成 为 一 种 乐 趣。 基 本 思 路 是: 建 立Paradox 格 式 的 用 户 帐 户 表Users.DB, 并 加 密 保 护, 由 管 理 员 维 护。 预 先 在 此 表 中 登 记 并 有 注 册 权 限 的 用 户, 可 持 本 人 有 效 口 令 登 录 进 入 系 统。

实 现 步 骤 如 下:

1 . 在 应 用 软 件 主 目 录( 假 设 为C:\Register) 下 创 建 两 个 子 目 录, 分 别 命 名 为Login 和Data。

2 . 从Delphi 的Tools 菜 单 中 启 动Database Desktop, 并 选 择Tools/Alias Manager … 创 建 一 个 新 别 名。 方 法 是: 在Alias Manager 对 话 框 中 点New, 给 出 新 别 名UserInfo, 并 指 向C:\Register\Data 目 录, 按Keep New、OK 等 按 钮 保 存 新 别 名。

3 . 利 用Database Desktop 创 建Paradox 5.0 for Windows 数 据 表Users.DB, 结 构 见 表1。 事 实 上, 对 于 商 业 软 件 还 需 要 更 多 的 域。

表1 表Users.DB 的 结 构

域 名 类 型 大 小 关 键 字 说 明

Name A 16 * 用 户 名

Password A 16 * 注 册 口 令

Fullname A 32 用 户 全 名

Group I 用 户 组 号

Enabled L 注 册 允 许

4 . 设 定Name

Group 和Enabled 为 非 空 域(Required Field),Group 的 最 小 值 为0, 最 大 值 为3, 默 认 值 为3,Enabled 的 默 认 值 为True。 用 户 组0 为 系 统 管 理 员, 可 进 行 几 乎 任 何 操 作; 用 户 组1 为 软 件 操 作 人 员, 可 进 行 除 用 户 帐 户 管 理 以 外 的 操 作, 包 括 建 立 和 删 除 数 据; 用 户 组2 为 普 通 用 户, 可 使 用 系 统 资 源, 无 修 改 权 限, 而 用 户 组3 仅 可 浏 览 系 统 有 限 信 息。

5 . 用 口 令"UserPassword" 保 护Users.DB 表

存 于Data 目 录 下。 利 用Database Desktop 向 表 中 输 入 若 干 样 本 用 户( 见 表2), 然 后 关 闭Database Desktop。

表2 表Users.DB 的 样 本 用 户

Name Password Fullname Group Enabled

Supervisor AAAAAA Super User 0 True

Director BBBBBB Director User 1 True

Guest     3 True

User1 CCCCCC General User1 1 False

User1 DDDDDD General User1 2 True

User2 EEEEEE General User2 3 True

表2 显 示, 允 许 同 一 用 户 以 不 同 身 份( 用 户 组) 登 录 进 入 系 统, 享 有 不 同 的 权 限。 如 用 户User1, 以 不 同 密 码 登 记, 分 属 用 户 组1 和2。

6 . 返 回Delphi IDE, 新 建 项 目Register.dpr 并 存 入C:\Register 目 录, 主 窗 体 单 元 命 名 为Main.pas。 用 户 注 册 成 功 后, 方 能 启 动 主 窗 体 进 入 系 统。 本 系 统 仅 显 示 用 户 信 息 及 登 录 的 日 期 和 时 间 以 表 示 注 册 成 功( 见 图5), 并 不 做 其 它 任 何 事 情, 这 里 便 是 读 者 应 用 系 统 的 接 口。 为 此, 在 主 窗 体 上 放 入 一 个TGroupBox 组 件,TLabel 和TEdit 组 件 各 五 个。 将 所 有TEdit 的Text 属 性 清 空,ReadOnly 属 性 值 设 为True, 窗 体 和 组 件 其 余 属 性 按 表3 设 置。

7 . 创 建 主 窗 体 的OnActivate 事 件 处 理 程 序, 登 录 成 功 并 激 活 主 窗 体 时 执 行, 显 示 用 户 信 息、 登 录 日 期 和 时 间。 过 程 如 下:

procedure TMainForm.FormActivate(Sender: TObject);

begin

if Time< =StrToTime('12:00:00') then

Caption:=' 上 午 好, 您 已 成 功 登 录 !'

else

Caption:=' 下 午 好, 您 已 成 功 登 录 !';

// 显 示 登 录 用 户 信 息、 登 录 日 期 和 时 间

NameEdit.Text:=LoginUser.UserName;

FullNameEdit.Text:=LoginUser.UserFullName;

GroupEdit.Text:=IntToStr(LoginUser.UserGroup);

DisplayDateEdit.Text:=DateToStr(Date);

DisplayTimeEdit.Text:=TimeToStr(Time);

end;

表3 主 窗 体 中 组 件 属 性 设 置

组 件 属 性 设 置

Form1 Caption

Name MainForm

Position poScreenCenter

GroupBox1 Caption 用 户 信 息

Label1 Caption 用 户 名 称:

Label2 Caption 用 户 全 名:

Label3 Caption 用 户 组 号:

Label4 Caption 登 录 日 期:

Label5 Caption 登 录 时 间:

Edit1 Name NameEdit

Edit2 Name FullnameEdit

Edit3 Name GroupEdit

Edit4 Name DisplayDateEdit

Edit5 Name DisplayTimeEdit

8 . 数 据 模 板。 选 择File/New Data Module 建 立 数 据 模 板LogDataModule, 放 入 一 个Ttable 组 件, 如 图1。 属 性 按 表4 设 置, 命 名 其 单 元 为MD.pas, 存 入Login 目 录。

表4 数 据 模 板 中 组 件 属 性 设 置

组 件 属 性 设 置

Table1 DatabaseName UserInfo

Name UsersTable

TableName Users.DB

9 . 创 建 注 册 窗 体。 选 择File/New Form 创 建 一 个 新 窗 体, 并 加 入 组 件TLabel、TEdit 和TbitBtn 各 两 个。 窗 体 和 组 件 属 性 按 表5 设 置, 命 名 其 单 元 为Login.pas, 存 于Login 目 录。

表5 注 册 窗 体 中 组 件 属 性 设 置

组 件 属 性 设 置

Form2 ActiveControl UserNameEdit

Caption 请 注 册

Name LoginDialogForm

Position poScreenCenter

Label1 Caption 用 户:

Label2 Caption 密 码:

Edit1 Name LoginNameEdit Text

Edit2 Name PasswordEdit PasswordChar * Text

BitBtn1 Caption 注 册(&L)

Enabled False

Kind bkOK

Name LoginBitBtn

BitBtn2 Caption 取 消(&C)

Enabled True

Kind bkCancel

Name CancelBitBtn

10 . 选 择File/New 命 令, 从New Items 的New 页 中 选 择Unit 项 建 一 个 无 窗 体 单 元Addition.pas 存 入Login 目 录, 在 其interface 段 输 入 下 列 语 句:

uses Classes

Forms

Sysutils;

type

TApplicationUser=class(TComponent)

private

FUserName: string;

FFullName: string;

FUserGroup: Integer;

public

property UserName: string read FUserName write FUserName;

property UserFullName: string read FFullName write FFullName;

property UserGroup: Integer read FUserGroup write FUserGroup;

end;

var

LoginUser: TApplicationUser;

在implementation 段 加 入 下 列 语 句:

initialization

LoginUser:=TapplicationUser.Create(Application);

11 . 创 建 注 册 窗 体(LoginDialogForm) 的OnCreate 事 件 处 理 程 序。 在private 段 中 声 明CountDown 为Integer 变 量, 作 为 计 数 器, 并 将 下 述 语 句 插 入begin 与end 之 间:

CountDown:=3; // 允 许 尝 试 注 册3 次

12 . 建 立 用 户 名 输 入 框(LoginNameEdit) 的OnChange 事 件 处 理 程 序, 使 窗 体LoginDialogForm 创 建 时 注 册 按 钮 为 灰 色, 用 户 输 入 登 录 名 后 才 可 用。 不 难 实 现, 源 代 码 略。

13 . 创 建 注 册 过 程。 双 击 注 册 按 钮(LoginBitBtn), 在begin 和end 之 间 输 入 其OnClick 事 件 处 理 程 序 代 码:

ModalResult:=mrNone;

try

Session.AddPassword('UserPassword');

LogDataModule.UsersTable.Open;

//注册信息处理

if not LogDataModule.UsersTable.FindKey([LoginNameEdit.Text

PasswordEdit.Text]) then

begin

//处理注册次数

dec(CountDown);

if CountDown< =0 then ModalResult:=mrCancel else

begin

MessageBeep($FFFF);

Application.MessageBox('请您重试一次!'

'无效注册信息'

mb_iconstop+mb_OK);

//重设输入焦点

LoginNameEdit.SetFocus;

end;

exit;

end;

//检查注册允许值

if not LogDataModule.UsersTable.FieldByName ('Enabled').AsBoolean then

begin

MessageBeep($FFFF);

Application.MessageBox( '抱歉,您不能进入系统!'

'使用权限终止'

mb_iconexclamation+mb_OK);

ModalResult:=mrCancel;

exit;

end;

//获取注册用户信息

with LogDataModule do

begin

LoginUser.UserName:=UsersTable.

FieldByName('Name').AsString;

LoginUser.UserFullName:=UsersTable.

FieldByName('Fullname').AsString;

LoginUser.UserGroup:=UsersTable.

FieldByName('Group').AsInteger;

End;

ModalResult:=mrOK;

//关闭表,清除密码

finally

LogDataModule.UsersTable.Close;

Session.RemovePassword('UserPassword');

end;

14 . 在Main.pas 单 元 的uses 中 加 入"Addition", 在Login.pas 单 元 的implementation 段 增 加uses 语 句:

uses MD

Addition;

15 . 打 开 过 程 文 件Register.dpr, 在uses 语 句 中 加 入"Controls", 将 "Application.run;" 改 为 下 列 语 句, 只 有 注 册 成 功 时 才 启 动 系 统, 同 时 释 放 注 册 窗 体

以 确 保 安 全 和 减 少 内 存 占 用。

if LoginDialogForm.ShowModal=mrOK then

begin

LoginDialogForm.Free;

Application.Run;

end;

16 . 编 译、 运 行。 注 册 窗 口 见 图2, 输 入 用 户 名 和 密 码 后 点" 注 册" 按 钮。

如 果 注 册 信 息 有 纬, 系 统 出 现 提 示 框, 允 许 重 新 注 册, 见 图3。 若 三 次 尝 试 均 不 成 功, 注 册 窗 口 将 保 护 性 关 闭。

访 问 权 已 被 管 理 员 终 止 的 用 户(Enabled 的 值 为False), 例 如 用 户User1 以 口 令CCCCCC 注 册 至 用 户 组1, 系 统 拒 绝 进 入, 见 图4。

注 册 成 功 后 将 启 动 系 统 主 程 序。 例 如 用 户Supervisor 以 口 令AAAAAA 注 册, 见 图5。

上 述 方 案 具 有 以 下 特 点:

1 . Supervisor 用 户 具 有 至 高 无 上 的 权 利, 由 系 统 创 建, 不 能 删 除, 仅Password 和Fullname 字 段 的 值 允 许 自 行 修 改。 主 要 负 责 系 统 维 护 和 用 户 帐 户 管 理 等 工 作, 是 系 统 的 永 久 性 特 权 用 户。

2 . 确 保 用 户 帐 户 表Users.DB 的 安 全 致 关 重 要, 本 方 案 采 用 了 较 为 可 靠 的 关 键 性 技 术, 就 是 注 册 过 程( 见 步 骤13) 中"try …finally …end" 结 构 的 应 用。 仅 当 用 户 按 下" 注 册" 按 钮 时, 注 册 模 块 转 送 表Users.DB 的 密 码 并 将 其 打 开, 以 处 理 注 册 信 息。 而 无 论 成 功 与 否, 在finally 部 分 都 能 及 时 关 闭 表Users.DB, 并 立 即 清 除 内 存 中 的 密 码。

3 . 用 户 帐 户 管 理 模 块 设 在 主 程 序 中, 完 成 表Users.DB 的 维 护 功 能, 包 括 建 立 用 户 帐 户 和 用 户 组, 增、 删 用 户, 分 配 访 问 权 限 等。 只 有Supervisor 或 其 授 权 用 户 才 可 进 入。

4 . 组 帐 户 管 理: 用 户 按 不 同 级 别 分 组, 再 按 组 进 行 权 限 分 配, 以 简 化 管 理。 如 系 统 可 根 据 登 录 用 户 所 属 的 用 户 组, 十 分 方 便 地 屏 蔽 相 应 菜 单 项, 以 达 到 限 制 用 户 使 用 权 限 的 目 的。 对 用 户 群 大 的 系 统, 此 项 技 术 的 优 越 性 尤 为 显 著。

5 . 默 认 帐 户 限 制: 建 立 用 户 帐 户 时, 系 统 默 认 其Group=3, 仅 具 备 浏 览 有 限 信 息 之 权 限, 不 致 因 管 理 员 一 时 疏 忽 使 新 建 用 户 越 权 使 用, 危 及 系 统 安 全。

6 . 单 独 帐 户 限 制: 用 户 注 册 时, 必 须 提 供 完 整 的 个 人 有 效 信 息 才 能 进 入 系 统。

7 . 注 册 允 许 限 制: 管 理 员 可 随 时 取 消 或 恢 复 单 个 用 户、 用 户 组 甚 至 系 统 所 有 用 户(Supervisor 除 外) 的 注 册 权 限, 只 需 设 置 注 册 允 许 字 段Enabled 的 值 为False 或True。

8 . 非 法 入 侵 限 制: 三 次 注 册 尝 试 不 成 功 便 保 护 性 关 闭 注 册 窗 口, 以 防 非 法 非 法 入 侵 者 无 限 制 尝 试。

如何在程序中动态取得Win95/98的网络邻居中的工作组及计算机名?-Delphi资料 提高客户机/服务器应用系统性能的一些方法-Delphi资料 网络和通讯编程-Delphi资料 WebBrowser流程讲解及如何判断下载网页成功-Delphi资料 用Delphi 3.0实现运行于浏览器内的客户 用Delphi编写ASP的ActiveX 用Delphi编写CGI程序(五) 用Delphi编写CGI程序返回图象 用Delphi程序获取拨号连接的动态IP地址 用Delphi创建Internet快捷方式 用Delphi实现NetBIOS广播收发 用Delphi实现网络驱动器的映射和断开 用Delphi实现远程屏幕抓取 用DELPHI制作留言板 再谈用Delphi程序获取拨号连接的动态IP地址 在DELPHI程序中拨号上网 在DELPHI程序中获取网络资源信息 在Delphi程序中应用IE浏览器控件 在Delphi中调用NetscapeNavigator 在Delphi中使用flash控件 在Delphi中使用IP控件 在程序中动态取得Win95/98网络邻居中工作组及计算机名-Delphi资料 在程序中获取网络资源信息-Delphi资料 自制THyperLink组件-Delphi资料 报表制作技巧(三)-Delphi资料 Delphi数据库开发及统计表格设计 Delphi文本和图形的打印方法 Delphi应用程序中中国式报表的制作 Windows环境下实时列表输出的实现方法-Delphi资料 报表制作技巧(二)-Delphi资料 Delphi编制的程序运行中动态制作报表 Java Developer Interbase如何自动保存更新 请教数据库连接池的使用.... 不要以为你不骂人你的素质就比那些骂街的高了,如果你卖国那么你的素质比那些骂街的更低,因为你基本不具备一个人的素质了 哪位有有关Vtune的相关资料呀,提供链接也行,最好是指南一类的,3X。 编程几年了,没有希望,想改行,你们呢? 有谁做过“文物馆的文物或藏品综合管理系统”如能提供资料或动者!本人感谢! 入门时奇怪问题? 如何把*.IMG文件转换为JPG文件? 其实你不懂我的心 那里可以买到microchip的mcp2150 ,(要现货),比较紧急,请帮忙 关于对2进制文件的操作 将去做SAP ABAP4平台编程,用过的请进。up有分。 C的图形问题? 为什么我点进去看不到内容? 如何考中程 数据窗口控件为dw_6,其间的对象为D_PUR,我想使其中的图片框的VISIBLE属性变为FALSE总是有错误,请教:)在线等待 kylix2在RedHat7.2下的安装问题? 能告诉我吗????各位哥哥指点一二 数据库置疑问题,并不难?请进 关于串口通讯(向手机发送AT命令集) 高手请看:表格的终极问题 如何得到treeview中选中项的标签或内容? 在哪能下载到FOXPRO2。0(FOR DOS) 请教高手!我没多少分了,50分给你! 怎么办? 谁救救我啊,怎么办? 对已生成的窗体缩小和移位后,恢复原始状态遇到的问题 字段中如何存入一个回车和换行符? 一个MYSQL的问题? PFC编程的那几个PBL库 我这里怎么会没有 请教高手 求最佳算法,谢谢,考试题目,请各位大俠务必帮忙,跪谢! 神阿,救救我吧! 求教高手!关于installshield的问题!我就50分了,全给你! 我号帐号的Email是eColdBlood@csdn.net,好玩吧?! 在COM编程中,PROXY/STUB到底怎么解释为好?谁的COM厉害请解答! 兄弟们帮忙,一个MM让我猜谜语!! win98 序例号? 关于struts的问题 关于变量的问题 想开发路测系统,如何最简单实现 GIS,GPS 最简单功能。欢迎指导 美女求救,谁答的好就嫁给谁!! 用Delphi做类qq聊天软件! 用命令行使用Visio2000 随便写写 设置Form那个属性,能使程序运行后它的窗口是隐藏的? 有谁知道哪里有LINUX的安装程序下载,国内网站的 给女同胞的~~~~~~~~~ 用ASP怎样在客户端运行程序? 能否在ISA Server上设置NetMeeting的端口映射? 帮帮忙!我的服务器在局域网中不能访问。 北方建设一亩大养鱼池需要多少钱 谁有麻辣烫底料的配方?请教有经营麻辣让的大虾们,我是一个准备着手麻辣烫行业的新人,(是那种串串香,穿在竹签上煮的哪一类),但是对这一方面毫无经验,请教有经验的大虾们,你 坍落度起什么作用 我有2亩鱼塘不知道养殖好?收益怎么样? 细胞的物质和能量储存在哪里 坍落度160是什么意思 浅谈如何改进高中英语语法教学 动植物细胞中的储存能量的物质是什么? 坍落度是什么? 线粒体是有氧呼吸的主要场所.下列关于线粒体结构和功能的叙述,正确的是()A有氧呼吸酶主要分布在线粒体的外膜、内膜和基质中B线粒体可以再有氧条件下将葡萄糖氧化分解为CO2和水C线 兔子细胞中储存能量的主要物质是? 0元 中国电信 中国联通0元购机 线粒体是有氧呼吸的主要场所,下列关于线粒体结构和功能的叙述,正确的是A有氧呼吸酶主要分布在线粒体的外膜、内膜和基质中B线粒体可以再有氧条件下将葡萄糖氧化分解为CO2和水C线粒体 动物 植物细胞的储存能量物质是什么 iphone的联通版电信版是什么意思? 用生活中的具体事例说明"人人为我,我为人人". 高中物理加速度图像11.某矿井中的升降机,在开始3秒内,以1米每秒方的加速度,由井底从静止均加速上升,接着以3秒末的速度均速上升6秒,最后均减速上升,又以2秒刚好停在井口,试画出升降机的a 关于风景的好句好段好词关于自然风光的好句好段好词,都行,只要快一点! 线粒体是有氧呼吸的重要场所吗 如何用三种方法使得木材中的纤维素、半纤维素和木质素的稳定复合物降解,从而利于纤维素酶降解纤维素 MATLAB中for循环变量值不增加for i=1:mfor j=1:nif (i-10>=1) && (j-10>=1) && (m-i>=10) && (n-j>=10)A=I(i-10:i+10,j-10:j+10);[mm,nn]=size(A);Arow=ascend(A,1,mm*nn); %排列矩阵A中元素[b1,b2]=boundryvalue(Arow); %函数a=select_noise(A,b1,b2 人人为我我为人人的具体事例 长春哪家小型货车改吊车载重车 听说那个新开的书店很没有书 修改病句请用汉语知识 或者语言学相关知识 找出病因 世界上有多少种海豚?谁也是喜欢海豚的? 基因是Dd还是D和d 求推荐几种小型拉货车的型号,要求如下:①柴油动力;②,载重0.5-1吨;③普通三轮车大小,急用! 太阳内部温度有多高? ,D表示显性基因 我想问能否用DD表示一个显性基因 就是DD 纯合子 可否写成DDDD 求大手 4.2米货车载重2吨以下什么车好 多少钱 太阳的表面温度有多高? 基因组成是Dd的,d控制的性状是什么,但d还会____? 生活中“人人为我,我为人人.”的例子 为什么太阳外部温度比内部高? 生物书上表示基因一会用Dd,Bb,Aa一会又有用Rr,Hh,XaY烦的很!使用这些这字母表示基因有什么准则吗?每...生物书上表示基因一会用Dd,Bb,Aa一会又有用Rr,Hh,XaY烦的很!使用这些这字母表示基因有什么 除杂草用什么除草剂比较好我家院子到处都是杂草,除掉 拔掉还继续长,而且越长越多,以前也用过除草剂,效果不怎么好 原来,德国的选举制度与英国、美国一样,分为两院制:联邦议院、联邦参议院.德国联邦议院议员由普选产生,德国联邦参议院议员则由各州政府官员作为代表组成 英国的“上院”和“下院”是怎么回事 鱼塘怎么消毒大家都知道,海南最近洪水肆虐,现在更紧急的洪水后怎么办,水产养殖受到了很大的影响,鱼塘要怎么消毒呢如果再重新放入鱼苗?有什么注意事项? 下列各国议会,只起到 "修饰门面" 作用的是:() A 英国上议院 B 美国参议院 C法国众议院 D德国帝国议会 各位大侠问一问,英国的上院和下院的权力谁的权力大,为什么?还有不是内阁首相由议会多数党领袖担任吗?如果议会多数党一换是不是首相也就跟着换,最后一个问题是议会通过对政府的不信 石灰放入养鱼池内能消毒吗? 英国历史上有那些王朝?每一个王朝的起止年代和简要说明. 议会的上院,通俗易懂些 水泥鱼塘放养之前用生石灰消毒过了,那在养的期间还要消毒吗,如果要,要用什么消毒, 左撇子基因在什么染色体上?是显性还是隐性?请有依据,如:出自什么书等. 麻辣烫底料配方\汤料配方? 现任德国总理,法国总统,意大利,巴西,澳大利亚,加拿大,印度,英国最高领导人分别是谁? 一对同源染色体上有一对显性基因和一对隐性基因,对吗?http://zhidao.baidu.com/link?url=G0PpnX6-AC9-U6AEzGreloRjNgvCvO4h_fGgnreU5Xu1wr2yjXtfvW9exF8yQTsLkLAa_S09r4sX1Mu7ypCFfK这里采纳的回答是这么说的 英国议会的上院有什么职责?两党和元首都从下院产生,那上院呢? 我国最早的农业的来历 为什么说一对显性和隐性基因位于一条染色体是错的? 麻辣烫底料配方是什么? 麻辣烫砂锅底料的做法我自己开了一家麻辣烫小吃店,但是味道不好,看到别家做麻辣烫时放一小块麻辣烫砂锅底料,有谁知道是怎么做的.yangguoqi1230这位朋友,请不要把网上的东西给复制过来,如 请问 常染色体上、 X染色体上与Y染色体上的隐性与显性基因控制遗传病的各自特点是什么?谢谢 串串香 底料配方 或者是技术学习的也可以哈 称小火锅的四川麻辣烫汤底怎么做 川味麻辣烫做法”串串香“有名“麻辣烫”,它实际上是火锅的另一种形式,所以人们往往又称它为小火锅.“串串香”最早出现在二十世纪80年代中期的成都. 如何有效地进行高中英语语法教学 细胞中的物质所储存的能量是什么?这里有四个选项:A.B.机械能 C.热能 D.光能 我是实在不想想了, 坍落度试验怎么做?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘