761f Внутрення организация сборника задач. Структура базы данных. Исходный текст утилиты на Java. Сборник задач по программированию Александра Приходько
 

Сборник задач по программированию. Старая версия

 

 Приходько А. Н.

 

xsl, учебный материал, класс, объяснения, applet, образование, servlet, примеры, примеры

 

Внутренняя организация сборника задач

Имеется база данных, в которой хранятся все задачи. Также имеются три группы утилит на языке Java. 1-ая группа - для заливки в базу новых задач. 2-ая группа - для работы с задачами в базе (удаление, перенумерация задач и так далее). 3-ая группа - для генерации из базы данных сборника задач в текстовом виде, HTML или в формате MS Word.

 

Структура базы данных

Книга состоит из глав (таблица chapters). Каждая глава содрежит гнезда задач (таблица nests) и параграфы (таблица parahraph). Гнезда и параграфы имеют единую нумерацию внутри главы. Каждое гнездо задач состоит из последовательности задач (таблица tasks). Каждая задача состоит их 3-х текстовых файлов: тело задачи, вопрос, ответ (таблица taskfiles). Также имеется таблица chains, которая связывает между собой задачи-аналоги.

sxema.gif (20335 bytes)

 

Исходный текст утилиты генерации сборника задач в текстовом формате (работающий вариант)


import java.io.*;
import java.sql.*;
import java.util.*;

public class gen_full_text {
public static void main(String[] Args) throws Exception {

      String url = "jdbc:odbc:Tasker_Info";
      String query_chapters = "";
      String query_nests = "";
      String query_tasks = "";
      String query_path = "";
      String s_path = "";

      String f_name = "";

      String stt = "";

      BufferedReader inpu = new BufferedReader(
            new InputStreamReader(System.in, "Cp866"));

      System.out.println("Генерация полного сборника задач в формат TXT");
      System.out.println("_____________________________________________");
      System.out.println();
      System.out.println("Введите имя результирующего файла без расширения");
      f_name = inpu.readLine() + ".txt";

      BufferedWriter outpu = new BufferedWriter(new FileWriter(f_name));

      outpu.newLine();
      outpu.write("Сборник задач по программированию");
      outpu.newLine();
      outpu.write("Александра Приходько");
      outpu.newLine();
      outpu.newLine();
      outpu.newLine();
      outpu.newLine();

      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      Connection con = DriverManager.getConnection(url, "", "");
      Statement stmt_chapters = con.createStatement();
      Statement stmt_nests = con.createStatement();
      Statement stmt_tasks = con.createStatement();
      Statement stmt_path = con.createStatement();

      query_path = "select fullpath from fullpath;";
      ResultSet rs_path = stmt_path.executeQuery(query_path);
      rs_path.next();
      s_path = rs_path.getString(1);
      rs_path.close();

      query_chapters = "select id, name, nn, brief from chapters order by nn;";

      int chapters_id = 0;
      String chapters_name = "";
      int chapters_nn = 0;
      String chapters_brief = "";

      int nests_id = 0;
      String nests_name = "";
      int nests_nn = 0;

      int tasks_nn = 0;
      String tasks_file_body = "";
      String tasks_file_question = "";       String tasks_file_answer = "";

      ResultSet rs_nests = null;
      ResultSet rs_tasks = null;

      boolean pr_nests = false;
      boolean pr_tasks = false;

      int sh = 0;

      ResultSet rs_chapters = stmt_chapters.executeQuery(query_chapters);

      boolean pr_chapters = rs_chapters.next();
      while (pr_chapters) {
            chapters_id = rs_chapters.getInt(1);
            chapters_name = rs_chapters.getString(2);
            chapters_nn = rs_chapters.getInt(3);
            chapters_brief = rs_chapters.getString(4);

            outpu.write("Глава " + Integer.toString(chapters_nn) + ". " +
                  chapters_name);
            outpu.newLine();
            outpu.newLine();

            query_nests = "select id, name, nn from nests where (ref_chapter=" +
                  Integer.toString(chapters_id) + ") order by nn;";
            rs_nests = stmt_nests.executeQuery(query_nests);
            pr_nests = rs_nests.next();
            while (pr_nests) {
                  nests_id = rs_nests.getInt(1);
                  nests_name = rs_nests.getString(2);
                  nests_nn = rs_nests.getInt(3);

                  outpu.write(" Гнездо " + Integer.toString(nests_nn) + ". " +
                        nests_name);
                  outpu.newLine();
                  outpu.newLine();

                  query_tasks =
                        "select taskfiles.filename_body, taskfiles.filename_question, tasks.nn " +
                        "from taskfiles INNER JOIN tasks ON taskfiles.id=tasks.ref_task where " +
                        "(tasks.ref_chapter=" + Integer.toString(chapters_id) +
                        ") and " +
                        "(tasks.ref_nest=" + Integer.toString(nests_id) + ") " +
                        "order by tasks.nn;";
                  rs_tasks = stmt_tasks.executeQuery(query_tasks);
                  pr_tasks = rs_tasks.next();
                  while (pr_tasks) {
                        tasks_file_body = rs_tasks.getString(1);
                        tasks_file_question = rs_tasks.getString(2);
                        tasks_nn = rs_tasks.getInt(3);

                        outpu.write(chapters_brief + "." + Integer.toString(nests_nn) +
                              "." + Integer.toString(tasks_nn));
                        outpu.newLine();

                        BufferedReader br = new BufferedReader(new FileReader(s_path +
                              tasks_file_question));
                        try {
                              while (true) {
                                    stt = br.readLine();
                                    outpu.write(stt);
                                    outpu.newLine();
                              }
                        } catch (Exception Ex) {}
                        br.close();

                        outpu.newLine();

                        BufferedReader br1 = new BufferedReader(new FileReader(s_path +
                              tasks_file_body));
                        try {
                              while (true) {
                                    stt = br1.readLine();
                                    outpu.write(stt);
                                    outpu.newLine();
                              }
                        } catch (Exception Ex) {}
                        br1.close();

                        outpu.newLine();

                        pr_tasks = rs_tasks.next();
                  }
                  rs_tasks.close();

                  outpu.newLine();
                  outpu.newLine();

                  pr_nests = rs_nests.next();
            }
             rs_nests.close();

            outpu.newLine();
            outpu.newLine();

            pr_chapters = rs_chapters.next();
      }
      rs_chapters.close();

      stmt_chapters.close();
      stmt_nests.close();
      stmt_tasks.close();
      stmt_path.close();

      con.close();

      outpu.flush();
      outpu.close();

      System.out.println("_____________________________________________");
      System.out.println();
      System.out.println("Генерация сборника задач завершена!");

}
}

©   Приходько   Александр  Николаевич    2006

http://task00.by.ru - Сборник задач по программированию геометрический портал Rambler's Top100
69 0