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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

5、t i = 0; i < len; +i)if(si >= 65 && si <= 90) si += 32;struct Field/ 表中每個(gè)域的結(jié)構(gòu):char nameN;char typeN;int len;char conditionN;Field()len = 0;name0 = type0 = condition0 = 0;char sqlMAX,sqltmpMAX;/ 讀入的語(yǔ)句字符串int read()/ 讀入 SQL語(yǔ)句,并進(jìn)行格式化分離單詞,以分號(hào)結(jié)束,ESC退出整個(gè)程序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(" 簡(jiǎn)單 DBMS: n");printf("<ESC 鍵退出 ,'output table_name' 輸出表 >:n");printf(" 輸入 SQL語(yǔ)句 :n");printf(">>");for(int j = 0; j <= i; j+)if(sqltmpj

7、 = 13)puts("");第 2頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)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頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)fclose(fp);elseFILE *fp = fopen(table_name, "a");/ 向文件添加數(shù)據(jù)fwrite(&field,sizeof(Field),1,fp);fclose(fp);boolcreate()/ 建立表的函數(shù),一個(gè)表對(duì)應(yīng)一個(gè)*.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'輸入錯(cuò)誤! n");elsess >>

11、; tmp;if(0 != strcmp(tmp,"table")error = true;printf("n'table'輸入錯(cuò)誤! 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頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)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ù)類型錯(cuò)誤 (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頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)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類型長(zhǎng)度錯(cuò)誤!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'輸入錯(cuò)誤 n");break;else if(strcmp(tmp,"unique")=

16、0)第 6頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)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'輸入錯(cuò)誤! n");elsess >> tmp;if(0 != strcmp(tmp,"table")error = true;printf("n'table'輸入錯(cuò)誤! 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頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)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ù)類型錯(cuò)誤 (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類型長(zhǎng)度錯(cuò)誤!n");return false;else field.len = sum;ss >> tmp;if(0 = strcmp(tmp,"primary")第 8頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)char stN;ss >> st;if( 0 = strcmp(st,"key")strc

21、at(tmp, " key");strcpy(field.condition, tmp);elseerror = true;printf("'key'輸入錯(cuò)誤 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'輸入錯(cuò)誤! 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頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)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ù)類型錯(cuò)誤 (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頁(yè)山東科技大學(xué)學(xué)生課程

26、設(shè)計(jì)if(ti > 58 | ti < 48)flg = false;break;else sum = sum * 10 + ti - '0'if(!flg)error = true;printf("n類型長(zhǎng)度錯(cuò)誤!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頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)void output(char *s)/ 輸出表的相關(guān)信息if(access(s, 0) = -1)printf(" 表不存在 n");return ;printf("*n");printf("列名類型長(zhǎng)度約束 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(" 簡(jiǎn)單 DBMS: n");printf("<ESC 鍵退出 ,'output table_name' 輸出表 >:n");printf(" 輸入 SQL語(yǔ)句 :n");printf(">>");第12頁(yè)山東科技大學(xué)學(xué)生課程設(shè)計(jì)read();stringstream s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論