📄 course.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.util.*;
import java.text.DecimalFormat;
public class Course extends JFrame{
//inputpanel
private JPanel inputPanel=new JPanel();
private JLabel numLabel=new JLabel("课程号:");
private JLabel nameLabel=new JLabel("课程名:");
private JLabel adhereLabel=new JLabel("依赖课程号:");
private JLabel termLabel=new JLabel("总学期数:");
//定义输入框的大小
private JTextField numText=new JTextField(4);
private JTextField nameText=new JTextField(10);
private JTextField adhereText=new JTextField(4);
private JTextField termText=new JTextField(4);
//定义输入按钮样式(字)
private JButton inputButton = new JButton("输入");
//outputpanel
private JPanel outputPanel=new JPanel();
private JPanel panel=new JPanel();
private JLabel num1Label=new JLabel("课程号");
private JLabel name1Label=new JLabel("课程名");
private JLabel adhere1Label=new JLabel(" 依赖 ");
private JLabel term1Label=new JLabel("总学期数");
private JButton courseButton = new JButton("开始排课");
private JTextArea courseText=new JTextArea();
//analysePanel
private JPanel analysePanel=new JPanel();
private JPanel jpanel=new JPanel();
private JTextArea coursesText=new JTextArea();
//数组
int count=0,length=0; //length是输入的课程总数
int[][] array;
int num,adhere,term; //num是课程号,adhere是依赖号,term是总学期数
String name;
// ArrayList
ArrayList<int[]> v = new ArrayList<int[]>();
//总体版面设计
public Course(int width,int height){
setSize(width,height);
setTitle("排课系统");
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int x=(screenSize.width-width)/2;
int y=(screenSize.height-height)/2;
setLocation(x,y);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置输入框版面
inputPanel.add(numLabel);
inputPanel.add(numText);
inputPanel.add(nameLabel);
inputPanel.add(nameText);
inputPanel.add(adhereLabel);
inputPanel.add(adhereText);
inputPanel.add(termLabel);
inputPanel.add(termText);
inputPanel.add(inputButton);
inputPanel.setBorder(BorderFactory.createTitledBorder("输入"));
//设置输出框版面
courseText.setColumns(15);
panel.add(num1Label);
panel.add(name1Label);
panel.add(adhere1Label);
panel.add(term1Label);
panel.add(courseButton);
outputPanel.setLayout(new BorderLayout());
outputPanel.add(panel,"North");
outputPanel.add(new JScrollPane(courseText),"Center");
courseText.setEditable(false);
outputPanel.setBorder(BorderFactory.createTitledBorder("输出"));
analysePanel.setLayout(new BorderLayout());
analysePanel.setBorder(BorderFactory.createTitledBorder("排课结果"));
analysePanel.add(new JScrollPane(coursesText),"Center");
//设置总体板块排布
Container c=this.getContentPane();
c.add(inputPanel,"North");
c.add(outputPanel,"West");
c.add(analysePanel,"Center");
//输入按钮设置(功能设置)
inputButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
GetText();
String s=Integer.toString(num,adhere);
length++;
System.out.println("length======="+length);
//使输入的数据全部输出到输出框
courseText.append(num+" "//第一个text框的
+name+" "
+adhere+" "
+term+" \n");
int t[] = new int[2];
t[0] = num;
t[1] = adhere;
v.add(t);
}
});
//设置排课按钮的功能(功能设置,调用arrange函数)
courseButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
arrange();
}
});
}
public void GetText(){
num=Integer.parseInt(numText.getText());
name=nameText.getText();
adhere=Integer.parseInt(adhereText.getText());
term=Integer.parseInt(termText.getText());
}
//核心部分:排课程序的实现
public void arrange(){
array = new int [v.size ()][2];
int c = 0;
for (int[] t : v)
array[c++] = t;
int i,j,k,l,n,m=1; //设置参数i,j,k,l,n,m,控制循环的参数
//输出提示信息:排课结果所显示的数字是课程号
coursesText.append("排课结果所显示的数字是课程号"+"\n");
for(n=1;n<=term;n++){ //进行term次循环
coursesText.append("第"+n+"个学期:"+"\n"); //用来输出学期数
for(i=length-1;i>=0;i--){
if(array[i][0]!=0&&array[i][1]==0&&m<=length/term+1)
//如果课程号不为0,依赖号等于0,而且该学期已输出的课程数小于每学期的总课程数
{
coursesText.append(array[i][0]+"\n");//输出该课程号
m++;//该学期已输出的课程数加1
for(j=length-1;j>=0;j--)//该循环用于检验刚输出的课程有没有被依赖
{
if(array[j][1]==array[i][0])//如果其他课程依赖于刚输出的课程
{
array[j][1]=0;//其他课程的依赖号清零
for(k=length-1;k>=0;k--){//该循环用于检查该课程有没有依赖其他的课程
if(array[k][0]==array[j][0]&&k!=j)//若该课程还有依赖其他课程
{
array[j][0]=0;//课程号清零
}
}
}
}
array[i][0]=0; //把刚输出的课程的课程号清零
}
}
for(i=length-1;i>=0;i--){ //遍历整个课程(以课程号为对象)
if(array[i][1]==array[i][0]&&array[i][0]!=0&&array[i][1]!=0&&m<=length/term+1)
//若该课程没有依赖其他课程,课程号与依赖号都不为0,而且该学期已输出的课程数小于每学期的总课程数
{
coursesText.append(array[i][0]+"\n");//输出该课程号
m++;//该学期已输出的课程数加1
for(l=length-1;l>=0;l--){//该循环用于检验刚输出的课程有没有被依赖
if(array[l][1]==array[i][0]&&l!=i){ //如果其他课程依赖于刚输出的课程
array[l][1]=0; //课程号清零
for(j=length-1;j>=0;j--){ //该循环用于检查该课程有没有依赖其他的课程
if(array[j][0]==array[l][0]&&j!=l&&array[l][0]!=0)
//若该课程还有依赖其他课程
{
array[l][0]=0; //课程号清零
}
}
}
}
array[i][0]=0;//课程号清零
}
}
m=0; //把输出的课程数置"0"
}
}
public static void main(String args[]){
try{
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}catch(Exception e){
System.err.println("程序异常:"+e.getMessage());
}
Course frame= new Course(600,400);
frame.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -