版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Linux操作系統(tǒng)與程序設(shè)計(jì)課程設(shè)計(jì)B報(bào)告書(shū) 姓名:學(xué)號(hào):班級(jí):專業(yè):指導(dǎo)老師:郭玉華 計(jì)算機(jī)學(xué)院 時(shí)間:2013年7月5日一、課程設(shè)計(jì)目的本次課設(shè)主要是為了加強(qiáng)對(duì)Linux系統(tǒng)下的編程的各種知識(shí)點(diǎn)的整合與靈活運(yùn)用,讓我們更加熟悉Linux下的編程操作。重點(diǎn)在Linux下socket編程,了解TCP、UDP等協(xié)議的使用,并完成課設(shè)題目。二、課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境 硬件:PC機(jī)兩臺(tái)以上 軟件:LINUX系統(tǒng) VIM編譯器, Fedora三、課程設(shè)計(jì)總體要求1在LINUX下實(shí)現(xiàn)網(wǎng)絡(luò)聊天,包括公聊、一對(duì)多私聊等功能;2實(shí)現(xiàn)客戶端之間經(jīng)網(wǎng)絡(luò)傳輸文件;3保存聊天記錄,以備必要時(shí)查詢。系統(tǒng)功能系統(tǒng)主要實(shí)現(xiàn)4大
2、聊天室功能:1.注冊(cè)與登錄系統(tǒng)2.公聊3.私聊4.文件傳輸模塊調(diào)用關(guān)系 各模塊間調(diào)用關(guān)系如圖2-2所示:注冊(cè)(未注冊(cè)用戶入口)登錄公聊私聊文件傳輸已注冊(cè)用戶入口圖2-2 各模塊間調(diào)用關(guān)系功能需求與系統(tǒng)模塊的關(guān)系實(shí)現(xiàn)原理 一、 注冊(cè)、登陸實(shí)現(xiàn)原理 服務(wù)器端服務(wù)器端建立好socket,等待連接,當(dāng)客戶端連接服務(wù)器,服務(wù)器接收連接,并接受客戶端發(fā)送過(guò)來(lái)的消息,根據(jù)接收到的結(jié)構(gòu)體所攜帶的協(xié)議來(lái)做相應(yīng)的功能。服務(wù)器端啟動(dòng)后如圖3-1所示:圖3-1 服務(wù)器端界面1、注冊(cè):如果協(xié)議為reg,則為客戶端注冊(cè),首先將發(fā)送過(guò)來(lái)的結(jié)構(gòu)體,提取用戶名和密碼,然后需要對(duì)用戶名合法性檢驗(yàn),驗(yàn)證之后如果用戶名合法則將用戶信
3、息保存到文件中,合法性的規(guī)則包括用戶名不能重復(fù)和不能使用all等協(xié)議作為用戶名,并且用戶名和密碼都不能為空。如果注冊(cè)成功,服務(wù)器端發(fā)送一個(gè)消息給注冊(cè)的客戶端,同樣將消息保存在一個(gè)結(jié)構(gòu)體里。如果失敗,也給客戶端發(fā)送一個(gè)消息如“您輸入的用戶名不能為all”或者“用戶名XX已經(jīng)存在”。注冊(cè)結(jié)果如圖3-2所示。 圖3-2 注冊(cè)新用戶2、登錄:如果協(xié)議為login,則將用戶名和密碼信息提取,再遍歷存放用戶信息文件里的用戶名和密碼,直到驗(yàn)證成功為止,如果驗(yàn)證成功則對(duì)所有在線的用戶發(fā)送一條消息:“提示XX用戶登錄成功”;如果失敗則只給登陸失敗的客戶端提示登錄失敗,并給出原因,如“用戶名不存在”或者“用戶名或
4、者密碼輸入錯(cuò)誤”,并跳轉(zhuǎn)到相應(yīng)的代碼執(zhí)行其他功能,成功則等待發(fā)送客戶端消息,失敗則關(guān)閉socket并結(jié)束線程,如圖3-3所示圖3-3 用戶登錄3、監(jiān)聽(tīng)和踢出客戶端:通過(guò)查看和修改綁定的socket和在線用戶隊(duì)列實(shí)現(xiàn)查看和踢出在線用戶,提出用戶后向被踢出用戶發(fā)送相關(guān)信息,如圖3-4所示。圖3-4 顯示當(dāng)前在線用戶這里從服務(wù)器端發(fā)回給客戶端的消息使用sprintf到一個(gè)字符串來(lái)發(fā)送。 客戶端客戶端的輸入和消息的顯示要使用2個(gè)終端,一個(gè)client,一個(gè)是Display。Client終端為輸入的界面,在這個(gè)界面里,新建一個(gè)線程來(lái)接受服務(wù)器端發(fā)來(lái)的消息,再添加時(shí)間信息,并將這些信息寫入文件,然后給Di
5、splay進(jìn)程發(fā)送一個(gè)消息,Display進(jìn)程接到消息,就去讀取文件,并將這些數(shù)據(jù)顯示在Display終端。 打開(kāi)客戶端Display終端界面,用lseek將內(nèi)部指針指向文件末尾,等待Client終端里的線程將消息寫入文件。一旦有消息過(guò)來(lái),就去文件里讀取數(shù)據(jù)并打印在Display終端。打開(kāi)客戶端Client終端界面,有3個(gè)菜單,一個(gè)注冊(cè)、一個(gè)登陸、一個(gè)退出,選擇相應(yīng)項(xiàng)即可進(jìn)行相關(guān)操作,注冊(cè)和登錄如圖服務(wù)器端客戶端發(fā)送給服務(wù)器端使用的協(xié)議:1、all$msg,為給所有人發(fā)送消息。2、直接輸入view$獲得在線用戶列表。3、who$msg,給用戶名為“who”的用戶發(fā)送私聊消息。4、trans$w
6、ho$filename將文件傳輸給who。5、reg為注冊(cè)。6、login為登陸。 私聊實(shí)現(xiàn)原理 一、 客戶端可以使用who$msg的形式發(fā)送私聊信息,意味著,這個(gè)消息是發(fā)送給who的?;蛘撸仁褂脀ho$來(lái)切換到發(fā)送私聊消息,這個(gè)時(shí)候,你不需要加上協(xié)議,即可給who這個(gè)用戶發(fā)送消息,如圖3-7、圖3-8所示:圖3-7 e向q發(fā)信息圖3-8 q收到e發(fā)來(lái)的消息當(dāng)然,上述方法也可實(shí)現(xiàn)一對(duì)多聊天,如圖3-9所示:圖3-9 一對(duì)多聊天這些消息都加上協(xié)議who來(lái)封裝成結(jié)構(gòu)體,再發(fā)送給服務(wù)器端。二、服務(wù)器端如果是私聊,則根據(jù)客戶端要發(fā)送到哪個(gè)用戶名的用戶,到鏈表里取得該用戶名的客戶端信息,服務(wù)器再發(fā)送給
7、相應(yīng)的接受信息的客戶端。接受信息的客戶終端就會(huì)先將信息保存到聊天記錄的文件里,并顯示接收到的信息,并且信息前面會(huì)顯示相應(yīng)的提示符。 公聊實(shí)現(xiàn)原理 一、客戶端客戶端在登陸成功之后,默認(rèn)就是all協(xié)議,可以直接發(fā)送公聊信息,不需要加上任何的協(xié)議,實(shí)現(xiàn)對(duì)所有人的人進(jìn)行聊天。命令為all$msg,給所有人發(fā)送消息。或者先使用all$來(lái)切換到給所有人發(fā)送消息,切換后,不需要加上協(xié)議即可發(fā)送了,如圖3-10、圖3-11所示:圖3-10 xdy發(fā)送公聊信息圖3-11 各用戶接收q的公聊信息這些消息都根據(jù)協(xié)議來(lái)封裝成結(jié)構(gòu)體,再發(fā)送給服務(wù)器端。 二、服務(wù)器端如果是私聊,則根據(jù)客戶端要發(fā)送到哪個(gè)用戶名的用戶,到鏈
8、表里取得該用戶名的客戶端信息,服務(wù)器再發(fā)送給相應(yīng)的接受信息的客戶端。接受信息的客戶終端就會(huì)先將信息保存到聊天記錄的文件里,并顯示接收到的信息,并且信息前面會(huì)顯示相應(yīng)的提示符。 文件傳輸實(shí)現(xiàn)原理 一、客戶端如果某個(gè)客戶端想發(fā)送文件給其他客戶端,則直接使用命令trans$who$filename。Filename包括本地的路徑和文件名。Trans為協(xié)議,就是標(biāo)志為傳輸文件。Who就是發(fā)送給誰(shuí)。Filename就是要發(fā)送的文件在本地的文件名。發(fā)送和接收文件如圖3-12、圖3-13所示:圖3-12 注冊(cè)與登錄系統(tǒng)實(shí)現(xiàn)1、 注冊(cè)的時(shí)候與服務(wù)器的交互過(guò)程:請(qǐng)輸入你的用戶名:*請(qǐng)輸入密碼:*you pass
9、 : *請(qǐng)?jiān)俅屋斎朊艽a:*pass you : *正在等待服務(wù)器應(yīng)答.接到服務(wù)器發(fā)來(lái)的信息:注冊(cè)成功!2、 登陸的時(shí)候與服務(wù)器的交互過(guò)程:請(qǐng)輸入你的用戶名:*請(qǐng)輸入密碼:*正在等待服務(wù)器應(yīng)答.接到服務(wù)器發(fā)來(lái)的信息:登錄失敗!您還有2次機(jī)會(huì),之后將退出程序!請(qǐng)輸入你的用戶名:*請(qǐng)輸入密碼:*正在等待服務(wù)器應(yīng)答.接到服務(wù)器發(fā)來(lái)的信息:登錄成功!3、 退出:關(guān)閉socket,退出程序。 聊天功能實(shí)現(xiàn)1、兩個(gè)用戶在私聊功能who$:*(聊天內(nèi)容)*Who就是發(fā)送給誰(shuí)。2、公聊功能all$:*(聊天內(nèi)容)*功能實(shí)現(xiàn)展示如下圖4-3-1所示:傳輸文件功能實(shí)現(xiàn)使用trans$who$filename格式傳送
10、文件:Filename包括本地的路徑和文件名。Trans為協(xié)議,就是標(biāo)志為傳輸文件。Who就是發(fā)送給誰(shuí)。Filename就是要發(fā)送的文件在本地的文件名???結(jié)本次課程設(shè)計(jì)順利完成了LINUX下聊天室工具的設(shè)計(jì),包括注冊(cè)、登記,私聊,公聊(群聊),傳送文件等功能,送文件時(shí)可以傳送文本。通過(guò)本次課程設(shè)計(jì),我的軟件開(kāi)發(fā)能力在一定程度上提高了,對(duì)LINUX程序設(shè)計(jì)這一門課程也有了比較深刻的了解。實(shí)驗(yàn)過(guò)程中遇到了很多問(wèn)題,剛開(kāi)始對(duì)于shell一些簡(jiǎn)單的編程都不是很熟悉,通過(guò)去圖書(shū)館查閱資料,詢問(wèn)老師和同學(xué),上網(wǎng)查閱資料,才得以解決各個(gè)問(wèn)題,這個(gè)設(shè)計(jì)基本上完成了老師要求的公聊,私聊以及文件傳輸,但是由于自
11、己能力的有限,沒(méi)能做出一個(gè)窗體,讓系統(tǒng)更完美化,這還西藥以后的繼續(xù)努力。附 錄/*check.h*/#include #include #include #include #include #include #include #include #include #include #define MAXLEN 1024struct messagechar flag15;char name10;int size;char msgMAXLEN;int reg_check(struct message *recievemsg);int login_check(struct message *recie
12、vemsg);/*check.c*/#include check.hint reg_check(struct message *recievemsg)int fd;int read_size,write_size;struct message cmpmsg;if(strlen(recievemsg-name)10 | strlen(recievemsg-msg)20 )return 1;if(strcmp(recievemsg-name,all)=0)return -1;if(strcmp(recievemsg-name,reg)=0)return -1;if(strcmp(recievems
13、g-name,login)=0)return -1;if(strcmp(recievemsg-name,trans)=0)return -1;if(fd=open(user.txt,O_RDWR|O_CREAT|O_APPEND,0666)0)perror(open);printf(openn);return -2;doif(read_size=read(fd,&cmpmsg,sizeof(cmpmsg) name,)=0)close(fd);return -1;while(read_size = sizeof(struct message);if(write_size=
14、write(fd,recievemsg,sizeof(struct message)0)perror(write);close(fd);return -2;while(write_size!=sizeof(struct message)/write_size = 0-writesize;lseek(fd,-write_size,SEEK_CUR);write_size=write(fd,recievemsg,sizeof(struct message);printf(write file successn);close(fd);return 0;int login_check(struct m
15、essage *recievemsg)int fd;struct message cmpmsg;int read_size;if(fd=open(user.txt,O_RDONLY)0)perror(open);return -2;doif(read_size=read(fd,&cmpmsg,sizeof(struct message)name,)=0)&(strcmp(recievemsg-msg,cmpmsg.msg)=0)close(fd);return 0;while(read_size0);close(fd);return -1;/*void main()str
16、uct message sendmsg;printf(input name:n);gets();printf(input mima:n);gets(sendmsg.msg); printf(%dn,reg_check(&sendmsg); / printf(%dn,login_check(&sendmsg);*/*client.c*/#include #include #include #include #include #include #include #include #include #include #include #include #include #in
17、clude #define MAXLEN 1024struct messagechar flag15;char name10;int size;char msgMAXLEN;struct msqlong msg_type;char msg_text5;int qid = -1,fd = -1,sockfd,savefilefd=-1;char filefromname10;void handleQuit(int signal_no)if(fd 0)close(fd);close(sockfd);if(qid 0)if(msgctl(qid,IPC_RMID,NULL)0)printf(消息隊(duì)列
18、無(wú)法關(guān)閉n);exit(1);close(savefilefd);printf(程序正常退出n);raise(SIGQUIT);void cutStr(char str,char left,int n,char right,int m,char c)int i,k,j;for(i = 0 ; i n ;i+)if(stri = c)break;if(i = n)i = -1;elsememset(left,0,strlen(left);for(k = 0 ; k i ; k+)leftk = strk;for(j = i+1 ; j m;j+)if(strj = 0)break;rightj-
19、i-1 = strj;lefti = 0;if(j 0)printf(filedata.msg = %sn,filedata.msg);send(sockfd,&filedata,sizeof(struct message),0);elseprintf(讀取文件失敗,文件傳輸中止n);break; while (filedata.size 0);close(savefilefd);savefilefd = -1 ;void handlerecvmsg(int *sockfd)int connfd = *sockfd;int nread;char buf1024;char str1024;str
20、uct message recvmsg;time_t timep;struct msq msg;if( fd = open(chatlog.txt,O_RDWR|O_CREAT|O_APPEND) 0)printf(打開(kāi)聊天記錄文件失敗!);exit(1);/printf(%dn,fd);if(qid = msgget(2222,IPC_CREAT|0666) = -1)printf(創(chuàng)建消息隊(duì)列失敗n);exit(1);msg.msg_type = getpid();strcpy(msg.msg_text,OK);while(1)nread = recv(connfd,&recvmsg,si
21、zeof(struct message),0);if(nread = 0)printf(與服務(wù)器斷開(kāi)了連接n);close(fd);close(connfd);exit(0);else if (strcmp(recvmsg.flag,all) = 0)time (&timep);sprintf(str,%s%s發(fā)給所有人:%snn,ctime(&timep),,recvmsg.msg);else if (strcmp(recvmsg.flag,sermsg) = 0)time (&timep);printf(%s服務(wù)器發(fā)給所有人:%snn,ctime(&timep),r
22、ecvmsg.msg);continue;else if (strcmp(recvmsg.flag,view) = 0)time (&timep);printf(%s當(dāng)前在線客戶端:n%snn,ctime(&timep),recvmsg.msg);continue;else if (strcmp(recvmsg.flag,trans) = 0)pthread_t pid;if (strcmp(recvmsg.msg,agree) = 0)strcpy(filefromname,);/創(chuàng)建線程發(fā)送文件pthread_create(&pid,NULL,(void *)han
23、dlesendfile,NULL);else if(strcmp(recvmsg.msg,disagree) = 0)printf(對(duì)方拒絕接收文件n);close(savefilefd);savefilefd = -1;else if(strcmp(recvmsg.msg,noexist) = 0)printf(該客戶端不存在n);close(savefilefd);savefilefd = -1;elsestrcpy(filefromname,);printf(%s向你請(qǐng)求傳名為%s文件,是否同意接受?agree(同意)|disagree(不同意)n,recvmsg
24、.name,recvmsg.msg);savefilefd = 0;continue;else if(strcmp(recvmsg.flag,transf) = 0)int n;if(strcmp(recvmsg.msg,end$) = 0)printf(文件傳輸結(jié)束n);close(savefilefd);savefilefd = -1;continue;elsen=write(savefilefd,recvmsg.msg,recvmsg.size);/printf(recvmsg.msg = %sn,recvmsg.msg);while(n 0) lseek(savefilefd,n,SE
25、EK_CUR);n=write(savefilefd,recvmsg.msg,recvmsg.size);continue; elsetime (&timep); sprintf(str,%s%s發(fā)來(lái)的私聊消息:%snn,ctime(&timep),,recvmsg.msg);write(fd,str,strlen(str);msgsnd(qid,&msg,sizeof(struct msq),0);int main(int argc,char *argv)struct sockaddr_in server_addr;int port;int do_number;str
26、uct message a;char strMAXLEN;char bufMAXLEN;pthread_t pid;if(argc != 3)printf(請(qǐng)輸入服務(wù)器IP和端口n);exit(1);port = atoi(argv2);if(sockfd = socket(AF_INET,SOCK_STREAM,0) = -1)printf(創(chuàng)建socket失敗n);exit(1);signal(SIGINT,handleQuit);printf(-n);printf(| |n);printf(| input a number to work |n);printf(|t1.loginttt
27、|n);printf(|t2.registertt |n);printf(|t3.exitttt |n);printf(| |n);printf(-n);scanf(%d,&do_number);gets(str);while(do_number != 1 & do_number != 2 & do_number != 3)printf(你輸入的不是上面的選項(xiàng),請(qǐng)重新輸入:n);scanf(%d,&do_number);gets(str);if(do_number=3)close(sockfd);printf(程序已退出!n);exit(0);bzero(&server_addr,sizeof
28、(struct sockaddr_in);server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = inet_addr(argv1);server_addr.sin_port = htons(port);if(connect(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr) = -1)printf(與服務(wù)器無(wú)響應(yīng),請(qǐng)隔一段時(shí)間再連接n);exit(2);if(do_number =1)int n = 3;while(n)printf(請(qǐng)輸入你的用戶名:
29、n);scanf(%s,);printf(請(qǐng)輸入密碼:n);scanf(%s,a.msg);strcpy(a.flag,login);/a.flag3 = 0;send(sockfd,&a,sizeof(a),0);printf(正在等待服務(wù)器應(yīng)答.n);recv(sockfd,buf,MAXLEN,0);printf(接到服務(wù)器發(fā)來(lái)的信息:%sn,buf);if(strcmp(buf,登錄成功!) = 0)/int i,j,k;pthread_create(&pid,NULL,(void *)handlerecvmsg,(void *)&sockfd);gets(str);str
30、cpy(a.flag,all);while(1)memset(a.msg,0,strlen(a.msg);memset(str,0,strlen(str);gets(str);strcpy(buf,a.flag);cutStr(str,a.flag,15,a.msg,MAXLEN,$);printf(標(biāo)志信息為:%sn,a.flag);if(strcmp(a.flag,view) = 0)send(sockfd,&a,sizeof(a),0);strcpy(a.flag,buf);continue;else if (strcmp(a.flag,trans) = 0) & (savefilefd
31、 =0)/printf(f=%s,a=%s,s=%d,a.flag,a.msg,savefilefd);if (strcmp(a.msg,agree) = 0) & (savefilefd = 0)char savefilename20;/char savefileallname22;printf(請(qǐng)輸入保存的文件名,文件將保存在當(dāng)前目錄下!n);dogets(savefilename);savefilefd = open(savefilename,O_RDWR|O_CREAT|O_EXCL,0666);if(savefilefd = -1)printf(文件名可能存在請(qǐng)重新命名.n);whi
32、le(savefilefd = -1);if(savefilefd 0)printf(創(chuàng)建文件失??!n);savefilefd = -1;elsestrcpy(,filefromname);send(sockfd,&a,sizeof(a),0);/printf(agree :%s,%s,%sn,a.flag,,a.msg);elsememset(,0,strlen();memset(str,0,strlen(str);cutStr(a.msg,,10,str,MAXLEN,$);if (str0 != 0 & 0 != 0
33、)char transfileallname22;sprintf(transfileallname,./%s,str);savefilefd = open(str,O_RDWR,0666);if(savefilefd 0)printf(打開(kāi)文件失敗!n);savefilefd = -1;elsememset(a.msg,0,strlen(a.msg);strcpy(a.msg,str);send(sockfd,&a,sizeof(a),0);elsestrcpy(a.msg,disagree);strcpy(,filefromname);send(sockfd,&a,sizeof(
34、a),0);strcpy(a.flag,buf);continue;if (strcmp(a.flag,trans) = 0)strcpy(a.flag,buf);send(sockfd,&a,sizeof(a),0);elsen-;printf(您還有%d次機(jī)會(huì),之后將推出程序!n,n); close(sockfd); exit(3); /登陸 else if(do_number =2) /registerint i =1 ;char username10;char password20;char password_t20;char temp20;printf(請(qǐng)輸入你的用戶名:n);sca
35、nf(%s,username);while(i)printf(請(qǐng)輸入密碼:n);scanf(%s,password);printf(youpass : %sn,password);printf(請(qǐng)?jiān)俅屋斎朊艽a:n);scanf(%s,password_t);printf(passyou:%sn,password_t);if(strcmp(password, password_t) != 0)printf(輸入的密碼不一樣n);i = 1;elsei = 0;strcpy(,username);strcpy(a.msg,password);strcpy(a.flag,reg);/a.
36、flag3 = 0;send(sockfd,&a,sizeof(a),0);printf(正在等待服務(wù)器應(yīng)答.n);recv(sockfd,buf,MAXLEN,0);printf(接到服務(wù)器發(fā)來(lái)的信息:%sn,buf); close(sockfd); return 0;/*display.c*/#include #include #include #include #include #include #include #include #include int qid,fd;struct msqlong msg_type;char msg_text5;void handlequit(int
37、sign_no)close(fd);if(msgctl(qid,IPC_RMID,NULL) 0)printf(消息隊(duì)列無(wú)法關(guān)閉n);exit(1);printf(程序正常退出n);raise(SIGQUIT);int main()char buf1024;int n;struct msq msg;fd = open(chatlog.txt,O_RDONLY|O_CREAT);signal(SIGINT,handlequit);if(fd0)printf(打開(kāi)文件失敗n);return -1;lseek(fd,0,SEEK_END);if(qid = msgget(2222,IPC_CREAT
38、|0666) = -1)printf(創(chuàng)建消息隊(duì)列失敗n);close(fd);return -1;while(1)if(msgrcv(qid,&msg,sizeof(msg),0,0) next = NULL;return L;void deletelist(LinkList L ,datatype e)int i=0;LinkList s,p;p = L;while ( (strcmp(,) != 0) & p-next != NULL)s=p;p = p-next;if (p-next = NULL & (strcmp(,e.nam
39、e) != 0)return;elses-next = p-next;free(p);void insertend(LinkList L,datatype e)int i=0;LinkList s,p;p = L;while(p-next != NULL)p = p-next;i+;s = (LinkList)malloc(sizeof(LNode);s-data =e;s-next = p-next ;p-next =s;void DisplayList(LinkList L)L=L-next;int i = 1;while (L != NULL)printf(%d. %s n,i,L-);L = L-next;i+;/*void main()LinkList L;datatype res=0;L=CreateLinkList(); printf(aaaaan); DisplayList(L); printf(aaaaan);printf(n);insertend(L,500);printf(n);insertend(L,300);printf(n);insertend(L,200);DisplayLi
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年湘教新版九年級(jí)歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年人教A新版七年級(jí)科學(xué)下冊(cè)階段測(cè)試試卷含答案
- 2025年仁愛(ài)科普版選擇性必修1語(yǔ)文上冊(cè)階段測(cè)試試卷含答案
- 二零二五版木材加工廢棄物處理合同3篇
- 二零二五年度苗圃場(chǎng)租賃與環(huán)保技術(shù)應(yīng)用合同3篇
- 承包協(xié)議合同(2篇)
- 二零二五版農(nóng)業(yè)用地流轉(zhuǎn)合同范本(含政府補(bǔ)貼條款)3篇
- 2025年度節(jié)能環(huán)保型木模板木方采購(gòu)與回收利用合同4篇
- 二零二五版南京海事法院港口設(shè)施設(shè)備租賃合同4篇
- 2025年度綠色生態(tài)園區(qū)排水溝施工及維護(hù)一體化合同標(biāo)準(zhǔn)3篇
- 【語(yǔ)文】第23課《“蛟龍”探?!氛n件 2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)下冊(cè)
- 加強(qiáng)教師隊(duì)伍建設(shè)教師領(lǐng)域?qū)W習(xí)二十屆三中全會(huì)精神專題課
- 2024-2025學(xué)年人教版數(shù)學(xué)七年級(jí)上冊(cè)期末復(fù)習(xí)卷(含答案)
- 2024年決戰(zhàn)行測(cè)5000題言語(yǔ)理解與表達(dá)(培優(yōu)b卷)
- 四年級(jí)數(shù)學(xué)上冊(cè)人教版24秋《小學(xué)學(xué)霸單元期末標(biāo)準(zhǔn)卷》考前專項(xiàng)沖刺訓(xùn)練
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- (完整版)減數(shù)分裂課件
- 銀行辦公大樓物業(yè)服務(wù)投標(biāo)方案投標(biāo)文件(技術(shù)方案)
- 第01講 直線的方程(九大題型)(練習(xí))
- 微粒貸逾期還款協(xié)議書(shū)范本
- 人教版七年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)課時(shí)練習(xí)帶答案
評(píng)論
0/150
提交評(píng)論