數(shù)據(jù)庫課程設(shè)計(jì)物聯(lián)網(wǎng)_第1頁
數(shù)據(jù)庫課程設(shè)計(jì)物聯(lián)網(wǎng)_第2頁
數(shù)據(jù)庫課程設(shè)計(jì)物聯(lián)網(wǎng)_第3頁
數(shù)據(jù)庫課程設(shè)計(jì)物聯(lián)網(wǎng)_第4頁
數(shù)據(jù)庫課程設(shè)計(jì)物聯(lián)網(wǎng)_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精品文檔課程設(shè)計(jì)說明書課程名稱: 數(shù)據(jù)庫系統(tǒng)課程設(shè)計(jì) 專 業(yè): 物聯(lián)網(wǎng) 班級(jí): 2021-2 設(shè) 計(jì) 人: 劉玉昊 學(xué) 號(hào): 202101061421 山 東 科 技 大 學(xué)2021年 6 月 24 日山 東 科 技 大 學(xué)課 程 設(shè) 計(jì) 任 務(wù) 書一、 課程設(shè)計(jì)題目: 數(shù)據(jù)庫系統(tǒng)課程設(shè)計(jì)二、 設(shè)計(jì)原始資料:?數(shù)據(jù)庫系統(tǒng)概論第五版?三、 設(shè)計(jì)應(yīng)解決以下各主要問題:1、賬戶創(chuàng)立以及主賬戶對(duì)其他賬戶的授權(quán)及收回權(quán)限2、CREATE、SELECT、INSERT、DELETE、UPDATE語句的實(shí)現(xiàn)以及查錯(cuò)3、help database 的表信息輸出查詢4、使用數(shù)據(jù)結(jié)構(gòu)以及C+中STL庫來創(chuàng)立索引以及

2、存儲(chǔ)數(shù)據(jù)表5、使用文件操作來實(shí)現(xiàn)表信息的存儲(chǔ)以及讀取四、 設(shè)計(jì)說明書應(yīng)附有以下圖紙:1.實(shí)現(xiàn)界面圖2.流程圖3.功能結(jié)構(gòu)圖五、 小組分工說明:個(gè)人獨(dú)立完成 六、命題發(fā)出日期:2021-6-19設(shè)計(jì)完成日期:2021-6-24 指導(dǎo)教師評(píng)語成績: 指導(dǎo)教師簽章:年月日歡迎下載精品文檔1.需求分析說明22.設(shè)計(jì)概要說明22.1程序設(shè)計(jì)思想22.2程序運(yùn)行流程圖33.程序?qū)崿F(xiàn)說明43.1User類的實(shí)現(xiàn)43.2File類的實(shí)現(xiàn)43.3Create的實(shí)現(xiàn)63.4Insert的實(shí)現(xiàn)63.5Delete的實(shí)現(xiàn)63.6Update的實(shí)現(xiàn)73.6Alter的實(shí)現(xiàn)73.7Select的實(shí)現(xiàn)73.8Grand的實(shí)

3、現(xiàn)74.程序調(diào)試過程75.程序運(yùn)行演示86.課程設(shè)計(jì)總結(jié)157.參考文獻(xiàn)16附錄1 系統(tǒng)完整程序171.需求分析說明本次課程設(shè)計(jì)在codeblocks編譯環(huán)境下,采用C+高級(jí)語言以及數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),開發(fā)一個(gè)具有根底功能的數(shù)據(jù)庫管理系統(tǒng)。根本功能有: 1賬戶創(chuàng)立以及主賬戶對(duì)其他賬戶的授權(quán)及收回權(quán)限 2CREATE、SELECT、INSERT、DELETE、UPDATE語句的實(shí)現(xiàn)以及查錯(cuò) 3help database 的表信息輸出查詢 4使用數(shù)據(jù)結(jié)構(gòu)以及C+中STL庫來創(chuàng)立索引以及存儲(chǔ)數(shù)據(jù)表 5使用文件操作來實(shí)現(xiàn)表信息的存儲(chǔ)以及讀取2.設(shè)計(jì)概要說明2.1程序設(shè)計(jì)思想此次程序設(shè)計(jì)使用C+的類進(jìn)行

4、對(duì)數(shù)據(jù)的封裝。以用戶類User為最高級(jí)別類,在這個(gè)類的根底之上,再對(duì)每一個(gè)表進(jìn)行操作,如果有權(quán)限就操作,沒權(quán)限就不能操作。語句分析以及語義錯(cuò)誤采用的是字符串處理的方式,每次把輸入的字符串就行分析,分解出這個(gè)字符串內(nèi)包含的所有單詞,這些單詞中不包含 , 、; 、(、)。然后對(duì)這所有的單詞進(jìn)行解析,因?yàn)樵诿總€(gè)位置相應(yīng)的出現(xiàn)的應(yīng)該是固定的單詞,所以可以直接判斷這個(gè)單詞是不是合法,如果合法就繼續(xù),不合法就可以提示語義錯(cuò)誤。對(duì)于任何一種操作,都是以;為字符串的結(jié)束符,表示著一次輸入端的結(jié)束,我在字符串讀取的時(shí)候是以單個(gè)字符為根底進(jìn)行輸入的,所以又這個(gè)分號(hào)的存在也極大的方便了數(shù)據(jù)的讀入。在每一次程序運(yùn)行起

5、來的時(shí)候,都會(huì)創(chuàng)立一個(gè)user類和file類,先把文件中保存的賬戶的所有信息都讀取到user中,以及把文件中所有表的信息全部讀入到file中,然后登陸,進(jìn)行一些列的操作,在每次操作之前都會(huì)去詢問一次此次操作是否有權(quán)限。2.2程序運(yùn)行流程圖Create Main用戶登陸創(chuàng)立用戶 離開讀取文件中讀取數(shù)據(jù)InsertAlterUpdateDeleteGrand把數(shù)據(jù)寫入文件離開3.程序?qū)崿F(xiàn)說明3.1User類的實(shí)現(xiàn)class Userprivate: map <string, string> user_pass; /賬戶密碼與賬號(hào)匹配 vector <string> user

6、_name; /用戶名 map <string, int> user_id; /用戶的id,從1開始 int main_user100; /是否是admin用戶; int have_pow_in_op100100; /某個(gè)用戶是否具有某個(gè)權(quán)利public: bool judge(string name, string pass); /判斷賬號(hào)密碼是否正確 int get_id(string name); /獲取某個(gè)表名的id bool have_op(int id, int op) /判斷某個(gè)賬號(hào)是否有某個(gè)操作 return have_pow_in_opidop; bool is_

7、main(string name); /是否是admin void create_new_user(string name, string pass);/創(chuàng)立新用戶 void read_user(); /從文件讀取所有用戶信息 bool add_pow(int where, int op); /賬戶添加權(quán)限 bool revoke_pow(int where, int op); /刪除權(quán)限 void write_to_user(); /把賬戶寫入文件中 void show_user(); /顯示所有用戶信息;其中大局部使用的是 map,vector string 實(shí)現(xiàn)的存儲(chǔ)數(shù)據(jù),這些STL的容

8、器方便快捷比擬好用。3.2File類的實(shí)現(xiàn)struct property string _name; / 屬性名 string data_type; / 屬性的數(shù)據(jù)類型 bool is_key; / 是否為主鍵 bool _unique; / 是否唯一 string len; / 數(shù)據(jù)長度 string NUMERIC; property() property(string _name, string _date_type, bool _is_key, bool _unique, string _len = "", string _NUMERIC = ""

9、;) _name = _name, data_type = _date_type, is_key = _is_key, _unique = _unique, len = _len, NUMERIC = _NUMERIC; bool friend operator < (property a, property b) return a._name < b._name; ;struct information string all100; int vis100;class _fileprivate: vector <string> all_file_name; / 創(chuàng)立的所

10、有的表的名字 map <string, int> id; / 每一個(gè)表的id vector <property> property_inf100;/ 某個(gè)表所包含的屬性 vector <information> schedule100; / 某個(gè)表的所有信息 map <string,int> file_pro_id100; / 某個(gè)表的屬性id int _vis100100; / 某個(gè)表的某個(gè)屬性是否顯示public: void show_file(string name); /顯示表信息 int get_id(string name); /獲取

