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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

13、;/p><p>  關(guān)系屬性修改,根據(jù)關(guān)系屬性表和屬性名的匹配,并將其刪除,保留其它屬性</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>  兩關(guān)系連接,參數(shù)為:連接數(shù)據(jù)表1,連接數(shù)據(jù)表2,連接后生成的屬性表名,連接后生成的數(shù)據(jù)表名,連接屬性在原屬性表列數(shù)1,連接屬性在原屬性表列數(shù)2,原屬性表1,原屬性表2。三關(guān)系連接時(shí)兩次調(diào)用</p><p>  void lgxsylj(char a[],char a1[],c

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

16、har ch[],char ch1[],int a,int a1,int a2)</p><p>  三關(guān)系投影,參數(shù)為:投影屬性表名,投影數(shù)據(jù)表名,三個(gè)屬性所在列</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ù)表名,所要?jiǎng)h除的數(shù)據(jù)值,所要?jiǎng)h除值所在的屬性列</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>  添加相應(yīng)數(shù)據(jù),添加屬性時(shí)調(diào)用,在相應(yīng)數(shù)據(jù)表里添加一列新數(shù)據(jù),對應(yīng)新屬性</p><p>  char* yhpp(char ch[],char ch1[])</p><p>  用戶匹

20、配,參數(shù)為:用戶名,用戶口令,匹配成功后,以字符串形式返回其相應(yīng)權(quán)限</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ù)表名,投影的三個(gè)屬性所在列,投影后生成的屬性表名,生成的數(shù)據(jù)表名</p><p&

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

22、<p>  字典索引刪除,刪除索引時(shí),修改字典內(nèi)容</p><p>  void zdsyxg(char a1[],char a2[])</p><p>  字典索引修改,添加索引時(shí),修改字典內(nèi)容</p><p>  void zfsr(char a[]) </p><p>  字符輸入,以分號(hào)為結(jié)束標(biāo)志,輸入有回車時(shí),轉(zhuǎn)換為空格處

23、理,當(dāng)檢測到有多空格時(shí),只保留一空格</p><p><b>  程序流程圖</b></p><p><b>  附下頁</b></p><p><b>  圖1.1 算法流程</b></p><p>  四、實(shí)驗(yàn)測試用例與結(jié)果 </p><p>  注

24、:篇幅所限,只列舉一些操作用例,具體功能可運(yùn)行程序測試</p><p>  數(shù)據(jù)字典和三張要操作的基本表:</p><p>  以user1管理員登陸:</p><p>  管理員權(quán)限可進(jìn)行的相應(yīng)操作:</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>  查詢,多關(guān)系,多條件的連接,選擇,投影操作:</p><p>  查詢優(yōu)化,執(zhí)行結(jié)果與上述一致:</p><p><b>

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

27、t;  注:列舉兩個(gè)較關(guān)鍵,比較難一點(diǎn)的處理函數(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],"$");//加結(jié)尾符</p><p>  fclose(f1);</p><p><b>  i=0;</b></p

32、><p>  while (strcmp(b2[i],"$")!=0)//判斷是否到達(dá)文件末尾</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>  //將其以單個(gè)數(shù)據(jù)為單位,存入另一個(gè)二維數(shù)組,每行對應(yīng)一個(gè)數(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++;//進(jìn)行第二行比較,直到結(jié)束</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ù)讀入內(nèi)存,二維數(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],"$");//加結(jié)尾符</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>  //將索引值所在列的第一個(gè)索引值賦給二維數(shù)組第

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

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

51、p><p>  while (strcmpi(b3[i],"$")!=0)//進(jìn)行索引值排序,以整行字符串進(jìn)行處理</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++;//進(jìn)行第二趟處理</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>  六、總結(jié)</b></p><p>  通過對DBMS的模擬,使我更加深刻地領(lǐng)會(huì)DBMS的工作原理和實(shí)現(xiàn)方法。在實(shí)現(xiàn)過程中,遇到了很多問題,對C

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論