数据库设计源代码.docx
/选择一种高级语言实现下列语句的功能。/CREATETABLE表名(V列名数据类型歹IJ完整性约束条件习,列名数据/类型列完整性约束条件习ILV表完整性约束条件)/Altertable表名addV新列名数据类型列完整性约束DROPv列完整性约束名习MODIFYV列名V数据类型运用说明1、将程序文件table.sql放在D盘根书目下。2、在C盘根书目下建立一个名为“数据库”的文件夹,用于存储表。3、建立的表存储路径为C:数据库:table.dbf。4、在程序文件table.sql中只有一条建表语句和三条修改表语句,在以程序方式执/行时留意执行的次数,慎重选择“是否接着执行”。5、程序输入的SQL语句格式如下:/createtablestudent/(/SNOintPRIMARYKEY,/SNAMEchar(10)UNIQUE,/SAGEint,/SDEPTchar(20)NOTNULL,/COURSEchar(20),/GRADEint/);/altertablestudentaddCNOintNOTNULL;/altertablestudentaltercolumnSAGEshort;/altertablestudentdropSDEPT;#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>/宏定义#defineYEARO#defineMONTH1#defineDAY2#defineFOX_VERISONNFo262#defineMAX40/字段类型#defineDATE0x44#defineDOUBLE0x45#defineFLOAT0x46#defineSHORT0x47#defineINT0x48#defineTRUE1#defineFALSEO/文件头结构体定义structDbfHead(chardbFlag;charyear;charmonth;charday;intrecCounts;shortfirstRecAddr;shortrecLen;charundo20;);*pDbfHead;typedefstructDbfHeadDbfHead,/字段描述结构体定义structFieldDcp(charfieldNamel0;charundo1;charfieldType;shortoffset;charundo22;charfieldLen;charnumDecis;charundo314;);typedefstructFieldDcpFieldDcp,*pFieldDcp;/字段数据结构体定义structDbfFieldchar*fieldData;charfieldNamel0;charfieldType;charfieldLen;charfieldDcis;shortoffset;);typedefstructDbfFieldDbfField,*pDbfField;记录结构体定义structDbfRec(chardelFlag;DbfFieldfieldMAX;intrealCounts;typedefstructDbfRecDbfRec,*pDbfRec;dbf文件句柄定义structDbfHandchar50;DbfHeadheader;DbfRecrec;longcurRecNo;longCurFpAddr;FILE*fd;);typedefstructDbfHandDbfHand,*pDbfHand;约束条件typedefstructConditionintflag;/flag用于区分约束条件(PARIMARYKEY1UNIQUE2NOTNULL3)Condition;pDbfHandf;DbfRecrec;chartable_name20;charsql300,sql1300;charGetDate(intgetMode)/获得日期(if(DAY=getMode)return01;if(MONTH=getMode)return06;if(YEAR=getMode)return10;elseexit(0);shortGetHeadLength(pDbfRecrec)获得文件头长度(returnrec->realCounts*32+32+2;shortGetRecLength(pDbfRecrec)/获得文件体长度(registerinti=0;intcount=0;for(i=0;i<rec->realCounts;i+)if(rec->fieldi.fieldType=,D,)count+=8;continue;elseif(rec->fieldi.fieldType=,)count+=4;continue;elseif(rec->fieldi.fieldType=,T,)count+=6;continue;count+=rec->fieldi.fieldLen;returncount+1;)pDbfHandNewDbfHead(pDbfHandhand,pDbfRecrec)/新建文件intret=-1;hand->header.dbFlag=0x03;hand->header.day=GetDate(DAY);hand->header.month=GetDate(MONTH);hand->header.year=GetDate(YEAR);hand->header.recLen=GetRecLength(rec);hand->header.recCounts=O;hand->header.firstRecAddr=GetHeadLength(rec);if(O!=fseek(hand->fd,O,SEEK.SET)returnNULL;ret=fwrite(char*)&hand->header,Sizeof(DbfHead),1hand->fd);if(ret!=-1)returnhand;elsereturnNULL;)pDbfHandUpdateHead(pDbfHandhand)/更新文件头(if(O!=fseek(hand->fd,O,SEEK.SET)returnNULL;if(-1=fwrite(char*)&hand->header,Sizeof(DbfHead),1,hand->fd)returnNULL;fclose(hand->fd);returnhand;)pDbfHandWriteFieldDicsribe(pDbfHandhand,pDbfRecrec)/写字段描述部分inti=0;FieldDcpfield=O;field,offset=0x01;for(i=0;i<rec->realCounts;i+)(field.fieldType=rec->fieldi.fieldType;field.numDecis=0;switch(field.fieldType)caseDOUBLE:field.fieldLen=8;break;caseFLOAT:field.fieldLen=4;break;caseINT:field.fieldLen=4;break;caseSHORT:field.fieldLen=2;break;default:field.fieldLen=rec->fieldi.fieldLen;break;strcpy(field.fieldName,rec->fieldi.fieldName);field.offset+=(short)rec->fieldi.fieldLen;if(-l=fwrite(char*)sfield,Sizeof(FieldDcp),1,hand->fd)returnNULL;hand->rec.delFlag=0x20;hand->rec.realCounts=rec->realCounts;for(i=0;i<rec->realCounts;i+÷)hand->rec.fieldi=rec->fieldi;returnhand;voidWriteFieldEnd(pDbfHandhand)/写文件头结束标记inti=0;charbuf2=OxOD,OxOO;charversionBufFOX_VERISONJNFO=0;if(0=fseek(hand->fd,0,SEEK.END)(if(-1=fwrite(buf,2,1,hand->fd)return;return;pDbfHandReadDbfHead(pDbfHandhand)读文件头信息inti=0,j=0;if(-1!=(fseek(hand->fd,0,SEEK.SET)(if(0!=fread(char*)&hand->header,32,1,hand->fd)returnhand;returnNULL;intGetFieldCount(pDbfHandhand)/得至字段个数inti=0;intoffset=1;FieldDcpfield=0;charcEnd=0;for(i=O;i<MAX;i+)memset(char*)&field,0,Sizeof(FieldDcp);if(-1=fseek(hand->fd,(i+1)*32,SEEK.SET)return-1;if(O!=fread(char*)&field,32,1,hand->fd)fread(&cEnd,l,1,hand->fd);if(OxOD=cEnd)return(i+1);return-1;pDbfHandReadFieldDiscribe(pDbfHandhand)/读字段描述信息inti=0,j=0;intfieldCount=GetFieldCount(hand);hand->rec.realCounts=fieldCount;for(i=0;i<hand->rec.realCounts;i+)(FieldDcpfield=0;if(-1=fseek(hand->fd,(i+l)*32,SEEK.SET)returnNULL;if(-1=fread(char*)&field,32,1,hand->fd)returnNULL;memcpy(h