题目: 设计一个排课系统

内容:

设计一个排课系统,要求从文本文件导入教室情况(大小,数量)、培养方案(课程、学生年级、人数、教师)、约束条件(有些约束从培养方案中可知,如一个教师可以教授两门课不可以安排在同一时间上,其他包括课程先修关系,教师的特殊情况如不能上上午一二节课等),系统最终生成课表或给出无法排课的错误提示。

知识点:

使用多种存储结构,使用多种常用算法,编写复杂系统

能力:

能够掌握多种存储结构,灵活运用已学知识解决实际问题。

效果截图


部分源码(源代码见文末):

package view;import java.awt.EventQueue;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;import clazz.ClassRoom;
import clazz.Course;
import clazz.CourseForm;
import clazz.Teacher;
import clazz.Class;import javax.swing.JLabel;
import javax.swing.JOptionPane;import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Random;import java.util.Set;import javax.swing.JButton;
import javax.swing.JSpinner;
import javax.swing.JTextField;public class Show extends JFrame {/*** */private static final long serialVersionUID = 1L;private JPanel contentPane;private static LinkedList<Class> classList = new LinkedList<>();private static LinkedList<ClassRoom> classroomList = new LinkedList<>();private static LinkedList<Course> courseList = new LinkedList<>();private static LinkedList<Teacher> teacherList = new LinkedList<>();private static Set<String> preCouse = new HashSet<>();private static Set<String> having_preCourse = new HashSet<>();private static LinkedList<String> temList1;private static LinkedList<String> temList2;private JTextField textField;/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {Show frame = new Show();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public Show() {setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 461, 371);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(null);JLabel Label1 = new JLabel("排课系统");Label1.setFont(new Font("造字工房言宋(非商用)常规体", Font.PLAIN, 38));Label1.setBounds(148, 27, 165, 72);contentPane.add(Label1);try {BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Class.txt")), "GBK"));String line;while ((line = br.readLine()) != null) {String[] result = line.split(" ");classList.add(new Class(Integer.parseInt(result[0]), result[1], Integer.parseInt(result[2])));}br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("ClassRoom.txt")), "GBK"));while ((line = br.readLine()) != null) {String[] result = line.split(" ");classroomList.add(new ClassRoom(Integer.parseInt(result[0]), result[1], Integer.parseInt(result[2])));}br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Course.txt")), "GBK"));while ((line = br.readLine()) != null) {String[] result = line.split(" ");courseList.add(new Course(Integer.parseInt(result[0]), result[1], Integer.parseInt(result[2])));for (int i = 3; i < result.length; i++) {courseList.getLast().precourse.add(result[i]);preCouse.add(result[i]);having_preCourse.add(result[1]);}}br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Teacher.txt")), "GBK"));while ((line = br.readLine()) != null) {String[] result = line.split(" ");teacherList.add(new Teacher(Integer.parseInt(result[0]), result[1]));for (int i = 2; i < result.length; i++) {if (result[i].length() == 1 && result[i].charAt(0) <= 'z' && result[i].charAt(0) >= 'a') {teacherList.getLast().getSq().getList().remove(result[i].charAt(0) - 'a');} elseteacherList.getLast().teachCourse.add(result[i]);}}} catch (IOException e) {e.printStackTrace();}JButton Button1 = new JButton("开始排课");Button1.setBounds(100, 100, 100, 27);contentPane.add(Button1);JButton Button2 = new JButton("指定年级课表");Button2.setBounds(210, 151, 140, 27);contentPane.add(Button2);JButton Button3 = new JButton("指定老师课表");Button3.setBounds(211, 207, 139, 27);contentPane.add(Button3);JButton Button4 = new JButton("所有年级课表");Button4.setBounds(102, 261, 248, 27);contentPane.add(Button4);JButton Button5 = new JButton("退出系统");Button5.setBounds(237, 100, 113, 27);contentPane.add(Button5);JSpinner spinner1 = new JSpinner(new SpinnerNumberModel(1, 1, 5, 1));spinner1.setBounds(100, 152, 80, 24);contentPane.add(spinner1);textField = new JTextField();textField.setBounds(100, 208, 86, 24);contentPane.add(textField);textField.setColumns(10);Button1.addActionListener(new ActionListener() {            @Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.out.println("排课中。。。");Arranging();System.out.println("排课成功。");JOptionPane.showMessageDialog(contentPane, "排课成功", "成功", 1);}});Button2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubint number = (int) spinner1.getValue();showClass(number);}});Button3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubString name = textField.getText();showTeacher(name);}});Button4.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubfor (Class x : classList) {ShowAll(x.observed, x.getName() + "的班级课表");}}});Button5.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.exit(0);}});}private static void showClass(int grade) {for (Class x : classList) {if (x.getGrade() == grade) {ShowAll(x.observed, x.getName() + "的班级课表");return;}}}private static void showTeacher(String teachername) {for (Teacher x : teacherList) {System.out.println(x.getName());if (x.getName().equals(teachername) ) {ShowAll(x.observed, x.getName() + "的课表");//return;}}}private static void ShowAll(String[] list, String string) {JFrame frame = new JFrame(string);JTable table = new JTable(new CourseForm(list));//设置表数据居中显示DefaultTableCellRenderer cr = new DefaultTableCellRenderer();cr.setHorizontalAlignment(JLabel.CENTER);table.setDefaultRenderer( Object.class, cr);table.setRowHeight(120);JScrollPane pane = new JScrollPane(table);frame.getContentPane().add(pane);//frame.pack();frame.setSize(1200,600);frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);frame.setVisible(true);}private static void Arranging() {for (Course cou : courseList) {Teacher tea = null;Class cla = null;if (preCouse.contains(cou.getName())) {for (Class x : classList) {if (x.getGrade() == 1) {cla = x;break;}}for (Teacher x : teacherList) {if (x.teachCourse.contains(cou.getName())) {tea = x;break;}}order(tea, cla, cou);} else if (having_preCourse.contains(cou.getName())) {int max = 0;for (Class x : classList) {if (x.getSq().getList().size() > max && x.getGrade() != 1) {cla = x;max = x.getSq().getList().size();}}for (Teacher x : teacherList) {if (x.teachCourse.contains(cou.getName())) {tea = x;break;}}order(tea, cla, cou);} else {int max = 0;for (Class x : classList) {if (x.getSq().getList().size() > max) {cla = x;max = x.getSq().getList().size();}}for (Teacher x : teacherList) {if (x.teachCourse.contains(cou.getName())) {tea = x;break;}}order(tea, cla, cou);}}}// 从LinkedList<String>中随机取出timesPerWeek个元素组成的LinkedList<String>private static LinkedList<String> randList(LinkedList<String> list, int timesPerWeek) {LinkedList<String> subList = new LinkedList<String>();Random rand = new Random();int j = 0;while (true) {String m = list.get(rand.nextInt(list.size()));if (!subList.contains(m)) {subList.add(m);j++;}if (j == timesPerWeek) {break;}}return subList;}@SuppressWarnings("unchecked")private static void order(Teacher te, Class cl, Course co) {temList1 = (LinkedList<String>) (te.getSq().getList().clone());te.getSq().getList().retainAll(cl.getSq().getList());if (te.getSq().getList().size() < co.getTimesWeek()) {JOptionPane.showMessageDialog(null, "老师和同学公共可利用时间不足安排", "安排失败", 1);System.out.println("老师和同学公共可利用时间不足安排" + co.getName());}temList2 = randList(te.getSq().getList(), co.getTimesWeek());cl.getSq().getList().removeAll(temList2);te.getSq().setList(temList1);te.getSq().getList().removeAll(temList2);//System.out.println(cl.getSq().getList().size());for (String x : temList2) {int max=1000;ClassRoom selectRoom=null;for (ClassRoom y: classroomList) {if(y.getSq().getList().contains(x)&&y.getCapacity()-cl.getSum()<max&&y.getCapacity()-cl.getSum()>=0) {max = y.getCapacity() - cl.getSum();selectRoom=y;}}if(selectRoom!=null){selectRoom.getSq().getList().remove(x);}else{System.out.println("教室资源不够。");JOptionPane.showMessageDialog(null, "教室资源不够。", "提示", 1);return;}te.observed[x.charAt(0) - 'a'] = co.getName()+" "+cl.getName()+" "+selectRoom.getName();cl.observed[x.charAt(0) - 'a'] = co.getName()+" "+te.getName()+" "+selectRoom.getName();}}
}