11、文件id int get_pro_num(string name); /獲取某一個(gè)表的屬性個(gè)數(shù) bool delete_pro(int where, int ver); /刪除某一列 bool delete_pro_row(int where, int row); /刪除某一行 bool update_file_info(string name, vector <information> info); /更新表的信息 bool insert_file_name(string name); /插入新的表名 bool insert_file_info(string name, vect

12、or <information> info); /插入某個(gè)表的信息 bool insert_list(string name, vector <property> pro); /插入新的表 bool insert_file_id(string name, map <string, int> id); /插入某個(gè)表的屬性id vector <property> get_property(string name); /獲取某個(gè)表的屬性名 map <string, int> get_pro_id(string name); /獲取某個(gè)表的屬

13、性id vector <string> get_all_table_name(); /獲取所有的表名 vector <information> get_file_info(string name); /獲取某個(gè)表的所有信息 bool read_file(); /讀文件 bool write_to_file(); /寫文件;其中information實(shí)現(xiàn)的是對(duì)某一條信息的存儲(chǔ),property實(shí)現(xiàn)的是對(duì)某一種屬性的存儲(chǔ),而file那么是對(duì)這兩種信息的整合。3.3Create的實(shí)現(xiàn)對(duì)于已經(jīng)解析好的單詞,那么我們就可以進(jìn)行create判斷了,首先前兩個(gè)單詞一定要是“Creat

14、e和“Table,此局部要忽略大小寫,即把輸入的這兩個(gè)單詞全部轉(zhuǎn)為大寫再與“CREATE “TABLE進(jìn)行判斷,匹配成功之后,第三個(gè)單詞就是表名了,這個(gè)地方要注意查詢一下這個(gè)表名是否在之前已經(jīng)出現(xiàn)過,保存下表名來。后面緊跟的一定是屬性名,保存下來,再下一個(gè)單詞一定是數(shù)據(jù)類型了,和所有能夠?qū)崿F(xiàn)的數(shù)據(jù)類型進(jìn)行匹配,如果存在這個(gè)數(shù)據(jù)類型繼續(xù)下一步,否那么就提示錯(cuò)誤。一次判斷后面的屬性。在創(chuàng)立完成之后一次輸出顯示出所有屬性的數(shù)據(jù)類型,長度,限制條件等一系列的數(shù)據(jù)。3.4Insert的實(shí)現(xiàn)Insert的實(shí)現(xiàn),我個(gè)人實(shí)現(xiàn)的是多條數(shù)據(jù)同時(shí)插入。判斷的時(shí)候,第一個(gè)單詞一定是“INSERT這個(gè)沒問題,第三個(gè)一定

15、是表名,去判斷一下這個(gè)表是否存在,然后找到VALUES,對(duì)這后面的數(shù)據(jù)進(jìn)行存儲(chǔ)。多條輸出舉例:Insert into student Values(19, HH), (20, JJ);3.5Delete的實(shí)現(xiàn)Delete的實(shí)現(xiàn)也比擬簡單,因?yàn)樗斜淼臄?shù)據(jù)全部才在程序內(nèi)存里,所以我在刪除的時(shí)候沒有直接刪除內(nèi)存,而是標(biāo)記某一條信息是否存在,用vis數(shù)組標(biāo)記, 等于1表示存在,這樣涉及到一個(gè)問題,在創(chuàng)立表的時(shí)候要把所有vis都標(biāo)記成1。3.6Update的實(shí)現(xiàn)更新操作就是把原來的數(shù)據(jù)替換掉了而已,沒有什么難處,每次把更新的數(shù)據(jù)找出來,然后for循環(huán)直接找到相應(yīng)的要改的數(shù)據(jù),頂替到即可。3.6Alte

