




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、C語言大作業(yè)設計說明書 - 火車站售票系統(tǒng)學 號:姓 名:班 級:指導教師:2008年6月23日- 6 月27日目錄第一章課程認識第二章課題選擇第三章總體設計與分析第四章模塊詳細設計第五章主要實現(xiàn)方法第六章課程設計總結第七章結論第八章建議一、課程的性質(zhì)、任務、目的 C語言是非常優(yōu)秀的程序設計語言,應用廣泛,是高校計算機專業(yè)的一門專業(yè)基礎課程;學好C語言,是學習計算機專業(yè)課程和用好計算機的重要基礎。要學好C語言,應抓好理論學習、上機實驗以及綜合應用這三個環(huán)節(jié)。在C程序設計課程的學習中,學生在掌握C語言理論知識的同時,通過上機實驗完成一定量的實踐性題目,初步掌握了程序設計的基本思想、基本概念和基本
2、方法。本課程是計算機專業(yè)的學生在完成了C程序設計課程的學習后,為加強學生對程序設計思想的理解、通過解決有一定代表性的小型綜合應用類課題從而提高實際編程能力而設置的一門實踐性課程。本課程為學生提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機地結合起來,培養(yǎng)和鍛煉學生分工協(xié)作、分析和解決實際問題并利用計算機求解問題的能力,以提高學生適應實際,實踐編程的能力,從而掌握基本的程序設計過程和技巧,具備初步的高級語言程序設計和調(diào)試能力。二、課題選擇(背景、意義、實用性);背景:現(xiàn)今,人們的生活水平漸漸改善,生活質(zhì)量也隨之提高,人們的精神需求也大了,應此,出行旅游,或是走訪親友成了習以為
3、常的事了,出行已成為現(xiàn)代人的家常便飯,汽車,火車,飛機等交通工具為我們提供了更多的方便。然而在售票中,就需要一個售票系統(tǒng)來幫助售票員來更為快捷,高效,方便的售票,同時也為了車站方面更好的管理票務,因此,一個好的車票管理系統(tǒng)就必不可少了。意義:選擇車站售票系統(tǒng)作為課程設計的課題,就車站的售票流程等進一步了解車站的售票系統(tǒng)的原理。在編程過程中能力培養(yǎng)我們團結協(xié)作和項目管理能力:設計任務分配和模塊劃分、參考資料共享、系統(tǒng)基本信息的建立與共享、作業(yè)中技術難題的討論與實驗、系統(tǒng)的聯(lián)合調(diào)試、文檔資料的建立與維護。自學能力和文獻查閱能力項目開發(fā)基本流程理解、規(guī)劃和實施。程序調(diào)試能力:程序開發(fā)中常用的單步調(diào)試
4、、斷點設置、中間結果輸出等。項目測試能力:掌握基本的測試要素,能完成單體測試和綜合測試過程。良好的編程風格:代碼縮進書寫,合理劃分子程序,為程序添加必要的注釋以方便程序閱讀和維護,采用菜單、圖形或各種提示說明方便用戶使用程序。實用性:火車站售票系統(tǒng)。隨著列車的再次提速,車次也明顯增加,新開路線增多,因此票務也變得越來越復雜,而一個便捷,高效的票務管理系統(tǒng)就必不可少了。三、總體設計與分析(總體框架圖及簡要功能說明);就我們的程序來說,總體框架圖如下:退出火車站售票系統(tǒng)管理員售票員修改列車信息刪除已無列車信息修改管理員密碼售票換票退票修改售票員密碼添加新增列車信息退出系統(tǒng)上圖就是簡易的結構圖,先制
5、作一個主菜單,進入售票系統(tǒng)的主頁面,上面的出現(xiàn)選擇菜單,可以根據(jù)你輸入的字符來選擇進入那個部分,分別為管理員與售票員兩種,另外,不管是管理員還是售票員,都有一個退出的選擇,對于現(xiàn)實生活中的情況,由于在操作時的隨意性很大,退出選項并不是退出系統(tǒng),而是退回到主菜單,則又可以進行選擇輸入,也可以從管理跳到售票員,而這樣就具有人性化了,在管理員修改資料庫后必須要檢查,所以就要進入售票系統(tǒng),檢查票務是否已經(jīng)修改或刪除完成,在主菜單中可以自由選擇。在售票員的系統(tǒng)中又分類進行,劃分了五個模塊,有售票,換票,還有退票,最后一個就是退出了,可以退到主菜單,在售票中每次都會可以退到售票員。四、模塊詳細設計(流程圖
6、+說明+承擔任務);售票員的總體框架圖如下:售票員售票選擇1換票選擇2退出選擇5退票選擇3修改密碼選擇4主菜單說明:售票員的程序中也包括了五個部分,分為售票,退票,換票和修改密碼以及退出操作,前面的四個部分是基本操作,能夠?qū)υ募M行操作的程序,同樣是退到主菜單的操作,每次基本操作玩了之后,又會自動轉(zhuǎn)到售票員的主頁面去,而退出和以上的管理員的是一樣的,自動退到主菜單。下面主要介紹的是售票員的部分。五、主要實現(xiàn)方法(結構體、文件、函數(shù)、指針、主要程序段);程序中用到的結構體如下:struct trianchar name10;char qs20;char zd20;char date20;cha
7、r time120;char time220;int price;int num; triN,ticketN;說明:在結構體中triN,ticketN;由于一組兩個人的分工不一樣,所以在編程時由于喜好不一樣就用了兩個不一樣的結構體變量,在拼湊時,由于用到的地方很多,難以逐個修改,應此就在定義結構體變量時,引用了兩個不一樣的變量,不過他們承載的功能是一樣的,只是形式不一樣而已。再來觀察結構體,在結構體中定義了出發(fā)地,目的地,日期,出發(fā)時刻,到達時刻,還有價格,另外,為了高效便捷的記錄下票的張數(shù),以及座位號碼,而座位號碼又是根據(jù)票的張數(shù)來排的,這樣有減少了計算機的工作量又簡捷。文件:D:票.txt
8、D:密碼.txtD:secret.txt 說明:在程序運行中總共會用得到以上三個文件,第一個是要調(diào)用的票務文件,里面總共包括了所有的票務信息,無論是在管理員還是售票員的程序里,自始至終都要用到這個文件,在管理員中,有對列車信息的修改,刪除和新增,這些的變化都得在寫進總的票務文件,要覆蓋掉原來的文件,以保證售票員的買票有效正常。在售票員的程序里,一直是用的票務文件,由于售票員的業(yè)務會比較多,差不多票務文件每時每刻都在被修改,所以每次修改后都要被保存到該文件中?!懊艽a”文件:該文件用于存放管理員的密碼,在第一次運行中程序時必須要先初始化一個密碼,這樣才能進入管理員的界面,在才能進入票務文件。在密碼
9、的修改中每次修改密碼后都必須把新的密碼寫入密碼文件,否則在下次打開時還是原始的密碼,而修改的并不能成功。詳細見后面程序說明,簡言之,就是存放管理員的的密碼的文件?!皊ecret”文件:該文見與密碼文件是差不多的,它是用看來保存售票員的密碼的,在程序初始化的時候也必須寫入一個初始化的密碼,在使用過程中如果要修改密碼,則該文件就是用來保存密碼的,當要換新的密碼時,由于在后面程序中有相關操作,會自動將要換的密碼寫進secret文件,并自動將原文件覆蓋掉, 從而再次進入 售票員的界面時則要輸入的密碼會修改成功,原來的密碼就不能在用了,會有系統(tǒng)提示“密碼輸入有誤! ”。主要函數(shù):(1)main函數(shù):vo
10、id main()output();int n,t=0;while (t=0)printf("*車站售票系統(tǒng)*n");printf("*請選擇用戶類型*n1管理員 2售票員 3退出n");scanf("%d",&n);system("cls");switch(n)case 1:guanliyuan();break;case 2: shoupiaoyuan();break;case 3: t=1;break;default: printf("輸入錯誤!n");說明: main函數(shù),主要是編
11、輯了主菜單,有三個選擇,會出現(xiàn)選擇來讓使用人進入那個部分,有管理員和售票員兩個,還有一個退出選項,使用了switch語句進行操作,先假定一個變量t,因為存在輸入錯誤的可能,只有當預設條件不成立時才會跳出循環(huán),所以假設t初始值為0,只有當條件成立時才能繼續(xù)執(zhí)行,即t=0時;當輸入錯誤的時候,則將t的值重新賦值給1,則引起條件改變,跳出循環(huán)。因此,一個主菜單就完成了。(2)shoupiaoyuan函數(shù)void shoupiaoyuan()char key128,key1128,id1128,id128="2" FILE *fp;/*fp=fopen("D:secret
12、.txt","wb");/第一次輸入售票員密碼,并將密碼寫進文if(fp=NULL)文件printf("Open Error!n");return;char s128="2"fprintf(fp,"%s",s);fclose(fp);*/即初始化密碼,也可用于一鍵還原。fp=fopen("D: secret.txt","rb");if(fp=NULL)printf("Open Error!n");return; fscanf(fp,"%
13、s",key);int flag=1;int n,i=0;printf("ttt*售票員*n");printf("請輸入工號:");scanf("%s",id1);printf("請輸入密碼:");while(1)/密碼出入處理,出入字符,輸出“*”號key1i=getch();if(key1i=13)break;putchar('*');i+;key1i='0'printf("n");system("cls");/輸入密碼清屏一次i
14、f (strcmp(id1,id)=0&&strcmp(key1,key)=0)printf("ttt*welcome*n");while(flag=1)/ flag標記,用于實現(xiàn)循環(huán)printf("請選擇操作:n1售票n2換票n3退票n4修改工作密碼n5退出n");scanf("%d",&n);switch(n)case 1:sell();break;case 2: change();break;case 3: back();break;case 4: secret();break;case 5: flag=
15、0;break;default:printf("輸入錯誤,請重新輸入!n");else printf("登陸錯誤,前重新輸入!n");system("cls");fclose(fp);說明:在第一個被取消掉的部分就是密碼的初始化程序,同時也用了switch函數(shù),進行了函數(shù)選擇運行的工作,下一部分中,從secret的文件中讀出原始密碼,在提示語后輸入字符后就進行與原密碼的比對,如果相符就可以進如下一步操作,不相符的話就輸出“登陸錯誤,請重新輸入!”,在售票員的主界面中也有選擇操作,再次運用了switch語句,就不做過多的介紹了。(3)s
16、ell函數(shù)-售票函數(shù)void sell()time_t now;now=time(NULL);char s1128,s2128,s3128,s4128;char a;FILE *fp;int i,len,t,n,m=1;fp=fopen("D: 票.txt","rb"); if(fp=NULL)printf("Open Error!n");return;for(i=0;!feof(fp);i+)/讀取文件信息,逐條讀出,當沒有時結束fread(&ticketi,sizeof(struct trian),1,fp);len=i-
17、1; printf("請輸入出發(fā)地(全拼):");scanf("%s",s1);printf("請輸入目的地(全拼):");scanf("%s",s2);for(i=0;i<len;i+) 當輸入的字符串符合條件的話則輸出符合的條件的語句if(strcmp(ticketi.qs,s1)=0&&strcmp(ticketi.zd,s2)=0)printf("%-10s %-10s %-10s %-10s %-10s %-10s %3dn",,ticke
18、ti.qs,ticketi.zd,ticketi.date,ticketi.time1,ticketi.time2,ticketi.price);/ /m=0; 定義一個m,作為標記,用來判斷輸入的字符串在 文件中是否能夠找得到,只要能夠找的到,就讓m 等于0(上面定義里m=1),到下面if里面只要mif(m!=0) 不為0,就說明沒找到,否則,就是輸入正確的,則繼續(xù),m繼續(xù)賦值為1,用于下一個部分輸入的判printf("輸入錯誤!n");斷printf("按任意鍵繼續(xù).");a=getche();system("cls"); /當輸
19、入錯誤時,要重新輸入,則清屏一次return;m=1;printf("請輸入所需票的日期:");scanf("%s",s3);for(i=0;i<len;i+)if(strcmp(ticketi.qs,s1)=0&&strcmp(ticketi.zd,s2)=0&&strcmp(ticketi.date,s3)=0)printf("%-10s %-10s %-10s %-10s %-10s %-10s %3dn",,ticketi.qs,ticketi.zd,ticketi
20、.date,ticketi.time1,ticketi.time2,ticketi.price); m=0; 上一次的判斷結束后,m又賦值了給1if(m!=0)/同上的判斷一樣,利用了變量m值得的變化printf("輸入錯誤!n");printf("按任意鍵繼續(xù).");a=getche();return;m=1;printf("請輸入車次:"); scanf("%s",s4); printf("請輸入買的票的張數(shù):");scanf("%d",&n);for(i=0;i
21、<len;i+)if(strcmp(ticketi.qs,s1)=0&&strcmp(ticketi.zd,s2)=0&&strcmp(ticketi.date,s3)=0&&strcmp(,s4)=0) /買票成功了,則文件中的票的數(shù)據(jù)要更改,ticketi.num=ticketi.num-n; 票的張數(shù)要減去賣出的張數(shù),程序結束t=i; 時將剩余張數(shù)再次寫進文件m=0; if(strcmp(,s4)!=0) / 每輸入一次就判斷輸入的是否正確,以提高效率printf("輸入錯誤!
22、n");printf("按任意鍵繼續(xù).");a=getche();return;for(i=0;i<n;i+)printf("%-10s %-10s %-10s %-10s %-10s %-10s %3d %3dn",,tickett.qs,tickett.zd,tickett.date,tickett.time1,tickett.time2,tickett.price,tickett.num+n-i); /該條語句為將票有打印機打印出來的順序,最后將座位號,時間也打印在票上printf("%sn&quo
23、t;,ctime(&now); printf("該票剩余數(shù):%2dn",tickett.num);if(tickett.num<0)printf("無票! n");/如果讀出的剩下的票的張數(shù)小于0 時,則輸else 出無票printf("恭喜,購票成功! n");printf("按任意鍵繼續(xù).");a=getche();system("cls");/售完一次票清屏一次fclose(fp);fp=fopen("D: 票.txt","wb");f
24、or(i=0;i<len;i+)fwrite(&ticketi,sizeof(struct trian),1,fp);fclose(fp);說明:首先,打開票務文件,在進入買票的界面后,可以輸入出發(fā)地和目的地,輸入后則判斷一次,看在文件中是否能夠找的到,在判斷中用m變量來實現(xiàn),具體見程序旁說明,如果過輸入不正確則重新輸入,輸入正確則繼續(xù)輸入下一條字符串,當輸入的全部正確的話則將此票在文件中的num減去售出的張數(shù),在打出票時,用循環(huán)來實現(xiàn),座位號要按順序排下去,則用tickett.num+n-i實現(xiàn),先還原到原始票的張數(shù),在由于i是從0 開始增加的,就加上i,則可以 打出座位號了,
25、買了幾張就打幾張票出來,在打出的票上標有出發(fā)地,目的地,日期,出發(fā)時刻,到達時刻,票價,時間和座位號。(4)back函數(shù)-退票函數(shù)void back()char s1128,s2128,s3128,s4128;char a;int i,len,t,n,m=1;double money;FILE *fp;/售票員的操作,都是對文件的操作,應此每次都要fp=fopen("D: 票.txt","rb"); 先打開文件if(fp=NULL)printf("Open Error!n");return;for(i=0;!feof(fp);i+)f
26、read(&ticketi,sizeof(struct trian),1,fp);len=i-1;printf("請輸入要退的票的出發(fā)地(全拼):");scanf("%s",s1);printf("請輸入要退的票的目的地(全拼):");scanf("%s",s2);for(i=0;i<len;i+)if(strcmp(ticketi.qs,s1)=0&&strcmp(ticketi.zd,s2)=0)m=0;if(m!=0)/同樣對輸入的字符串在文件中查找判斷。用m來標記printf(
27、"輸入錯誤!n");printf("按任意鍵繼續(xù).");a=getche();system("cls");return;m=1;printf("請輸入所退的票的日期:");scanf("%s",s3);for(i=0;i<len;i+)if(strcmp(ticketi.qs,s1)=0&&strcmp(ticketi.zd,s2)=0&&strcmp(ticketi.date,s3)=0)m=0;if(m!=0) /同樣對輸入的字符串再次在文件中更精確地查
28、找判斷。用m來標記printf("輸入錯誤!n");printf("按任意鍵繼續(xù).");a=getche();system("cls");return;m=1;printf("請輸入車次:");scanf("%s",s4);for(i=0;i<len;i+)if(strcmp(ticketi.qs,s1)=0&&strcmp(ticketi.zd,s2)=0&&strcmp(ticketi.date,s3)=0&&strcmp(ticketi
29、.name,s4)=0)m=0;if(m!=0)/同樣用m來標記,實現(xiàn)下面的判斷功能printf("輸入錯誤!n");printf("按任意鍵繼續(xù).");a=getche();system("cls");return;m=1;printf("請輸入退的票的張數(shù):");scanf("%d",&n);for(i=0;i<len;i+)if(strcmp(ticketi.qs,s1)=0&&strcmp(ticketi.zd,s2)=0&&strcmp(t
30、icketi.date,s3)=0&&strcmp(,s4)=0)ticketi.num=ticketi.num+n;/printf("%d",ticketi.num);printf("333");t=i;money=tickett.price*0.8;/由于存在乘以80%,所printf("請返回顧客 %f 元n",money*n); 以票價要定義double型m=0;if(m!=0) /同樣用m來標記,實現(xiàn)下面的判斷功能printf("輸入錯誤!n");printf(&q
31、uot;按任意鍵繼續(xù).");a=getche();system("cls");return;m=1;/m重新賦值給1用于下一次的判斷fclose(fp);fp=fopen("D: 票.txt","wb");/再次打開文件對已改變的文件進行保存for(i=0;i<len;i+)fwrite(&ticketi,sizeof(struct trian),1,fp);fclose(fp);printf("退票成功!n按任意鍵繼續(xù).");a=getche();system("cls"
32、;);/清屏一次自動退出退票系統(tǒng),進入售票員主界面(5)change函數(shù)-換票函數(shù)換票函數(shù):即為售票函數(shù)與退票函數(shù)的集合,換票就是先退票在買票,具體請看sell函數(shù)和back函數(shù)。(6)secret函數(shù)-修改密碼函數(shù)void secret()system("cls");/ 進入密碼修改清屏一下,直接出現(xiàn)輸入提示語char a ;FILE *fp3;fp3=fopen("D: secret.txt","rb"); /先讀取存放原密碼的文件if(fp3=NULL) /正常打開printf("Open Error!n")
33、;return;char key128,key1128,newpass1128,newpass2128; fscanf(fp3,"%s",key);fclose(fp3);printf("請輸入原始密碼:");inti=0;while(1)/實現(xiàn)輸入字符而輸出“*”號key1i=getch();if(key1i=13)break;putchar('*');i+;key1i='0'printf("n");if(strcmp(key1,key)=0)do/一直運行至至條件不符合printf("請輸
34、入新密碼:");/第一次輸入密碼i=0;while(1) /實現(xiàn)“*”號輸出,不顯示字符以提newpass1i=getch();高安全性if(newpass1i=13)break;putchar('*');i+;newpass1i='0'printf("n"); printf("請再次輸入新密碼:");/第二次輸入密碼i=0;while(1)newpass2i=getch();if(newpass2i=13)break;putchar('*');i+;newpass2i='0'pr
35、intf("n");if(strcmp(newpass1,newpass2)!=0)/兩次的進行比較,如果兩次的不一樣,則不能正確修改,也不知道是第一次還是第二次輸入錯誤,則可以重新輸入printf("兩次不符,請重新更改:");printf("按任意鍵繼續(xù).");a=getche();system("cls");while(strcmp(newpass1,newpass2)!=0);/只有當兩次輸入完全一printf("恭喜,密碼修改成功!n"); 樣系統(tǒng)才會自動覆蓋printf("
36、按任意鍵繼續(xù)."); 原始secret文件a=getche();system("cls");fclose(fp3);fp3=fopen("D: secret.txt","wb");/將新改的密碼寫入secret文件fprintf(fp3,"%s",newpass1);fclose(fp3);elseprintf("密碼錯誤!n");說明:在密碼修改程序中,需要先輸入的密碼與原密碼,如果正確了才能進入修改程序,才會出現(xiàn)修改提示,你的新密碼必須連續(xù)輸入兩次,且兩次都必須一樣才能修改成功,而
37、不管是第一次輸入有誤還是第二次有誤,修改成功的密碼會被寫入secret文件被保存,用于下一次的登錄,下次登錄時用的就是新密碼了。六、課程設計總結(問題及解決、實現(xiàn)情況、評價、存在問題及改進思路);問題及解決:在開始時寫售票程序的時候,首先并沒又想到座位號的問題,因此在優(yōu)化的過程中有增加了座位號的輸出,巧妙地利用了票的剩余張數(shù)來作為座位號。在開始時從機房拷回家后總是不能運行,后來發(fā)現(xiàn)是文件打開的途徑不對,經(jīng)過幾次的教訓,就把途徑不變,把票文件,密碼文件,secret文件寫到了D盤根目錄里去,省去了很多不必要的工作量。在修改密碼時老是不能把新密碼寫入文件,結果改過來還是不能運行,經(jīng)過仔細的查看程序發(fā)現(xiàn)了問題,最終增加了寫入文件。還有在寫程序的過程中,每次都會遇到打開文件,則我們會用復制粘貼,而忘記了更改讀或?qū)懙姆绞?,因此在每次復制粘貼之后必須看一下有沒有要更改的,有的話一定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年03月浙江舟山市定海區(qū)部分事業(yè)單位公開招聘20人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年03月廣西科普傳播中心公開招聘7人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年03月吐魯番市人才引進(489人)筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- HR-3中性施膠專用變性淀粉項目風險評估報告
- 透明質(zhì)酸項目風險分析和評估報告
- 中低壓電纜連接件項目風險分析和評估報告
- 新型聚合物驅(qū)油劑項目安全風險評價報告
- 廣東水利電力職業(yè)技術學院《文化基礎》2023-2024學年第二學期期末試卷
- 內(nèi)蒙古北京八中烏蘭察布分校2025年高三3月綜合素質(zhì)檢測試題英語試題試卷含解析
- 山東工藝美術學院《公司戰(zhàn)略與風險管理》2023-2024學年第二學期期末試卷
- 《生活中的會計學》課程教學大綱
- 2023年高考英語試題及答案(江蘇卷)(直接打印Word)無錯版
- 硬筆書法全冊教案共20課時
- DB44-T 2198-2019城鄉(xiāng)社區(qū)協(xié)商工作規(guī)范-(高清現(xiàn)行)
- 資源環(huán)境信息系統(tǒng)(gis)課件
- 股東身份證明
- 本科大學生勞動教育理論與實踐教程第三章 教學課件
- 近代以來廣州外貿(mào)產(chǎn)業(yè)的發(fā)展歷程
- 29《馬說》2022中考語文文言文閱讀復習精選真題匯編(原卷版+解析版)
- 企業(yè)事業(yè)單位突發(fā)環(huán)境事件應急預案備案表范本
- 國內(nèi)外鋼結構焊接標準體系及國標鋼結構焊接規(guī)范介紹劉景鳳PPT教案
評論
0/150
提交評論