版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫課程設(shè)計(jì)設(shè)計(jì)題目:數(shù)據(jù)庫創(chuàng)建和修改表專業(yè):物聯(lián)網(wǎng)工程班級(jí):2011級(jí)_設(shè)計(jì)人:林升_學(xué)號(hào):201101052143山東科技大學(xué)201課程設(shè)計(jì)任務(wù)書課程設(shè)計(jì)題目:創(chuàng)建和修改表的定義課程設(shè)計(jì)主要參考資料:《數(shù)據(jù)庫系統(tǒng)概論(第四版)》,王珊、薩師煊主編,高等教育出版社《C程序設(shè)計(jì)(第三版)》,譚浩強(qiáng)主編,清華大學(xué)出版社課程設(shè)計(jì)應(yīng)解決的主要問題:(1)實(shí)現(xiàn):CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[<列完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列完整性約束條件>]…][,<表完整性約束條件>]);(2)實(shí)現(xiàn):ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[<列完整性約束>]][DROP<列完整性約束名>][MODIFY<列名><數(shù)據(jù)類型>]。山東科技大學(xué)學(xué)生課程設(shè)計(jì) 第1頁設(shè)計(jì)要求:(1)設(shè)計(jì)內(nèi)容創(chuàng)建和修改表的定義:1、實(shí)現(xiàn):CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[<列完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列完整性約束條件>]…][,<表完整性約束條件>]);2、實(shí)現(xiàn):ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[<列完整性約束>]][DROP<列完整性約束名>][MODIFY<列名><數(shù)據(jù)類型>]。(2)設(shè)計(jì)要求1、設(shè)計(jì)和實(shí)現(xiàn)表的物理存儲(chǔ)結(jié)構(gòu);2、語句以命令行和圖形化界面兩種形式實(shí)現(xiàn);3、分析設(shè)計(jì)內(nèi)容,畫出程序流程圖,設(shè)計(jì)表的存儲(chǔ)結(jié)構(gòu);4、提交課程設(shè)計(jì)報(bào)告。(3)任務(wù)步驟1、分析命令語句,得到表名、列名和數(shù)據(jù)類型等信息;2、根據(jù)命令中的關(guān)鍵詞確定表和字段的屬性;3、創(chuàng)建一個(gè)表文件,寫入表結(jié)構(gòu)信息;4、打開一個(gè)表文件,修改表結(jié)構(gòu)信息;5、演示建立了一個(gè)表,并修改了表結(jié)構(gòu)。需求分析:數(shù)據(jù)庫系統(tǒng)能夠有效地組織和管理大量的數(shù)據(jù)。研究數(shù)據(jù)庫管理系統(tǒng)的實(shí)現(xiàn)技術(shù),對(duì)于掌握數(shù)據(jù)庫系統(tǒng)的原理和技術(shù),了解數(shù)據(jù)庫系統(tǒng)的內(nèi)部結(jié)構(gòu),開發(fā)高效的數(shù)據(jù)庫應(yīng)用系統(tǒng),具有重要意義。在建立了數(shù)據(jù)庫之后,首先需要建立表,之后才能進(jìn)行記錄的插入。這個(gè)程序的設(shè)計(jì)就是實(shí)現(xiàn)創(chuàng)建和修改表的定義。設(shè)計(jì)思想:(1)總體思路此課程設(shè)計(jì)主要要完成的任務(wù)是創(chuàng)建和修改表的定義,因此程序中共包含四個(gè)可選項(xiàng):“新建表”、“修改表”、“顯示表的信息”、“保存操作并退出”。(2)主要結(jié)構(gòu)1、每一個(gè)都有一個(gè)固定結(jié)構(gòu),因此我首先建立了一個(gè)表的結(jié)構(gòu)體,具體形式如下:structField{charname[N];chartype[N];intlen;charcondition[N];Field(){len=0;name[0]=type[0]=condition[0]=0;}//構(gòu)造函數(shù)};(3)讀入的語句字符串charsql[MAX],sqltmp[MAX];(4)新建表(5)修改表(6)顯示表的信息(7)保存操作并退出程序流程圖:主要源程序:(1)定義表結(jié)構(gòu)體typedefstruct{ chartable_name[20];//表名 intproperty_num;//屬性的個(gè)數(shù) charproperty_name[100][20];//屬性名 intproperty_type[2];//屬性類型(1=int,2=char) intproperty_null[2];//屬性是否為空(1=允許,2=不允許) intproperty_key[2];//是否主碼(1=是主鍵,2=不是主鍵)}TABLE;(2)讀入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);//esc的ASC碼位27,結(jié)束程序if(c==8)//退格{i-=2;if(i<-1)i=-1;system("cls");printf("<ESCForExit,'outputtable_name'foroutputthetable>:\n請(qǐng)輸入SQL語句:\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;}(3)向表中添加域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);}}(4)建立表voidcreatetable(){ TABLEnewtable;//用來存儲(chǔ)新創(chuàng)建的表 //step1:輸入表名 inttablename_is_right=0; while(!tablename_is_right) { system("cls"); printf("表名:"); scanf("%s",&newtable.table_name); getchar(); //判斷表名是否已經(jīng)存在 intname_is_equal=0; for(inti=0;i<table_num;i++) { if(strcmp(newtable.table_name,table[i].table_name)==0) { name_is_equal=1;break; } } if(name_is_equal==1) { printf("表%s已經(jīng)存在,按任意鍵返回重新輸入",newtable.table_name); getchar(); } elsetablename_is_right=1; }//表名while //step2:輸入屬性個(gè)數(shù) intpropertynum_is_right=0; while(!propertynum_is_right) { system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("屬性個(gè)數(shù):"); scanf("%d",&perty_num); getchar(); //判斷屬性個(gè)數(shù)是否正確 if(perty_num<=0) { printf("您輸入的屬性個(gè)數(shù)有誤,按任意鍵重新輸入\n"); getchar(); } elsepropertynum_is_right=1; }//屬性個(gè)數(shù)while inti;//i代表循環(huán)中的屬性 intj;//j代表在i之前的屬性for(i=0;i<perty_num;i++)//i代表屬性個(gè)數(shù)0,1,2 {//step3:輸入屬性名 intpropertyname_is_right=0; while(!propertyname_is_right) { system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("屬性個(gè)數(shù):%d\n",perty_num); printf("\n"); printf("屬性名屬性類型是否允許為空是否為主鍵\n");printf("(1=int2=float)(1=是2=否)(1=是2=否)\n");printf("\n"); for(j=0;j<i;j++) { printf("屬性%2d:%-10s%d%d%d",j+1,perty_name[j],perty_type[j],perty_null[j],perty_key[j]); } printf("屬性%2d:",i+1); scanf("%s",&perty_name[i]); //判斷屬性名是否存在 intname_is_equal=0; for(j=0;j<i;j++) { if(strcmp(perty_name[i],perty_name[j])==0) name_is_equal=1; } if(name_is_equal==1) { printf("屬性%s已經(jīng)存在,按任意鍵返回重新輸入",perty_name[i]); getchar(); } elsepropertyname_is_right=1; }//屬性名while //step4:選擇屬性類型 intpropertytype_is_right=0; while(!propertytype_is_right) { system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("屬性個(gè)數(shù):%d\n",perty_num); printf("\n"); printf("屬性名屬性類型是否允許為空是否為主鍵\n");printf("(1=int2=float)(1=是2=否)(1=是2=否)\n");printf("\n"); for(j=0;j<i;j++) {printf("屬性%2d:%-10s%d%d%d\n",j+1, perty_name[j],perty_type[j],perty_null[j],perty_key[j]); } printf("屬性%2d:%-10s\n",i+1,perty_name[i]); scanf("%d",&perty_type[i]); getchar(); //判斷選擇的屬性類型是否正確 if(perty_type[i]!=1&&perty_type[i]!=2) { printf("您選擇的屬性類型有誤,按任意鍵重新選擇\n"); getchar(); } elsepropertytype_is_right=1; }//屬性類型while //step5:選擇是否允許為空 intpropertynull_is_right=0; while(!propertynull_is_right) { system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("屬性個(gè)數(shù):%d\n",perty_num); printf("\n"); printf("屬性名屬性類型是否允許為空是否為主鍵\n");printf("(1=int2=float)(1=是2=否)(1=是2=否)\n");printf("\n"); for(j=0;j<i;j++) { printf("屬性%2d:%-10s%d%d%d\n",j+1, perty_name[j],perty_type[j],perty_null[j],perty_key[j]); } printf("屬性%2d:%-10s%d\n",i+1,perty_name[i],perty_type[i]); scanf("%d",&perty_null[i]); getchar(); //判斷選擇是否正確 if(perty_null[i]!=1&&perty_null[i]!=2) { printf("您的選擇有誤,按任意鍵重新選擇\n"); getchar(); } elsepropertynull_is_right=1; }//是否允許為空while //step6:選擇是否為主鍵 intpropertypropertykey_is_right=0; while(!propertypropertykey_is_right) { system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("屬性個(gè)數(shù):%d\n",perty_num); printf("\n"); printf("屬性名屬性類型是否允許為空是否為主鍵\n");printf("(1=int2=float)(1=是2=否)(1=是2=否)\n");printf("\n"); for(j=0;j<i;j++) { printf("屬性%2d:%-10s%d%d%d\n",j+1, perty_name[j],perty_type[j],perty_null[j],perty_key[j]); } printf("屬性%2d:%-10s%d%d\n",i+1, perty_name[i],perty_type[i],perty_null[i]); scanf("%d",&perty_key[i]); getchar(); //判斷選擇是否正確 if(perty_key[i]!=1&&perty_key[i]!=2) { printf("您的選擇有誤,按任意鍵重新選擇\n"); getchar(); } elsepropertypropertykey_is_right=1; //主鍵的非空屬性應(yīng)該為不允許空 if(perty_key[i]==1&&perty_null[i]==1) { printf("該屬性設(shè)為主鍵,因此改為不允許為空,按任意鍵繼續(xù)\n"); getchar(); perty_null[i]=2; system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("屬性個(gè)數(shù):%d\n",perty_num); printf("\n"); printf("屬性名屬性類型是否允許為空是否為主鍵\n");printf("(1=int2=float)(1=是2=否)(1=是2=否)\n"); printf("\n"); for(j=0;j<=i;j++) { printf("屬性%2d:%-10s%d%d%d",j+1, perty_name[j],perty_type[j],perty_null[j],perty_key[j]); } if(i==perty_num-1)printf("\n"); } }//是否為主鍵while }//屬性for(5)修改表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
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中國機(jī)械科學(xué)研究總院集團(tuán)限公司總部招聘5人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年青海事業(yè)單位聯(lián)考考試筆試高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年江蘇南通市市政和園林局直屬事業(yè)單位招聘4人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年安徽當(dāng)涂縣事業(yè)單位招聘工作人員高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年吉林松原長嶺縣公開招聘高校畢業(yè)生帶編入伍7人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上海煙草集團(tuán)限責(zé)任公司天津卷煙廠春季招聘41人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年黑龍江大慶市事業(yè)單位招聘工作人員257人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省廣元市朝天區(qū)事業(yè)單位招聘26人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 屋頂隔熱泡沫混凝土施工合同
- 農(nóng)家樂環(huán)境保護(hù)與可持續(xù)發(fā)展辦法
- 75t循環(huán)流化床鍋爐設(shè)計(jì)說明書
- JT∕T 1443-2022 冷鏈運(yùn)輸監(jiān)控管理平臺(tái)技術(shù)要求
- 2021-2022學(xué)年安徽省銅陵市銅官區(qū)八年級(jí)(上)期末數(shù)學(xué)試題及答案解析
- QC080000-2017內(nèi)審員測(cè)試題及答案
- 群耀實(shí)業(yè)蘇州有限公司員工宿舍
- 企業(yè)技術(shù)中心成立文件
- 西方二十世紀(jì)文論
- 部編版語文四年級(jí)上冊(cè)作文歸納整理總復(fù)習(xí)課件
- 配電項(xiàng)目工程重點(diǎn)、難點(diǎn)及解決措施
- 充氨安全安全操作規(guī)程20某0310
- 側(cè)支架鉆孔組合機(jī)床總體設(shè)計(jì)【帶圖紙】
評(píng)論
0/150
提交評(píng)論