




免費(fèi)預(yù)覽已結(jié)束,剩余12頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
一、需求分析設(shè)計一個SP00LING輸出進(jìn)程和兩個請求輸出的用戶進(jìn)程,以及一個SP00LING輸出服務(wù)程序。當(dāng)請求輸出的用戶進(jìn)程希望輸出一系列信息時,調(diào)用輸出服務(wù)程序,由輸出服務(wù)程序?qū)⒃撔畔⑺腿胼敵鼍?。待遇到一個輸出結(jié)束標(biāo)志時,表示進(jìn)程該次的輸出文件輸出結(jié)束。之后,申請一個輸出請求塊(用來記錄請求輸出的用戶進(jìn)程的名字、信息在輸出井中的位置、要輸出信息的長度等),等待SP00LING進(jìn)程進(jìn)行輸出。SP00LING輸出進(jìn)程工作時,根據(jù)請求塊記錄的各進(jìn)程要輸出的信息,把信息輸出到文本框里。進(jìn)程調(diào)度采用隨機(jī)算法,這與進(jìn)程輸出信息的隨機(jī)性相一致。兩個請求輸出的用戶進(jìn)程的調(diào)度概率各為45,SP00LING輸出進(jìn)程為10,這由隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)數(shù)來模擬決定。編碼實(shí)現(xiàn)的平臺環(huán)境是JCreator4.50 Pro ,實(shí)現(xiàn)語言是Java。為每個進(jìn)程建立一個pcb,記錄進(jìn)程信息,進(jìn)程有5種狀態(tài):0為可執(zhí)行態(tài);1為等待狀態(tài)1,表示輸出井滿,請求輸出的用戶進(jìn)程等待;2為等待狀態(tài)2,表示請求輸出井空,SP00LING輸出進(jìn)程等待;3為等待狀態(tài)3,表示請求輸出井滿,請求輸出的用戶進(jìn)程等待;4為結(jié)束態(tài),進(jìn)程執(zhí)行完成。二、整體功能及設(shè)計1、數(shù)據(jù)結(jié)構(gòu):1)進(jìn)程控制塊PCBclass Pcb int id; 進(jìn)程標(biāo)識數(shù)int status; 進(jìn)程狀態(tài)int count; 要輸出的文件數(shù)int x; 進(jìn)程輸出時的臨時變量2)請求輸出塊Reqblock class Reqblock int repname; 請求進(jìn)程名int length; 本次輸出信息長度int addr; 信息在輸出井的首地址3)輸出井BUFFERint buffer3100buffer1100為用戶進(jìn)程1的輸出井,buffer2100為用戶進(jìn)程2的輸出井4)其他主要的控制變量和指針int c13;c11為輸出井buffer1的空間,c12為輸出井buffer2的空間int c232;c210、c220為輸出井bufferi第一個空閑指針 c211、c221為輸出井bufferi第一個滿指針int c3;reqblock的剩余個數(shù)int pt1;要輸出的第一個reqblock指針int pt2;第一個空閑reqblock指針2、主要類及其函數(shù) 1)主類public class Spooling public Spooling():構(gòu)造函數(shù),生成界面,為按鈕添加事件監(jiān)聽器 public void actionPerformed(ActionEvent e): 單擊事件響應(yīng)函數(shù) public void begin(): 點(diǎn)擊重置按鈕時,重新初始化界面 public void run() :點(diǎn)擊運(yùn)行時,轉(zhuǎn)入調(diào)度函數(shù) public static void main(String args): 生成Spooling類的對象 2)調(diào)度實(shí)施類class Manage public Manage(Spooling spooling1) :構(gòu)造函數(shù),對進(jìn)程的數(shù)據(jù)初始化 public void run() :SP00LING輸出模擬系統(tǒng)主控函數(shù),用隨機(jī)數(shù)來決定調(diào)度的進(jìn)程,使得兩個請求輸出的用戶進(jìn)程的調(diào)度概率各為45,SP00LING輸出進(jìn)程為10。 public int user(int name,int out,JTextArea textarea,JTextField field):SP00LING輸出服務(wù)程序,當(dāng)請求輸出的用戶進(jìn)程希望輸出一系列信息時,通過傳參調(diào)用輸出服務(wù)程序,由輸出服務(wù)程序?qū)⒃撔畔⑺腿胼敵鼍?public void spooling1() :SPOOLING輸出進(jìn)程,根據(jù)請求塊記錄的各進(jìn)程要輸出的信息,把信息輸出到文本框里。3、流程圖(1)SP00LING輸出模擬系統(tǒng)主控流程圖如圖1所示。NYX0.9且SPOOLING進(jìn)程為執(zhí)行態(tài)0.45X0.9且進(jìn)程2為執(zhí)行態(tài)X0.45且進(jìn)程1為執(zhí)行態(tài)開始對各進(jìn)程的PCB、輸出請求快、輸出井初始化生成(0-1)隨機(jī)數(shù)X判斷X的值及進(jìn)程的狀態(tài)執(zhí)行請求輸出用戶進(jìn)程user(1)執(zhí)行請求輸出用戶進(jìn)程user(2)執(zhí)行SPOOLING進(jìn)程spooling()進(jìn)程都結(jié)束了嗎?結(jié)束返回YN圖1 SP00LING輸出模擬系統(tǒng)主控流程圖(2)SP00LING輸出服務(wù)程序流程圖如圖2所示。開始調(diào)用進(jìn)程PCBi的隨機(jī)輸出量送PCBi.x輸出井滿 (C10=0)嗎?進(jìn)程的輸出信息PCBi.x送bufferiC2i0C1i= C1i-1修改空緩沖區(qū)指針C2i0= C2i0+1調(diào)用進(jìn)程的一個文件,輸出結(jié)束了嗎? (PCBi.x=0?)還有空閑請求塊嗎?請求輸出的進(jìn)程等待,3送PCBi.status轉(zhuǎn)進(jìn)程調(diào)度請求輸出的進(jìn)程等待(1送PCBi.STATUS)轉(zhuǎn)進(jìn)程調(diào)度將文件在輸出井的位置和長度填入空閑請求塊,將進(jìn)程名i填入請求塊修改空閑請求塊指針空閑請求塊數(shù)減1YYYNNSPOOLING進(jìn)程是等待狀態(tài)嗎? NY喚醒SPOOLING進(jìn)程進(jìn)程所以輸出文件全部輸出完?N進(jìn)程i運(yùn)行結(jié)束Y轉(zhuǎn)進(jìn)程調(diào)度NY圖2 輸出請求服務(wù)的程序框圖(3)SPOOLING輸出進(jìn)程流程圖如圖3所示。NYNNNY開始請求輸出塊空嗎?兩個請求輸出的進(jìn)程結(jié)束了嗎?按該請求輸出信息塊reqlock的指針ptrl將輸出井中的一個文件的內(nèi)容輸出釋放相應(yīng)輸出井,即修改相應(yīng)的輸出井計數(shù):按請求輸出塊中進(jìn)程號修改C1數(shù)組和C2數(shù)組有等待輸出井空的進(jìn)程嗎?釋放該請求輸出塊,修改請求信息塊reqlock的指針ptrl=ptrl=1,C3=C3+1有等待輸出塊的進(jìn)程嗎?喚醒相應(yīng)進(jìn)程轉(zhuǎn)進(jìn)程調(diào)度SPOOLING進(jìn)程等待SPOOLING進(jìn)程結(jié)束返回返回喚醒相應(yīng)進(jìn)程轉(zhuǎn)進(jìn)程調(diào)度YYYNYYYNNN圖3 SP00LING輸出進(jìn)程流程圖三、編程實(shí)現(xiàn)import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.lang.Math;import java.util.Random;/*1)主類public class Spooling public Spooling():構(gòu)造函數(shù),生成界面,為按鈕添加事件監(jiān)聽器 public void actionPerformed(ActionEvent e): 單擊事件響應(yīng)函數(shù) public void begin(): 點(diǎn)擊重置按鈕時,重新初始化界面 public void run() :點(diǎn)擊運(yùn)行時,轉(zhuǎn)入調(diào)度函數(shù) public static void main(String args): 生成Spooling類的對象*/public class Spooling extends JFrame implements ActionListener,Runnable JPanel panel1,panel2,panel3; JTextField field1,field2; JScrollPane p1,p2,p3,p4; JTextArea textarea1,textarea2,textarea3,textarea4; JButton button1,button2,button3; Manage spoo; public Spooling()/界面構(gòu)造函數(shù) spoo=new Manage(this); Container c=this.getContentPane(); c.setLayout(new BorderLayout(); field1=new JTextField(3);/設(shè)置panel1 field2=new JTextField(3); button1=new JButton(運(yùn)行); button2=new JButton(關(guān)閉); button3=new JButton(重置); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); panel1=new JPanel(); panel1.setLayout(new FlowLayout(); panel1.add(new JLabel(用戶進(jìn)程1文件數(shù):,SwingConstants.RIGHT); panel1.add(field1); panel1.add(new JLabel(用戶進(jìn)程2文件數(shù):,SwingConstants.RIGHT); panel1.add(field2); panel1.add(button1); panel1.add(button3); panel1.add(button2);/設(shè)置panel1完畢 textarea1=new JTextArea(80,100);/設(shè)置panel2 textarea2=new JTextArea(112,400); textarea3=new JTextArea(112,400); textarea1.append(用戶進(jìn)程1的輸出n); textarea2.append(用戶進(jìn)程2的輸出n); textarea3.append(Spooling的調(diào)度n); p1=new JScrollPane(textarea3); p2=new JScrollPane(textarea1); p3=new JScrollPane(textarea2); panel2=new JPanel(); panel2.setLayout(new GridLayout(1,3); panel2.add(p1); panel2.add(p2); panel2.add(p3);/設(shè)置panel2完畢 textarea4=new JTextArea(10,150);/設(shè)置panel3 textarea4.append(主程序調(diào)度過程n); p4=new JScrollPane(textarea4); panel3=new JPanel(); panel3.setLayout(new GridLayout(1,1); panel3.add(p4);/設(shè)置panel3完畢 c.add(panel1,BorderLayout.NORTH);/設(shè)置窗口 c.add(panel2,BorderLayout.CENTER); c.add(panel3,BorderLayout.SOUTH); this.setSize(1200,600); this.setLocation(100, 100); this.setTitle(Spooling); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/設(shè)置窗口完畢 public void actionPerformed(ActionEvent e) if(e.getSource()=button1) /點(diǎn)擊運(yùn)行按鈕,run() run(); if(e.getSource()=button2) /點(diǎn)擊重置按鈕,begin() System.exit(0); if(e.getSource()=button3)/點(diǎn)擊推出按鈕,退出 begin(); public void begin() field1.setText();/點(diǎn)擊重置,重新初始化界面 field2.setText(); textarea1.setText(用戶進(jìn)程1的輸出n); textarea2.setText(用戶進(jìn)程2的輸出n); textarea3.setText(Spooling的調(diào)度n); textarea4.setText(主程序調(diào)度過程n); public void run() /點(diǎn)擊運(yùn)行時,轉(zhuǎn)入調(diào)度函數(shù) spoo.start(); public static void main(String args) Spooling spooling=new Spooling(); /*2)調(diào)度實(shí)施類class Manage public Manage(Spooling spooling1) :構(gòu)造函數(shù),對進(jìn)程的數(shù)據(jù)初始化 public void run() :SP00LING輸出模擬系統(tǒng)主控函數(shù),用隨機(jī)數(shù)來決定調(diào)度的進(jìn)程,使得兩個請求輸出的用戶進(jìn)程的調(diào)度概率各為45,SP00LING輸出進(jìn)程為10。 public int user(int name,int out,JTextArea textarea,JTextField field):SP00LING輸出服務(wù)程序,當(dāng)請求輸出的用戶進(jìn)程希望輸出一系列信息時,通過傳參調(diào)用輸出服務(wù)程序,由輸出服務(wù)程序?qū)⒃撔畔⑺腿胼敵鼍?public void spooling1() :SPOOLING輸出進(jìn)程,根據(jù)請求塊記錄的各進(jìn)程要輸出的信息,把信息輸出到文本框里。*/class Manage extends ThreadPcb pcb;Reqblock reqblock;int buffer;int c1;/可使用的輸出井buffer空間int c2;/輸出井buffer空閑和滿指針int c3;/reqblock的剩余個數(shù)int pt1;/要輸出的第一個reqblock指針int pt2;/第一個空閑reqblock指針double random; /用于調(diào)度三個進(jìn)程的控制隨機(jī)數(shù)int out1;/用戶進(jìn)程1已生成的文件數(shù)int out2;/用戶進(jìn)程2已生成的文件數(shù)int out_1;/用戶進(jìn)程1已輸出的文件數(shù)int out_2;/用戶進(jìn)程2已輸出的文件數(shù)int x;/隨機(jī)生成的數(shù)據(jù)09int i;/臨時控制變量Random x1;/輔助生成隨機(jī)數(shù)據(jù)x:09 Spooling spooling;public Manage(Spooling spooling1) /對各進(jìn)程的數(shù)據(jù)初始化out1=0;out2=0;out_1=0;out_2=0; pcb = new Pcb4;reqblock = new Reqblock10;buffer = new int3100;c1=new int3;c11=100;c12=100;c2=new int32;c210=0;c220=0;c3=10;pt1=0;pt2=0;x1=new Random();for(i=0;i4;i+)pcbi=new Pcb(); for(i=0;i10;i+) reqblocki=new Reqblock(); for(i=1;i=3;i+) pcbi.status=0; spooling=spooling1; /對各進(jìn)程的數(shù)據(jù)初始化完畢public void run() /進(jìn)程調(diào)度do/while循環(huán) random=Math.random();/產(chǎn)生一個隨機(jī)數(shù),控制進(jìn)程調(diào)度,令用戶進(jìn)程概率為45%,Spooling進(jìn)程為10%if(random0.45&random=0.9&random=c2name1) c1name=c1name+c2name0-c2name1; else c1name=c1name+100-c2name1+c2name0; c2name0=c2name1; textarea.append(第+(out+1)+個文件缺少輸出井,); textarea.append(進(jìn)入等待狀態(tài)1n); try sleep(1000); catch (InterruptedException e) e.printStackTrace(); return out; else/若輸出井沒滿 buffernamec2name0=pcbname.x;/進(jìn)程的輸出信息PCBi.x送bufferiC2i0 c1name=c1name-1; /輸出井空閑個數(shù)減1 c2name0=(c2name0+1)%100;/修改空緩沖區(qū)指針C2i0前進(jìn)1 while(x!=0); /判斷進(jìn)程的一個文件是否輸出完畢的while循環(huán)結(jié)束 textarea.append(第+(out+1)+個文件已放入輸出井:+c2name1+(c2name0-1)+ 剩余空間+c1name+。 ); try sleep(1000); catch (InterruptedException e) e.printStackTrace(); out+; if(c3=0) /若沒有空閑請求輸出塊,轉(zhuǎn)為等待狀態(tài)3 pcbname.status=3; if(c2name0=c2name1) c1name=c1name+c2name0-c2name1; else c1name=c1name+100-c2name1+c2name0; c2name0=c2name1; out-; textarea.append(缺少請求輸出塊,); textarea.append(進(jìn)入等待狀態(tài)3。n); try sleep(1000); catch (InterruptedException e) e.printStackTrace(); out+; return out; else/若有空閑請求輸出塊 reqblockpt2.addr=c2name1;/將文件在輸出井的位置填入空閑請求塊 if(c2name0=c2name1) /將文件在輸出井的長度填入空閑請求塊 reqblockpt2.length=c2name0-c2name1; else reqblockpt2.length=100-c2name1+c2name0; reqblockpt2.repname=name; /將進(jìn)程名i填入請求塊 textarea.append(獲得請求輸出塊+(Integer.toString(pt2+1)+n); pt2=(pt2+1)%10;/修改空閑請求塊指針 c3-;/空閑請求塊數(shù)減1 if(pcb3.status=2)/若SPOOLING進(jìn)程是等待狀態(tài),則喚醒SPOOLING進(jìn)程 pcb3.status=0; /判斷進(jìn)程所要輸出的文件是否輸出完畢的while循環(huán)結(jié)束 textarea.append(進(jìn)程+name+輸出完畢!);/文件輸出完畢,修改狀態(tài)為結(jié)束,轉(zhuǎn)進(jìn)程調(diào)度 pcbname.status=4; return out; public void spooling1() while(c3!=10)/判斷請求輸出塊是否為空的while循環(huán) /若請求輸出塊不為空 StringBuffer buffer1=new StringBuffer(100); for(i=0;ireqblockpt1.length;i+) /按該請求輸出信息塊reqlock的指針ptrl將輸出井中的一個文件的內(nèi)容放入臨時buffer1中 buffer1.append(bufferreqblockpt1.repnamereqblockpt1.addr); reqblockpt1.addr=(reqblockpt1.addr+1)%100; if(reqblockpt1.repname=1) out_1+; spooling.textarea3.append(輸出進(jìn)程1第+out_1+個文件的內(nèi)容:); else out_2+; spooling.textarea3.append(輸出進(jìn)程2第+out_2+個文件的內(nèi)容:); spooling.textarea3.append(buffer1.toString()+n); try sleep(1000); catch (InterruptedException e) e.printStackTrace(); /釋放相應(yīng)輸出井,即修改相應(yīng)的輸出井計數(shù)c1c1reqblockpt1.repname=c1reqblockpt1.repname+reqblockpt1.length; pt1=(pt1+1)%10; c3+; int k; for(k=1;k=2;k+) if(pcbk.status=1)/有等待輸出井的進(jìn)程,喚醒相應(yīng)進(jìn)程,轉(zhuǎn)進(jìn)程調(diào)度 pcbk.status=0; return; for(k=1;k=2;k+) if(pcbk.status=3) /有等待請求輸出塊的進(jìn)程,喚醒相應(yīng)進(jìn)程 pcbk.status=0; return; /判斷請求輸出塊是否為空的while循環(huán)結(jié)束 if(pcb1.status=4&pcb2.status=4)/進(jìn)程1、2結(jié)束后輸出進(jìn)程結(jié)束pcb3.status=4;spooling.textarea3.append(Spooling輸出進(jìn)程結(jié)束); return;else /輸出進(jìn)程等待pcb3.status=2;return; class Pcb int id;/進(jìn)程標(biāo)識數(shù)int status;/進(jìn)程狀態(tài)int count;/要輸出的文件數(shù)int x;/進(jìn)程輸出時的臨時變量class Reqblock int repname;/請求進(jìn)程名int length;/本次輸出信息長度int addr;/信息在輸出井的首地址四、使用說明運(yùn)行界面如下圖1所示。圖1 運(yùn)行結(jié)果1、在“用戶進(jìn)程1文件數(shù)”和“用戶進(jìn)程2文件數(shù)”的文本框里填入要輸出的文件數(shù)。2、點(diǎn)擊“運(yùn)行”按鈕開始運(yùn)行。3、最底下的“主程序調(diào)度過程”文本區(qū)會顯示每次調(diào)度的進(jìn)程。4、左邊的“Spooling的調(diào)度”文本區(qū)會把請求輸出塊的指針?biāo)镜男畔⑤敵觥?、中間的“用戶進(jìn)程1的輸出”文本區(qū)會顯示用戶進(jìn)程1每個文件的占用輸出井和請求輸出塊的情況。6、右邊的“用戶進(jìn)程2的輸出”文本區(qū)會顯示用戶進(jìn)程2每個文件的占用輸出井和請求輸出塊的情況。7、點(diǎn)擊“重置”按鈕,回到最初界面。8、點(diǎn)擊“關(guān)閉”按鈕,關(guān)閉運(yùn)行窗口。五、結(jié)果分析 在“用戶進(jìn)程1文件數(shù)”和“用戶進(jìn)程2文件數(shù)”的文本框里分別填入3和11,點(diǎn)擊“運(yùn)行”按鈕,得到的結(jié)果如上圖1所示,每次的調(diào)度都用“*”隔開,從圖中的數(shù)據(jù)可以分析出運(yùn)行的順序?yàn)椋?、主程序選擇調(diào)度用戶進(jìn)程2,“用戶進(jìn)程2的輸出”顯示第110個文件成功得到輸出井資源buffer2071和請求輸出塊資源reqblock09。第11個文件缺少reqblock,申請失敗,進(jìn)入等待狀態(tài)3,轉(zhuǎn)調(diào)度函數(shù)。2、主程序選擇調(diào)度用戶進(jìn)程1,“用戶進(jìn)程1的輸出”顯示第1個文件缺少reqblock,申請失敗,進(jìn)入等待狀態(tài)3,轉(zhuǎn)調(diào)度函數(shù)。3、用戶進(jìn)程1、2都處于等待狀態(tài)3,主程序只能選擇調(diào)度Spooling進(jìn)程,“Spooling的調(diào)度”顯示第110個reqblock所指的信息,即用戶進(jìn)程2的第110個文件,喚醒等待輸出井和請求塊的進(jìn)程,用戶進(jìn)程1、2都變?yōu)閳?zhí)行狀態(tài)0。4、主程序選擇調(diào)度用戶進(jìn)程1,“用戶進(jìn)程1的輸出”顯示第13個文件成功得到輸出井資源buffer
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二年級思維訓(xùn)練數(shù)學(xué)試卷
- 高一升高二理科數(shù)學(xué)試卷
- 恩波考研數(shù)學(xué)試卷
- 高一上學(xué)期段考數(shù)學(xué)試卷
- 高三中考前沖刺數(shù)學(xué)試卷
- 2025年03月內(nèi)蒙古呼倫貝爾市滿洲里市中蒙醫(yī)院招聘衛(wèi)生專業(yè)技術(shù)人員17人筆試歷年專業(yè)考點(diǎn)(難、易錯點(diǎn))附帶答案詳解
- 2024年11月公考時政常識積累(16日)筆試歷年參考題庫附帶答案詳解
- 2025年04月山東聊城市茌平區(qū)“茌平優(yōu)才校園直引”衛(wèi)生類事業(yè)單位人才引進(jìn)34人筆試歷年專業(yè)考點(diǎn)(難、易錯點(diǎn))附帶答案詳解
- 2025至2030不銹鋼通信配件市場行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 東北高三數(shù)學(xué)試卷
- 2025年廣西公需科目答案01
- 第二屆全國化工和醫(yī)藥行業(yè)安全生產(chǎn)線上知識競賽題庫(共150題)
- JJF1033-2023計量標(biāo)準(zhǔn)考核規(guī)范
- 2024年吉林長春市中考地理試卷真題(含答案解析)
- 河北傳統(tǒng)醫(yī)學(xué)師承關(guān)系合同書
- 三級安全教育登記卡(新)
- 一畝茶園認(rèn)養(yǎng)合同
- 2022年鎮(zhèn)海中學(xué)提前招生模擬卷科學(xué)試卷
- 水井坊自動化釀酒設(shè)備技術(shù)方案文件
- 變電站新建工程土方開挖專項(xiàng)施工方案
- 廣東話粵語姓名拼音大全
評論
0/150
提交評論