數(shù)據(jù)庫管理系統(tǒng)山東科技大學(xué)_第1頁
數(shù)據(jù)庫管理系統(tǒng)山東科技大學(xué)_第2頁
數(shù)據(jù)庫管理系統(tǒng)山東科技大學(xué)_第3頁
數(shù)據(jù)庫管理系統(tǒng)山東科技大學(xué)_第4頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計說明書設(shè)計題目:創(chuàng)建和修改表的定義_專業(yè):計算機科學(xué)與技術(shù)班級:級班_設(shè)計人:_山東科技大學(xué)2011年月日課程設(shè)計任務(wù)書學(xué)院 信息科學(xué)與工程學(xué)院專業(yè) 計算機科學(xué)與技術(shù)班級 11 級 3 班 姓名薛德利一、課程設(shè)計題目:(1)創(chuàng)建和修改表的定義( 2)( 3)二、課程設(shè)計主要參考資料:(1) 薩師煊,王珊 . 數(shù)據(jù)庫系統(tǒng)概論 (第三版 ). 北京:高等教育出版社, 2000(2) 楊冬青,唐世渭,徐其鈞等譯. 數(shù)據(jù)庫系統(tǒng)實現(xiàn) . 北京:機械工業(yè)出版社,2001(3) 譚浩強 . C語言程序設(shè)計 . 清華大學(xué)出版社, 2000三、課程設(shè)計應(yīng)解決的主要問題:(1)實現(xiàn): INSERT INT

2、O表<名 >(<屬性列 1>,<屬性列 2> ) VALUES (<常量 1>,<常量2> )( 2)實現(xiàn): UPDATE<表名 > SET 列<名 >=<表達式 >,<列名 >=<表達式 > WHERE<條件 >。( 3)四、課程設(shè)計相關(guān)附件(如: 圖紙、軟件等):(1)codeblocks 10.05( 2)( 3)五、任務(wù)發(fā)出日期:課程設(shè)計完成日期:指導(dǎo)教師簽字:系主任簽字:指導(dǎo)教師對課程設(shè)計的評語指導(dǎo)教師簽字:2013年月日山東科技大學(xué)學(xué)生課程設(shè)計一、設(shè)計

3、要求:設(shè)計和實現(xiàn)表的物理存儲結(jié)構(gòu);語句以命令行和圖形化界面兩種形式實現(xiàn);分析設(shè)計內(nèi)容,畫出程序流程圖,設(shè)計表的存儲結(jié)構(gòu);提交課程設(shè)計報告。二、需求分析:選擇一種高級語言實現(xiàn)一個簡單的DBMS設(shè)計實現(xiàn)表的物理存儲結(jié)構(gòu);三、設(shè)計思想:由命令行輸入SQL語句,通過對語句進行語法分析,分離關(guān)鍵字以 *.txt文件存放建立的表,一張表對應(yīng)一個*.txt文件;四、程序流程圖:程序主界面(命令行格式) :輸入 CREATE語句,建表:輸出表的信息:輸入 alter 語句 add,修改:輸出表的信息:再輸入 alter 語句 alter,修改:輸出表的信息:再輸入 alter 語句 drop,修改:輸出表的信

4、息:退出(5)主要源程序:#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<conio.h>#include<sstream>#include<io.h>using namespace std;#define MAX 1000#define N 100void tolower(char *s)/ 將輸入的大寫字母轉(zhuǎn)化為小寫字母int len = strlen(s);第 1頁山東科技大學(xué)學(xué)生課程設(shè)計for(in

