版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库课程设计设计题目:数据库创建和修改表专业:物联网工程班级:2011级_设计人:林升_学号:201101052143山东科技大学201课程设计任务书课程设计题目:创建和修改表的定义课程设计主要参考资料:《数据库系统概论(第四版)》,王珊、萨师煊主编,高等教育出版社《C程序设计(第三版)》,谭浩强主编,清华大学出版社课程设计应解决的主要问题:(1)实现:CREATETABLE<表名>(<列名><数据类型>[<列完整性约束条件>][,<列名><数据类型>[<列完整性约束条件>]…][,<表完整性约束条件>]);(2)实现:ALTERTABLE<表名>[ADD<新列名><数据类型>[<列完整性约束>]][DROP<列完整性约束名>][MODIFY<列名><数据类型>]。山东科技大学学生课程设计 第1页设计要求:(1)设计内容创建和修改表的定义:1、实现:CREATETABLE<表名>(<列名><数据类型>[<列完整性约束条件>][,<列名><数据类型>[<列完整性约束条件>]…][,<表完整性约束条件>]);2、实现:ALTERTABLE<表名>[ADD<新列名><数据类型>[<列完整性约束>]][DROP<列完整性约束名>][MODIFY<列名><数据类型>]。(2)设计要求1、设计和实现表的物理存储结构;2、语句以命令行和图形化界面两种形式实现;3、分析设计内容,画出程序流程图,设计表的存储结构;4、提交课程设计报告。(3)任务步骤1、分析命令语句,得到表名、列名和数据类型等信息;2、根据命令中的关键词确定表和字段的属性;3、创建一个表文件,写入表结构信息;4、打开一个表文件,修改表结构信息;5、演示建立了一个表,并修改了表结构。需求分析:数据库系统能够有效地组织和管理大量的数据。研究数据库管理系统的实现技术,对于掌握数据库系统的原理和技术,了解数据库系统的内部结构,开发高效的数据库应用系统,具有重要意义。在建立了数据库之后,首先需要建立表,之后才能进行记录的插入。这个程序的设计就是实现创建和修改表的定义。设计思想:(1)总体思路此课程设计主要要完成的任务是创建和修改表的定义,因此程序中共包含四个可选项:“新建表”、“修改表”、“显示表的信息”、“保存操作并退出”。(2)主要结构1、每一个都有一个固定结构,因此我首先建立了一个表的结构体,具体形式如下:structField{charname[N];chartype[N];intlen;charcondition[N];Field(){len=0;name[0]=type[0]=condition[0]=0;}//构造函数};(3)读入的语句字符串charsql[MAX],sqltmp[MAX];(4)新建表(5)修改表(6)显示表的信息(7)保存操作并退出程序流程图:主要源程序:(1)定义表结构体typedefstruct{ chartable_name[20];//表名 intproperty_num;//属性的个数 charproperty_name[100][20];//属性名 intproperty_type[2];//属性类型(1=int,2=char) intproperty_null[2];//属性是否为空(1=允许,2=不允许) intproperty_key[2];//是否主码(1=是主键,2=不是主键)}TABLE;(2)读入SQL语句,并进行格式化分离单词,以分号结束,ESC退出整个程序intread(){charc;inti;for(i=0;c=getch();i++){if(c==';')break;if(c==27)exit(0);//esc的ASC码位27,结束程序if(c==8)//退格{i-=2;if(i<-1)i=-1;system("cls");printf("<ESCForExit,'outputtable_name'foroutputthetable>:\n请输入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;//用来存储新创建的表 //step1:输入表名 inttablename_is_right=0; while(!tablename_is_right) { system("cls"); printf("表名:"); scanf("%s",&newtable.table_name); getchar(); //判断表名是否已经存在 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已经存在,按任意键返回重新输入",newtable.table_name); getchar(); } elsetablename_is_right=1; }//表名while //step2:输入属性个数 intpropertynum_is_right=0; while(!propertynum_is_right) { system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("属性个数:"); scanf("%d",&perty_num); getchar(); //判断属性个数是否正确 if(perty_num<=0) { printf("您输入的属性个数有误,按任意键重新输入\n"); getchar(); } elsepropertynum_is_right=1; }//属性个数while inti;//i代表循环中的属性 intj;//j代表在i之前的属性for(i=0;i<perty_num;i++)//i代表属性个数0,1,2 {//step3:输入属性名 intpropertyname_is_right=0; while(!propertyname_is_right) { system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("属性个数:%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已经存在,按任意键返回重新输入",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("属性个数:%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("属性个数:%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("属性个数:%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; //主键的非空属性应该为不允许空 if(perty_key[i]==1&&perty_null[i]==1) { printf("该属性设为主键,因此改为不允许为空,按任意键继续\n"); getchar(); perty_null[i]=2; system("cls"); printf("表名:%-10s\n",newtable.table_name); printf("属性个数:%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等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 剖腹探查术术中护理
- 2024前期物业管理合同简单范本
- 2024广告合同范本合同范文广告合同协议
- 2024装修合同附件范本
- 2024年软件开发、评测平台项目评价分析报告
- 2024年计算机服务项目评价分析报告
- 2023年布展装修项目综合评估报告
- 2023年型材:异型钢项目综合评估报告
- 2023年政府引导基金项目评价分析报告
- 2023年GSM和CDMA制移动通信检测设备项目评价分析报告
- 产假、陪产假、流产假审批表
- 幼儿园生活垃圾分类管理台账四篇
- 制剂室培训课件
- 四年级家长会(完美版)
- 帝光公司OEC目标“日事日毕、日清日高”实施方案
- 2023年4月三级烟草专卖管理师岗位技能-试卷正文
- 六年级下册道德与法治教案-日益重要的国际组织 第一课时部编版
- 旅游景区管理制度完整汇编
- 旅游地理学课程《旅游地理学》教学大纲
- 混凝土涵管安装现场质量检验报告单
- 华为-硬件工程师手册(全)
评论
0/150
提交评论