5290: 游戏之数据库

描述

 zzx和city 在玩游戏的时候,了解到游戏的数据都是存储在数据库中,于是两人上网查到了一些资料,现在他们了解到了数据的操作语言有以下4种(其实有更多的语句,但zzx和city现在只找到4个):

1.创建表 create table 表名 (为了简化问题 创建的表里只有4个属性,ID,账号(Username),密码(Password),和昵称(Nickname)(ID是自动增加的,不需要自己插入,账号具有唯一性)

2.插入数据:insert into 表名 (属性,属性.....) values(插入属性值,插入属性值......)(插入在表中最后一行)

3.删除数据:delete from 表名 where 条件(只有 ID=?[删除ID等于多少的行] 和 Username=? [删除Username等于多少的行])

4.查询数据:select * from 表名 (查询整张表)

现在zzx和city希望你写一个程序来运行一下这几条命令。

 输入

 只有一组数据

第一行一个N (2<N<10000)表示 有N条数据库命令

第二行一定是create 命令,且只会在在第二行出现。 表名不超过10个字符

后N-1行有插入、删除、查询命令(ID是整数,从1开始,Username,Password,Nickname均不超过30字符[仅包括字母和数字的字符])(查询命令不超过30次)

输出

 对于第一条命令输出 create OK(因为创建是不可能失败的);

对于第二条命令输出 insert OK或者insert ERROR(插入错误是指表中有了该Username,因为他是具有唯一性的)

对于第三条命令输出 delete OK 或者delete ERROR(删除错误是指没有这个ID,或者Username)

对于第四条命令输出 表中全部数据,按照ID的大小输出,ID小的先输出,每个数据占一行,按照ID,Username,Password,Nickname的顺序输出(由于数据库中不区分大小写,这里全部按照小写输出),每个数据之间有5个空格(没有数据输出Empty set)

样例输入

10
create table game
select * from game
insert into game (Username,Password,Nickname) values('zzx','123456','zzx')
insert into game (Username,Password,Nickname) values('city','123456','city')
insert into game (Username,Password,Nickname) values('zzx','123456','zzx')
delete from game where Username = 'ZZX'
delete from game where Username = 'crq'
delete from game where ID = 2
insert into game (Nickname,Password,Username) VALUES('zzx','123456','zzx')
select * from game

样例输出

create OK
Empty set
insert OK
insert OK
insert ERROR
delete OK
delete ERROR
delete OK
insert OK
3 zzx 123456 zzx

代码

#include <bits/stdc++.h>
using namespace std;
struct edge
{
    string username,password,nickname;
};
map<string,int> m;
map<int,edge> m1;
char s[1005];
int main()
{
      int t,flagid=0,num=0;
      scanf("%d",&t);
      getchar();
      for(int i=1;i<=t;i++)
      {
          if(i==1)
          {
              gets(s);
              cout<<"create OK\n";
          }
          else
          {
              gets(s);
              int len=strlen(s);
              for(int j=0;j<len;j++)
              {
                  if(s[j]>='A'&&s[j]<='Z')s[j]+=32;
              }
              if(s[0]=='i')
              {
                  int r=0,z=0;
                  char ch[3];
                  string Username,Password,Nickname;
                  while(s[++r]!='(');
                  for(;s[r]!=')';r++)
                  {
                      if(s[r]=='u')ch[z++]='u';
                      else if(s[r]=='p')ch[z++]='p';
                      else if(s[r]=='i')ch[z++]='n';
                  }
                  while(s[++r]!='(');
                  z=0;
                  for(;s[r]!=')';r++)
                  {
                      string str;
                      if(s[r]==(' '+7))
                      {
                          while(s[++r]!=(' '+7))
                          {
                              str=str+s[r];
                          }
                          if(ch[z]=='u')Username=str;
                          else if(ch[z]=='p')Password=str;
                          else if(ch[z]=='n')Nickname=str;
                          z++;
                      }
                  }
                   if(m[Username]==0)
                   {
                      m[Username]=++flagid;
                      m1[flagid].nickname=Nickname;
                      m1[flagid].password=Password;
                      m1[flagid].username=Username;
                      cout<<"insert OK\n";
                      num++;
                   }
                    else
                    cout<<"insert ERROR\n";
              }
               else if(s[0]=='d')
               {
                    int r=0;
                   while(s[++r]!='=');
                   if(s[r-2]=='e')
                   {
                       string Username;
                       while(s[++r]!=(' '+7));
                       while(s[++r]!=(' '+7))
                         Username+=s[r];
                       if(m[Username]==0)
                          cout<<"delete ERROR\n";
                       else
                          m1[m[Username]].username="",m[Username]=0,
                          cout<<"delete OK\n",num--;
                   }
                   else if(s[r-2]=='d')
                   {
                       int sum=0;
                       while(s[++r]!=' ');
                       while(++r<len)
                         sum=sum*10+(s[r]-'0');
                       if(m1[sum].username=="")
                          cout<<"delete ERROR\n";
                       else
                          m[m1[sum].username]=0,m1[sum].username="",
                          cout<<"delete OK\n",num--;
                   }
               }
               else if(s[0]=='s')
               {
                   if(num==0)
                     cout<<"Empty set\n";
                   else
                   {
                       for(int j=1;j<=flagid;j++)
                       {
                           if(m1[j].username!="")
                             cout<<j<<"     "<<m1[j].username<<"     "<<m1[j].password<<"     "<<m1[j].nickname<<endl;
                       }
                   }
               }
          }
      }
}
View Code

纯模拟

猜你喜欢

转载自www.cnblogs.com/llhsbg/p/11291875.html