數(shù)據(jù)庫課程設計文檔_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  數(shù)據(jù)庫系統(tǒng)原理</b></p><p><b>  課程設計文檔</b></p><p>  學號: </p><p>  姓名: </p><p>  一、DBMS的實現(xiàn)方式 </p><p>  

2、四張基本表,以文本文檔形式存儲,分別是數(shù)據(jù)字典,用戶表,關系屬性表,關系數(shù)據(jù)表。</p><p>  數(shù)據(jù)字典用來存儲關系名,以換行符進行區(qū)別,建立索引時,在相應關系名后存儲索引表名,以逗號進行區(qū)別,數(shù)據(jù)操作時,先查數(shù)據(jù)字典,是否有此關系名或相應索引表名,才能繼續(xù)操作。</p><p>  用戶表用來存儲用戶信息,以逗號進行區(qū)別,第零列為用戶名,第一列為用戶口令,第三列為用戶相應權限,“0

3、”代表后臺管理者,可以查詢和添加用戶,“1”代表數(shù)據(jù)庫管理員,可以做增,刪,改,查操作,但不能添加用戶,“2”代表普通用戶,只能做查詢操作,用戶登陸時,通過對用戶名跟口令的匹配,返回第三列權限值。</p><p>  關系屬性表用來存儲關系屬性名,即列名,以逗號區(qū)別。</p><p>  關系數(shù)據(jù)表用來存儲關系數(shù)據(jù),行內以逗號區(qū)別,行間以換行符區(qū)別。</p><p>

4、;  二、DBMS的功能介紹 </p><p> ?。?)create table</p><p>  建立新關系,權限為1</p><p> ?。?)drop table</p><p><b>  刪除關系,權限為1</b></p><p>  (3)alter table</p>

5、<p>  add 添加表屬性,并添加相應屬性數(shù)據(jù),權限為“1”</p><p>  drop 刪除表屬性,權限為“1”</p><p><b> ?。?)insert</b></p><p>  插入數(shù)據(jù),以行為單位,權限為“1”</p><p><b>  (5)delete</b&

6、gt;</p><p>  刪除數(shù)據(jù),以行為單位,權限為“1”</p><p><b> ?。?)update</b></p><p><b>  修改數(shù)據(jù),權限為1</b></p><p><b> ?。?)select</b></p><p>  查

7、詢操作,權限為“0”,“1”,“2”都可以</p><p>  (8)create index</p><p><b>  建立索引</b></p><p> ?。?)drop index</p><p><b>  刪除索引</b></p><p> ?。?0)create

8、 user</p><p>  添加用戶,權限為“0”</p><p>  三、DBMS算法實現(xiàn)</p><p><b>  算法描述</b></p><p>  char* bdsctq(char a[],char b) </p><p>  表達式串提取,根據(jù)第二參數(shù)為‘l’或‘r’,提取表達

9、式左部或又部串</p><p>  char* ctq(char a[],int b)</p><p>  關鍵字串提取,根據(jù)字符個數(shù)提取關鍵字</p><p>  void dgxty(char ch1[],char c[],int b)</p><p>  單關系投影,參數(shù)為:關系屬性表名,關系數(shù)據(jù)表名,投影所在列</p>

10、<p>  void dgxxz(char ch[],char ch1[],char ch2[],char ch3[],char ch4[],int a1,int a2)</p><p>  單關系選擇,參數(shù)為:關系數(shù)據(jù)表名,選擇值1,選擇值2,and或or,選擇后生成表名,選擇屬性所在列1,所在列2</p><p>  void dgxyhxz(char ch[],char c

11、h1[],char ch2[],int a1)</p><p>  單關系優(yōu)化選擇,與上述函數(shù)類似,只不過上述函數(shù)比較兩列,此函數(shù)只比較一列</p><p>  char* dhctq(char a[],int b) </p><p>  根據(jù)逗號提取串,根據(jù)第i個逗號提取i到i+1間的串</p><p>  int gxcz(char z[

12、],char a[])</p><p>  關系查找,根據(jù)關系屬性表和屬性名的匹配,返回此屬性名所在的列數(shù)</p><p>  char* gxmtq(char a[],int b)</p><p><b>  新建模式關系名提取</b></p><p>  void gxxg(char p[],char a[])<

13、;/p><p>  關系屬性修改,根據(jù)關系屬性表和屬性名的匹配,并將其刪除,保留其它屬性</p><p>  char* kgctq(char a[],int b) </p><p><b>  根據(jù)空格提取串</b></p><p>  void lgxlj(char ch[],char ch1[],char ch2[],

14、char ch3[],int a1,int a2,char ch4[],char ch5[])</p><p>  兩關系連接,參數(shù)為:連接數(shù)據(jù)表1,連接數(shù)據(jù)表2,連接后生成的屬性表名,連接后生成的數(shù)據(jù)表名,連接屬性在原屬性表列數(shù)1,連接屬性在原屬性表列數(shù)2,原屬性表1,原屬性表2。三關系連接時兩次調用</p><p>  void lgxsylj(char a[],char a1[],c

15、har a2[],char a3[],char a4[])</p><p>  兩關系索引連接,參數(shù)為:連接數(shù)據(jù)表1,連接數(shù)據(jù)表2,索引表1,索引表2,連接后生成的數(shù)據(jù)表名</p><p>  char* lmtq(char a[])</p><p>  列名提取,提取括號內字符,數(shù)據(jù)插入時也可用</p><p>  void sgxty(c

16、har ch[],char ch1[],int a,int a1,int a2)</p><p>  三關系投影,參數(shù)為:投影屬性表名,投影數(shù)據(jù)表名,三個屬性所在列</p><p>  void shop1(char a[]) </p><p><b>  屬性表文件輸出</b></p><p>  void shop2

17、(char a[]) </p><p><b>  數(shù)據(jù)表文件輸出</b></p><p>  void sjsc(char ch[],char ch1[],int a1)</p><p>  數(shù)據(jù)刪除,參數(shù)為:數(shù)據(jù)表名,所要刪除的數(shù)據(jù)值,所要刪除值所在的屬性列</p><p>  void sjsy(char a[],

18、char a1[],int b1)</p><p>  數(shù)據(jù)索引,參數(shù)為:要建索引的原數(shù)據(jù)表名,索引表名,</p><p>  要建索引的數(shù)據(jù)所在列</p><p>  void sjxg(char ch[],char ch1[],char ch2[],int a1,int a2)</p><p>  數(shù)據(jù)修改,參數(shù)為:所要修改的數(shù)據(jù)表名,修

19、改的判斷屬性值,要修改的值,修改的判斷屬性所在列,要修改的屬性所在列</p><p>  void tjsxsjxg(char ch[])</p><p>  添加相應數(shù)據(jù),添加屬性時調用,在相應數(shù)據(jù)表里添加一列新數(shù)據(jù),對應新屬性</p><p>  char* yhpp(char ch[],char ch1[])</p><p>  用戶匹

20、配,參數(shù)為:用戶名,用戶口令,匹配成功后,以字符串形式返回其相應權限</p><p>  void yhty(char ch[],char ch1[],int a1,int a2,int a3,char ch3[],char ch4[])</p><p>  優(yōu)化投影,參數(shù)為:屬性表名,數(shù)據(jù)表名,投影的三個屬性所在列,投影后生成的屬性表名,生成的數(shù)據(jù)表名</p><p&

21、gt;  void zdcrxg(char a[])</p><p>  字典插入修改,新建關系時,修改字典內容</p><p>  int zdcz(char a[])</p><p>  字典查找,查找關系名是否存在,存在,返回“0”,否則返回“1”</p><p>  void zdsysc(char a1[])</p>

22、<p>  字典索引刪除,刪除索引時,修改字典內容</p><p>  void zdsyxg(char a1[],char a2[])</p><p>  字典索引修改,添加索引時,修改字典內容</p><p>  void zfsr(char a[]) </p><p>  字符輸入,以分號為結束標志,輸入有回車時,轉換為空格處

23、理,當檢測到有多空格時,只保留一空格</p><p><b>  程序流程圖</b></p><p><b>  附下頁</b></p><p><b>  圖1.1 算法流程</b></p><p>  四、實驗測試用例與結果 </p><p>  注

24、:篇幅所限,只列舉一些操作用例,具體功能可運行程序測試</p><p>  數(shù)據(jù)字典和三張要操作的基本表:</p><p>  以user1管理員登陸:</p><p>  管理員權限可進行的相應操作:</p><p><b>  建表,插入數(shù)據(jù):</b></p><p><b>  修

