




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì) 計(jì)算機(jī)學(xué)院14060307班第67頁(yè) 共67頁(yè) 課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告課程管理系統(tǒng)計(jì)算機(jī)科學(xué)與工程學(xué)院14060307班董永博佳興晨光炳舒 靜目錄題目3分析過(guò)程與思路3算法5函數(shù)模塊介紹9源程序10運(yùn)行結(jié)果36課程設(shè)計(jì)總結(jié)42題目課程管理系統(tǒng)分析過(guò)程與思路課程管理系統(tǒng)首先要能夠分別實(shí)現(xiàn)課程信息的增加、刪除、查詢、修改。為了增加程序的實(shí)用性,應(yīng)當(dāng)能夠?qū)⑤斎氲恼n程信息通過(guò)存文件的方式將課程信息存入硬盤。而使用系統(tǒng)的可能是學(xué)生和管理員兩類,因此要實(shí)現(xiàn)根據(jù)登錄類型來(lái)開(kāi)放
2、應(yīng)有的功能。由于課程信息包含很多成員,例如課程編碼、課程名等。因此應(yīng)該用鏈表對(duì)信息進(jìn)行記錄,由于不清楚課程總數(shù),因此需要用動(dòng)態(tài)鏈表。動(dòng)態(tài)鏈表的使用需要聲明合適的結(jié)構(gòu)體,數(shù)據(jù)域中應(yīng)包含課程所包含的各個(gè)成員、指針域用來(lái)指向下一個(gè)結(jié)點(diǎn)。動(dòng)態(tài)鏈表的建立需要用到malloc函數(shù)。對(duì)已經(jīng)建立的鏈表需要存入文件,需要用到fwrite、fread、feof等文件處理函數(shù),保存文件要多次用到,因此應(yīng)該獨(dú)立做一個(gè)函數(shù)。刪除函數(shù)要用到諸如free函數(shù),為了防止刪除的結(jié)點(diǎn)為首結(jié)點(diǎn),刪除后找不到頭結(jié)點(diǎn),因此刪除函數(shù)應(yīng)該是一個(gè)指針函數(shù),用以返回刪除后的新的頭結(jié)點(diǎn)。登錄函數(shù)要返回一個(gè)值用以在其他函數(shù)中判斷登錄類型,以便針對(duì)
3、用戶開(kāi)放相應(yīng)的功能。課程管理系統(tǒng)課程管理系統(tǒng)登錄key學(xué)生登錄mainpage()管理員登陸mainpage()查詢serch()查詢serch()輸入inpt()添加add()刪除dele()修改alter()程序功能結(jié)構(gòu)示意圖算法NNY21開(kāi)始輸入登錄類型oO=?學(xué)生登錄管理員登錄mainpage()key函數(shù)簡(jiǎn)單算法字符串相等11輸入mm=?serch()退出inpt()結(jié)束O=?mainpage函數(shù)算法簡(jiǎn)單示意Save函數(shù)21!17&!2開(kāi)辟新節(jié)點(diǎn)輸入新節(jié)點(diǎn)數(shù)據(jù)輸入zz=?inpt函數(shù)算法簡(jiǎn)單示意開(kāi)辟新節(jié)點(diǎn)結(jié)點(diǎn)相連YYNYNYNYserch函數(shù)查看方式n=0?打開(kāi)文件文件為空開(kāi)辟結(jié)點(diǎn)讀
4、取文件數(shù)據(jù)已讀完文件為空Mainpage函數(shù)輸出一個(gè)結(jié)點(diǎn)完畢?查詢方式結(jié)點(diǎn)遍歷查找輸出重新?操作?添加add修改alter刪除deleSerch函數(shù)算法簡(jiǎn)單示意NNY輸入數(shù)據(jù)滿足條件異常處理示意pp1-前一結(jié)點(diǎn)p2-當(dāng)前結(jié)點(diǎn)p1-next=p2刪除首結(jié)點(diǎn)head=p1-nextfree(p2)return(head)free(p1)刪除函數(shù)簡(jiǎn)單示意函數(shù)模塊介紹void inpt();/輸入函數(shù):用以輸入一系列數(shù)據(jù),在文件中沒(méi)有課程信息數(shù)據(jù)或者需要全部更新時(shí)使用該函數(shù)模塊。void serch();/查詢函數(shù),用以查詢已經(jīng)存儲(chǔ)的課程信息。并通過(guò)調(diào)用其他函數(shù),來(lái)對(duì)課程信息進(jìn)行一系列操作。void
5、alter(int all,int b,lesson *head);/修改函數(shù),用以小規(guī)模的修改已經(jīng)存儲(chǔ)的課程信息。lesson *dele(int all,int b,lesson *head);/刪除函數(shù),用以刪除一些已經(jīng)失效了的課程信息。通過(guò)返回新鏈表的頭指針,以便對(duì)新鏈表進(jìn)行一系列操作。void save(int n,lesson *p);/保存函數(shù),用以將已經(jīng)建立的鏈表存入硬盤,便于隨時(shí)使用。void output(struct lesson *q2);/輸出函數(shù),用以將課程信息輸出到屏幕上顯示出來(lái)。void add(int all,lesson *head);/添加,用以在原課程信
6、息的基礎(chǔ)上添加新的課程信息。void mainpage();/主界面函數(shù)int key();/登錄函數(shù),通過(guò)返回值來(lái)判斷用戶類型,以開(kāi)放不同的功能。源程序#include#include#include#define len sizeof(struct lesson)#define print printf(輸入數(shù)據(jù)有誤,請(qǐng)重新輸入!n);int n,temp,o;struct lessonchar num5;/課程編碼char proj10;/課程名char crdt4;/學(xué)分char hour3;/學(xué)時(shí)char term2;/學(xué)期char week5;/周次char date5;/周日期(
7、周幾)char period5;/節(jié)次char room6;/教室struct lesson *next;/結(jié)構(gòu)體指針;void inpt();/輸入函數(shù)void serch();/查詢函數(shù)void alter(int all,int b,lesson *head);/修改函數(shù)lesson *dele(int all,int b,lesson *head);/刪除函數(shù)void save(int n,lesson *p);/保存函數(shù)void output(struct lesson *q2);/輸出函數(shù)void add(int all,lesson *head);/添加void mainpage
8、();/主界面函數(shù)int key();/登錄函數(shù)int main()田晨光o=key();/調(diào)用登錄函數(shù)mainpage();/調(diào)用主界面 return 0;void mainpage()/主界面函數(shù)永博int m=1;while(m=1)printf(*n);/ printf(* 輸入1增加課程 *n); printf(* 輸入2查詢課程 *n); printf(* 輸入3退出程序 *n); printf(*nn);doscanf(%d,&m);if(m3) print;/該循環(huán)體使用戶輸入選項(xiàng)代碼并判斷代碼是否合理while(m3); s
9、ystem(CLS);/清除屏幕內(nèi)容 switch(m)/通過(guò)switch語(yǔ)句轉(zhuǎn)向用戶選擇的功能函數(shù) case 1:inpt();break;/調(diào)用輸入函數(shù) case 2:serch();break;/調(diào)用查詢函數(shù) case 3:exit(0);break;/退出void inpt()/輸入函田晨光if(o=1)system(CLS);/清屏printf(沒(méi)有權(quán)限,請(qǐng)聯(lián)系管理員!n);mainpage();int k=1,z,x,i;struct lesson *head;/聲明一個(gè)lesson類型的結(jié)構(gòu)體指針,作為頭指針。struct lesson *p1,*p2;
10、/聲明兩個(gè)lesson類型的結(jié)構(gòu)體指針,建造鏈表。p1=p2=(struct lesson *)malloc(len);/使兩個(gè)結(jié)構(gòu)體指針都指向第一個(gè)節(jié)點(diǎn)n=0;/n用來(lái)從零開(kāi)始記錄當(dāng)前為第幾節(jié)點(diǎn) while(k=1)/循環(huán)輸入n=n+1;/循環(huán)體每執(zhí)行一次使n加1printf(請(qǐng)輸入課程編碼(1-4位字符串 例:001)n);/輸入數(shù)據(jù)doscanf(%s,&p1-num);if(strlen(p1-num)4) print;while(strlen(p1-num)4);printf(請(qǐng)輸入課程名(1-10位字符串 例:math)n);doscanf(%s,&p1-proj);if(strl
11、en(p1-proj)10) print; while(strlen(p1-proj)10);printf(請(qǐng)輸入學(xué)分(兩位實(shí)數(shù),整數(shù)部分1位,小數(shù)部分1位,例:1.5)n);dox=0;scanf(%s,&p1-crdt);if(strlen(p1-crdt)4) print;elsefor(i=0;icrdt)i57|(p1-crdt)icrdt)4|x=1);printf(請(qǐng)輸入學(xué)時(shí)(兩位整數(shù) 例:32)n);dox=0;scanf(%s,&p1-hour);if(strlen(p1-hour)3) print;elsefor(i=0;ihour)i57|(p1-hour)ihour)3
12、|x=1);printf(請(qǐng)輸入學(xué)期(以為整數(shù) 例:2)n);dox=0;scanf(%s,&p1-term);if(strlen(p1-term)2) print;elsefor(i=0;iterm)i57|(p1-term)iterm)2|x=1);printf(請(qǐng)輸入周次(例1-17)n);doscanf(%s,&p1-week);if(strlen(p1-week)5) print; while(strlen(p1-week)5); printf(請(qǐng)輸入日期(三位周日期 例:mon、sat)n);doscanf(%s,&p1-date);if(strlen(p1-date)3) pri
13、nt; while(strlen(p1-date)3); printf(請(qǐng)輸入節(jié)次(例:5-6)n);doscanf(%s,&p1-period);if(strlen(p1-period)5) print; while(strlen(p1-period)5);printf(請(qǐng)輸入教室(例:2-201)n);doscanf(%s,&p1-room);if(strlen(p1-room)6) print; while(strlen(p1-room)6);if(n=1) head=p1;/如果n=1,(即當(dāng)前為第一個(gè)節(jié)點(diǎn)),就使head指向頭結(jié)點(diǎn),作為頭指針。system(CLS);/輸入完畢,清屏
14、printf(*n);/輸出提示信息printf(* 輸入1繼續(xù)添加 *n); printf(* 輸入2保存并退出 *n); printf(*n);doscanf(%d,&z);if(z2) print;/該循環(huán)體使用戶輸入選項(xiàng)代碼并判斷代碼是否合理while(z2); if(z=1)/如果用戶選擇繼續(xù)添加,進(jìn)入該分支p1=(struct lesson *)malloc(len);/利用malloc函數(shù),開(kāi)辟一個(gè)新節(jié)點(diǎn) (p2-next)=p1;/令前一個(gè)結(jié)構(gòu)體的next指針指向后一個(gè)節(jié)點(diǎn),將兩個(gè)結(jié)構(gòu)體鏈接起來(lái)p2=p1;/令另一個(gè)指針也指向下一個(gè)節(jié)點(diǎn),便于下次使用else/如果用戶選擇保存并
15、退出選項(xiàng),進(jìn)入該分支。 (p2-next)=NULL;/令最后一個(gè)節(jié)點(diǎn)的next指針指向NULL; break;/跳出循環(huán)n=0-1;save(n,head);/調(diào)用save函數(shù),將已經(jīng)建立的鏈表存入文件mainpage();/返回主界面void save(int m,lesson *p)/save函數(shù),將數(shù)據(jù)保存到硬盤的文件中靜FILE *fp;/聲明一個(gè)文件指針lesson *p1=p;/聲明一個(gè)結(jié)構(gòu)體指針fp=fopen(D:data.txt,wb);/以寫為目的打開(kāi)D:data.txt路徑下的二進(jìn)制文件while(p-next!=NULL)/當(dāng)指針p指向的節(jié)點(diǎn)
16、中的next指針不為空時(shí)(證明沒(méi)有保存完畢),進(jìn)入循環(huán)體 if(fwrite(p,len,1,fp)!=1) printf(保存文件失?。);/用fwrite函數(shù)的返回值來(lái)反映是否成功保存每一個(gè)節(jié)點(diǎn) else printf(保存文件成功!n);p=p1-next;/使結(jié)構(gòu)體指針指向下一個(gè)節(jié)點(diǎn);p1=p;if(p-next=NULL&n=-1)if(fwrite(p,len,1,fp)!=1) printf(保存文件失敗!n);/用fwrite函數(shù)的返回值來(lái)反映是否成功保存每一個(gè)節(jié)點(diǎn) else printf(保存文件成功!n); fclose(fp);/關(guān)閉文件void serch()/查詢函
17、數(shù)(包含節(jié)點(diǎn)的刪除與修改董永博int i,k,m,j=1;/聲明一些需要用到的變量char p10;/聲明一個(gè)字符型數(shù)組,用以存放用戶輸入的需要查詢的相關(guān)信息struct lesson *q1,*q2,*head=NULL;/聲明讀取鏈表所需要的三個(gè)結(jié)構(gòu)體指針FILE *fp;/聲明一個(gè)文件指針do fp=fopen(D:data.txt,rb);/以讀取為目的打開(kāi)D:data.txt路徑下的二進(jìn)制文件 if(ferror(fp) clearerr(fp);/如果打開(kāi)文件錯(cuò)誤,立即清除錯(cuò)誤后產(chǎn)生的標(biāo)記,便于文件下次正常打開(kāi) if(fp=NULL)/如果文件指針指向NU
18、LL(代表該文件不存在)則進(jìn)入該分支 printf(無(wú)法打開(kāi)文件!n); exit(0); q1=q2=(struct lesson *)malloc(len);/文件打開(kāi)后,在內(nèi)存中開(kāi)辟空間,存放文件讀取到的數(shù)據(jù) fread(q1,len,1,fp);/讀取第一個(gè)節(jié)點(diǎn) if(feof(fp)/用feof函數(shù)的返回值來(lái)判斷該文件是否為空文件 printf(沒(méi)有存儲(chǔ)課程信息!n); mainpage(); q2=q1;/兩個(gè)指針同時(shí)指向第一個(gè)節(jié)點(diǎn) m=0;/將m 清零,便于接下來(lái)記錄節(jié)點(diǎn)總數(shù) while(!feof(fp)/利用feof函數(shù)的返回值來(lái)判斷文件是否讀取完畢 m=m+1;/記錄節(jié)點(diǎn)數(shù)
19、 if(m=1)head=q1;/如果為第一個(gè)節(jié)點(diǎn),使head指針指向該節(jié)點(diǎn) q1=(struct lesson *)malloc(len);/繼續(xù)開(kāi)辟下一個(gè)節(jié)點(diǎn) q2-next=q1;/將新節(jié)點(diǎn)與上一個(gè)節(jié)點(diǎn)鏈接起來(lái) q2=q1; fread(q1,len,1,fp);/讀取文件內(nèi)容,存入新節(jié)點(diǎn) q2-next=NULL;/文件讀取完畢后,令鏈表的最后一個(gè)節(jié)點(diǎn)的next指針指向NULL q1=q2=head;/兩個(gè)結(jié)構(gòu)體指針重新指向頭結(jié)點(diǎn)printf(*n);/輸出提示信息 printf(* 輸入0查看全部課程 *n); printf(* 輸入1按課程名查詢 *n); printf(* 輸入2
20、按課程編碼查詢 *n); printf(* 輸入3按周日期查詢 *n); printf(* 輸入4按起始周查詢 *n);printf(* 輸入5返回主界面 *n); printf(*nn); do scanf(%d,&k); if(k5) print; while(k5); switch(k) case 0:/當(dāng)用戶選擇查看全部課程信息時(shí),進(jìn)入該分支printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n); for(i=1;inext;/指針指向下一個(gè)結(jié)點(diǎn) q2=q1;q2-next=NULL; break; case 1:/當(dāng)用戶選擇按課程名查詢時(shí),進(jìn)入該分支 print
21、f(請(qǐng)輸入課程名?。?-10位字符串 例:math)n); do scanf(%s,&p); if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);/輸入要查詢的課程名 temp=0;/將temp歸零,便于記錄所查詢到的節(jié)點(diǎn)為第幾節(jié)點(diǎn),便于下面修改函數(shù)和刪除函數(shù)的查找 do if(!strcmp(q2-proj,p)/通過(guò)字符串比較來(lái)查找需要查找的信息 temp=temp+1;/記錄節(jié)點(diǎn)數(shù) printf(查詢到%s相關(guān)的課程信息為:nn,p);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n); output(q2
22、);/調(diào)用輸出函數(shù) break;/跳出循環(huán) else/如果內(nèi)容與用戶輸入字符串不相等,查找下一個(gè)節(jié)點(diǎn)j=j+1; q1=q2-next; q2=q1; while(q2-next!=NULL); if(temp=0) printf(未查詢到相關(guān)課程!n);/如果temp等于零,則代表沒(méi)有查詢到相關(guān)信息elseprintf(*n);/如果查詢到相關(guān)課程 printf(* 輸入0修改課程信息 *n); printf(* 輸入1刪除課程信息 *n);printf(* 輸入2添加課程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);i
23、f(o=1) printf(對(duì)不起,您沒(méi)有權(quán)限!請(qǐng)聯(lián)系管理員!n);/如果學(xué)生登錄,由于key函數(shù)返回值為1,就不開(kāi)放刪除修改功能else/如果是管理員登錄,則可以使用刪除,修改,添加等功能switch(k)/通過(guò)管理員的選擇代碼,分別調(diào)用不同的函數(shù) case 0:alter(m,j,head);break;/調(diào)用修改函數(shù),將查詢到的課程的位置,鏈表的總節(jié)點(diǎn)數(shù)。鏈表的頭指針傳給函數(shù) case 1:head=dele(m,j,head);break;/調(diào)用刪除函數(shù),將返回的指針作為下一次打開(kāi)的頭指針 case 2:add(m,head);break;/調(diào)用添加函數(shù),在鏈表的后面繼續(xù)添加 brea
24、k; case 2: printf(請(qǐng)輸入課程編碼(1-4位字符串 例:001)n);/輸入數(shù)據(jù) do scanf(%s,&p); if(strlen(q1-num)4) print; while(strlen(q1-num)4); temp=0; do if(!strcmp(q2-num,p) temp=temp+1; printf(查詢到編碼為%s的課程信息為:nn,p);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-next!=NULL);
25、 if(temp=0) printf(未查詢到相關(guān)課程!n);elseprintf(*n); printf(* 輸入0修改課程信息 *n); printf(* 輸入1刪除課程信息 *n); printf(* 輸入2添加課程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(對(duì)不起,您沒(méi)有權(quán)限!請(qǐng)聯(lián)系管理員!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:add(m,head
26、);break; break; case 3: printf(請(qǐng)輸入周日期?。ㄈ恢苋掌?例:mon、sat)n); do scanf(%s,&p); if(strlen(q1-date)3) print; while(strlen(q1-date)3); temp=0; do if(!strcmp(q2-date,p)temp=temp+1; printf(查詢到%s的課程信息為:nn,p);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-nex
27、t!=NULL); if(temp=0) printf(未查詢到相關(guān)課程!nn);elseprintf(*n); printf(* 輸入0修改課程信息 *n); printf(* 輸入1刪除課程信息 *n);printf(* 輸入2添加課程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(對(duì)不起,您沒(méi)有權(quán)限!請(qǐng)聯(lián)系管理員!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:a
28、dd(m,head);break; break; case 4: printf(請(qǐng)輸入起始周(例1-17)!n); do scanf(%s,&p); if(strlen(q1-week)5) print; while(strlen(q1-week)5); temp=0; do if(!strcmp(q2-week,p)temp=temp+1; printf(查詢到%s周的課程信息為:nn,p);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n); output(q2); break; elsej=j+1; q1=q2-next; q2=q1; while(q2-nex
29、t!=NULL); if(temp=0) printf(未查詢到相關(guān)課程!n);elseprintf(*n); printf(* 輸入0修改課程信息 *n); printf(* 輸入1刪除課程信息 *n);printf(* 輸入2添加課程信息 *n);printf(*n);do scanf(%d,&k); if(k2) print; while(k2);if(o=1) printf(對(duì)不起,您沒(méi)有權(quán)限!請(qǐng)聯(lián)系管理員!n);elseswitch(k) case 0:alter(m,j,head);break; case 1:head=dele(m,j,head);break; case 2:ad
30、d(m,head);break; break;case 5:mainpage();break;/返回主界面 printf(*n); printf(* 輸入0終止查詢并返回主界面 *n); printf(* 輸入1重新查詢 *n);printf(*n);scanf(%d,&j);system(CLS); while(j);if(j=0) mainpage();void alter(int all,int b,lesson *head)/修改課程函趙炳舒lesson *q1,*q2;int k,i,x;q1=q2=head;for(i=2;inext;q2=q1;prin
31、tf(您要修改的課程為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q2);printf(*n);/輸出提示信息 printf(* 輸入0修改課程編碼 *n); printf(* 輸入1修改課程名 *n);printf(* 輸入2修改學(xué)分 *n); printf(* 輸入3修改學(xué)時(shí) *n);printf(* 輸入4修改學(xué)期 *n); printf(* 輸入5修改周次 *n);printf(* 輸入6修改日期 *n); printf(* 輸入7修改節(jié)次 *n);printf(* 輸入8修改教室 *n);printf(*nn); do scan
32、f(%d,&k); if(k8) print; while(k8);switch(k)case 0:printf(您要修改的原編碼為%sn,q1-num);/提示修改的內(nèi)容printf(請(qǐng)輸入新編碼(1-4位字符串 例:001):n); do scanf(%s,&q1-num); if(strlen(q1-num)4) print; while(strlen(q1-num)4);printf(修改成功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);/輸出修改后本結(jié)點(diǎn)內(nèi)所有數(shù)據(jù)save(all,head);/保存修改break;
33、/跳出case 1:printf(您要修改的原課程名為%sn,q1-proj);printf(請(qǐng)輸入新課程名(1-10位字符串 例:math):n);do scanf(%s,&q1-proj); if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);printf(修改成功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 2:printf(您要修改的原學(xué)分為%fn,q1-crdt);printf(請(qǐng)輸入新學(xué)分:n); do x
34、=0; scanf(%s,&q1-crdt); if(strlen(q1-crdt)4) print; else for(i=0;icrdt)i57|(q1-crdt)icrdt)4|x=1);printf(修改成功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 3:printf(您要修改的原學(xué)時(shí)為%dn,q1-hour);printf(請(qǐng)輸入新學(xué)時(shí)(兩位整數(shù) 例:32):n); do x=0; scanf(%s,&q1-hour); if(strlen(q1-hour)3)
35、 print; else for(i=0;ihour)i57|(q1-hour)ihour)3|x=1);printf(修改成功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 4: printf(您要修改的原學(xué)期為%dn,q1-term);printf(請(qǐng)輸入新學(xué)期(一位整數(shù) 例:2):n); do x=0; scanf(%s,&q1-term); if(strlen(q1-term)2) print; else for(i=0;iterm)i57|(q1-term)iter
36、m)2|x=1);printf(修改成功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 5:printf(您要修改的原周次為%sn,q1-week);printf(請(qǐng)輸入新周次:n);do scanf(%s,&q1-week); if(strlen(q1-week)5) print; while(strlen(q1-week)5); printf(修改成功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);sav
37、e(all,head);break;case 6:printf(您要修改的原日期為%sn,q1-date);printf(請(qǐng)輸入新日期:n);do scanf(%s,&q1-date); if(strlen(q1-date)3) print; while(strlen(q1-date)3);printf(修改成功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 7:printf(您要修改的原節(jié)次為%sn,q1-period);printf(請(qǐng)輸入新節(jié)次:n);do scanf(
38、%s,&q1-period); if(strlen(q1-period)5) print; while(strlen(q1-period)5);printf(修改成功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;case 8:printf(您要修改的原教室為%sn,q1-room);printf(請(qǐng)輸入新教室:n);do scanf(%s,&q1-room); if(strlen(q1-room)6) print; while(strlen(q1-room)6);printf(修改成
39、功,結(jié)果為:n);printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);save(all,head);break;printf(*n);/提示選項(xiàng)信息 printf(* 輸入1繼續(xù)查詢課程 *n); printf(* 輸入2返回主界面 *n);printf(*nn); do scanf(%d,&k); if(k2) print; while(k2);switch(k)case 1:serch();break;/返回查詢函數(shù)case 2:mainpage();break;/返回主界面lesson *dele(int all,int b,lesson
40、*head)/刪除函靜int i,k;lesson *q1,*q2,*q3;q1=q2=q3=head;for(i=2;inext;q2=q1;printf(您要?jiǎng)h除的課程是:n);if(b=1)/如果要?jiǎng)h除的結(jié)點(diǎn)是第一個(gè)節(jié)點(diǎn),printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q1);elseq3=q1-next;/如果要?jiǎng)h除的結(jié)點(diǎn)不是第一個(gè)節(jié)點(diǎn)進(jìn)入該分支printf(課程編碼 課程名 學(xué)分 學(xué)時(shí) 學(xué)期 周次 日期 節(jié)次 教室n);output(q3);printf(*n);printf(* 輸入0確認(rèn)刪除 *n); prin
41、tf(* 輸入1取消刪除 *n);printf(*n);do scanf(%d,&k); if(k1) print;/是否確認(rèn)刪除 while(k1);if(!k)/如果確認(rèn)刪除,則進(jìn)入if(b=1)head=q1-next;/如果要?jiǎng)h除第一個(gè)節(jié)點(diǎn)q1-next=NULL;/令第一個(gè)節(jié)點(diǎn)的next指針指向NULLall=all-1;/使節(jié)點(diǎn)總數(shù)減少一個(gè)free(q1);/釋放第一個(gè)節(jié)點(diǎn)所占的內(nèi)存save(all,head);/向save函數(shù)提供新的頭指針,以便保存新鏈表else/如果要?jiǎng)h除的不是頭結(jié)點(diǎn)q3=q1-next;/令q3指向要?jiǎng)h除的結(jié)點(diǎn)q1=q3-next;/令q1指向要?jiǎng)h除節(jié)點(diǎn)的后
42、一個(gè)節(jié)點(diǎn)q2-next=q1;/令前一個(gè)結(jié)點(diǎn)的next指針指向后一個(gè)結(jié)點(diǎn)q3-next=NULL;/令要?jiǎng)h除的結(jié)點(diǎn)的next指針指向NULL all=all-1;/令節(jié)點(diǎn)總數(shù)減少一個(gè)free(q3);/釋放內(nèi)存 save(all,head);/保存新鏈表 return(head);/返回新的頭指針void add(int all,lesson *head)/添加函數(shù)陳佳興int i,z,x;lesson *q1,*q2;q1=q2=head;for(i=2;inext;q2=q1;q1=(struct lesson *)malloc(len);/開(kāi)辟新的內(nèi)存空間,來(lái)存
43、放新數(shù)據(jù)q2-next=q1;/將新節(jié)點(diǎn)連接到原來(lái)的最后一個(gè)節(jié)點(diǎn)上q2=q1;n=0;/使n歸零,以便于記錄新增的結(jié)點(diǎn)數(shù)do n=n+1;/記錄新增節(jié)點(diǎn)數(shù) printf(請(qǐng)輸入課程編碼(1-4位字符串 例:001)n);/輸入數(shù)據(jù)doscanf(%s,&q1-num);if(strlen(q1-num)4) print;while(strlen(q1-num)4);printf(請(qǐng)輸入課程名(1-10位字符串 例:math)n);doscanf(%s,&q1-proj);if(strlen(q1-proj)10) print; while(strlen(q1-proj)10);printf(請(qǐng)
44、輸入學(xué)分(兩位實(shí)數(shù),整數(shù)部分1位,小數(shù)部分1位,例:1.5)n);dox=0;scanf(%s,&q1-crdt);if(strlen(q1-crdt)4) print;elsefor(i=0;icrdt)i57|(q1-crdt)icrdt)4|x=1);printf(請(qǐng)輸入學(xué)時(shí)(兩位整數(shù) 例:32)n);dox=0;scanf(%s,&q1-hour);if(strlen(q1-hour)3) print;elsefor(i=0;ihour)i57|(q1-hour)ihour)3|x=1);printf(請(qǐng)輸入學(xué)期(以為整數(shù) 例:2)n);dox=0;scanf(%s,&q1-term)
45、;if(strlen(q1-term)2) print;elsefor(i=0;iterm)i57|(q1-term)iterm)2|x=1);printf(請(qǐng)輸入周次(例1-17)n);doscanf(%s,&q1-week);if(strlen(q1-week)5) print; while(strlen(q1-week)5); printf(請(qǐng)輸入日期(三位周日期 例:mon、sat)n);doscanf(%s,&q1-date);if(strlen(q1-date)3) print; while(strlen(q1-date)3); printf(請(qǐng)輸入節(jié)次(例:5-6)n);dosc
46、anf(%s,&q1-period);if(strlen(q1-period)5) print; while(strlen(q1-period)5);printf(請(qǐng)輸入教室(例:2-201)n);doscanf(%s,&q1-room);if(strlen(q1-room)6) print; while(strlen(q1-room)6); printf(*n); printf(* 輸入1繼續(xù)添加 *n);/輸出提示信息 printf(* 輸入2保存并退出 *n); printf(*n); do scanf(%d,&z); if(z2) print; while(z2); if(z=1)/如
47、果選擇繼續(xù)添加 q1=(struct lesson *)malloc(len);/開(kāi)辟新空間 (q2-next)=q1;/指針指向新結(jié)點(diǎn) q2=q1; else/如果選擇停止添加,并保存 (q2-next)=NULL;/令尾結(jié)點(diǎn)的next指針指向NULL break;/跳出while(1);n=n+all;/得到新鏈表的節(jié)點(diǎn)總數(shù) save(n,head);/傳參,保存void output(lesson *q2)/輸出函炳舒printf(%8s %6s %4s %4s %4s %4s %4s %4s %4sn,q2-num,q2-proj,q2-crdt,q2-hou
48、r,q2-term,q2-week,q2-date,q2-period,q2-room);int key()/登錄函數(shù)陳佳興char str110=a,d,m,i,n,str210;/聲明兩個(gè)字符串,并初始化其中一個(gè) int a,k; printf(*n); printf(* 輸入1學(xué)生登錄 *n); printf(* 輸入2管理員登錄 *n); printf(*n); do scanf(%d,&a);/輸入選項(xiàng),并記錄登錄類型 if(a2) print; while(a2);system(CLS); printf(請(qǐng)輸入密碼:);do scanf(%s,&str2)
49、;/輸入密碼(即另一個(gè)字符串的內(nèi)容) if(strcmp(str1,str2)=0)/進(jìn)行兩個(gè)字符串的對(duì)比,利用函數(shù)返回值確定兩個(gè)字符串是否相等,即密碼是否正確printf(登錄成功!nn);k=0; elseprintf(輸入密碼錯(cuò)誤,請(qǐng)重新輸入);k=1;while(k); return(a);/返回登錄類型代碼,即學(xué)生登錄或者管理員登錄運(yùn)行結(jié)果 首界面 管理員登錄界面 學(xué)生登錄選擇增加時(shí)界面 添加課程 輸入文件保存查看所有輸入課程 選擇查詢方式 輸出查詢結(jié)果 修改課程信息 保存修改信息 刪除課程信息課程設(shè)計(jì)總結(jié)以往學(xué)習(xí)的課程知識(shí)雖然也有過(guò)一些實(shí)踐機(jī)會(huì),但絕大多數(shù)的實(shí)踐都是一些較小的程序,
50、僅有幾十行甚至幾行代碼即可實(shí)現(xiàn)。此次大型系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),讓我們用到了所學(xué)過(guò)的每一點(diǎn)知識(shí),增強(qiáng)了對(duì)C語(yǔ)言的應(yīng)用能力。此外,非常重要的一點(diǎn)是增強(qiáng)了我們的團(tuán)隊(duì)合作意識(shí)和課外自學(xué)能力,由于其中用到的一些知識(shí),僅僅只接觸過(guò)理論知識(shí)而并沒(méi)有經(jīng)歷過(guò)實(shí)踐,為了能夠完成該項(xiàng)課程設(shè)計(jì),團(tuán)隊(duì)成員通過(guò)上網(wǎng)或圖書館查資料去學(xué)習(xí)并掌握一些本來(lái)不是特別熟練的一些算法和數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí)。在課程設(shè)計(jì)過(guò)程中,曾經(jīng)出現(xiàn)過(guò)很多的問(wèn)題。成員通過(guò)各種途徑獲得知識(shí),老師也給與了我們很大的幫助,為我們找出了很多問(wèn)題也解決了很多的問(wèn)題,對(duì)此小組非常感激。其中,老師特意提起的我們程序的模塊化的嚴(yán)重不足,導(dǎo)致語(yǔ)句有效率低,程序冗長(zhǎng),不容易讀懂
51、維護(hù)和修改。我們也深刻體會(huì)了模塊化不足所造成的不便,使我們認(rèn)識(shí)到了自己的不足,在今后的學(xué)習(xí)實(shí)踐中,我們會(huì)逐漸學(xué)著去完善自己的程序,使自己的程序更加精煉,更加易用。通過(guò)此次課程設(shè)計(jì)實(shí)踐和設(shè)計(jì)過(guò)程中的學(xué)習(xí),我們也看到了C語(yǔ)言的功能的強(qiáng)大。這是我們學(xué)習(xí)的第一門計(jì)算機(jī)程序語(yǔ)言課程,也是我們將來(lái)學(xué)習(xí)的基礎(chǔ),我們應(yīng)該掌握C語(yǔ)言的基本用法,深入研究更多的程序,多多實(shí)踐,以提高自己的實(shí)踐應(yīng)用能力。附錄資料:不需要的可以自行刪除 C語(yǔ)言-INT10中斷號(hào)視頻服務(wù)程序00H(設(shè)置視頻模式)輸入: AH=00H AL=視頻模式輸出: 無(wú) 說(shuō)明:視頻服務(wù)程序00H用來(lái)設(shè)置視頻配置為表10-l中列出之一。AL寄存器給定
52、所需視頻模式。若設(shè)置了新視頻模式,則清除屏幕。 視頻服務(wù)程序0lH(設(shè)置光標(biāo)大小)輸入: AH=01H CH=光標(biāo)開(kāi)始掃描行 CL=光標(biāo)結(jié)束掃描行輸出: 無(wú)說(shuō)明:該服務(wù)程序用于正文模式。在一個(gè)字符單元內(nèi)由一行或幾行組成的光標(biāo)將在字符顯示位置得閃爍。該服務(wù)程序定義光標(biāo)的顯示行數(shù)。對(duì)CGA模式,8掃描行(07)用于光標(biāo)。對(duì)EGA模式,使用14行(013)。MCGA和VGA適配器,光標(biāo)可具有16掃描行(015)高。缺省設(shè)置如下: CGA: CH6,CL7 EGA: CHll,CL12 MCGA和VGA: CH量13,CL1 視頻服務(wù)程序02H(設(shè)置光標(biāo)位置)輸入: AH=02H BH=光標(biāo)頁(yè)號(hào) DH
53、=光標(biāo)行號(hào) DL=光標(biāo)列號(hào)輸出: 無(wú)說(shuō)明:該服務(wù)器序用于將光標(biāo)移到指定行和列位置。該服務(wù)程序即可用于正文模式也可用于圖形模式;然而,僅在正文模式下才顯示光標(biāo)。屏幕左上角為坐標(biāo)系統(tǒng)的原點(diǎn)。對(duì)支持多頁(yè)的正文和圖形模式,則必須指定頁(yè)號(hào),以保證光標(biāo)位置正確。視頻服務(wù)程序03H(讀光標(biāo)位置)輸入: AH=03H BH=頁(yè)號(hào)輸出: CH=光標(biāo)開(kāi)始行 CL=光標(biāo)結(jié)束行 DH=行號(hào) DL列號(hào)說(shuō)明:該服務(wù)程序用于獲取光標(biāo)大小和位置。BH給定了頁(yè)號(hào)。CH中存放光標(biāo)開(kāi)始掃描行,而CL中為光標(biāo)結(jié)束掃描行。DH中存放行位置,DL中為列位置。視頻服務(wù)程序05H(設(shè)置活動(dòng)顯示頁(yè))輸入: AH=05H AL=活動(dòng)頁(yè)號(hào)輸出:
54、無(wú) 說(shuō)明:該服務(wù)程序?yàn)檎暮蛨D形模式用來(lái)設(shè)置活動(dòng)顯示頁(yè)號(hào)。AL指定所需頁(yè)號(hào)。對(duì)多數(shù)正文模式,頁(yè)號(hào)范圍為0一7。對(duì)具有足夠視頻緩沖EGA和VGA適配器,可支持多頁(yè)圖形。對(duì)所有正文和圖形模式,缺省為0頁(yè)。視頻服務(wù)程序06H(向上翻滾活動(dòng)窗口)。輸入:AH=06HAL=翻滾行數(shù)BH=空白行屬性CH左上角行號(hào)CL=左上角列號(hào) DH右下角行號(hào) Dl右下角列號(hào)輸出: 無(wú) 說(shuō)明:該服務(wù)程序用來(lái)創(chuàng)建和翻滾一正文窗口。CH和CL中給出了正文窗口左上角坐標(biāo),DH和DL中給出了正文窗口右下角坐標(biāo)。AL中定義了翻滾的行數(shù)。若AL00H,則正文窗口為空白。當(dāng)滾動(dòng)窗口時(shí),底部行是空白行,其屬性由BH中指定。視頻服務(wù)程序0
55、7H(向下翻滾窗口)輸入:AH=07HAL=翻滾行數(shù)BH=空白行屬性CH=左上角行號(hào)CL=左上角列號(hào)DH=右下角行號(hào)DL=右下角列號(hào)輸出: 無(wú)說(shuō)明:該服務(wù)程序用來(lái)創(chuàng)建和翻滾一正文窗口。CH和CL中給出了正文窗口左上角坐標(biāo),DH和DL中給出了正文窗口右下角坐標(biāo)。AL中定義了翻滾的行數(shù)。若AL00H,則正文窗口為空白。當(dāng)滾動(dòng)窗口時(shí),頂部行為空白,其屬性由BH中指定。視頻服務(wù)程序08H(讀字符和屬性)輸入: AH=08H BH=活動(dòng)頁(yè)號(hào)輸出: AH=字符屬性 AL=字符碼說(shuō)明:該服務(wù)程序用于讀取正文或視頻模式下,光標(biāo)所在處字符。在圖形模式下,獲取的字符同圖形模式下使用的字符生成表有關(guān)。在正文模式下,
56、將獲得字符的ASCII碼。字符屬性存放在AH中,字符ASCII碼存放在AL中。圖形模式下,AH中內(nèi)容無(wú)意義.視頻服務(wù)程序09H(寫字符和屬性)輸入: AH09H AL=寫字符的ASCII碼 BL=寫字符的屬性 BH=活動(dòng)頁(yè)號(hào) CX=重復(fù)寫字符和屬性次數(shù)輸出: 無(wú) 說(shuō)明:該服務(wù)程序?qū)懸粋€(gè)字符到屏幕當(dāng)前光標(biāo)處。AL中指定字符碼。正文模式下,BL中指定字符屬性。圖形模式下,BL指定背景顏色。字符可重復(fù)寫。CX為寫字符及屬性的次數(shù)。視頻服務(wù)程序0FH(取當(dāng)前視頻模式)輸入: AH0FH輸出: AH每行字符數(shù) AL當(dāng)前顯示模式 BH活動(dòng)頁(yè)號(hào)說(shuō)明:該服務(wù)程序用來(lái)獲取當(dāng)前視頻模式,屏幕寬(以字符計(jì)),以及活
57、動(dòng)顯示頁(yè)號(hào);視頻顯示模式存放在AL中。屏幕寬度(以字符計(jì))存放在AH中,活動(dòng)頁(yè)號(hào)存放在BH中。文件相關(guān)函數(shù)函數(shù)名: fopen功 能: 打開(kāi)一個(gè)流用 法: FILE *fopen(char *filename, char *type);函數(shù)名: fclose功 能: 關(guān)閉一個(gè)流用 法: int fclose(FILE *stream); fopen()函數(shù)提供了幾種打開(kāi)文件的方式,這是由其字符指針參數(shù)type決定的。以下給出打開(kāi)方式列表:參數(shù)作用R只讀W新建、可寫,如果文件存在則覆蓋A存在則在文件后附加,如果不存在則新建后寫r+更新一個(gè)存在的文件(讀和寫)w+增加一個(gè)新的文件更新(讀和寫),如
58、果文件存在則覆蓋a+存在則在文件后附加(讀和寫),如果不存在則新建后更新(讀和寫)*以文本模式打開(kāi)一個(gè)存在或新建的文件,附加”t”在參數(shù)后(rt, w+t, etc.)。*以二進(jìn)制模式打開(kāi)一個(gè)存在或者新建的文件,附加”b”在參數(shù)后(wb, a+b, etc.)。函數(shù)名: fseek功 能: 重定位流上的文件指針用 法: int fseek(FILE *stream,long offset,int fromwhere); 讀取文件函數(shù):函數(shù)名: fread功 能: 從一個(gè)流中讀數(shù)據(jù)用 法: int fread( void *ptr, int size, int nitems, FILE *str
59、eam ); 寫入文件函數(shù):函數(shù)名: fwrite功 能: 寫內(nèi)容到流中用 法: int fwrite( void *ptr, int size, int nitems, FILE *stream ); fseek()函數(shù)提供了文件指針的三個(gè)初始位置,這是由其參數(shù)fromwhere決定的,以下給出其列表:常量值文件定位SEEK_SET0從文件頭開(kāi)始尋找SEEK_CUR1從文件當(dāng)前位置開(kāi)始尋找SEEK_END2從文件最后開(kāi)始尋找函數(shù)名: fprintf功 能: 傳送格式化輸出到一個(gè)流中用 法: int fprintf( FILE *stream, char *format, argument,.
60、 );函數(shù)名: fscanf功 能: 從一個(gè)流中執(zhí)行格式化輸入用 法: int fscanf( FILE *stream, char *format,argument. );發(fā)聲函數(shù)函數(shù)名: sound功 能: 以指定頻率打開(kāi)PC揚(yáng)聲器用 法: void sound(unsigned frequency);函數(shù)名: nosound功 能: 關(guān)閉PC揚(yáng)聲器用 法: void nosound(void);常規(guī)內(nèi)存操作函數(shù)申請(qǐng)函數(shù):malloc(),farmalloc(),calloc(),farcalloc(),realloc(),farealloc()函數(shù)名: malloc功 能: 內(nèi)存分配函數(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安人員技術(shù)素養(yǎng)提升的路徑計(jì)劃
- 公共服務(wù)行業(yè)的品牌工作計(jì)劃
- 苗圃未來(lái)希望助力孩子成長(zhǎng)計(jì)劃
- 加強(qiáng)跨國(guó)經(jīng)營(yíng)管理提升全球競(jìng)爭(zhēng)力計(jì)劃
- 弘揚(yáng)學(xué)生尊重勞動(dòng)的精神計(jì)劃
- 2025年地理信息大數(shù)據(jù)合作協(xié)議書
- 2025年中國(guó)橡膠行業(yè)市場(chǎng)運(yùn)行態(tài)勢(shì)、產(chǎn)業(yè)鏈全景及發(fā)展趨勢(shì)報(bào)告
- 七年級(jí)下冊(cè)《立方根》課件與練習(xí)
- 利用大數(shù)據(jù)分析預(yù)測(cè)用戶需求變化
- 2025年路面清潔裝備項(xiàng)目建議書
- 汽車運(yùn)行材料ppt課件(完整版)
- GB∕T 1732-2020 漆膜耐沖擊測(cè)定法
- 我國(guó)油菜生產(chǎn)機(jī)械化技術(shù)(-119)
- 2022《化工裝置安全試車工作規(guī)范》精選ppt課件
- 吞咽障礙篩查表
- Q∕GDW 12067-2020 高壓電纜及通道防火技術(shù)規(guī)范
- 汽車系統(tǒng)動(dòng)力學(xué)-輪胎動(dòng)力學(xué)
- 艾琳歆日內(nèi)交易2011-2月至4月份圖表
- 中國(guó)民航國(guó)內(nèi)航空匯編航路314系列航線
- 山西特色文化簡(jiǎn)介(課堂PPT)
- 工業(yè)廠房工程技術(shù)標(biāo)(共93頁(yè))
評(píng)論
0/150
提交評(píng)論