16、r的實(shí)現(xiàn)Alter是對(duì)某一列的刪除或者增加,也是使用的delete的思想,delete的思想是把某一行是否輸出標(biāo)記出來,而刪除列可以同理直接標(biāo)記某一列是否存在即可。3.7Select的實(shí)現(xiàn)Select是這所有里面最難的一個(gè),因?yàn)楣δ芴?,而時(shí)間比擬短,實(shí)現(xiàn)的也比擬少的功能,直接云算法=,>,>=,一系列的運(yùn)算符,并且可以使用and操作,也可以選某幾列輸出,也可以直接用* 輸出所有的數(shù)據(jù)。select就是在 * 和 屬性名這一局部的判斷要區(qū)分開,別的地方就沒有難點(diǎn)了。3.8Grand的實(shí)現(xiàn)Grand是給用戶賦予權(quán)限的,這個(gè)操作只允許在admin下才能執(zhí)行,這個(gè)時(shí)候,在user類中的

17、is_main 函數(shù)就可以用上力了。4.程序調(diào)試過程1印象最深刻的時(shí)候就是文件操作上的問題,在讀取到一個(gè)表的所有信息之后,再進(jìn)行其他操作的時(shí)候,只可以識(shí)別名字,而其他的操作都不能使用了,調(diào)了好長時(shí)間,還以為ifstream 這些數(shù)據(jù)流的問題呢,后來在讀完之后是正確的,然后在另一個(gè)文件里面是錯(cuò)誤的,才找到真正錯(cuò)在哪。自己把表名的索引弄錯(cuò)了。2在刪除列的時(shí)候因?yàn)槭侵苯訕?biāo)記的,所以輸出列的條數(shù)的時(shí)候,會(huì)多,后來想了想是自己并沒有真實(shí)的刪除某條消息,所以在輸出個(gè)數(shù)的時(shí)候還是可以查到的。3Create是調(diào)試最多的,在解析單詞的時(shí)候,我是每次遇到某個(gè)字符就說明得到一個(gè)單詞,該放進(jìn)信息內(nèi)部了,但是有一次創(chuàng)立

18、失敗,我把所有讀取的單詞輸出了一次,結(jié)果發(fā)現(xiàn)單詞分析錯(cuò)了,少了一個(gè)遇到換行就存單詞的問題。4在程序執(zhí)行之后,得到了很多的warning,然后去看了一下提示,要求是 容器的返回?cái)?shù)據(jù)個(gè)數(shù)數(shù)據(jù)類型是 unsigned int,而我們兩個(gè)數(shù)在比擬的時(shí)候是一個(gè)int,一個(gè)unsigned,所以不同數(shù)據(jù)類型引起了warning。5.程序運(yùn)行演示1首先我們輸入2去注冊(cè)一個(gè)用戶。2注冊(cè)成功之后,因?yàn)檫@個(gè)是空賬號(hào),admin沒有對(duì)他進(jìn)行權(quán)限賦予,測一下create是否可以使用。3提示了沒有權(quán)限。上面的“Change account;是切換賬號(hào),我們現(xiàn)在切換一下賬號(hào)到admin,目的是為 acm這個(gè)賬戶賦值。4選

19、擇1進(jìn)行登錄admin這樣就可以看得出,create被授權(quán),額可以創(chuàng)立表了。5重新回到admin,來測試一系列功能,首先測試CREATE;然后再創(chuàng)立一次提示名字重復(fù)。6插入數(shù)據(jù)Insert 測試7insert有條件測試,沒插入的全為空8Select測試這是選擇大于號(hào)的全表AND和小于號(hào)測試。9Update測試10delete操作把年齡為18的砍掉11Alter測試增加老師這一列。12Alter中drop的實(shí)現(xiàn)13help database測試6.課程設(shè)計(jì)總結(jié)從構(gòu)思到實(shí)現(xiàn),中間斷斷續(xù)續(xù)的寫了接近兩個(gè)星期的代碼,大約1400+行,期間遇到過很多問題,但還是一點(diǎn)一點(diǎn)解決掉了。我對(duì)文件流操作一直不熟,

20、自己去網(wǎng)上百度學(xué)習(xí)了一下感覺還比擬好用。其實(shí)直接ifstream這些操作是相對(duì)來說不平安的,因?yàn)槲覀兛梢灾苯訌奈臋n中翻開即可查看表的內(nèi)容,更好的是可以使用二進(jìn)制文件進(jìn)行操作,這樣就可以帶來極大的平安性和方便性的優(yōu)勢(shì)。包括自己去辯論的時(shí)候,老師告訴了我正那么表達(dá)式,這是一種很方便的判斷字符串的方法,相對(duì)于自己寫的字符串處理很多很多情況都沒法處理到,既麻煩,又不高效。自身的代碼和內(nèi)容的實(shí)現(xiàn)上仍然存在著相當(dāng)多的問題,需要自己去慢慢改正,自己距離優(yōu)秀還差一大塊。繼續(xù)加油提高代碼能力。7.參考文獻(xiàn)1王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論(第5版).北京:高等教育出版社,2021.92杜茂康,李昌樂,曹慧英,王永.

21、C+面向?qū)ο蟪绦蛟O(shè)計(jì)(第2版).北京:電子工業(yè)出版社,2021.73孫承愛,趙衛(wèi)東.程序設(shè)計(jì)根底(第2版).北京:科學(xué)出版社,2021.94嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版).北京:清華大學(xué)出版社,附錄1 系統(tǒng)完整程序main函數(shù):#include <iostream>#include "Get_Word.h"#include "Enter_Into.h"using namespace std;int main() _enter Enter; Enter._begin(); return 0;Get_word.h的實(shí)現(xiàn)#ifndef GET

22、_WORD_H_INCLUDED#define GET_WORD_H_INCLUDED#include <cstdio>#include <iostream>#include <algorithm>#include <string>#include <vector>#include <map>#include <set>#include <iomanip>using namespace std;class Anal_Wordprivate: vector <string> word; /

23、單詞集合public: int Analysis(string s); / 把輸入的一個(gè)字符串進(jìn)行分析成每一個(gè)單詞 void show(); / 輸出所有分析出來的單詞 vector <string> get_word(); / 把分析出來的單詞返回;void Anal_Word:show() for(int i = 0; i < (int)word.size(); i+) cout << wordi << "." << endl;vector <string> Anal_Word: get_word() r

24、eturn word;int Anal_Word:Analysis(string s) if(s.size() = 0 | ss.size() - 1 != '') return 0; string _begin; int bracket = 0; int mark = 0; vector <int> wh; for(int i = 0; i < (int)s.size(); i+)/ if(!isdigit(si) && !isalpha(si) && si != '' && si != 

25、9;,' && si != '(' && si != ')' && si != ' ' && si != 't')/ return 0;/ if(si != ' ' && si != ',' && si != '(' && si != ')' && si != 't' && si != '

26、9; && si != 'n') _begin += si; if(si = '(') bracket +; if(si = ')') bracket -; if(si < 0) return 0; if(si = ',' | si = ')' | si = ' ' | si = '(' | si = '' | si = 't' | si = 'n') && !mark && _be

