数据库课程设计设计题目:数据库创建和修改表专业:物联网工程班级:2011级_设计人:林升_学号:201101052143山东科技大学2013年7月3日课程设计任务书一、课程设计题目:创建和修改表的定义二、课程设计主要参考资料:(1)《数据库系统概论(第四版)》,王珊、萨师煊主编,高等教育出版社(2)《C程序设计(第三版)》,谭浩强主编,清华大学出版社(3)三、课程设计应解决的主要问题:(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;}//构造函数};山东科技大学学生课程设计第2页(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;山东科技大学学生课程设计第3页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);山东科技大学学生课程设计第4页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;itable_num;i++){if(strcmp(newtable.table_name,table[i].table_name)==0){name_is_equal=1;break;山东科技大学学生课程设计第5页}}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,&newtable.property_num);getchar();//判断属性个数是否正确if(newtable.property_num=0){printf(您输入的属性个数有误,按任意键重新输入......\n);getchar();}elsepropertynum_is_right=1;}//属性个数whileinti;//i代表循环中的属性intj;//j代表在i之前的属性for(i=0;inewtable.property_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,newtable.property_num);printf(-----------------------------------------------------\n);printf(属性名属性类型是否允许为空是否为主键\n);printf((1=int2=float)(1=是2=否)(1=是2=否)\n);printf(-----------------------------------------------------\n);for(j=0;ji;j++){printf(属山东科技大学学生课程设计第6页性%2d:%-10s%d%d%d,j+1,newtable.property_name[j],newtable.property_type[j],newtable.property_null[j],newtable.property_key[j]);}printf(属性%2d:,i+1);scanf(%s,&newtable.property_name[i]);//判断属性名是否存在intname_is_equal=0;for(j=0;ji;j++){if(strcmp(newtable.property_name[i],newtable.property_name[j])==0)name_is_equal=1;}if(name_is_equal==1){printf(属性%s已经存在,按任意键返回重新输入......,newtable.property_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,newtable.property_num);printf(-----------------------------------------------------\n);printf(属性名属性类型是否允许为空是否为主键\n);printf((1=int2=float)(1=是2=否)(1=是2=否)\n);printf(-----------------------------------------------------\n);for(j=0;ji;j++){printf(属性%2d:%-10s%d%d%d\n,j+1,newtable.property_name[j],newtable.property_type[j],newtable.property_null[j],newtable.property_key[j]);}printf(属性%2d:%-10s\n,i+1,newtable.property_name[i]);scanf(%d,&newtable.property_type[i]);getchar();//判断选择的属性类型是否正确if(newtable.property_type[i]!=1&&newtable.property_type[i]!=2){printf(您选择的属性类型有误,按任意键重新选择......\n);山东科技大学学生课程设计第7页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,newtable.property_num);printf(----------------------------------------------------