25、改數(shù)據(jù):</b></p><p><b>  添加屬性:</b></p><p><b>  刪除數(shù)據(jù):</b></p><p>  查詢,多關系,多條件的連接,選擇,投影操作:</p><p>  查詢優(yōu)化,執(zhí)行結果與上述一致:</p><p><b>

26、;  下頁續(xù)…</b></p><p>  建立索引,第一列為索引數(shù)據(jù),第二列為索引域值:</p><p>  實現(xiàn)索引上的連接,連接后的數(shù)在索引屬性上據(jù)是有序的:</p><p>  以后臺管理員登陸,可以添加用戶:</p><p><b>  五、關鍵技術 </b></p><p&g

27、t;  注:列舉兩個較關鍵,比較難一點的處理函數(shù)</p><p>  void sjxg(char ch[],char ch1[],char ch2[],int a1,int a2)//數(shù)據(jù)修改</p><p><b>  {</b></p><p><b>  FILE *f1;</b></p><p

28、>  char b,b2[200][200],b3[50][50],b4[200],b5[200];</p><p>  int i=0,j=0,k=0,n=0;</p><p>  f1=fopen(ch,"r");//要修改的數(shù)據(jù)讀入二維數(shù)組</p><p>  b=fgetc(f1);</p><p>  wh

29、ile (b!=EOF)</p><p><b>  {</b></p><p>  while (b!='\n')</p><p><b>  {</b></p><p>  b2[i][j]=b;</p><p>  b=fgetc(f1);</p&

30、gt;<p><b>  j++;</b></p><p><b>  }</b></p><p>  b2[i][j]='\0';</p><p><b>  i++;</b></p><p><b>  j=0;</b>&

31、lt;/p><p>  b=fgetc(f1);</p><p><b>  }</b></p><p>  strcpy(b2[i],"$");//加結尾符</p><p>  fclose(f1);</p><p><b>  i=0;</b></p

32、><p>  while (strcmp(b2[i],"$")!=0)//判斷是否到達文件末尾</p><p><b>  {</b></p><p>  if(strcmp(dhctq(b2[i],a1),ch1)==0)//判斷條件值所在行</p><p><b>  {</b>

33、</p><p><b>  n=0;</b></p><p><b>  j=0;</b></p><p>  strcpy(b5,b2[i]);//提取條件值所在行</p><p>  while (b5[j]!='\0')//掃描所在行</p><p>

34、<b>  {</b></p><p>  while (b5[j]!=',')</p><p><b>  {</b></p><p>  if (b5[j]=='\0')</p><p><b>  {</b></p><

35、p><b>  j--;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  b3[n][k]=b5[j];</p><p>  //將其以單個數(shù)據(jù)為單位,存入另一個二維數(shù)組,每行對應一個數(shù)據(jù),這樣方便對串

36、處理</p><p><b>  j++;</b></p><p><b>  k++;</b></p><p><b>  }</b></p><p>  b3[n][k]='\0';</p><p><b>  n++;&l

37、t;/b></p><p><b>  k=0;</b></p><p><b>  j++;</b></p><p>  strcpy(b3[n],"$");</p><p>  strcpy(b3[a2],ch2);</p><p>  //將要

38、修改的值直接覆蓋到要修改的數(shù)據(jù)位置</p><p><b>  }</b></p><p><b>  n=0;</b></p><p>  while (strcmp(b3[n],"$")!=0)</p><p><b>  {</b></p>

39、<p>  strcat(b4,b3[n]);</p><p>  strcat(b4,",");</p><p><b>  n++;</b></p><p>  }//修改完成,把二維數(shù)組連回一維數(shù)組</p><p>  strcpy(b2[i],b4);</p>&l

40、t;p>  //并將其覆蓋到原數(shù)據(jù)條件值所在行,完成第一次</p><p><b>  }</b></p><p>  i++;//進行第二行比較,直到結束</p><p><b>  }</b></p><p>  f1=fopen(ch,"w");</p>

41、<p><b>  i=0;</b></p><p>  while (strcmp(b2[i],"$")!=0)//將修改后的數(shù)組覆蓋寫回原數(shù)據(jù)文件</p><p><b>  {</b></p><p>  fputs(b2[i],f1);</p><p>  f

42、putc('\n',f1);</p><p><b>  i++;</b></p><p><b>  }</b></p><p>  fclose(f1);</p><p>  printf("數(shù)據(jù)已修改!\n");</p><p>&l