27、gin.size() > 0 && s0 != 't') word.push_back(_begin); _begin.clear(); if(si = ',' && s.size() > 0 && s0 !='t') wh.push_back(word.size(); if(bracket != 0) return 0; if(wh.size() = 0) return 1; for(int i = 0; i < (int)wh.size() - 1; i+) if(whi+1

28、- whi < 1) return 0; if(int)wh.size() > 0 && wh(int)wh.size()-1 = (int)word.size() return 0; return 1;Enter_Into /進(jìn)入主界面#ifndef ENTER_INTO_H_INCLUDED#define ENTER_INTO_H_INCLUDED#include <cstdio>#include <iostream>#include <vector>#include <string>#include "

29、File.h"#include "Create_Table.h"#include "Insert_Into.h"#include "Delete_Table.h"#include "Update_Table.h"#include "Alter_Table.h"#include "Select_table.h"#include "User.h"#include "Get_Word.h"#define Error printf(&

30、quot;<< SQL statement errorn")using namespace std;/*CREATE TABLE STUDENT ( NAME CHAR(80) UNIQUE, AGE NUMERIC(30, 20), NUM INT PRIMARY KEY, COU INT UNIQUE);CREATE TABLE STUDENT ( AGE INT);*/string power100 = "","SELECT", "UPDATE", "CREATE", "INS

31、ERT", "DELETE", "UPDATE", "ALTER"map <string, int> power_id;class _enterpublic: _enter() void _begin(); / 開始輸入;int op;string user_name, user_pass;_file file; / 文件User user;int enter_interface() printf("+-+n"); printf("| |n"); printf("

32、| Welcome To My Sql |n"); printf("| |n"); printf("| 1.Login |n"); printf("| 2.Set Up |n"); printf("| 3.Leave |n"); printf("| |n"); printf("| |n"); printf("+-+nnn"); printf("Write 1 to 'Login', Write 2 to 'Set

33、 Up', Write 3 to 'Leave'nn"); while(true) printf(">> "); scanf("%d", &op); if(op = 1) int _count = 0; while(true) printf(">>UserName: "); cin >> user_name; printf(">>Paseword: "); cin >> user_pass; if(user.jud

34、ge(user_name, user_pass) if(!user.is_main(user_name) printf("Sucess! You shoud use the admin to add power!n"); else printf("Sucess! You can add the power to other user!n"); return 1; _count+; if(_count >= 3) printf("Failed!n You is not the user!n"); return 0; printf(

35、"Sorry, the account with this keycode was not foundnn"); return 1; else if(op = 2) int _count = 0; while(true) printf(">>UserName: "); cin >> user_name; printf(">>Paseword: "); cin >> user_pass; string two_pass; printf(">>Confirm Pasew

36、ord: "); cin >> two_pass; if(user_pass != two_pass) printf("Password is not equal.n"); else if(user.get_id(user_name) printf("Account already existsn"); else printf("Success!n"); user.create_new_user(user_name, user_pass); return 1; _count+; if(_count >= 3

37、) printf("Sorry, Set Up failed!n"); return 0; return 1; else if(op = 3) return 0; else printf("Does not recognize the command, try againn"); void _enter:_begin() file.read_file(); user.read_user();/ user.show_user(); power_id"SELECT" = 6;power_id"HELP" = 7;pow

38、er_id"CREATE" = 1; power_id"INSERT" = 2;power_id"DELETE" = 4;power_id"UPDATE" = 3; power_id"ALTER" = 5; int _ok = enter_interface(); if(_ok = 0) return ; printf("+-+n"); printf("| Notes |n"); printf("| |n"); printf("

39、;| 1.Support Create/Select/Insert/Delete/Updata |n"); printf("| 2.Support Grand/Revoke |n"); printf("| 3.Support 'help database' |n"); printf("| 4.Write 'Change Account;' |n"); printf("| 5.All operation is case-insensitive |n"); printf(&qu

40、ot;| 6.Write 'Say you again' to leave |n"); printf("| |n"); printf("+-+nnn"); int _id = user.get_id(user_name); while(true) cout << ">>" string str; char s; while(s = getchar() != EOF) str += s; if(s = '') break; Anal_Word Anal; bool ok

41、= Anal.Analysis(str);/ Anal.show(); if(!ok) Error; continue; vector <string> word; word = Anal.get_word();/ if(word.size() < 5) / Error;/ continue;/ if(to_big(word0) = "CHANGE" && to_big(word1) = "ACCOUNT") enter_interface(); else if(to_big(word0) = "GRAND&q

42、uot;)/ printf(".n"); if(!user.is_main(user_name) cout << "No permissionn" continue; vector <string> add; string oth_name; for(int i = 1; i < (int)word.size(); i+) if(to_big(wordi) = "TO") oth_name = wordi+1; break; add.push_back(wordi); for(int j = 0; j &

43、lt; (int)add.size(); j+) user.add_pow(user.get_id(oth_name), power_idto_big(addj); else if(to_big(word0) = "REVOKE") if(!user.is_main(user_name) cout << "No permissionn" continue; vector <string> add; string oth_name; for(int i = 1; i < (int)word.size(); i+) if(to_big(wordi) = "FROM") oth_name = wordi+1; break; add.push_back(wordi); for(int j = 0; j < (int)add.size(); j+) user.revoke_pow(user.get_id(oth_n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論