5、t i = 0; i < len; +i)if(si >= 65 && si <= 90) si += 32;struct Field/ 表中每個域的結(jié)構(gòu):char nameN;char typeN;int len;char conditionN;Field()len = 0;name0 = type0 = condition0 = 0;char sqlMAX,sqltmpMAX;/ 讀入的語句字符串int read()/ 讀入 SQL語句,并進行格式化分離單詞,以分號結(jié)束,ESC退出整個程序char c;int i;for(i = 0; c = getch(

6、); i+)if(c = 27)exit(0);/ESC 退出if(c = 8)/ 退格i -= 2;if(i < -1)i = -1;system("cls");printf(" 簡單 DBMS: n");printf("<ESC 鍵退出 ,'output table_name' 輸出表 >:n");printf(" 輸入 SQL語句 :n");printf(">>");for(int j = 0; j <= i; j+)if(sqltmpj

7、 = 13)puts("");第 2頁山東科技大學(xué)學(xué)生課程設(shè)計printf("%c", sqltmpj);continue;sqltmpi = c;if(c = '')break;if(c = 13)/ 回車鍵puts("");sqli = ' 'else if(c = '(' | c = ')' | c = ''' | c = 'n')printf("%c", c);sqli = ' 'else

8、 if(c = ',')printf("%c", c);sqli = ' 'sqli + 1 = ','sqli + 2 = ' 'i += 2;elseprintf("%c", c);sqli = c;sqli = 0;printf("");puts("");tolower(sql);return 0;void add(Field field, char *table_name) /向表中添加域if(access(table_name, 0) = -

9、1)FILE *fp = fopen(table_name, "w");/ 向文件寫入數(shù)據(jù)fwrite(&field,sizeof(Field),1,fp);第 3頁山東科技大學(xué)學(xué)生課程設(shè)計fclose(fp);elseFILE *fp = fopen(table_name, "a");/ 向文件添加數(shù)據(jù)fwrite(&field,sizeof(Field),1,fp);fclose(fp);boolcreate()/ 建立表的函數(shù),一個表對應(yīng)一個*.txt 文件, bool 為布爾型,取值 false 和 truechar tmpN;c

10、har table_nameN;bool error = false;char type610= "char","int","float","double","time","date"stringstream ss(sql);ss >> tmp;if( 0 != strcmp(tmp,"create")error = true;printf("n'create'輸入錯誤! n");elsess >>

11、; tmp;if(0 != strcmp(tmp,"table")error = true;printf("n'table'輸入錯誤! n");elsess >> table_name;int len = strlen(table_name);strcat(table_name, ".txt");if(access(table_name, 0) = 0)printf(" 表已存在,是否覆蓋?y/nn");char c;c = getchar();if(c = 'n')re

12、turn false;第 4頁山東科技大學(xué)學(xué)生課程設(shè)計elseremove(table_name);while(true)Field field;ss >> tmp; if(tmp0 = ',')add(field, table_name); continue;strcpy(, tmp);if(!(ss >> tmp)break;if(tmp0 = ',')add(field, table_name);continue;bool flg = false;for(int i = 0; i < 6; +i)if(st

13、rcmp(tmp,typei)=0)flg = true;strcpy(field.type, tmp);break;if(!flg)printf("n 數(shù)據(jù)類型錯誤 (char,int,float,double,time,date) ! n"); error = true;break;if(field.type0 = 'c' | field.type0 = 'f' | field.type0 = 'd')ss >> tmp;if(tmp0 = ',')add(field, table_name);

14、continue;第 5頁山東科技大學(xué)學(xué)生課程設(shè)計bool flg = true;int len = strlen(tmp);int sum = 0;for(int i = 0; i < len; +i)if(tmpi > 58 | tmpi < 48)flg = false;break;else sum = sum * 10 + tmpi - '0'if(!flg)error = true;printf("n類型長度錯誤!n");break;else field.len = sum;ss >> tmp; if(tmp0 = &

15、#39;,')add(field, table_name);continue;if(0 = strcmp(tmp,"primary")char stN;ss >> st;if( 0 = strcmp(st,"key")strcat(tmp, " key");strcpy(field.condition, tmp);elseerror = true;printf("'key'輸入錯誤 n");break;else if(strcmp(tmp,"unique")=

16、0)第 6頁山東科技大學(xué)學(xué)生課程設(shè)計strcpy(field.condition, tmp);add(field, table_name);return (!error);bool alter()/ 修改表函數(shù)char tmpN;char table_nameN;bool error = false;char type610= "char","int","float","double","time","date"stringstream ss(sql);ss >>

17、 tmp;if( 0 != strcmp(tmp,"alter")error = true;printf("n'alter'輸入錯誤! n");elsess >> tmp;if(0 != strcmp(tmp,"table")error = true;printf("n'table'輸入錯誤! n");elsess >> table_name;strcat(table_name, ".txt");if(access(table_name,

18、0) = -1)/ 表不存在printf(" 表不存在 n");return false;ss >> tmp;if(strcmp(tmp, "add") = 0)/ 添加表的相關(guān)信息ss >> tmp;Field field;第 7頁山東科技大學(xué)學(xué)生課程設(shè)計strcpy(, tmp);ss >> tmp;bool flg = false;for(int i = 0; i < 6; +i)if(strcmp(tmp,typei)=0)flg = true;strcpy(field.type, t

19、mp);break;if(!flg)printf("n 數(shù)據(jù)類型錯誤 (char,int,float,double,time,date) ! n"); error = true;return false;if(field.type0 = 'c' | field.type0 = 'f' | field.type0 = 'd')ss >> tmp; bool flg = true;int len = strlen(tmp);int sum = 0;for(int i = 0; i < len; +i)if(tmp

20、i > 58 | tmpi < 48)flg = false;break;else sum = sum * 10 + tmpi - '0'if(!flg)error = true;printf("n類型長度錯誤!n");return false;else field.len = sum;ss >> tmp;if(0 = strcmp(tmp,"primary")第 8頁山東科技大學(xué)學(xué)生課程設(shè)計char stN;ss >> st;if( 0 = strcmp(st,"key")strc

21、at(tmp, " key");strcpy(field.condition, tmp);elseerror = true;printf("'key'輸入錯誤 n");return false;else if(strcmp(tmp,"unique")=0)strcpy(field.condition, tmp);FILE *fp = fopen(table_name, "a");fwrite(&field, sizeof(Field), 1, fp);fclose(fp);else if(s

22、trcmp(tmp, "drop") = 0)ss >> tmp;if(0 = strcmp(tmp,"primary")char stN;ss >> st;if( 0 != strcmp(st,"key")error = true;printf(" 'key'輸入錯誤! n");return false;else strcat(tmp, " key");Field fieldN;int len = 0;FILE *fp = fopen(table_nam

23、e, "r");while(fread(&fieldlen, sizeof(Field), 1, fp) != 0)+len;fclose(fp);remove(table_name);第 9頁山東科技大學(xué)學(xué)生課程設(shè)計for(int i = 0; i < len; +i)if(strcmp(fieldi.condition, tmp) = 0) fieldi.condition0 = 0;fp = fopen(table_name, "w");fwrite(&field0, sizeof(Field), 1, fp);fclose(

24、fp);for(int i = 1; i < len; +i)fp = fopen(table_name, "a");fwrite(&fieldi, sizeof(Field), 1, fp);fclose(fp);else if(strcmp("alter", tmp) = 0)/ 修改表的相關(guān)信息ss >> tmp; ss >> tmp; char stN; int sum = 0; ss >> st; bool flg = false;for(int i = 0; i < 6; +i)if(s

25、trcmp(st,typei)=0)flg = true;break;if(!flg)printf("n 數(shù)據(jù)類型錯誤 (char,int,float,double,time,date) ! n"); error = true;return false;if(st0 = 'c' | st0 = 'f' | st0 = 'd')char tN;ss >> t;bool flg = true;int len = strlen(t);for(int i = 0; i < len; +i)第10頁山東科技大學(xué)學(xué)生課程

26、設(shè)計if(ti > 58 | ti < 48)flg = false;break;else sum = sum * 10 + ti - '0'if(!flg)error = true;printf("n類型長度錯誤!n");return false;Field fieldN;int len = 0;FILE *fp = fopen(table_name, "r");while(fread(&fieldlen, sizeof(Field), 1, fp) != 0)+len;fclose(fp);remove(table

27、_name);for(int i = 0; i < len; +i)if(strcmp(, tmp) = 0)strcpy(fieldi.type, st);fieldi.len = sum;break;fp = fopen(table_name, "w");fwrite(&field0, sizeof(Field), 1, fp);fclose(fp);for(int i = 1; i < len; +i)fp = fopen(table_name, "a");fwrite(&fieldi, sizeo

28、f(Field), 1, fp);fclose(fp);return (!error);第11頁山東科技大學(xué)學(xué)生課程設(shè)計void output(char *s)/ 輸出表的相關(guān)信息if(access(s, 0) = -1)printf(" 表不存在 n");return ;printf("*n");printf("列名類型長度約束 n");printf("*n");FILE *fp = fopen(s, "r");Field field;while(fread(&field, sizeo

29、f(Field), 1, fp) != 0)printf("%10s", );if(field.type0 != 0)printf(" %10s", field.type);elseprintf("");if(field.len != 0)printf(" %10d", field.len);elseprintf("");if(field.condition0 != 0)printf(" %14s", field.condition);elseprintf

30、("");puts("");fclose(fp);printf("*n");int main()/ 程序主函數(shù),循環(huán)讀入,直到讀到ESCwhile(1)printf(" 簡單 DBMS: n");printf("<ESC 鍵退出 ,'output table_name' 輸出表 >:n");printf(" 輸入 SQL語句 :n");printf(">>");第12頁山東科技大學(xué)學(xué)生課程設(shè)計read();stringstream s

溫馨提示

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

評論

0/150

提交評論