📄 filegui.java
字号:
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class fileGUI extends JFrame
{
private JMenuItem changeItem, queryItem,
exitItem;
private JDesktopPane desktop;
changeDataDialog change;
QueryDialog query;
SystemTab systab;
fileGUI()
{
super( "Simulator" );
systab=new SystemTab();
change=new changeDataDialog(systab);
query=new QueryDialog(systab);
desktop = new JDesktopPane();
desktop.add(change);
desktop.add(query);
getContentPane().add( desktop );
JMenuBar menuBar = new JMenuBar();
setJMenuBar( menuBar );
JMenu fileMenu = new JMenu( "File" );
menuBar.add( fileMenu );
changeItem = new JMenuItem( "data control" );
// display new record dialog when user selects New Record
changeItem.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event )
{
change.setVisible( true );
}
}
);
queryItem = new JMenuItem( "Query Record" );
queryItem.setEnabled( true );
queryItem.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent event )
{
query.setVisible( true );
}
}
);
fileMenu.add(changeItem);
fileMenu.add(queryItem);
setSize(400,250);
setVisible(true);
}
public static void main(String args[])
{
fileGUI app=new fileGUI();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class QueryDialog extends JInternalFrame{
private JTextArea text;
private JTextArea output;
private SystemTab systab;
QueryDialog(SystemTab tab)
{
super(" query data ");
text=new JTextArea(5,30);
text.setEditable(true);
Button button1=new Button("Clear");
Button button2=new Button("Commit");
output=new JTextArea(20,30);
output.setEditable(false);
systab=tab;
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
text.setText(" ");
}});
button2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
StringTokenizer token=new StringTokenizer(text.getText()," \t\n\r\f,()=");
String next;int count=0;
if(token.hasMoreTokens())
{
next=token.nextToken();
if(next.equals("select"))
{
String[] attname=new String[10];String ne;int i=0;
while(token.hasMoreTokens())
{
ne=token.nextToken();
if(ne.equals("from"))
break;
attname[i++]=ne;
}
String[] tabName=new String[2];int t=0;
while(token.hasMoreTokens())
{
ne=token.nextToken();
if(ne.equals("where"))
break;
tabName[t++]=ne;
}
System.out.println("before");
if(t==1){System.out.println("in 1");
String value=null;
if(token.hasMoreTokens())
{
attname[i]=token.nextToken(); //condition
value=token.nextToken();
}
Header h=systab.getH(systab.Search(tabName[0]));
WriteFile sel =new WriteFile(h);
String[] attri=h.getAttri();
int k=0;
String key=h.getKey().trim();
String[][] result=new String[i+1][];
for(int j=0;j<i;j++)
{
System.out.println(attname[j]);
result[j]=new String[20];
if(attname[j].equals(key))
{
sel.Select(result[j]);
}
else{ for( k=0;k<attri.length;k+=2)
if(attri[k].trim().equals(attname[j]))
break;
if(k==attri.length) {JOptionPane.showMessageDialog(null,"no such attribute name");return;}
sel.Select(k/2,result[j]);
}
}
if(value!=null){ result[i]=new String[20];
if(attname[i].equals(key))
{
sel.Select(result[i]);
}
else{ for( k=0;k<attri.length;k+=2)
if(attri[k].trim().equals(attname[i]))
break;
if(k==attri.length) {JOptionPane.showMessageDialog(null,"no such attribute name");return;}
sel.Select(k/2,result[i]);}
}
boolean end=true;String out=" ";
for(int m=0;m<result[0].length;m++){
for(int n=0;n<i;n++)
{if(result[n][m]!=null)
end=false;
out+=result[n][m];
}
if(end==true) break;
else{
if(!end&&value==null)
{output.append(out+"\n");out=new String(" ");end=true;}
if(!end&&value.equals(result[i][m].trim()))
{output.append(out+"\n");out=new String(" ");end=true;
}
if(!end&&!value.equals(result[i][m].trim())){out=new String(" ");end=true;continue;}
}
}
sel.close();
}
else{
System.out.println("att "+attname[i-1]);boolean condition=false;
if(token.hasMoreTokens())
{
attname[i]=token.nextToken(); System.out.println(attname[i]+"tab");
//condition
attname[i+1]=token.nextToken(); System.out.println(attname[i+1]+"tab");
condition=true;
}
Header h=systab.getH(systab.Search(tabName[0]));
System.out.println("att "+(i-1)+" "+attname[i-1]+"");
Header h2=systab.getH(systab.Search(tabName[1]));
Header H=new Header(h,h2);
WriteFile sel=new WriteFile(H);
sel.NewTab(h,h2);
String[] attri=H.getAttri();
String[][] result=new String[i+2][]; //2attribute for where ...=...
for(int j=0;j<i+2;j++) //i=2;
{
result[j]=new String[20];
int k=0;
System.out.println(condition);
if(j==i&&!condition){System.out.println("if"); break;}
System.out.println(attname[j]);
for( k=0;k<attri.length;k+=2)
if(attri[k].trim().equals(attname[j]))
break;
if(k==attri.length) {JOptionPane.showMessageDialog(null,"no such attribute name");return;}
sel.Select(k/2,result[j]);System.out.println("index "+k/2);
}
if(attname[i+1]!=null&&attname[i]!=null){ result[i]=new String[20];result[i+1]=new String[20];
int k=0;
for( k=0;k<attri.length;k+=2)
if(attri[k].trim().equals(attname[i]))
break;
if(k==attri.length) {JOptionPane.showMessageDialog(null,"no such attribute name");return;}
sel.Select(k/2,result[i]);
for( k=0;k<attri.length;k+=2)
if(attri[k].trim().equals(attname[i+1]))
break;
if(k==attri.length) {JOptionPane.showMessageDialog(null,"no such attribute name");return;}
sel.Select(k/2,result[i+1]);
}
boolean end=true;String out=" ";
for(int m=0;m<result[0].length;m++){
for(int n=0;n<i;n++)
{if(result[n][m]!=null)
end=false;
out+=result[n][m];System.out.println("out"+result[n][m]);
}
if(end==true) break;
else{
if(!end&&!condition)
{output.append(out+"\n");out=new String(" ");end=true;}
if(!end&&condition&&(result[i][m].trim().equals(result[i+1][m].trim())))
{output.append(out+"\n");out=new String(" ");end=true;
}
if(!end&&condition&&!(result[i][m].trim().equals(result[i+1][m].trim()))){out=new String(" ");end=true;continue;}
}
}
sel.close();
}
}}
}});
JPanel bu=new JPanel();
bu.add(button1);
bu.add(button2);
getContentPane().setLayout(new BorderLayout());
Container container=getContentPane();
container.add(bu,BorderLayout.NORTH);
container.add(text,BorderLayout.CENTER);
container.add(new JScrollPane(output),BorderLayout.SOUTH);
setVisible(false);
setSize(500,500);
}
}
class changeDataDialog extends JInternalFrame{
private JTextArea text;
private JTextArea error;
private SystemTab systab;
changeDataDialog(SystemTab tab)
{
super(" change data ");
text=new JTextArea(20,30);
text.setEditable(true);
Button button1=new Button("prompt");
Button button2=new Button("Commit");
Button button3=new Button("Clear");
error=new JTextArea(8,30);
error.setEditable(false);
systab=tab;
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null,"Create\tInsert\tDelete...","prompt",JOptionPane.INFORMATION_MESSAGE);
}});
button3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
text.setText(" ");
}});
button2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
StringTokenizer token=new StringTokenizer(text.getText()," \t\n\r\f,()=");
String next;int count=0;
if(token.hasMoreTokens())
{
next=token.nextToken();
if(next.equals("create"))
{
if(!token.nextToken().equals("table"))return;
Header h=new Header();
String str=token.nextToken();
h.setName(str);
str=token.nextToken();
h.setKey(str);
if(token.hasMoreTokens()) str=token.nextToken();
else {error.setText("no key type");return;}
h.setType(str);
count++;
String[] att=new String[20];
int i=0;String type;
while(token.hasMoreTokens())
{
str=token.nextToken();
if(token.hasMoreTokens()) type=token.nextToken();
else{ error.setText("no attribute type");return;
}
if(type.equals("int")||type.equals("real")||type.equals("string")||type.equals("boolean"))
{
att[i++]=str;
att[i++]=type;count++;
}
else {error.setText("type invalid");return;}
}
h.setCount(count);
h.setAttri(att);
systab.add(h);
error.append("successfully create table "+h.getName()+"\n");
}
if(next.equals("insert")){
if(!token.nextToken().equals("into"))
error.setText("sematic error");
String name=token.nextToken();
Header h=systab.getH(systab.Search(name));
WriteFile add=new WriteFile(h);
String key=new String(token.nextToken());
if(key==null)
error.setText("key can not be null");
String att[]=new String[h.getCount()-1];
for(int k=0;k<att.length;k++)
if(token.hasMoreTokens())
att[k]=token.nextToken();
else error.setText("need more attribute value");
add.addRecord(key,att);
add.close();
error.append("finish inserting\n");
}
if(next.equals("delete"))
{
String key=token.nextToken();
if(key==null)
error.setText("key can not be null");
if(!token.nextToken().equals("from"))
error.setText("sematic error");
String name=token.nextToken();
Header h=systab.getH(systab.Search(name));
WriteFile del=new WriteFile(h);
del.Delete(key);
del.close();
error.append("finish delete tuple\n");
}
if(next.equals("update"))
{
String name=token.nextToken();
Header h=systab.getH(systab.Search(name));
token.nextToken();
WriteFile up =new WriteFile(h);
String attname[]=new String[10];int i=0;
String[] attvalue=new String[10];
String tem=null;
int[] index=new int[10];
while(token.hasMoreTokens())
{
tem=token.nextToken();
if(tem.equals("where"))
break;
attname[i]=tem;
String attri[]=h.getAttri();
int k;
for( k=0;k<attri.length;k+=2)
{
if(attri[k].trim().equals(attname[i]))
{ index[i]=k/2;
break;}}
if(k==attri.length) {error.setText("no such attribute name");return;}
System.out.println("index is "+index[i]);
attvalue[i]=token.nextToken();
i++;
}
String con=token.nextToken();
String conval=token.nextToken();
if(con.equals(h.getKey().trim()))
up.update(conval,attvalue,index);
else{
int k; String attri[]=h.getAttri();
for( k=0;k<attri.length;k+=2)
{
if(attri[k].trim().equals(con))
break;
if(k==attri.length) {error.setText("no such attribute name");return;}
}
up.update(conval,k/2,attvalue,index);
}
up.close();
error.append("finish update\n");
}
}
}});
JPanel pane=new JPanel();
pane.add(button1);
pane.add(button2);
pane.add(button3);
Container container=getContentPane();container.setLayout(new BorderLayout());
container.add(pane,BorderLayout.NORTH);
container.add(new JScrollPane(text), BorderLayout.CENTER);
container.add(error,BorderLayout.SOUTH);
setSize(500,500);
setVisible(false);
}
/*
private void createFile(String na)
{
try{
File fileName=new File(na);
fileName.createNewFile();
}
catch(IOException e){
JOptionPane.showMessageDialog(null,na+"not exist.Failed to create","Error",JOptionPane.INFORMATION_MESSAGE);
}
RandomAccessFile file=new RandomAccessFile(fileName,"rw");
Record blank=new Record();
for(int count=0;count<50;count++)
blank.write(file);
file.close();
JOptionPane.showMessageDiglog(null,"Created file"+fileName.getName(),"Status",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
catch(IOException e){
JOptionPane.showMessageDialog(null,"Error processing file","Error processing file",JOptionPane.ERROR_MESSAGE);
system.exit(1);
}
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -