版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)說明書設(shè)計(jì)題目:創(chuàng)建和修改表的定義_專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):_設(shè)計(jì)人:××_山東科技大學(xué)20年06月20日課程設(shè)計(jì)任務(wù)書學(xué)院信息科學(xué)與工程學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)姓名××課程設(shè)計(jì)題目:創(chuàng)建和修改表的定義課程設(shè)計(jì)主要參考資料:《數(shù)據(jù)庫系統(tǒng)概論》《C語言程序設(shè)計(jì)》《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)應(yīng)解決的主要問題:1.選擇一種高級(jí)語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的DBMS主要功能:實(shí)現(xiàn):CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[<列完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列完整性約束條件>]…][,<表完整性約束條件>])實(shí)現(xiàn):ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[<列完整性約束>]][DROP<列完整性約束名>][MODIFY<列名><數(shù)據(jù)類型>]要求:(1)設(shè)計(jì)實(shí)現(xiàn)表的物理存儲(chǔ)結(jié)構(gòu);(2)語句以命令行和圖形化界面兩種形式實(shí)現(xiàn);(3)提交課程設(shè)計(jì)報(bào)告。課程設(shè)計(jì)相關(guān)附件(如:圖紙、軟件等):任務(wù)發(fā)出日期:課程設(shè)計(jì)完成日期:指導(dǎo)教師簽字:系主任簽字:
指導(dǎo)教師對(duì)課程設(shè)計(jì)的評(píng)語指導(dǎo)教師簽字:年月日山東科技大學(xué)學(xué)生課程設(shè)計(jì) 第21頁一、設(shè)計(jì)要求:(1)設(shè)計(jì)實(shí)現(xiàn)表的物理存儲(chǔ)結(jié)構(gòu);(2)語句以命令行和圖形化界面兩種形式實(shí)現(xiàn);(3)提交課程設(shè)計(jì)報(bào)告。二、需求分析:1.選擇一種高級(jí)語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的DBMS設(shè)計(jì)實(shí)現(xiàn)表的物理存儲(chǔ)結(jié)構(gòu);語句以命令行和圖形化界面兩種形式實(shí)現(xiàn);三、設(shè)計(jì)思想:由命令行輸入SQL語句,通過對(duì)語句進(jìn)行語法分析,分離關(guān)鍵字,語句以分號(hào)作為結(jié)束符號(hào);以*.txt文件存放建立的表,一張表對(duì)應(yīng)一個(gè)*.txt文件;用戶可直接輸入CREATETABLE語句和ALTER語句,程序自動(dòng)解析和查錯(cuò),output語句輸出表的相關(guān)信息。四、主要源程序://源程序在codeblocks10.05下運(yùn)行通過#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<conio.h>#include<windows.h>#include<sstream>#include<io.h>usingnamespacestd;#defineMAX1000#defineN100//表中每個(gè)域的結(jié)構(gòu):structField{charname[N];chartype[N];intlen;charcondition[N];Field(){len=0;name[0]=type[0]=condition[0]=0;}};//讀入的語句字符串charsql[MAX],sqltmp[MAX];//將輸入的大寫字母轉(zhuǎn)化為小寫字母voidtolower(char*s){intlen=strlen(s);for(inti=0;i<len;++i){if(s[i]>='A'&&s[i]<='Z')s[i]+=32;}}//讀入SQL語句,并進(jìn)行格式化分離單詞,以分號(hào)結(jié)束,ESC退出整個(gè)程序intread(){charc;inti;for(i=0;c=getch();i++){if(c==';')break;if(c==27)exit(0);if(c==8){i-=2;if(i<-1)i=-1;system("cls");printf("<ESCForExit,'outputtable_name'foroutputthetable>:\nPleaseinputtheSQLsentence:\n\n");for(intj=0;j<=i;j++){if(sqltmp[j]==13){puts("");}printf("%c",sqltmp[j]);}continue;}sqltmp[i]=c;if(c==13){puts("");sql[i]='';}elseif(c=='('||c==')'||c=='\''||c=='\n'){printf("%c",c);sql[i]='';}elseif(c==','){printf("%c",c);sql[i]='';sql[i+1]=',';sql[i+2]='';i+=2;}else{printf("%c",c);sql[i]=c;}}sql[i]=0;printf(";");puts("");tolower(sql);return0;}//向表中添加域voidadd(Fieldfield,char*table_name){if(access(table_name,0)==-1){FILE*fp=fopen(table_name,"w");fwrite(&field,sizeof(Field),1,fp);fclose(fp);}else{FILE*fp=fopen(table_name,"a");fwrite(&field,sizeof(Field),1,fp);fclose(fp);}}//建立表的函數(shù),一個(gè)表對(duì)應(yīng)一個(gè)*.txt文件boolcreate(){puts(sql);chartmp[N];chartable_name[N];boolerror=false;chartype[6][10]={"char","int","float","double","time","date"};stringstreamss(sql);ss>>tmp;if(0!=strcmp(tmp,"create")){error=true;printf("\nTheword'create'maybeerror!\n");}else{ss>>tmp;if(0!=strcmp(tmp,"table")){error=true;printf("\nTheword'table'maybeerror!\n");}else{ss>>table_name;intlen=strlen(table_name);strcat(table_name,".txt");if(access(table_name,0)==0){printf("Thetablealreadyexist!!overit??y/n\n");charc;c=getchar();if(c=='n')returnfalse;elseremove(table_name);}while(true){Fieldfield;ss>>tmp;if(tmp[0]==','){add(field,table_name);continue;}if(strcmp(tmp,";")==0)break;strcpy(,tmp);if(!(ss>>tmp))break;if(tmp[0]==','){add(field,table_name);continue;}boolflg=false;for(inti=0;i<6;++i){if(strcmp(tmp,type[i])==0){flg=true;strcpy(field.type,tmp);break;}}if(!flg){printf("\nThetypemaybewrong(char,int,float,double,time,date)!\n");error=true;break;}if(field.type[0]=='c'||field.type[0]=='f'||field.type[0]=='d'){ss>>tmp;if(tmp[0]==','){add(field,table_name);continue;}boolflg=true;intlen=strlen(tmp);intsum=0;for(inti=0;i<len;++i){if(tmp[i]>58||tmp[i]<48){flg=false;break;}elsesum=sum*10+tmp[i]-'0';}if(!flg){error=true;printf("\nThelengthofthetypemaybeerror!!\n");break;}elsefield.len=sum;}ss>>tmp;if(tmp[0]==','){add(field,table_name);continue;}if(0==strcmp(tmp,"primary")){charst[N];ss>>st;if(0==strcmp(st,"key")){strcat(tmp,"key");strcpy(field.condition,tmp);}else{error=true;printf("Theword\'key\'maybeerror!!\n");break;}}elseif(strcmp(tmp,"unique")==0){strcpy(field.condition,tmp);}add(field,table_name);}}}return(!error);}//修改表函數(shù)boolalter(){chartmp[N];chartable_name[N];boolerror=false;chartype[6][10]={"char","int","float","double","time","date"};stringstreamss(sql);ss>>tmp;if(0!=strcmp(tmp,"alter")){error=true;printf("\nTheword'alter'maybeerror!\n");}else{ss>>tmp;if(0!=strcmp(tmp,"table")){error=true;printf("\nTheword'table'maybeerror!\n");}else{ss>>table_name;strcat(table_name,".txt");if(access(table_name,0)==-1){printf("Thetabledonotexist!!\n");returnfalse;}ss>>tmp;if(strcmp(tmp,"add")==0){ss>>tmp;Fieldfield;strcpy(,tmp);ss>>tmp;boolflg=false;for(inti=0;i<6;++i){if(strcmp(tmp,type[i])==0){flg=true;strcpy(field.type,tmp);break;}}if(!flg){printf("\nThetypemaybewrong(char,int,float,double,time,date)!\n");error=true;returnfalse;}if(field.type[0]=='c'||field.type[0]=='f'||field.type[0]=='d'){ss>>tmp;boolflg=true;intlen=strlen(tmp);intsum=0;for(inti=0;i<len;++i){if(tmp[i]>58||tmp[i]<48){flg=false;break;}elsesum=sum*10+tmp[i]-'0';}if(!flg){error=true;printf("\nThelengthofthetypemaybeerror!!\n");returnfalse;}elsefield.len=sum;}ss>>tmp;if(0==strcmp(tmp,"primary")){charst[N];ss>>st;if(0==strcmp(st,"key")){strcat(tmp,"key");strcpy(field.condition,tmp);}else{error=true;printf("Theword\'key\'maybeerror!!\n");returnfalse;}}elseif(strcmp(tmp,"unique")==0){strcpy(field.condition,tmp);}FILE*fp=fopen(table_name,"a");fwrite(&field,sizeof(Field),1,fp);fclose(fp);}elseif(strcmp(tmp,"drop")==0){ss>>tmp;if(0==strcmp(tmp,"primary")){charst[N];ss>>st;if(0!=strcmp(st,"key")){error=true;printf("Theword\'key\'maybeerror!!\n");returnfalse;}elsestrcat(tmp,"key");}Fieldfield[N];intlen=0;FILE*fp=fopen(table_name,"r");while(fread(&field[len],sizeof(Field),1,fp)!=0){++len;}fclose(fp);remove(table_name);printf("%d\n",len);for(inti=0;i<len;++i){if(strcmp(field[i].condition,tmp)==0)field[i].condition[0]=0;}fp=fopen(table_name,"w");fwrite(&field[0],sizeof(Field),1,fp);fclose(fp);for(inti=1;i<len;++i){fp=fopen(table_name,"a");fwrite(&field[i],sizeof(Field),1,fp);fclose(fp);}}elseif(strcmp("alter",tmp)==0){ss>>tmp;ss>>tmp;charst[N];intsum=0;ss>>st;boolflg=false;for(inti=0;i<6;++i){if(strcmp(st,type[i])==0){flg=true;break;}}if(!flg){printf("\nThetypemaybewrong(char,int,float,double,time,date)!\n");error=true;returnfalse;}if(st[0]=='c'||st[0]=='f'||st[0]=='d'){chart[N];ss>>t;boolflg=true;intlen=strlen(t);for(inti=0;i<len;++i){if(t[i]>58||t[i]<48){flg=false;break;}elsesum=sum*10+t[i]-'0';}if(!flg){error=true;printf("\nThelengthofthetypemaybeerror!!\n");returnfalse;}}Fieldfield[N];intlen=0;FILE*fp=fopen(table_name,"r");while(fread(&field[len],sizeof(Field),1,fp)!=0){++len;}fclose(fp);remove(table_name);for(inti=0;i<len;++i){if(strcmp(field[i].name,tmp)==0){strcpy(field[i].type,st);field[i].len=sum;break;}}fp=fopen(table_name,"w");fwrite(&field[0],sizeof(Field),1,fp);fclose(fp);for(inti=1;i<len;++i){fp=fopen(table_name,"a");fwrite(&field[i],sizeof(Field),1,fp);fclose(fp);}}}}return(!error);}//輸出表的相關(guān)信息voidoutput(char*s){if(access(s,0)==-1){printf("Thetabledonotexist!!\n");return;}printf("*****************************************************\n");printf("nametypelengthcondition\n");printf("*****************************************************\n");FILE*fp=fopen(s,"r");Fieldfield;while(fread(&field,sizeof(Field),1,fp)!=0){printf("%10s",);if(field.type[0]!=0)printf("%10s",field.type);elseprintf("
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 土建建筑清包工合同模板
- 培訓(xùn)學(xué)校保潔服務(wù)合同范例
- 大潤(rùn)發(fā)裝修合同模板
- 國(guó)貿(mào)合同范例
- 塔吊安裝安全合同范例
- 單位保安勞務(wù)合同范例
- 勞務(wù)總包合同范例
- 六年級(jí)語文下冊(cè) 第一單元 1 北京的春節(jié)教案 新人教版
- 2024-2025學(xué)年高中數(shù)學(xué) 第2章 統(tǒng)計(jì) 2.2 用樣本估計(jì)總體 2.2.2 用樣本的數(shù)字特征估計(jì)總體的數(shù)字特征(教師用書)教案 新人教A版必修3
- 一級(jí)建造師-港口與航道工程-案例題一
- 浙江省溫州市地圖矢量PPT模板(圖文)
- 上海市建設(shè)工程項(xiàng)目管理機(jī)構(gòu)管理人員情況表
- 北師大版二年級(jí)數(shù)學(xué)上冊(cè)第九單元《除法》知識(shí)點(diǎn)梳理復(fù)習(xí)ppt
- 空氣能室外機(jī)保養(yǎng)維護(hù)記錄表
- DB37∕T 5162-2020 裝配式混凝土結(jié)構(gòu)鋼筋套筒灌漿連接應(yīng)用技術(shù)規(guī)程
- 9-2 《第三方過程評(píng)估淋蓄水檢查內(nèi)容》(指引)
- 部編版七年級(jí)初一語文上冊(cè)《狼》公開課課件(定稿)
- 2015路面工程講義(墊層+底基層+基層+面層+聯(lián)合層+封層、透層與黏層)
- 《現(xiàn)代漢語修辭》PPT課件(完整版)
- TTJCA 0007-2022 住宅室內(nèi)裝飾裝修工程施工驗(yàn)收規(guī)范
- 構(gòu)造柱工程施工技術(shù)交底
評(píng)論
0/150
提交評(píng)論