課程設(shè)計說明書 -用C語言實(shí)現(xiàn)一個可以創(chuàng)建、修改數(shù)據(jù)表的DBMS_第1頁
課程設(shè)計說明書 -用C語言實(shí)現(xiàn)一個可以創(chuàng)建、修改數(shù)據(jù)表的DBMS_第2頁
課程設(shè)計說明書 -用C語言實(shí)現(xiàn)一個可以創(chuàng)建、修改數(shù)據(jù)表的DBMS_第3頁
課程設(shè)計說明書 -用C語言實(shí)現(xiàn)一個可以創(chuàng)建、修改數(shù)據(jù)表的DBMS_第4頁
課程設(shè)計說明書 -用C語言實(shí)現(xiàn)一個可以創(chuàng)建、修改數(shù)據(jù)表的DBMS_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

課程設(shè)計說明書設(shè)計題目:用C語言實(shí)現(xiàn)一個可以創(chuàng)建、修改數(shù)據(jù)表的DBMS課程設(shè)計任務(wù)書學(xué)院課程設(shè)計題目:用C語言實(shí)現(xiàn)一個可以創(chuàng)建、修改數(shù)據(jù)表的DBMS課程設(shè)計主要參考資料:數(shù)據(jù)庫系統(tǒng)概論(第四版)——高等教育出版社C++程序設(shè)計——清華大學(xué)出版社數(shù)據(jù)結(jié)構(gòu)——清華大學(xué)出版社課程設(shè)計應(yīng)解決的主要問題:txt文件中數(shù)據(jù)的讀寫等操作設(shè)計正確的數(shù)據(jù)結(jié)構(gòu)存儲表的屬性結(jié)構(gòu)解決命令識別問題C語言中函數(shù)定義時相互調(diào)用的問題課程設(shè)計相關(guān)附件(如:圖紙、軟件等):項目主要源代碼:數(shù)據(jù)庫課程設(shè)計\dbms0\LDBMS.DSW項目可執(zhí)行文件:數(shù)據(jù)庫課程設(shè)計\dbms0\Debug\LDBMS.exe執(zhí)行結(jié)果截圖任務(wù)發(fā)出日期:2011/4/29課程設(shè)計完成日期:2011/7指導(dǎo)教師簽字:系主任簽字:指導(dǎo)教師對課程設(shè)計的評語指導(dǎo)教師簽字:___年月日課程設(shè)計 第5頁設(shè)計要求:選擇一種高級編程語言實(shí)現(xiàn)一個具有查詢功能的簡單DBMS。具體要求如下:內(nèi)容:實(shí)現(xiàn):CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[<列完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列完整性約束條件>]…][,<表完整性約束條件>]);實(shí)現(xiàn):ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[<列完整性約束>]][DROP<列完整性約束名>][MODIFY<列名><數(shù)據(jù)類型>]。要求:設(shè)計和實(shí)現(xiàn)表的物理存儲結(jié)構(gòu);語句以命令行和圖形化界面兩種形式實(shí)現(xiàn);分析設(shè)計內(nèi)容,畫出程序流程圖,設(shè)計表的存儲結(jié)構(gòu);提交課程設(shè)計報告。需求分析:1.功能分析使用高級語言寫一個表創(chuàng)建及修改程序,模擬實(shí)現(xiàn)DBMS的一部分功能,將主要實(shí)現(xiàn)兩種功能:數(shù)據(jù)表定義和創(chuàng)建,數(shù)據(jù)表的更改。要求支持標(biāo)準(zhǔn)SQLDDL語句CREATETABLE(創(chuàng)建新數(shù)據(jù)表) ALTERTABLE(更改數(shù)據(jù)表結(jié)構(gòu))用戶可根據(jù)輸入提示模擬創(chuàng)建表,修改表的操作,程序?qū)斎胝Z句進(jìn)行判斷確定要執(zhí)行哪種操作并完成用戶命令要求。創(chuàng)建表:主要是通過用戶輸入數(shù)據(jù)庫語言相關(guān)語句進(jìn)行分析,確定輸入相關(guān)信息語句正確。分析用戶輸入語句成分,提取表名、新建的列名及屬性值并存入相關(guān)文件。修改表:主要是通過用戶輸入數(shù)據(jù)庫語言相關(guān)語句進(jìn)行分析,確定輸入相關(guān)信息語句正確。分析用戶輸入語句成分,提取表名、列名,確定輸入正確,進(jìn)而修改相關(guān)列的屬性,最好把修改后的表信息存入文件。2.語句功能(1)SQL語言使用CREATETABLE語句定義基本表,其基本格式為:CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[<列完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列完整性約束條件>]…][,<表完整性約束條件>]);建表的同時通常還可以定義與該表有關(guān)的完整性約束條件,這些完整性約束條件被存入系統(tǒng)中,當(dāng)用戶操作表中數(shù)據(jù)時由RDBMS自動檢查該操作是否違背這些完整性約束條件。如果完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級。(2)SQL語言用ALTERTABLE語句修改基本表,其一般格式為:ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[<列完整性約束>]][DROP<列完整性約束名>][MODIFY<列名><數(shù)據(jù)類型>];其中<表名>是要修改的基本表,ADD子句用于增加新列和新的完整性約束條件,DROP子句用于刪除指定的完整性約束條件,MODIFY子句用于修改原有的列定義,包括修改列名和數(shù)據(jù)類型。3.系統(tǒng)開發(fā)平臺及運(yùn)行環(huán)境硬件要求:CPU:Pentium42.0GHz以上IBM兼容機(jī)內(nèi)存:512MB以上容量顯卡:32MB或以上顯存之AGP接口顯卡軟件要求:操作系統(tǒng):MicrosoftWindows2000/XP/win7開發(fā)工具:MicrosoftVisualC++6.04.數(shù)據(jù)字典名字:用戶名字:用戶描述:用戶既是源又是宿,作為源輸入建表或修改表需要的信息,作為宿系統(tǒng)就會返給用戶建立好的表結(jié)構(gòu)。輸入流:表名,列名,約束條件,數(shù)據(jù)類型輸出流:輸出表名字:名字:CREATETABLE加工號:1描述:將分離出的建表需要的重要數(shù)據(jù)建立成一個表輸入數(shù)據(jù)流:關(guān)鍵字,表名,列名,數(shù)據(jù)類型,約束條件輸出數(shù)據(jù)流:表結(jié)構(gòu),表結(jié)構(gòu)存儲文件加工激發(fā)條件:收到“關(guān)鍵字”,“表名”,“列名”,“數(shù)據(jù)類型”,“約束條件”名字:名字:MODIFY加工號:2.1描述:給已經(jīng)存在的表中的列改變數(shù)據(jù)類型、約束條件或數(shù)據(jù)輸入數(shù)據(jù)流:關(guān)鍵字,表名,列名,數(shù)據(jù)類型,表結(jié)構(gòu)存儲文件輸出數(shù)據(jù)流:表結(jié)構(gòu),表數(shù)據(jù),表結(jié)構(gòu)存儲文件,表數(shù)據(jù)存儲文件加工激發(fā)條件:收到“關(guān)鍵字”,“表名”,“列名”,“數(shù)據(jù)類型”名字:名字:ADD加工號:2.2描述:給已經(jīng)存在的表添加一列輸入數(shù)據(jù)流:關(guān)鍵字,表名,列名,數(shù)據(jù)類型,約束條件,表結(jié)構(gòu)存儲文件輸出數(shù)據(jù)流:表結(jié)構(gòu),表數(shù)據(jù),表結(jié)構(gòu)存儲文件,表數(shù)據(jù)存儲文件加工激發(fā)條件:收到“關(guān)鍵字”,“表名”,“列名”,“數(shù)據(jù)類型”,“約束條件”名字:名字:DROP加工號:2.3描述:給已經(jīng)存在的表刪除一列輸入數(shù)據(jù)流:關(guān)鍵字,表名,列名,數(shù)據(jù)類型,約束條件,表結(jié)構(gòu)存儲文件輸出數(shù)據(jù)流:表結(jié)構(gòu),表數(shù)據(jù),表結(jié)構(gòu)存儲文件,表數(shù)據(jù)存儲文件加工激發(fā)條件:收到“關(guān)鍵字”,“表名”,“列名”,“數(shù)據(jù)類型”,“約束條件”5.數(shù)據(jù)流程圖總體框架數(shù)據(jù)庫操作界面創(chuàng)建表創(chuàng)建表修改表操作結(jié)果進(jìn)行保存并輸出到屏幕上設(shè)計思想:系統(tǒng)設(shè)計流程圖 數(shù)據(jù)庫操作界面CREATEALTER操作結(jié)果進(jìn)行保存并輸出到屏幕上MODIFYADDDROP系統(tǒng)啟動時,激活輸入語句界面。輸入相關(guān)數(shù)據(jù)庫系統(tǒng)語句后對存儲的文件進(jìn)行初始化,導(dǎo)入創(chuàng)建新表的相關(guān)信息。繼續(xù)執(zhí)行程序,輸入修改表語句,通過驗(yàn)證后將相關(guān)信息自動存入文件中。繼續(xù)執(zhí)行程序,輸入刪除表完整性約束條件,通過驗(yàn)證后將修改后的表信息存入文件中。各項功能執(zhí)行完畢后,重新進(jìn)入循環(huán)狀態(tài)。由退出系統(tǒng)事件激活關(guān)閉系統(tǒng)主界面,退出系統(tǒng)。主要功能的程序流程圖創(chuàng)建表操作對輸入相關(guān)語句進(jìn)行判斷,提取表名、列名及屬性,存入文件中。打開表文件輸入創(chuàng)建表執(zhí)行語句判斷語句正確是否執(zhí)行創(chuàng)建表操作將表信息顯示于屏幕上,并存入文件中NY修改表操作對輸入相關(guān)語句進(jìn)行判斷,提取表名、列名及屬性。根據(jù)輸入語句構(gòu)成,提取要修改的列名,修改相關(guān)列的屬性。打開表文件輸入修改表執(zhí)行語句判斷語句正確是否執(zhí)行修改表中相關(guān)列操作將表信息顯示于屏幕上,并存入文件中NY算法設(shè)計本課題是用C++語言,使用來MicrosoftVisualC++6.0設(shè)計的。1.數(shù)據(jù)結(jié)構(gòu):設(shè)計一個結(jié)構(gòu)體,存儲表的相關(guān)信息。structL{intsg;//屬性號charln[10];//nameoftablestructSs[5];//屬性structRr[10];//約束};設(shè)計一個結(jié)構(gòu)體,存儲表結(jié)構(gòu)(屬性)的相關(guān)信息。structS{//屬性charsname[10];//屬性名chark[10];//數(shù)據(jù)類型intl;charZf;//主鍵};2.本系統(tǒng)涉及到的主要函數(shù)有:(1)main主函數(shù)主函數(shù)負(fù)責(zé)協(xié)調(diào)各函數(shù)之間的調(diào)用關(guān)系(2)CREATE_TABLE對于合法的路徑,表名,利用指針將指令中的數(shù)據(jù)存入結(jié)中,表的創(chuàng)建。(3)MODIFY修改屬性列,完成對表的更新,并將更新后的表輸出。(4)DROP刪除屬性列,完成對表的更新,并將更新后的表輸出。(5)ADD增加屬性列,完成對表的更新,并將更新后的表輸出。(6)list在對輸入的各項數(shù)據(jù)進(jìn)行處理后便要輸出生成的表或者已經(jīng)修改好表。此函數(shù)較為簡單,復(fù)雜把各項數(shù)據(jù)輸出,得到預(yù)期的結(jié)果。主要源程序:主菜單。voidMAIN_MENU(){charc,key;do{printf("\n您選擇的是“向?qū)J健?,請選擇:\n\n");printf("1查看現(xiàn)有表\n");printf("2創(chuàng)建表\n");printf("3修改屬性\n");printf("4添加屬性\n");printf("5刪除屬性\n");printf("6退出程序\n");printf("\n請輸入序號:");c=getchar();while(c=='\n'){c=getchar();}//未輸入選項則一直等待if(c=='1'){list();}if(c=='2'){CREATE_TABLE();}if(c=='3'){MODIFY();}if(c=='4'){ADD();}if(c=='5'){DROP();}if(c=='6'){getchar();printf("感謝您的使用,按“回車”退出!\n");getchar();exit(0);}//用getchar,以顯示一段時間}while(c!='7');}創(chuàng)建表操作。 voidCREATE_TABLE(){//創(chuàng)建表未單獨(dú)創(chuàng)建文件存儲,而是放在結(jié)構(gòu)體變量里面charc,ch,str[10];intj,m=0,n,t,n2=0,n3=0,n4=0,n5=0;intflag=OpenList();FILE*fp;printf("\n輸入存儲路徑,如:f:/");gets(label.lu);while(strcmp(label.lu,"")==0){gets(label.lu);}printf("\n請輸入表名:");gets(label.ln);while(strcmp(label.ln,"")==0){gets(label.ln);}//若未輸入strcpy(str1,"");strcpy(str1,label.lu);strcat(str1,label.ln);printf("\n是否輸入屬性?y/n:");ch=getchar();while(ch=='y'){printf("\n請輸入屬性名:");getchar();gets(label.s[n2].sname);//n2:第n2個屬性printf("\n請選擇數(shù)據(jù)類型:intcharfloat:");gets(label.s[n2].k);printf("\n是否設(shè)置為主鍵?:y/n:");label.s[n2].Zf=getchar();getchar();n2++;label.sg=n2;//屬性個數(shù)printf("\n繼續(xù)輸入屬性?y/n:");ch=getchar();}修改表操作。 MODIFY(){//修改表結(jié)構(gòu)charstr[20]={""};intjcha,shu=1,ls=0,lr=0,lu=0,v=0;intv1,v2,v3,v4;FILE*fp2;listL();Clear(tR2);//?if((fp2=fopen(str1,"r"))==NULL){printf("can'topenthefile%s",str1);exit(0);}while(fread(&label,sizeof(label),1,fp2)!=0){printf("\n表名:%s\n",label.ln);while(ls<label.sg){//列出屬性printf("%d:",shu);shu++;printf("%s",label.s[ls].sname); printf("(%s",label.s[ls].k); printf("%d)\t",label.s[ls].l);ls++;}}fclose(fp2);printf("\n選擇要更改的屬性序號:");scanf("%d",&v);v--;v1=0;strcpy(tR2.ln,label.ln);strcpy(tR2.lu,label.lu);while(v1<label.sg){if(v1<v){strcpy(tR2.s[v1].sname,label.s[v1].sname);strcpy(tR2.s[v1].k,label.s[v1].k);tR2.s[v1].l=label.s[v1].l;}if(v1==v){printf("\n請輸入屬性名:");getchar();gets(tR2.s[v1].sname);printf("\n請選擇數(shù)據(jù)類型:intfloatchar");printf("\n請輸入:");gets(tR2.s[v1].k);//printf("\n請輸入數(shù)據(jù)長度:");gets(str);tR2.s[v1].l=atoi(str);}if(v1>v){strcpy(tR2.s[v1].sname,label.s[v1].sname);strcpy(tR2.s[v1].k,label.s[v1].k); tR2.s[v1].l=label.s[v1].l;}v1++;}tR2.sg=label.sg;v3=0;while(v3<label.rg){tR2.r[v3].number=label.r[v3].number;v2=0;while(v2<label.ug){if(v2<v){if(tR2.s[v2].k[0]=='c')strcpy(tR2.r[v3].u[v2].cd,label.r[v3].u[v2].cd);if(tR2.s[v2].k[0]=='i')tR2.r[v3].u[v2].id=label.r[v3].u[v2].id;if(tR2.s[v2].k[0]=='f')tR2.r[v3].u[v2].fd=label.r[v3].u[v2].fd;}else{if(tR2.s[v2].k[0]=='c')strcpy(tR2.r[v3].u[v2].cd,label.r[v3].u[v2].cd);if(tR2.s[v2].k[0]=='i')tR2.r[v3].u[v2].id=label.r[v3].u[v2].id;if(tR2.s[v2].k[0]=='f')tR2.r[v3].u[v2].fd=label.r[v3].u[v2].fd;}v2++;}v3++;}tR2.ug=label.ug;tR2.rg=label.rg;Memoryfile();fp2=fopen(str1,"r");list2(fp2);fclose(fp2);}顯示表操作。voidlist(){//顯示選擇的表的表名、屬性 intjcha,shu=0,ls=0,lr=0,lu=0;FILE*fp2;listL();if((fp2=fopen(str1,"r"))==NULL)//str1即所選擇的表{printf("can'topenthefile%slist",str1);exit(0);}fread(&label,sizeof(label),1,fp2);printf("\nfilename:%s\n",label.ln);while(ls<label.sg){printf("%s",label.s[ls].sname); printf("(%s",label.s[ls].k); printf("%d)",label.s[ls].l);ls++;}//各屬性及數(shù)據(jù)類型、長度printf("\n");while(lr<label.rg){printf("%d",label.r[lr].number); lu=0; while(lu<label.ug) {if(label.s[lu].k[0]=='c') {printf("%s\t\t",label.r[lr].u[lu].cd);} if(label.s[lu].k[0]=='i') {printf("%d\t\t",label.r[lr].u[lu].id);} if(label.s[lu].k[0]=='f') {printf("%.1f\t\t",label.r[lr].u[lu].fd);} lu++;}printf("\n");lr++;}fclose(fp2);}voidlist2(FILE*fp2){ intjcha,shu=0,ls=0,lr=0,lu=0; fread(&label,sizeof(label),1,fp2);printf("\nfilename:%s\n",label.ln);while(ls<label.sg){printf("%s",label.s[ls].sname); printf("(%s",label.s[l

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論