43、t;b>  }</b></p><p>  void sjsy(char a[],char a1[],int b1)//數(shù)據(jù)索引</p><p><b>  {</b></p><p><b>  FILE *f1;</b></p><p>  char b3[200][200],

44、b,b2[200][200],b4[200];</p><p>  int i=0,n=0,j=0;</p><p>  f1=fopen(a,"r");</p><p>  b=fgetc(f1); </p><p>  while (b!=EOF)//原數(shù)據(jù)讀入內存,二維數(shù)組</p><p>

45、<b>  {</b></p><p>  while (b!='\n')</p><p><b>  {</b></p><p>  b2[i][j]=b;</p><p>  b=fgetc(f1);</p><p><b>  j++;<

46、/b></p><p><b>  }</b></p><p>  b2[i][j]='\0';</p><p><b>  i++;</b></p><p><b>  j=0;</b></p><p>  b=fgetc(f1)

47、;</p><p><b>  }</b></p><p>  strcpy(b2[i],"$");//加結尾符</p><p>  fclose(f1);</p><p>  f1=fopen(a1,"w+");</p><p><b>  i=

48、0,n=0;</b></p><p>  while (strcmpi(b2[i],"$")!=0)</p><p><b>  {</b></p><p>  strcpy(b3[i],dhctq(b2[i],b1));</p><p>  //將索引值所在列的第一個索引值賦給二維數(shù)組第

49、零行</p><p>  n=i;//記錄索引值所在原數(shù)據(jù)的位置</p><p>  strcat(b3[i],",");</p><p>  itoa(n,b4,10);//將其位置由整形轉換為字符串</p><p>  strcat(b3[i],b4);//將其連到索引值后面,形成索引域值</p><

50、;p>  strcat(b3[i],",");</p><p>  i++;//進行下一個索引值處理</p><p><b>  }</b></p><p>  strcpy(b3[i],"$");</p><p><b>  i=0;</b></

51、p><p>  while (strcmpi(b3[i],"$")!=0)//進行索引值排序,以整行字符串進行處理</p><p><b>  {</b></p><p><b>  j=i+1;</b></p><p>  while (strcmpi(b3[j],"$&

52、quot;)!=0)//兩重循環(huán)</p><p><b>  {</b></p><p>  if (strcmpi(b3[i],b3[j])>0) </p><p>  //第i行和第j行(j初始值為i+1)比,大就交換,第一趟選出第一小的,第二趟選出第二小的,依此類推</p><p><b>  {&

53、lt;/b></p><p>  strcpy(b4,b3[i]);</p><p>  strcpy(b3[i],b3[j]);</p><p>  strcpy(b3[j],b4);</p><p><b>  }</b></p><p><b>  j++;</b>

54、;</p><p><b>  }</b></p><p>  i++;//進行第二趟處理</p><p><b>  }</b></p><p><b>  i=0;</b></p><p>  while (strcmpi(b3[i],"$

55、")!=0)//排序后的文件寫入索引文件</p><p><b>  {</b></p><p>  fputs(b3[i],f1);</p><p>  fputc('\n',f1);</p><p><b>  i++;</b></p><p>

56、<b>  }</b></p><p>  fclose(f1);</p><p><b>  }</b></p><p><b>  六、總結</b></p><p>  通過對DBMS的模擬,使我更加深刻地領會DBMS的工作原理和實現(xiàn)方法。在實現(xiàn)過程中,遇到了很多問題,對C

57、,對數(shù)據(jù)結構,很多知識都得重新學習,也使得理解更加深刻,感覺最難的是update操作,用了兩個二維數(shù)組進行處理,感覺最復雜的是select操作,尤其是三表的連接,選擇,投影操作,要記錄的信息實在太多了,開辟了很多個數(shù)組記錄。感覺有時候實現(xiàn)不難,就怕思想跟不上,就好比索引,一開始的理解錯誤,導致索引建立不正確,后經過老師的講解,才將索引實現(xiàn),并通過索引建立連接。</p><p>  每步的實現(xiàn),都有著不同的收獲,我

58、相信只要動手去付出了,總會有收獲,或多或少。通過本實驗,感覺自己的編程能力提高了不少,編寫新函數(shù)時,編譯錯誤減少了很多,面對新算法時,也可以很快上手。</p><p>  最后,感謝老師,感謝這次課程設計,使我又一次飛躍。</p><p><b>  七、參考文獻</b></p><p>  《數(shù)據(jù)庫系統(tǒng)原理》第二版 李建中,王珊編著</

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論