📄 dbdb.cpp
字号:
//对tnew的初始化
tnew.pro_num=t1->pro_num+t2->pro_num;
tnew.key_no=0;
tnew.re_num=0;
strcpy(tnew.tname,"T");
for(m=0;m<t1->pro_num;m++)
strcpy(tnew.proname[m],t1->proname[m]);
n=m;
for(m=0;m<t2->pro_num;m++)
strcpy(tnew.proname[m+n],t2->proname[m]);
//初始化完成
for(i=0;i<MAX_PRONUM;i++)
for(j=0;j<MAX_PROLEN;j++)
prosame[i][j]='\0'; //初始化公共属性数组
for(j=0;j<t2->pro_num;j++) //t2 j t1 i
for(i=0;i<t1->pro_num;i++)
if(strcmp(t1->proname[i],t2->proname[j])==0)
strcpy(prosame[pronum++],t1->proname[i]);
//*****************************************
// printf("******%s %s******",prosame[0],prosame[1]);
// getchar();
//*****************************************运行到这里正确
//公共属性集合已经确定,准备生成中间表(自然连接,但是有重复属性)
for(j=0;j<t2->re_num;j++)
for(i=0;i<t1->re_num;i++)
{
for(k=0;k<pronum;k++)
{
if(strcmp(t1->record[i][prosubscript(t1,prosame[k])],
t2->record[j][prosubscript(t2,prosame[k])])==0)
continue;
else
break;
}
if(k==pronum) //把符合自然连接条件的记录都写进来
{
for(m=0;m<t1->pro_num;m++)
strcpy(tnew.record[tnew.re_num][m],t1->record[i][m]);
n=m;
printf("\n\nRUNS here\n");
for(m=0;m<t2->pro_num;m++)
strcpy(tnew.record[tnew.re_num][m+n],t2->record[i][m]);
tnew.re_num++;
}
}
//*****************************************建立了中间表,准备删除公共属性
for(i=0;i<tnew.pro_num;i++)
{
for(j=0;j<i;j++)
{
if(strcmp(tnew.proname[i],tnew.proname[j])==0) //删除i列的所有记录
{
for(m=i;m<tnew.pro_num-1;m++)
{
for(n=0;n<tnew.re_num;n++)
strcpy(tnew.record[n][m],tnew.record[n][m+1]);
}
for(m=i;m<tnew.pro_num-1;m++)
strcpy(tnew.proname[m],tnew.proname[m+1]);
tnew.pro_num--;
}
}
}
return tnew;
}
void exit0()
{
clrscr();
cout<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 谢谢使用 ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 张 旭 ┃"<<endl;
cout<<" ┃ 06软件20064486┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━┛"<<endl;
exit(-1);
}
void menutable()
{
l:;
clrscr();
char chr;
cout<<" 表的操作 "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ 功能菜单 ┃"<<endl;
cout<<" ┃ 1.表的建立 CREATE TABLE ┃"<<endl;
cout<<" ┃ 2.表的删除 DROP TABLE ┃"<<endl;
cout<<" ┃ 3.表项信息显示 SHOW TABLE ┃"<<endl;
cout<<" ┃ 4.保存表 SAVE ┃"<<endl;
cout<<" ┃ 5.读取表 LOAD ┃"<<endl;
cout<<" ┃ 0.返回 RETURN ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 张 旭 ┃"<<endl;
cout<<" ┃ 06软件20064486┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━┛"<<endl;
cout<<"请选择:";
cin>>chr;
switch(chr)
{
case '1' :tablecreate();break;
case '2' :tabledrop();break;
case '3' :outputts();break;
case '4' :filewrite();break;
case '5' :fileread();break;
case '0' :return;
default:
printf("输入有误,请重新输入!");
getchar();
goto l;
}
goto l;
}
void menurec()
{
l:;
clrscr();
char chr;
cout<<" 记录操作 "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ 功能菜单 ┃"<<endl;
cout<<" ┃ 1.记录插入 RECORD INSERT ┃"<<endl;
cout<<" ┃ 2.记录删除 RECORD DELETE ┃"<<endl;
cout<<" ┃ 3.记录查询 RECORD QUERY ┃"<<endl;
cout<<" ┃ 4.记录更改 RECORD UPDATE ┃"<<endl;
cout<<" ┃ 0.返回 RETURN ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 张 旭 ┃"<<endl;
cout<<" ┃ 06软件20064486┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━┛"<<endl;
cout<<"请选择:";
cin>>chr;
switch(chr)
{
case '1' :recordinsert();break;
case '2' :recorddel();break;
case '3' :outputrec();break;
case '4' :recordupdate();break;
case '0' :return;
default:
printf("输入有误,请重新输入!");
getchar();
goto l;
}
goto l;
}
void yonghulogin()
{
l:;
clrscr();
char chr;
cout<<" 用户操作 "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ 功能菜单 ┃"<<endl;
cout<<" ┃ 1.读取数据库 LOAD ┃"<<endl;
cout<<" ┃ 2.查询数据库 RECORD QUERY ┃"<<endl;
cout<<" ┃ 3.并操作 Union ┃"<<endl;
cout<<" ┃ 4.交操作 Jiao ┃"<<endl;
cout<<" ┃ 5.差操作 DIFFERENCE┃"<<endl;
cout<<" ┃ 6.投影操作 SHADOW ┃"<<endl;
cout<<" ┃ 7.选择操作θ单一 SELECT ┃"<<endl;
cout<<" ┃ 8.选择操作AND SELECT AND┃"<<endl;
cout<<" ┃ 9.选择操作OR SELECT OR┃"<<endl;
cout<<" ┃ 10.选择投影综合 SELECT WHERE┃"<<endl;
cout<<" ┃ 11.自然/等值连接 NATR/EQUAL┃"<<endl;
cout<<" ┃ 0.返回 RETURN ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 张 旭 ┃"<<endl;
cout<<" ┃ 06软件20064486┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━┛"<<endl;
cout<<"请选择:";
cin>>chr;
switch(chr)
{
case '1' :fileread();break;
case '2' :outputrec();break;
case '3' :relationunion();break;
case '4' :relationjiao();break;
case '5' :relationdiff();break;
case '6' :relationshadow();break;
case '7' :relationsel0();break;
case '8' :relationseland();break;
case '9' :relationselor();break;
case '10' :relationselwhere();break;
case '11' :relationconnect();break;
case '0' :return;
default:
printf("输入有误,请重新输入!");
getchar();
goto l;
}
goto l;
}
void glylogin()
{
int a,count=0;
l: cout<<"请输入管理员密码:"<<endl;
cin>>a;
if(a==4486)
{
system("color 5b");
mainmenu();
}
else
{
count+=1;
if(count!=3)
{
cout<<"你输入的密码不正确...请重新输入..."<<endl;
cout<<"你还有"<<3-count<<"次输入密码的机会..."<<endl;
goto l;
}
else
{
cout<<"你已经3次未输入正确密码,系统自动请您退出...Bye-Bye..."<<endl;
}
exit(-1);
}
}
void menurelation()
{
l:;
clrscr();
char chr;
cout<<" 关系代数 "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ 功能菜单 ┃"<<endl;
cout<<" ┃ 1.并操作 Union ┃"<<endl;
cout<<" ┃ 2.交操作 Jiao ┃"<<endl;
cout<<" ┃ 3.差操作 DIFFERENCE┃"<<endl;
cout<<" ┃ 4.投影操作 SHADOW ┃"<<endl;
cout<<" ┃ 5.选择操作θ单一 SELECT ┃"<<endl;
cout<<" ┃ 6.选择操作AND SELECT AND┃"<<endl;
cout<<" ┃ 7.选择操作OR SELECT OR┃"<<endl;
cout<<" ┃ 8.选择投影综合 SELECT WHERE┃"<<endl;
cout<<" ┃ 9.自然/等值连接 NATR/EQUAL┃"<<endl;
cout<<" ┃ 0.返回 RETURN ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 张 旭 ┃"<<endl;
cout<<" ┃ 06软件20064486┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━┛"<<endl;
cout<<"请选择:";
cin>>chr;
switch(chr)
{
case '1' :relationunion();break;
case '2' :relationjiao();break;
case '3' :relationdiff();break;
case '4' :relationshadow();break;
case '5' :relationsel0();break;
case '6' :relationseland();break;
case '7' :relationselor();break;
case '8' :relationselwhere();break;
case '9' :relationconnect();break;
case '0' :return;
default:
printf("输入有误,请重新输入!");
getchar();
goto l;
}
goto l;
}
void mainmenu()
{
l:;
clrscr();
char chr;
cout<<" 管理员操作 "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ 功能菜单 ┃"<<endl;
cout<<" ┃ 1.表的操作 ┃"<<endl;
cout<<" ┃ 2.记录操作 (增,删,改)┃"<<endl;
cout<<" ┃ 3.关系代数操作 ┃"<<endl;
cout<<" ┃ 0.退出 ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 张 旭 ┃"<<endl;
cout<<" ┃ 06软件20064486┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━┛"<<endl;
cout<<"请选择:";
cin>>chr;
switch(chr)
{
case '1' :menutable();break;
case '2' :menurec();break;
case '3' :menurelation();break;
case '0' :exit0();
default:
printf("输入有误,请重新输入!");
getchar();
goto l;
}
goto l;
}
void login()
{
int a,count=0;
l: cout<<"请输入本数据库系统的使用密码:"<<endl;
cin>>a;
if(a==111)
{
clrscr();
system("color 4e");
char chr;
cout<<" ┏━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ 功能菜单 ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 1.用户登陆 ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 2.管理员登陆 ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ 0.退出 ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━┛"<<endl;
cout<<"请选择:";
cin>>chr;
switch(chr)
{
case '1' :yonghulogin();break;
case '2' :glylogin();break;
case '0' :exit0();
default:
printf("输入有误,请重新输入!");
getchar();
goto l;
}
goto l;
}
else
{
count+=1;
if(count!=3)
{
cout<<"你输入的密码不正确...请重新输入..."<<endl;
cout<<"你还有"<<3-count<<"次输入密码的机会..."<<endl;
goto l;
}
else
{
cout<<"你已经3次未输入正确密码,系统自动请您退出...Bye-Bye..."<<endl;
}
exit(-1);
}
}
int main()
{
cout<<"^_^系统正在加载数据库及其相关组件.....请等待....."<<endl;
int times;
times=44;
for(int abc=0;abc<times;abc++)
{
if(abc%2==0)
cout<<"\b\b\b\b\b\b"<<" "<<"\b\b\b\b\b\b";
else
cout<<"********";
for(int j=0;j<50;j++)
for(int k=0;k<500;k++)
cout<<' '<<'\b';
}
cout<<"数据库加载完成!!!"<<endl;
cout<<"现在是否运行程序?(是-1,否-0) ";
int abcd;
cin>>abcd;
if(abcd==0)
{
cout<<endl;
cout<<"============================================="<<endl;
cout<<"期待你下次使用本数据库系统... 【张旭制作】"<<endl;
cout<<"============================================="<<endl;
cout<<endl;
cout<<endl;
exit(0);
}
clrscr();
cout<<"〓〓〓〓〓#〓§〓〓〓〓〓§〓〓〓〓〓〓§〓〓〓〓〓§〓〓〓〓〓§〓#〓〓〓〓"<<endl;
cout<<" ↓ ↓ ↓ ↓ ↓ "<<endl;
cout<<" ☆★☆ ☆★☆ ☆★☆ ☆★☆ ☆★☆ "<<endl;
cout<<" ☆ 数 ☆ ☆ 据 ☆ ☆ 库 ☆ ☆ 系 ☆ ☆ 统 ☆ "<<endl;
cout<<" ☆★☆ ☆★☆ ☆★☆ ☆★☆ ☆★☆ "<<endl;
cout<<" ↓ ↓ ↓ ↓ ↓ "<<endl;
cout<<" ※ ※ ※ ※ ※ "<<endl;
cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓"<<endl;
cout<<" 【20064486--张旭】"<<endl;
cout<<" ▓▓▓▓▓▓▓▓▓ ";
initialize();
login();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -