数据库系统概论课程设计.docx
- 文档编号:11245899
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:17
- 大小:67.61KB
数据库系统概论课程设计.docx
《数据库系统概论课程设计.docx》由会员分享,可在线阅读,更多相关《数据库系统概论课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
数据库系统概论课程设计
课程设计说明书
设计题目:
实现SQL语句中带有计算的update语句
专业:
信息管理与信息系统班级:
11级1班
设计人:
_
山东科技大学
2013年7月8日
课程设计任务书
学院信息科学与工程学院专业信息管理与信息系统
班级11级1班姓名
一、课程设计题目:
(1)SQL语句解析系统----带有计算的update语句
二、课程设计主要参考资料:
(1)数据库系统概论(第四版)
(2)大二下课程设计——SQL语句解析系统
三、课程设计应解决的主要问题:
UPDATE<表名>
SET<列名>=<表达式(带计算)>[,<列名>=<表达式>]···
[WHERE<条件>];
四、课程设计相关附件(如:
图纸、软件等):
(1)MYSQL.exe
(2)程序流程图
五、任务发出日期:
2013/4/10课程设计完成日期:
2013/7/08
指导教师签字:
系主任签字:
指导教师对课程设计的评语
指导教师签字:
2013年月日
一、设计要求:
(1)实现下列SQL语句的功能:
UPDATE<表名>
SET<列名>=<表达式(带计算)>[,<列名>=<表达式>]···
[WHERE<条件>];
注意:
<条件表达式>中无嵌套查询。
二、需求分析:
(1)数据库中建立表并向其中插入数据后,有时需要对已插入的数据进行更新,因此我们设计了数据库的更新操作,便于实现数据库的及时更新。
(2)我们设计的更新操作能实现如下功能:
●对学生姓名,学号,性别,所在系的直接修改
●对学生年龄的直接修改,以及对学生年龄的加减修改
二、设计思想:
(1)在原先程序的基础上,我们对该程序的update函数进行了修改,把它的功能进一步完善。
(2)原先程序只能将年龄简单的由一个数变为另一个数,我们则要实现对年龄的加或减运算,因此我们在原来程序的基础上又加入了年龄的加、减操作。
三、程序流程图:
四、主要源程序:
intSql_UPDATE()
{
charcondition_name[40]="condition_";
chartype[6][10]={"char","int","float","double","time","date"};
charType1[6]={'C','N','F','B','T','D'};
pDbfRecprec;
chartemp[10],c_name1[10],c_name2[10],c_value[20],w_name[10],w_value[10],t[10];
//t_name表名c_name修改记录属性名c_value修改记录属性值w_name修改记录判断条件属性名w_value修改记录判断条件属性值
inti,j,error=1,flag=1;
for(i=0;sql[i]=='';i++);
for(j=0;sql[i]!
='';i++,j++)//temp暂时存放update字符串
{
temp[j]=tolower(sql[i]);
}
temp[j]='\0';
if(strcmp(temp,"update")!
=0)//create写错
{
error=0;
printf("\n你输入的'update'有误,请重新修改记录!
\n");
}
else
{
/*+++++++++++++++提取表名+++++++++++++++*/
for(;sql[i]=='';i++);
for(j=0;sql[i]!
='';i++,j++)
{
t_name[j]=tolower(sql[i]);
}
t_name[j]='.';//加后缀.dbf
t_name[j+1]='d';
t_name[j+2]='b';
t_name[j+3]='f';
t_name[j+4]='\0';
//printf("表名:
\n%s\n",t_name);
/*+++++++++++++++判断该表是否存在+++++++++++++++*/
if(!
(f=OpenDbf(t_name)))
{
error=0;
printf("\n你输入的表%s不存在,请重新修改记录!
\n!
\n",t_name);
}
else
{
/*++++++++++++++++++++++提取set字符串+++++++++++++++++++*/
for(;sql[i]=='';i++);
for(j=0;sql[i]!
='';i++,j++)
{
temp[j]=tolower(sql[i]);
}
temp[j]='\0';
if(strcmp(temp,"set")!
=0)//set写错
{
error=0;
printf("\n你输入的'SET'有误,请重新修改记录!
\n");
}
else
{
/*+++++++++++++++++++提取字段名++++++++++++++++*/
for(;sql[i]=='';i++);
for(j=0;sql[i]!
=''&&sql[i]!
='=';i++,j++)
{
c_name1[j]=tolower(sql[i]);
}
c_name1[j]='\0';
//printf("列名:
\n%s\n",c_name);
/*+++++++++++++++++++判断该字段是否存在++++++++++++++++++++*/
if(GetNum(f,c_name1)==-1)
{
printf("\n你输入的%s不存在,请重新修改记录!
\n",c_name1);
error=0;
}
else
{
for(;sql[i]=='';i++);
if(sql[i]!
='=')
{
error=0;
printf("你输入Sql语句有误(=),请重新修改记录!
\n");
}
else
{
i++;
/*++++++++++++++++++提取字段对应的属性值+++++++++++++++++*/
for(;sql[i]=='';i++);
for(j=0;sql[i]!
=''&&sql[i]!
=';';i++,j++)
{
c_name2[j]=tolower(sql[i]);
}
c_name2[j]='\0';
if(strcmp(c_name2,"sage")==0)
{
for(;sql[i]=='';i++);
switch(sql[i])
{
case'+':
{
i++;
for(;sql[i]=='';i++);
for(j=0;sql[i]!
='';j++,i++)
t[j]=sql[i];
t[j]='\0';
i=i+1;
for(j=0;sql[i]!
='';i++,j++)
{
temp[j]=tolower(sql[i]);
}
temp[j]='\0';
if(strcmp(temp,"where")!
=0)//where写错
{
error=0;
printf("\n你输入的'WHERE'有误,请重新修改记录!
\n");
}
else
{
/*++++++++++++++++++判断条件where中的字段属性名(例如Cname)+++++++++++++++++++*/
for(;sql[i]=='';i++);
for(j=0;sql[i]!
=''&&sql[i]!
='=';i++,j++)
{
w_name[j]=tolower(sql[i]);
}
w_name[j]='\0';
//printf("字段属性名:
\n%s\n",w_name);
/*++++++++++++++++++++判断该字段属性名是否存在+++++++++++++++++++*/
if(GetNum(f,w_name)==-1)
{
error=0;
printf("\n你输入的字段属性名%s不存在,请重新修改记录!
\n",w_name);
}
else
{
for(;sql[i]=='';i++);
if(sql[i]!
='=')
{
error=0;
printf("你输入Sql语句有误(=),请重新修改记录!
\n");
}
else
{
i++;
for(;sql[i]=='';i++);
for(j=0;sql[i]!
=''&&sql[i]!
=';';i++,j++)
{
w_value[j]=sql[i];
}
w_value[j]='\0';
//printf("字段属性值:
\n%s\n",w_value);
}
prec=(pDbfRec)malloc(sizeof(DbfRec));
FindRec(f,w_value,GetNum(f,w_name));
GetCurRec1(f,prec);
strcat(prec->field[GetNum(f,c_name1)].fieldData,"+");
strcat(prec->field[GetNum(f,c_name1)].fieldData,t);
printf("%s\n",prec->field[GetNum(f,c_name1)].fieldData);
//printf("%s",prec->field[GetNum(f,c_name1)].fieldData);
if(UpdateRec(f,w_value,GetNum(f,w_name),prec)==0)
{
printf("\n你输入的记录不存在,请重新修改记录!
\n");
error=0;
}
break;
}
}
case'-':
{
i++;
for(;sql[i]=='';i++);
for(j=0;sql[i]!
='';j++,i++)
t[j]=sql[i];
t[j]='\0';
i=i+1;
for(j=0;sql[i]!
='';i++,j++)
{
temp[j]=tolower(sql[i]);
}
temp[j]='\0';
if(strcmp(temp,"where")!
=0)//where写错
{
error=0;
printf("\n你输入的'WHERE'有误,请重新修改记录!
\n");
}
else
{
/*++++++++++++++++++判断条件where中的字段属性名(例如Cname)+++++++++++++++++++*/
for(;sql[i]=='';i++);
for(j=0;sql[i]!
=''&&sql[i]!
='=';i++,j++)
{
w_name[j]=tolower(sql[i]);
}
w_name[j]='\0';
//printf("字段属性名:
\n%s\n",w_name);
/*++++++++++++++++++++判断该字段属性名是否存在+++++++++++++++++++*/
if(GetNum(f,w_name)==-1)
{
error=0;
printf("\n你输入的字段属性名%s不存在,请重新修改记录!
\n",w_name);
}
else
{
for(;sql[i]=='';i++);
if(sql[i]!
='=')
{
error=0;
printf("你输入Sql语句有误(=),请重新修改记录!
\n");
}
else
{
i++;
for(;sql[i]=='';i++);
for(j=0;sql[i]!
=''&&sql[i]!
=';';i++,j++)
{
w_value[j]=sql[i];
}
w_value[j]='\0';
//printf("字段属性值:
\n%s\n",w_value);
}
prec=(pDbfRec)malloc(sizeof(DbfRec));
FindRec(f,w_value,GetNum(f,w_name));
GetCurRec1(f,prec);
strcat(prec->field[GetNum(f,c_name1)].fieldData,"-");
strcat(prec->field[GetNum(f,c_name1)].fieldData,t);
printf("%s\n",prec->field[GetNum(f,c_name1)].fieldData);
//printf("%s",prec->field[GetNum(f,c_name1)].fieldData);
if(UpdateRec(f,w_value,GetNum(f,w_name),prec)==0)
{
printf("\n你输入的记录不存在,请重新修改记录!
\n");
error=0;
}
break;
}
}
default:
break;
}
}
}
return1;
}
//printf("修改字段属性值:
\n%s\n",c_value);
/*+++++++++++提取字符串WHERE+++++++++++++++++++*/
else
{
strcpy(c_value,c_name2);
for(;sql[i]=='';i++);
for(j=0;sql[i]!
='';i++,j++)
{
temp[j]=tolower(sql[i]);
}
temp[j]='\0';
if(strcmp(temp,"where")!
=0)//where写错
{
error=0;
printf("\n你输入的'WHERE'有误,请重新修改记录!
\n");
}
else
{
/*++++++++++++++++++判断条件where中的字段属性名(例如Cname)+++++++++++++++++++/
for(;sql[i]=='';i++);
for(j=0;sql[i]!
=''&&sql[i]!
='=';i++,j++)
{
w_name[j]=tolower(sql[i]);
}
w_name[j]='\0';
//printf("字段属性名:
\n%s\n",w_name);
/*++++++++++++++++++++判断该字段属性名是否存在+++++++++++++++++++*/
if(GetNum(f,w_name)==-1)
{
error=0;
printf("\n你输入的字段属性名%s不存在,请重新修改记录!
\n",w_name);
}
else
{
for(;sql[i]=='';i++);
if(sql[i]!
='=')
{
error=0;
printf("你输入Sql语句有误(=),请重新修改记录!
\n");
}
else
{
i++;
for(;sql[i]=='';i++);
for(j=0;sql[i]!
=''&&sql[i]!
=';';i++,j++)
{
w_value[j]=sql[i];
}
w_value[j]='\0';
//printf("字段属性值:
\n%s\n",w_value);
}
prec=(pDbfRec)malloc(sizeof(DbfRec));
FindRec(f,w_value,GetNum(f,w_name));
GetCurRec1(f,prec);
strcpy(prec->field[GetNum(f,c_name1)].fieldData,c_value);
if(UpdateRec(f,w_value,GetNum(f,w_name),prec)==0)
{
printf("\n你输入的记录不存在,请重新修改记录!
\n");
error=0;
}
}
}
}
}
}
}
}
}
if(error==0)
{
memset(sql,0,sizeof(char)*300);
return0;
}
return1;
}
五、运行结果:
六、参考资料:
数据库系统概论第四版
七、总结:
(1)由于课程设计前期投入精力太少,致使后期时间紧任务重,实现的功能也不尽人意。
(2)不过通过此次课程设计,我们能够把课堂上学到的知识合理的运用到实践中,是我们的程序设计能力得到很大的提升。
(3)通过这次课程设计,我们深刻的了解到,一个完整的可行的数据库系统绝不是能有某个人独立完成的,必须要总结多方面的意见,团队协作,才能实现一个完美的数据库系统。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 系统 概论 课程设计