源代码下载:

完整项目下载:点此获取
或许有帮到你的话可以点个Star么~

设计一个排课系统(Java实现)相关推荐

  1. java毕业生设计选课排课系统计算机源码+系统+mysql+调试部署+lw

    java毕业生设计选课排课系统计算机源码+系统+mysql+调试部署+lw java毕业生设计选课排课系统计算机源码+系统+mysql+调试部署+lw 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  2. 基于javaweb的课程自动排课系统(java+springboot+html+layui+thymeleaf+redis+mysql)

    基于javaweb的课程自动排课系统(java+springboot+html+layui+thymeleaf+redis+mysql) 运行环境 Java≥8.MySQL≥5.7 开发工具 ecli ...

  3. Java项目:课程自动排课系统(java+SpringBoot+html+layui+thymeleaf+redis+mysql)

    源码获取:博客首页 "资源" 里下载! 项目介绍 课程自动排课系统,该系统分两种角色:管理员与普通用户: 主要功能包括: 首页:查看分课.查看课表.查看空教室: 班级设置:添加班级 ...

  4. Java项目:基于遗传算法学校排课系统(java+Springboot+Maven+mybatis+Vue+Mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 排课管理,课程管理,讲师管理,班级管理,学生管理,教学资料,学习文档,在线测试,教材列表,教学设计,帮助中心 ...

  5. 自动排课系统的设计与实现 开题报告 java_高校自动排课APP的设计与实现毕业论文+开题报告+app源码(Hbuilder+Android+sqlite+H5)+操作步骤...

    摘  要 传统的人工排课使用手工操作存在许多弊端,如重复劳动严重.效率低下.且不能达到资源的最优化配置等,将产生大量的文件和数据,这对于查找.更新和维护都带来了不少的困难.因此设计一个高校自动排课AP ...

  6. python基于PHP+MySQL的综合排课系统

    课表编排是一个涉及到多种因素的典型的组合规划问题,它要保证在课程中安排教师,学生,教室不能产生冲突[13](所谓冲突,就是将需要上不同课程的两个或多个班级安排在了同一地点,同一时间,或为同一老师在同一 ...

  7. 从产品经理人的角度规划项目-排课系统

    一.应用场景: 新高考选课模式,学生要在多种选课组合中进行选课:以湖南省的新高考模式下的学生为例,是3+1+2的选课模式即三门主科语数外.物理或历史.最后则是从剩余的四门中去按学生自己擅长的两门科目进 ...

  8. 自动排课系统的代码c语言,[C语言]我们的排课系统 - 代码贴 - BCCN

    #include"stdio.h" #include"malloc.h" #include"stdlib.h" #include" ...

  9. [附源码]java毕业设计-在线排课系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. splunk的统计分析功能——特定字段的统计功能包括取值分布(+topK,min/max/平均值)...
  2. Start – Modern minimalist OpenCart 2.X 自适应主题模板 ABC
  3. 【POJ - 1741】Tree(树分治,容斥,点分治,模板题)
  4. 【英语学习】【WOTD】wherewithal 释义/词源/示例
  5. 实体经济是因为自己不努力才落后的吗?
  6. 力扣 746 使用最小化花费爬楼梯
  7. 服务器lsass占用内存_服务器内存跑满是什么原因造成的呢?
  8. Arduino-LiquidCrystal_I2C 液晶库
  9. python破解加密压缩包
  10. 离散帕斯瓦尔定理、帕斯瓦尔定理的证明
  11. 开头决胜武器:软文开头的4种常用写法
  12. html css视频播放器,jQuery和CSS 3定制HTML 5视频播放器
  13. Hexo | NexT打造一个炫酷博客
  14. Java微信SDK方式进行网页授权
  15. 【转载】分页插件中关于PageInfo
  16. 九寨沟静态页面(html+css)
  17. 4.11每日一题之亲戚(洛谷c++)|简单并查集
  18. 朋也bbs开源学习(一)
  19. java微服务项目简历_微服务框架-SpringCloud简介
  20. 面对疫情,AI能做什么

热门文章

  1. Web消息推送之SSE
  2. QT银行储蓄管理系统
  3. Linux系统下iptables(防火墙)的有关操作命令
  4. 互联网日报 | 名创优品潮玩全球首店开业;百度昆仑1芯片实现量产;特斯拉在华超充站突破600座...
  5. 基于JavaWeb电影系统分享【源码开源】
  6. SpringBoot项目出现404错误
  7. web之鼠标悬浮,鼠标移入和鼠标移出、hover、onmouseover、onmouseout、getElementById、mouseenter、mouseleave
  8. App Store Connect 更改已上架App主语言
  9. 计算机科学与技术项目,计算机科学与技术在工程建设项目中的运用
  10. 双非本数据岗的秋招过程