数据库管理系统 山东科技大学.docx
《数据库管理系统 山东科技大学.docx》由会员分享,可在线阅读,更多相关《数据库管理系统 山东科技大学.docx(24页珍藏版)》请在冰豆网上搜索。
![数据库管理系统 山东科技大学.docx](https://file1.bdocx.com/fileroot1/2022-10/16/a75210b7-9862-4ab3-94d3-971360416de6/a75210b7-9862-4ab3-94d3-971360416de61.gif)
数据库管理系统山东科技大学
课程设计说明书
设计题目:
创建和修改表的定义_
专业:
计算机科学与技术班级:
级班_
设计人:
_
山东科技大学
2011年月日
课程设计任务书
学院信息科学与工程学院专业计算机科学与技术班级11级3班姓名薛德利
一、课程设计题目:
(1)创建和修改表的定义
(2)
(3)
二、课程设计主要参考资料:
(1)萨师煊,王珊.数据库系统概论(第三版).北京:
高等教育出版社,2000
(2)杨冬青,唐世渭,徐其钧等译.数据库系统实现.北京:
机械工业出版社,2001
(3)谭浩强.C语言程序设计.清华大学出版社,2000
三、课程设计应解决的主要问题:
(1)实现:
INSERTINTO<表名>[(<属性列1>[,<属性列2>…)]VALUES(<常量1>[,<常量2>]…)
(2)实现:
UPDATE<表名>SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>]。
(3)
四、课程设计相关附件(如:
图纸、软件等):
(1)codeblocks10.05
(2)
(3)
五、任务发出日期:
2013.6.1课程设计完成日期:
2013.6.25
指导教师签字:
系主任签字:
指导教师对课程设计的评语
指导教师签字:
2013年月日
一、设计要求:
设计和实现表的物理存储结构;
语句以命令行和图形化界面两种形式实现;
分析设计内容,画出程序流程图,设计表的存储结构;
提交课程设计报告。
二、需求分析:
选择一种高级语言实现一个简单的DBMS
设计实现表的物理存储结构;
三、设计思想:
由命令行输入SQL语句,通过对语句进行语法分析,分离关键字
以*.txt文件存放建立的表,一张表对应一个*.txt文件;
四、程序流程图:
程序主界面(命令行格式):
输入CREATE语句,建表:
输出表的信息:
输入alter语句add,修改:
输出表的信息:
再输入alter语句alter,修改:
输出表的信息:
再输入alter语句drop,修改:
输出表的信息:
退出
(5)主要源程序:
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
#defineMAX1000
#defineN100
voidtolower(char*s)//将输入的大写字母转化为小写字母
{
intlen=strlen(s);
for(inti=0;i{
if(s[i]>=65&&s[i]<=90)s[i]+=32;
}
}
structField//表中每个域的结构:
{
charname[N];
chartype[N];
intlen;
charcondition[N];
Field()
{
len=0;
name[0]=type[0]=condition[0]=0;
}
};
charsql[MAX],sqltmp[MAX];//读入的语句字符串
intread()//读入SQL语句,并进行格式化分离单词,以分号结束,ESC退出整个程序
{
charc;
inti;
for(i=0;c=getch();i++)
{
if(c==27)
exit(0);//ESC退出
if(c==8)//退格
{
i-=2;
if(i<-1)
i=-1;
system("cls");
printf("简单DBMS:
\n");
printf(":
\n");
printf("输入SQL语句:
\n");
printf(">>");
for(intj=0;j<=i;j++)
{
if(sqltmp[j]==13)
puts("");
printf("%c",sqltmp[j]);
}
continue;
}
sqltmp[i]=c;
if(c==';')
break;
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;
}
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);
}
}
boolcreate()//建立表的函数,一个表对应一个*.txt文件,bool为布尔型,取值false和true
{
chartmp[N];
chartable_name[N];
boolerror=false;
chartype[6][10]={"char","int","float","double","time","date"};
stringstreamss(sql);
ss>>tmp;
if(0!
=strcmp(tmp,"create"))
{
error=true;
printf("\n\'create\'输入错误!
\n");
}
else
{
ss>>tmp;
if(0!
=strcmp(tmp,"table"))
{
error=true;
printf("\n\'table\'输入错误!
\n");
}
else
{
ss>>table_name;
intlen=strlen(table_name);
strcat(table_name,".txt");
if(access(table_name,0)==0)
{
printf("表已存在,是否覆盖?
y/n\n");
charc;
c=getchar();
if(c=='n')
returnfalse;
else
remove(table_name);
}
while(true)
{
Fieldfield;
ss>>tmp;
if(tmp[0]==',')
{
add(field,table_name);
continue;
}
strcpy(field.name,tmp);
if(!
(ss>>tmp))
break;
if(tmp[0]==',')
{
add(field,table_name);
continue;
}
boolflg=false;
for(inti=0;i<6;++i)
{
if(strcmp(tmp,type[i])==0)
{
flg=true;
strcpy(field.type,tmp);
break;
}
}
if(!
flg)
{
printf("\n数据类型错误(char,int,float,double,time,date)!
\n");
error=true;
break;
}
if(field.type[0]=='c'||field.type[0]=='f'||field.type[0]=='d')
{
ss>>tmp;
if(tmp[0]==',')
{
add(field,table_name);
continue;
}
boolflg=true;
intlen=strlen(tmp);
intsum=0;
for(inti=0;i{
if(tmp[i]>58||tmp[i]<48)
{
flg=false;
break;
}
elsesum=sum*10+tmp[i]-'0';
}
if(!
flg)
{
error=true;
printf("\n类型长度错误!
\n");
break;
}
elsefield.len=sum;
}
ss>>tmp;
if(tmp[0]==',')
{
add(field,table_name);
continue;
}
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("\'key\'输入错误\n");
break;
}
}
elseif(strcmp(tmp,"unique")==0)
{
strcpy(field.condition,tmp);
}
add(field,table_name);
}
}
}
return(!
error);
}
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"))