版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ATM标准管理系统java窗口界面
BAM银行账户管理系统(ATM管理系统)
本系统采用JAVA语言并在eclipse环境下编
写测试完成,涉及类的概念,以及面向对象的几
大特性(继承,封装,多态,抽象),也有异常
处理机制,采用集合(更好)存储账户数据,基
本可以满足大多数BAM系统的相关实现,且代码
内标注大量注释,读者可以很轻松地理解相关逻
辑,大家可以开心参考。
系统简介:
特点:采用窗口界面风格,而不是传统的命令行、控制台运作模式
1、JAVA类的面相对象的应用,拥有异常处理
机制,不会因为输入错误而导致程序崩溃
2、主要有7个类,即①Account(账户类)
②SaveAccount(储蓄
账户类):不能透支
③CreditAccount(信
用账户类):可以透支
©Bank(银行类)
⑤
ATMOpenAccountFrame
(开户窗口页面)
@ATMLoginFrame(登
录窗口页面)
⑦ATMMainFrame(操
作窗口页面)
带有完善的相关信息提示弹出窗口见
F面截图
类的具体属性级行为见代码
3、各个类之间的相互关系,涉及继承、封
装、多态、抽象,在多态中又涉及重载和重
写,请读者注意相关联系(关注注释)
4、可以实现数据保存功能,数据将保存在
文件中(即当你注册了一个账户,下次再登
陆系统时,可以实现与上次最后的操作
相衔接)
5、账户号自动生成,比较符合现实
6、主要功能有:1.开户
2.查询账户余额
3.存款
4.取款
5.转账(一个账户到另一个账
户)等……
7、运行时界面简示
1.初始界面(账户登录)
2.账户登录后界面
3.相关信息提示一览(只列举一部分)
1、查询:2、存款:
目盘作界囱
3、取款:
国掾作界面
破户姓名:旅司望余额:570.0
4、转账:
账户姓名:张可望余额:550.0
4、用户开户界面:
注意事项:
1、本系统采用的编程环境是JDK1.7,jer7。
所以,运行代码需要保持电脑上所装的JDK为
1.7以上版本,如有报错,只需换个高一点的版
本即可。注意:第一次装JDK,要配置环境变量
(请查阅相关资料,比较简单)
2、本系统代码涉及到包,所以如果报名不一
致就会报错,解决方法:修改一下包名即可
3、建议把各个类写在同一个包下面,且每一
个类单独写一个java文件,如下图:
3Java-BAM07/src/com/qx/ATMMainFrame.java-EclipseSDK
FileEditSourceRefactorNavigateSearchProjectRunWindowHelp
「二、势▼Q▼q▼:咨审6▼一甲CD闿回管"i▼j▼0s
-«PackageExplorer京、厂B由A1MLoginFrame.java“AlMMainFrame.javaAlMUoenAc(
D82jblName=newJLat
BAM▲83jblMsg.setText(,
BAM0284)
BAM0385)
BAM0486
BAM0587);
BAM06
88//给取款按钮注册监听器
:JBAM07
89jbWithdraw.addActionListenei
90s
田com.qxnewActionListener(){
UAccount.java191-publicvoidactionPe
,物ATMLoginFrame.java192Strings=JOpti
.ATMMainFrame.java193doublemoney=Dot
ATMOpenAccountFrar
I95bank.withdraw(ac
Bankjava/*JOptionPane.st
|jCreditAccount.java■96JOptic
[j,SavingAccount.javaJ97jblName=newJLat
JRESystemLibrary[jre7]198
3accounttxt
\
4、在运行程序前,需要在项目下面新建一个
account.txt(用来保存数据)文件(如上图),
并在其中写入至少一个账户信息,(如下图,其
中每项代表的意思,请读者参照代码内的注释),
否则在初始化的时候会因为找不到账户信息,从
而产生异常。
OJava-BAM04/account.txt-EdipseSDK
FileEditNavigateSearchProjectRunWindowHelp
匚j玲▼。▼亘ini
上PackageExplorer2accounttxt
张可里,
IS生l|1001r1001,321323,0,510.0
会BAM
©BAM02
BBAM03
审BAM04
0src
出com.qx
J.Accountjava
(jjATM.java
|j(Bankjava
.CreditAccountjava
[£SavingAccountjava
■KJRESystemLibrary[jre7]
[3|account.txt
系统源码:
Account类
packagecom.qx;
importjavax.swing.JOptionPane;
/★★
*账户类:包含两种账户类型一>1.储蓄账户
2.信用账户
*/
publicabstractclassAccount{
//属性
protectedlongid;
protectedStringpassword;
protectedStringname;
protectedStringpersonld;
protectedStringaccountType;
protecteddoublebalance;
//构造方法
publicAccount(){
super();
)
publicAccount(longid,String
password,StringnamerString
personld,
Stringtype,doublebalance){
super();
this.id=id;
this.password=password;
=name;
this.personld=personld;
this.accountType=type;
this.balance=balance;
}
//getXxx,setXxx方法
publiclonggetld(){
returnid;
)
publicvoidsetld(longid){
this.id=id;
)
publicStringgetPassword(){
returnpassword;
)
publicvoidsetPassword(String
password){
this.password=password;
}
publicStringgetName(){
returnname;
)
publicvoidsetName(Stringname){
this.namename;
)
publicStringgetPersonld(){
returnpersonld;
}
publicvoidsetPersonld(String
personld){
this.personld=personld;
)
publicStringgetAccountType(){
returnaccountType;
}
publicvoidsetAccountType(String
accountType){
this.accountType=accountType;
)
publicdoublegetBalance(){
returnbalance;
}
publicvoidsetBalance(double
balance){
this.balance=balance;
)
★★
*存款
*/
publicvoiddeposit(doublemoney){
balance+=money;
)
/*★
*取款(取款方式由账户类型决定,所以设
为抽象方法,相应的Account类应设为抽象类)
*/
publicabstractvoid
withdraw(doublemoney);
}
SavingAccount类
packagecom.qx;
importjavax.swing.JOptionPane;
★★
*储蓄账户类
*/
publicclassSavingAccountextends
Account{
//构造函数
publicSavingAccount(){
super();
)
publicSavingAccount(longid,
Stringpassword,Stringnamer
Stringpersonld,String
accountTypeAdoublebalance){
super(idApassword,name,
personld,accountType,balance);
}
〃对父类的withdraw()实现
publicvoidwithdraw(double
money){
if(balance<money){
/*System.out.printin("对不起,
账户余额不足!”);*/
JOptionPane.showMessageDialog(nu
11,”对不起,账户余额不足!”,
"信息提示
”,JOptionPane.ERROI^MESSAGE);
}
else
(
balance-=money;
}
}
}
CresitAccount类
packagecom.qx;
importjavax.swing.JOptionPane;
/★★
*信用账户类,增加一个信用额度ceiling属
性
*/
publicclassCreditAccountextends
Account{
privateintceiling;
//构造函数
publicCreditAccount(){
super();
)
publicCreditAccount(longid,
Stringpassword,Stringname,
Stringpersonld,String
accountType,doublebalance,int
ceiling){
super(idzpassword,name,
personld,accountType,balance);
this.ceiling=ceiling;
)
//getX*x,setXxx方法
publicintgetCeiling(){
returnceiling;
}
publicvoidsetCeiling(intceiling)
(
this.ceiling=ceiling;
)
〃实现父类的withdraw()
publicvoidwithdraw(double
money){
if((balance+ceiling)<money){
/*System.out.printin("对不起,
已超出您的信用额度!”);*/
JOptionPane.showMessageDialog(nu
11,”对不起,已超出您的信用额度!”,
”信息提示
“,JOptionPane.ERROR_MESSAGE);
)
else
(
balance一=money;
)
)
}
Bank类
packagecom.qx;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.lOException;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Properties;
importjavax.swing.JOptionPane;
/**
*Bank类
*编写Bank类,属性:
1.当前所有的账户对象的集合,存放在数组中
2.当前账户数量
方法:
1.用户开户,需要的参数:id,密码,密码确认,姓
名,身份证号码,账户类型,返回新创建的
Account对象的账号,
提示:用si.equals(s2)可以比较si,s2
两个字符串的值是否相等.账户类型是一个整数,
为0的时候表示储蓄账户,为1的时候表示信用
账户
2.用户登录,参数:id,密码返回登录账户的账
号
3.用户存款,参数:id,存款数额,返回void
4.用户取款,参数:id,取款数额,返回void
5.查询余额,参数:id,返回该账户的余额
double
用户会通过调用Bank对象以上的方法来操作自
己的账户,请分析各个方法需要的参数
*/
publicclassBank{
/*privateAccount[]accounts=new
Account[20];*/
privateListaccountsList;
privateintnumber;〃账户数目
privateintid=1001;〃确定银行账号从
1001开始生成,即第一个账户的账号是1001
〃构造函数
publicBank(){.
accountsList=new
ArrayList<Account>();
number=0;
BufferedReaderbufReader=null;
Properties
props二System.getProperties();
String
path二props.getProperty(^user.dir");
try{
bufReader=newBufferedReader(new
FileReader(new
File(path,“account,txt")));
Strings=bufReader.readLine();
while(s!=null){
StringE]str=s.split;
if(str[4].equals("0"))
(
AccountsavingAcc=new
SavingAccount(Long.parseLong(str[0]),
str[1].toStringO,
str[2].toStringO,
str[3]・toString(),str[4]・toString(),
Double.parseDouble(str[51));
accountsList.add(savingAcc);
else
{
AccountcreditAcc=new
CreditAccount(Long.parseLong(str[0]),
str[1].toStringO,
str[2].toStringO,
str[3].toString(),str[4].toString(),
Double.parseDouble(str[5]),5000);
accountsList.add(creditAcc);
)
number++;
id++;
s=bufReader.readLine();
)
}catch(NumberFormatExceptione){
//TODOAuto-generatedcatchblock
e.printStackTraceO;
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(lOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
try{
if(bufReader!=null)
(
bufReader.close0;
)
}catch(lOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
)
)
)
//getXxx,setXxx
publicListgetAccountsO{
returnaccountsList;
)
publicvoidsetAccounts(Listaccounts){
this.accountsList=accounts;
publicintgetNumber(){
returnnumber;
)
publicvoidsetNumber(intnumber){
this,number=number;
}
publicintgetldO{
returnid;
)
publicvoidsetld(intid){
this,id=id;
)
/**
*开户
*/
publicAccountopenAccount(String
passwdl,Stringpasswd2,Stringname,
Stringpersonld,Stringtype){
〃创建一个新账户
Accountaccount=null;
〃判断两次密码是否一致
if(passwdl.equals(passwd2)){
〃若一致,再判断账户类型(根据type
的值)
if(type,equals("1")){
〃可令开始余额为10,信用额度为
5000
account=newCreditAccount(id,
passwdl,name,personld,type,10,5000);
)
else
(
account=newSavingAccount(id,
passwdl,name,personld,type,10);
)
〃将账户存入账户集合accountsList中
accountsList.add(account);
JOptionPane.showMessageDialog(null,
〃开户成功!!!〃,〃信息提示〃,
JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null,
"您的卡号为:〃+id+〃\n〃+
〃您的密码为:
"+passwdl+"\n"+"您的户名为:”+name+"\n"+
〃您的身份证号为:
“+personld+"\n"+”您的账户类型为:
〃+type+〃\n〃,〃信息提示〃,
JOptionPane.INFORMATION_MESSAGE);
account.accountType=type;
number++;
id++;
returnaccount;〃此时开户成功
)
else
(
JOptionPane.showMessageDialog(null,
〃对不起!您两次密码输入不匹配,开户失败!!!
〃信息提示
”,JOptionPane.ERROR_MESSAGE);
returnnull;〃此时开户失败
/**
*保存数据
*/
publicvoidsaveAccountDate(){
BufferedWriterbufWriter=null;
try{
Properties
props二System.getProperties0;
String
path=props.getProperty(^user.dir");
Strings=null;
bufWriter=newBufferedWriter(new
FileWriter(new
File(path,“account,txt")));
for(Iteratoriterator=
accountsList.iterator();iterator.hasNext(
);)
{〃若存在账户
Accountacc=(Account)
iterator,next();
〃写入账户信息到account.txt
bufWriter.write(acc.id+",");
bufWriter.write(acc.getPassword()+”,");
bufWriter.write(acc.getName()+^,");
bufWriter.write(acc.getPersonId()+”,");
bufWriter.write(acc.getAccountType()+”,
〃);
bufWriter.write(Double.toString(acc.get
Balance()));
bufWriter.newLine()
)
bufWriter.flush();〃清空缓存中的内
容
}catch(lOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
try{
if(bufWriter!=null){
bufWriter.close();
)
}catch(lOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
)
)
)
/**
*登录验证
*/
publicAccountverifyAccount(longid,
Stringpassword){
Accountaccount=null;
Accountacc=null;
for(Iteratoriterator=
accountsList.iterator();
iterator.hasNext();)
{〃若存在账户
acc=(Account)iterator,next();
if(acc!=null){
if(id==acc.getldO&&
password,equals(acc.getPassword())){
account=acc;
break;
)
)
else
(
break;
)
)
returnaccount;
)
/**
*转账验证(方法的重载)
*/
publicAccountverifyAccount(longid){
Accountaccount=null;
Accountacc=null;
for(Iteratoriterator=
accountsList.iterator();
iterator.hasNext();)
(〃若存在账户
acc=(Account)iterator,next();
if(acc!=null){
if(id==acc.getldO){
account=acc;
break;
}
)
else
(
break;
)
)
returnaccount;
)
/**
*转账
*/
publicvoidtransferAccount(Account
account1,Accountaccount2,doublemoney){
account1.withdraw(money);
account2.deposit(money);
)
/**
*存款
*/
publicvoiddeposit(Accountaccount,
doublemoney){
account,deposit(money);
)
/**
*取款
*/
publicvoidwithdraw(Accountaccount,
doublemoney){
account.withdraw(money);
ATMLoginFrame类
packagecom.qx;
importjava.awt.Dimension;
importjava.awt.GridLayout;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JTextField;
publicclassATMLoginFrameextendsJFrame{
privateJLabeljblCardNo,jblPasswd;
privateJTextFieldjtfCardNo,jtfPasswd;
privateJButton
jbOk,jbCancel,jbOpenAccount;
privateJPaneljpl,jp2,jp3,jp4;
privateBankbank;
publicATMLoginFrame(){
bank=newBank();
〃实例化所有组件
jblCardNo=newJLabel("用户名:“);
jblPasswd=newJLabel(“密码・")・
jtfCardNo=newJTextField(20);
jtfPasswd=newJTextField(20);
jb0k=newJButton(“确定");
jbCancel=newJButton(〃取消“);
jbOpenAccount=newJButton(“没有账户,
开户〃);
jpl=newJPanel()
jp2=newJPanel();
jp3=newJPanel();
jp4=newJPanel();
jpl.add(jblCardNo);
jpl.add(jtfCardNo);
jp2.add(jblPasswd);
jp2.add(jtfPasswd);
jp3.add(jbOk);
jp3.add(jbCancel);
jp4.add(jbOpenAccount);
〃将每行逐行添加到frame中
this,add(jpl);
this.add(jp2);
this.add(jp3);
this.add(jp4);
this.setLayout(newGridLayout(4,
1));〃取消默认管理器,设置为3行1列的网格
布局
Dimension
d二Toolkit.getDefaultToolkit().getScreenSi
ze();
this.setTitle(〃登陆界面〃);
this.setBounds((d.width-300)/2,
(d.height-200)/2,300,200);
this.setDefaultCloseOperation(JFrame.EX
IT_ON_CLOSE);〃设置关闭窗口时JVM同时推出
this.pack();〃调整窗口至能容纳组件的
最小尺寸
this.setVisible(true);〃设置窗口可见
this.setResizable(false);〃不能最大化
〃使用匿名内部类给2个按钮注册监听器
jbCancel.addActionListener(
newActionListener0{
publicvoid
actionPerformed(ActionEvente){
dispose();〃关闭窗口
)
)
);
jbOk.addActionListener(
newActionListener(){
publicvoid
actionPerformed(ActionEvente){
〃取出用户界面输入的用户名和密
码
long
cardNo=Integer.parselnt(jtfCardNo.getText
0);
String
passwd=jtfPasswd.getText();
〃调用Bank的相关方法将二者与正
确的做比对
Account
account二bank.verifyAccount(cardNo,
passwd);
if(account!=null)〃假如正确,进
入操作界面
ATMMainFramemainFrame=new
ATMMainFrame(bank,account);〃进入操作界
dispose。;〃关闭登陆界面
}else{〃假如错误,使用对话框提
示错误信息
JOptionPane.showMessageDialog(null,“卡
号或密码错误〃,〃信息提示
”,JOptionPane.ERROR_MESSAGE);
);
jbOpenAccount.addActionListener(
newActionListener0{
publicvoid
actionPerformed(ActionEventargO){
ATMOpenAccountFrame
openFram=newATMOpenAccountFrame();
dispose。;〃关闭登陆界面
)
)
);
).
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
ATMLoginFrameatm=newATMLoginFrame();
ATMMainFrame类
packagecom.qx;
importjava.awt.Dimension;
importjava.awt.FlowLayout;
importjava.awt.GridLayout;
importjava.awt.Toolkit;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.util.Scanner;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
publicclassATMMainFrameextendsJFrame{
privateAccountaccount;
privateBankbank;
privateJButton
jbDeposit,jbWithdraw,jbCancel,jbQuery,jbT
ransfer;
privateJLabeljblMsg,jblName;
privateJPaneljpl,jp2,jp3,jp4;
/**
*@paramargs
*/
publicATMMainFrame(finalBank
bank,AccounttmpA){
this.account=tmpA;
this.bank=bank;
jbQuery=newJButton("查询”);
jbDeposit=newJButton("存款”);
jbWithdraw=newJButton("取款”);
jbTransfer=newJButton(“转账");
jbCancel=newJButton("退卡");
jblName=newJLabel("账户姓名:
+account.getName());
jblMsg=newJLabel();
jpl=newJPanel();
jp2=newJPanel0;
jp3=newJPanel()
jp4二newJPanel()
jpl.add(jbQuery);
jpl.add(jbDeposit);
jp2.add(jbWithdraw);
jp2.add(jbTransfer);
jp3.add(jbCancel);
jp4.add(jblName);
jp4.add(jblMsg);
〃将每行逐行添加到frame中
this,add(jpl);
this.add(jp2);
this.add(jp3);
this.add(jp4);
this.setLayout(newGridLayout(4,
D);〃取消默认管理器,设置为4行1列的网格
布局
Dimension
d=Toolkit.getDefaultToolkit().getScreenSi
ze();
this.setTitle("操作界〃);
this.setBounds((d.width-300)/2,
(d.height-200)/2,300,200);
this.setDefaultCloseOperation(JFrame.EX
IT_ON_CLOSE);〃设置关闭窗口时JVM同时推出
//this.pack();〃调整窗口至能容纳组件
的最小尺寸
this.setVisible(true);〃设置窗口可见
this.setResizable(false);
〃使用匿名内部类给查询按钮注册监听器
jbQuery.addActionListener(
newActionListener(){
publicvoid
actionPerformed(ActionEvente){
JOptionPane.showMessageDialog(null,“您
账户的当前余额为:"+account.getBalance(),
〃信息提示
〃,JOptionPane.INFORMATION_MESSAGE);
}
)
);
〃给存款按钮注册监听器
jbDeposit.addActionListener(
newActionListener(){
publicvoid
actionPerformed(ActionEventargO){
Strings=
JOptionPane.showInputDialog(“请输入存款金
额:〃);
double
money=Double.parseDouble((s.equals("")?"0
〃:s));
bank,deposit(account,money);
JOptionPane.showMessageDialog(null,“存
款成功!!!〃,〃信息提示〃,
JOptionPane.INFORMATION_MESSAGE);
jblName=newJLabel("账户姓名:
“+account.getName());
jblMsg.setText(,z余额:
“+account.getBalanceO);
)
)
);
〃给取款按钮注册监听器
jbWithdraw.addActionListener(
newActionListener(){
publicvoid
actionPerformed(ActionEventargO){
Strings=
JOptionPane.showInputDialog(”请输入取款金
额:”);
double
money二Double.parseDouble((s.equals("")?〃0
”:s));
bank,withdraw(account,money);
/*JOptionPane.showMessageDialog(nu11,“
取款成功!!!〃,〃信息提示〃,
JOptionPane.INFORMATION_MESSAGE);*/
jblName=newJLabel(“账户姓名:
/z+account.getName());
jblMsg.setText(,z余额:
“+account.getBalanceO);
)
)
);
〃给转账按钮注册监听器
jbTransfer.addActionListener(
newActionListener(){
publicvoid
actionPerformed(ActionEvente){
Stringsld
JOptionPane.showInputDialog(“请输入要转账
的卡号:〃);
longid2=Long.parseLong(sId);
Accountaccount2=
bank.verifyAccount(id2);
if(account2!=null)
(
StringsNum=
JOptionPane.showInputDialog(“请输入您要转
入账户的金额:〃);
double
money=Double.parseDouble((sNum.equals("")
?"0":sNum));
if(money<=account,balance)
(
bank,transferAccount(account,account2,
money);
JOptionPane.showMessageDialog(null,“转
账成功!!!〃,”信息提示〃,
JOptionPane.INFORMATION_MESSAGE);
)
else
(
JOptionPane.showMessageDialog(null,“抱
歉,您账户没有足够的金额!请查看后重新选择
输入!”,
〃信息提示
〃,JOptionPane.ERROR_MESSAGE);
else
JOptionPane.showMessageDialog(null,“抱
歉,没有找到您要转入的账户信息!请核对后重
新选择输入!〃,〃信息提示〃,
JOptionPane.ERROR_MESSAGE);
jblName=newJLabel("账户姓名:
〃+account.getName());
jblMsg.setText(,z余额:
“+account.getBalanceO);
)
)
);
〃给退卡按钮注册监听器
jbCancel.addActionListener(
newActionListener0{
publicvoid
action
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数据分析师招聘面试题集
- 深度解析(2026)《GBT 19183.1-2024电气和电子设备机械结构 户外机壳 第1部分:设计导则》
- 葵花油项目可行性研究报告(立项备案申请)
- 特需医疗:个性化需求与价值满足策略
- 深度解析(2026)《GBT 18992.1-2003冷热水用交联聚乙烯(PE-X)管道系统 第1部分总则》
- 仪器、仪表项目可行性分析报告范文
- 功率模块项目可行性分析报告范文(总投资10000万元)
- 深度解析(2026)《GBT 18571-2001小艇 舷外机便携式燃油系统》(2026年)深度解析
- 新媒体数据分析报告常见问题解答
- 建筑设计师面试考核要点解析
- 贵州大学开题报告
- JCT640-2010 顶进施工法用钢筋混凝土排水管
- 【社区智慧养老模式研究国内外文献综述4800字】
- 扁平疣的课件
- 教学查房课件-强直性脊柱炎
- 传染病报告卡
- 句法成分课件(共18张)统编版语文八年级上册
- 2023版中国近现代史纲要课件:07第七专题 星星之火可以燎原
- 通知书产品升级通知怎么写
- 气管插管术 气管插管术
- 大学《实验诊断学》实验八:病例分析培训课件
评论
0/150
提交评论