数据库管理系统 山东科技大学
课程设计说明书
设计题目:创建和修改表的定义_ 专业:计算机科学与技术班级:级班_ 设计人:_
山东科技大学
2011年月日
课程设计任务书
学院信息科学与工程学院专业计算机科学与技术班级11级3班姓名薛德利
一、课程设计题目:
(1)创建和修改表的定义
(2)
(3)
二、课程设计主要参考资料:
(1)萨师煊,王珊. 数据库系统概论(第三版). 北京:高等教育出版社,2000
(2)杨冬青,唐世渭,徐其钧等译. 数据库系统实现. 北京:机械工业出版社,2001
(3)谭浩强. C语言程序设计. 清华大学出版社,2000
三、课程设计应解决的主要问题:
(1)实现:INSERT INTO <表名>[(<属性列1>[,<属性列2> …)] VALUES (<常量1>[,<常量2>]…)
(2)实现:UPDATE<表名> SET <列名>=<表达式>[,<列名>=<表达式>] …[WHERE<条件>]。
(3)
四、课程设计相关附件(如:图纸、软件等):
(1) codeblocks 10.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
using namespace std;
#define MAX 1000
#define N 100
void tolower(char *s) //将输入的大写字母转化为小写字母{
int len = strlen(s);
for(int i = 0; i < len; ++i)
{
if(s[i] >= 65 && s[i] <= 90) s[i] += 32;
}
}
struct Field //表中每个域的结构:
{
char name[N];
char type[N];
int len;
char condition[N];
Field()
{
len = 0;
name[0] = type[0] = condition[0] = 0;
}
};
char sql[MAX],sqltmp[MAX]; //读入的语句字符串
int read() //读入SQL语句,并进行格式化分离单词,以分号结束,ESC 退出整个程序
{
char c;
int i;
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("
printf("输入SQL语句:\n");
printf(">>");
for(int j = 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] = ' ';
}
else if(c == '(' || c == ')' || c == '\'' || c == '\n') {
printf("%c", c);
sql[i] = ' ';
}
else if(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);
return 0;
}
void add(Field field, 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);
}
}
bool create() //建立表的函数,一个表对应一个*.txt文件,bool为布尔型,取值false和true
{
char tmp[N];
char table_name[N];
bool error = false;
char type[6][10]= {"char","int","float","double","time","date"};
stringstream ss(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;
int len = strlen(table_name);
strcat(table_name, ".txt");
if(access(table_name, 0) == 0)
{
printf("表已存在,是否覆盖?y/n\n");
char c;
c = getchar();
if(c == 'n')
return false;