Java課程設(shè)計(jì)報(bào)告模板及范文(Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告模板)
今天給各位分享Java課程設(shè)計(jì)報(bào)告模板及范文的知識(shí),其中也會(huì)對(duì)Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告模板進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開始吧!
本文目錄一覽:
- 1、《Java》期末課程設(shè)計(jì)
- 2、求《java課程設(shè)計(jì)》制作
- 3、誰(shuí)教教我怎么寫JAVA的課程設(shè)計(jì)論文
- 4、跪求JAVA課程設(shè)計(jì)?。?!
- 5、急求 日歷記事本課程設(shè)計(jì)報(bào)告 java編寫
- 6、急!Java 題庫(kù)維護(hù)系統(tǒng)課程報(bào)告
《Java》期末課程設(shè)計(jì)
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class QuestionOne {
/**
* 編程將從鍵盤輸入文本中的子字符串“word”替換為字符串“world”, 并刪除所有的子字符串“this”。
* 序程要求:程序中要包含有注釋,對(duì)于使用的變量和方法的功能要加以說(shuō)明。
*/
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
String message = null; // 存儲(chǔ)用戶輸入的字符串
try {
while ((message = reader.readLine()) != null) {
// 打印處理前的字符串
System.out.println("輸入的字符串為:" + message);
// 把 word 替換為 world
message = message.replaceAll("word", "world");
// 把 this 替換為 空
message = message.replaceAll("this", "");
// 打印處理后的字符串
System.out.println("處理后為:" + message);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("出現(xiàn)異常,程序退出!");
}
}
}
求《java課程設(shè)計(jì)》制作
可以使用百度Hi告知我
有時(shí)間可以解決你的問(wèn)題
類似的要求也可以告知我
誰(shuí)教教我怎么寫JAVA的課程設(shè)計(jì)論文
目 錄
一、概要設(shè)計(jì)……………………………………………………………3
二、程序整體設(shè)計(jì)說(shuō)明…………………………………………….…..4
三、程序部分源代碼及注釋…………………………………………….9
四、測(cè)試結(jié)果………………………………………………………….24
五、設(shè)計(jì)心得…………………………………………………………25
六、致 謝…………………………………………………………25
七、參考文獻(xiàn)…………………………………………………………25
【摘 要】該程序是一個(gè)圖形界面的java文檔編輯器,其界面主要采用了awt包, 程序?qū)崿F(xiàn)了文本編輯器的基本功能有:新建文件、打開文件、文件保存、文件另存為、剪切、復(fù)制、粘貼、刪除、查找/替換、改變字體大小,另外還利用Time類的schedule方法實(shí)現(xiàn)了文件的定時(shí)自動(dòng)更新功能,并創(chuàng)建備份文件,由于該編輯器是用的awt包,所以在技術(shù)上沒(méi)有實(shí)現(xiàn)將Java的關(guān)鍵字以不同顏色顯示功能。
【關(guān)鍵字】java 編輯器
一、概要設(shè)計(jì)
Java程序編輯器是:圖形界面、線程、流與文件等技術(shù)的綜合應(yīng)用。
圖形界面的實(shí)現(xiàn):考慮到簡(jiǎn)單、實(shí)用、高效等特點(diǎn),就選擇了AWT來(lái)完成實(shí)現(xiàn),在選擇組件上,文本編輯區(qū)就選用了TaxtArea作為主要的部件。
線程實(shí)現(xiàn)文件自動(dòng)保存:在相關(guān)的參考書上查閱到在Time類中有一個(gè)schedule方法可以在后臺(tái)自動(dòng)完成一定的功能,而且調(diào)用起來(lái)相當(dāng)簡(jiǎn)單,于是就用了Time類中的schedule方法來(lái)實(shí)現(xiàn)文件自動(dòng)保存及備份功能。
文件操作的實(shí)現(xiàn):利用了字符文件流FileReader和FileWriter類來(lái)實(shí)現(xiàn)。
由于Java的特性,可能用任何一個(gè)編輯器來(lái)編輯,于是就將Windows中的記事本作為模仿對(duì)象,根據(jù)實(shí)現(xiàn)情況刪減了其中的一些功能,如自動(dòng)換行,設(shè)置字體,打印等功能。
在設(shè)計(jì)類的時(shí)候,考慮到簡(jiǎn)單明了,就用了兩個(gè)類,一個(gè)主類和一個(gè)默認(rèn)屬性類作為程序的整體框架,所有的對(duì)象和方法都是在默認(rèn)屬性類中創(chuàng)建和實(shí)現(xiàn)的,以及為各組件注冊(cè)事件監(jiān)聽程序也是在默認(rèn)屬性類中實(shí)現(xiàn)的。主類完成對(duì)象的實(shí)例化及顯示。這們?cè)O(shè)計(jì)的優(yōu)點(diǎn)是:條理清晰,容易理解,容易修改。這樣設(shè)計(jì)的缺點(diǎn)是:不利于共享類中的方法。
二、程序整體設(shè)計(jì)說(shuō)明
2.1、程序框架圖
2.2、程序中所用類說(shuō)明
(1)用戶自定義類
類名:EditInstantiation
作用:實(shí)例化對(duì)象
繼承的父類:WindowAdapter
主要成員變量:
Frame myFrm // 定義主窗體
TextArea myText // 定義文本編輯區(qū)
Dialog myDlgFind,myDlgFindont //查找及設(shè)置字體對(duì)話框
TextField TFfind, TFreplace, TffontSize
//查找對(duì)話框和字體窗體中的文本行
Button BfontOK, Bfind, Breplace, Bnext, Bcancel //定義和創(chuàng)建各按鈕
Label Lf, Lr, Ls //定義和創(chuàng)建各標(biāo)簽
MenuBar Mbbar //定義和創(chuàng)建主菜單
Menu Mfile,Medit,Mformation,Mhelp //定義和創(chuàng)建主菜單中的選項(xiàng)
Toolkit toolKit
Clipboard myCB //剪切板對(duì)象
FileDialog myFDlg //定義文件對(duì)話框
Choice ChfontName //定義和創(chuàng)建字體選擇框
private int VIindex = 1; //構(gòu)成文件名后綴變量
private String VSsubFixStr=".java"; //構(gòu)成文件名擴(kuò)展名變量
private String VSmyFileName = "Document1",VSmyBFileName;
//文件名及備份文件名變量
private File VFmyFile=new File(VSmyFileName+VIindex+".java");
//文件名變量
private int VIsearchPosition=0; //查找位置指針
private Timer VTtime; //實(shí)例化一個(gè)Time類
private int VImin=1; // schedule方法中的一個(gè)時(shí)間參數(shù)
private int VItype=JOptionPane.INFORMATION_MESSAGE;
//提示對(duì)話框類型
private String VStitle; //提示對(duì)話框標(biāo)題
private String VSmessage; //提示對(duì)話框信息
private boolean VBchanged = true; //改變字體的一個(gè)標(biāo)識(shí)
private int VIfontSizeMin = 8, VIfontSizeMax = 40, VIfontSizeChangedStep = 2; //設(shè)置字體大小及步長(zhǎng)
主要成員方法:
public void init() //初始化各部件菜單的定義和事件的監(jiān)聽
public void displayEdit ()//顯示窗體及調(diào)用Time中的schedule方法
public void windowClosing () //關(guān)閉窗體
public void save //保存文件方法
a.內(nèi)部類類名:KeyEvents
作用:實(shí)現(xiàn)菜單的事件的響應(yīng)功能
繼承的父類:KeyAdapter
主要成員變量:無(wú)
成員方法:actionPerformed()、keyPressed()
b.內(nèi)部類類名:FindKeyEvent
作用:實(shí)現(xiàn)查找中各部件事件的響應(yīng)功能
繼承的父類:無(wú)
主要成員變量:無(wú)
成員方法:actionPerformed ()
c.內(nèi)部類類名:fontEvent
作用:實(shí)現(xiàn)字體中各部件事件的響應(yīng)功能
繼承的父類:無(wú)
主要成員變量:無(wú)
成員方法:ItemListener(),ActionListener()
(2)用戶自定義類與Java類的繼承關(guān)系圖如下:
自定義類 Java 類
線程使用說(shuō)明
2.3、實(shí)現(xiàn)接口方法
本程序用到的方法有:schedule其方法描述如下:
schedule(事件,啟動(dòng)時(shí)間,間隔時(shí)間);
2.4、線程應(yīng)用
本程序?yàn)槲谋揪庉嬈?,為?shí)現(xiàn)自動(dòng)更新,應(yīng)用到了線程,每隔1分鐘對(duì)文件進(jìn)行自動(dòng)更新
2.5、異常處理說(shuō)明
(1)打開文件時(shí)的異常處理
需要處理的異常:IOException
處理方法:捕獲異常后,顯示捕獲的異常
(2)保存文件時(shí)的異常處理
需要處理的異常:IOException
處理方法:捕獲異常后,顯示捕獲的異常
2.6、程序運(yùn)行效果及存在的問(wèn)題
(1)程序運(yùn)行主要界面如下:
a、主界面
b、打開文件對(duì)話框
c、保存文件對(duì)話框
d、另存為文件對(duì)話框
e、查找/替換對(duì)話框
f.字體對(duì)話框
2.7.程序尚還存在的問(wèn)題
我花費(fèi)了近一個(gè)多星期的時(shí)間,查閱了許多相關(guān)的資料,終于把這個(gè)Java編輯器,程序基本實(shí)現(xiàn)了該課程設(shè)計(jì)的基本要求。但由于自己水平有限,使得程序還有不是很完善,首先,最重要的一點(diǎn)是該設(shè)計(jì)的最重要的功能自動(dòng)改變java關(guān)鍵字的顏色沒(méi)有實(shí)現(xiàn)。
三、程序部分源代碼及注釋
//****************************************************
// class name :Edit
// implements :none
// extends :none
// attribute :public
// founction :entrance of the class
//*****************************************************
public class Edit{ //主類
public static void main(String args[]){
EditInstantiation myEdit= new EditInstantiation();
myEdit.init(); //初始化
myEdit.displayEdit(); //顯示窗體
}
//****************************************************
// class name :EditInstantiation
// implements :none
// extends :WindowAdapter
// attribute :default
// founction :EditInstantiation of the main class
//*****************************************************
class EditInstantiation extends WindowAdapter{ //默認(rèn)屬性類
//define sources 定義各部件
Frame myFrm=new Frame("我的編輯器"); //定義窗體
TextArea myText=new TextArea(); //定義窗體
Dialog myDlgFind=new Dialog(myFrm,"查找",true); //定義查找對(duì)話框
Dialog myDlgFindont=new Dialog(myFrm,"字體",true); //定義字體對(duì)話框
TextField TFfind=new TextField(30);//定義查找對(duì)話中的查找輸入框
TextField TFreplace=new TextField(30); //定義查找對(duì)話中的替換輸入框
TextField TFfontSize,TFfontDemo;//定義字體大小文本框和示例框
Choice CHfontName;//定義字體大小選擇框
List LTfontSize; //定義字體大小標(biāo)簽
Button BfontOK,BfontCancel; //定義字體大小對(duì)話中的確定及取消按鈕
Button Bfind=new Button("查找");//定義查找對(duì)話中的查找按鈕
Button Breplace=new Button("替換");//定義查找對(duì)話中的替換及取消按鈕
Button Bnext=new Button("下一個(gè)");//定義查找對(duì)話中的下一個(gè)及取消按鈕
Button Bcancel=new Button("取消");//定義查找對(duì)話中的確定及取消按鈕
Label Lf=new Label("查找內(nèi)容:");
Label Lr=new Label("替換為: ");
Label Ls=new Label("字體大小:");
FileDialog myFDlg;
Clipboard myCB=Toolkit.getDefaultToolkit().getSystemClipboard(); //剪切板對(duì)象
Menu Mfile,Medit,Mformation,Mhelp;
MenuBar MBbar;
//define varities //定義各變量
private int VIindex = 1;
private String VSsubFixStr=".java";
private String VSmyFileName = "Document1",VSmyBFileName;
private File VFmyFile=new File(VSmyFileName+VIindex+".java");
private int VIsearchPosition=0;
private Timer VTtime;
private int VImin=1; // parameter in time schedul
private int VItype=JOptionPane.INFORMATION_MESSAGE;
private String VStitle;
private String VSmessage;
// flag of the changeing
private boolean VBchanged = true;
// the scope of the font
private int VIfontSizeMin = 8, VIfontSizeMax = 40, VIfontSizeChangedStep = 2;
//************************************************
//founction name:init()
//parameter :none
//attribute :public
//founction :initia all compont
//************************************************
public void init(){ //初始化各部件
//------------------ set menu ------------------
MBbar=new MenuBar();
myFrm.setMenuBar(MBbar);
Mfile=new Menu("文件");
Medit=new Menu("編輯");
Mformation=new Menu("格式");
Mhelp=new Menu("幫助");
MBbar.add(Mfile);
MBbar.add(Medit);
MBbar.add(Mformation);
MBbar.add(Mhelp);
//文件菜單 add File menu
Mfile.add(new MenuItem("新建",new MenuShortcut(KeyEvent.VK_N)));
Mfile.add(new MenuItem("打開",new MenuShortcut(KeyEvent.VK_O)));
Mfile.add(new MenuItem("保存",new MenuShortcut(KeyEvent.VK_S)));
Mfile.add(new MenuItem("另存為"));
Mfile.addSeparator();//分隔線
Mfile.add(new MenuItem("退出",new MenuShortcut(KeyEvent.VK_E)));
//編輯菜單 add Edit menu
Medit.add(new MenuItem("剪切"));//,new MenuShortcut(KeyEvent.VK_X)));
Medit.add(new MenuItem("復(fù)制"));//new MenuShortcut(KeyEvent.VK_C)));
Medit.add(new MenuItem("粘貼"));//new MenuShortcut(KeyEvent.VK_V)));
Medit.add(new MenuItem("刪除"));//new MenuShortcut(KeyEvent.VK_D)));
Medit.addSeparator();//分隔線
Medit.add(new MenuItem("查找/替換",new MenuShortcut(KeyEvent.VK_F)));
Medit.addSeparator();//分隔線
Medit.add(new MenuItem("全選",new MenuShortcut(KeyEvent.VK_A)));
//格式菜單 add Formation menu
Mformation.add(new MenuItem("字體",new MenuShortcut(KeyEvent.VK_U)));
//幫助菜單 add Formation menu
Mhelp.add(new MenuItem("關(guān)于作者"));
//----------------- menu add end -------------------------
//add Menu Action Listener
Mfile.addActionListener(new KeyEvents());
Medit.addActionListener(new KeyEvents());
Mformation.addActionListener(new KeyEvents());
Mhelp.addActionListener(new FindKeyEvent());
//--------------------------- Find dialog-----------------
myDlgFind.setSize(350,115);
myDlgFind.setLocation(250,150);
myDlgFind.setLayout(new FlowLayout(FlowLayout.CENTER));
myDlgFind.setBackground(Color.LIGHT_GRAY);
Bfind.setEnabled(false);
Breplace.setEnabled(false);
Bnext.setEnabled(false);
myDlgFind.add(Lf);
myDlgFind.add(TFfind);
myDlgFind.add(Lr);
myDlgFind.add(TFreplace);
myDlgFind.add(Bfind);
myDlgFind.add(Breplace);
myDlgFind.add(Bnext);
myDlgFind.add(Bcancel);
myDlgFind.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
myDlgFind.setVisible(false);
}});//為查找對(duì)話框窗體注冊(cè)事件監(jiān)聽
TFfind.addKeyListener(new KeyEvents());//注冊(cè)事件監(jiān)聽
Bfind.addActionListener(new FindKeyEvent());
Breplace.addActionListener(new FindKeyEvent());
Bcancel.addActionListener(new FindKeyEvent());
Bnext.addActionListener(new FindKeyEvent());
//--------------- end add action listener ------------
//================set font dialog ==============
//font size text field
TFfontSize = new TextField("8",14);
TFfontSize.selectAll();
//font size list field
LTfontSize = new java.awt.List(5, false);
LTfontSize.addItemListener(new fontEvent());
for(int i = VIfontSizeMin; i = VIfontSizeMax; i = i + VIfontSizeChangedStep)
LTfontSize.add(i + "");//添加字體大小
LTfontSize.select(0);
//two Button Ok Cancel
BfontOK = new Button("確定");
BfontOK.addActionListener(new fontEvent());
BfontCancel = new Button("取消");
BfontCancel.addActionListener(new fontEvent());
//a TextField for demo the font
TFfontDemo = new TextField("Java awt",37);
TFfontDemo.setEditable(false);
// my font dialog設(shè)置字體對(duì)話框
myDlgFindont.setLayout(new FlowLayout(FlowLayout.LEFT));
myDlgFindont.setBackground(Color.LIGHT_GRAY);
myDlgFindont.add(Ls);
myDlgFindont.add(TFfontSize);
myDlgFindont.add(BfontOK);
myDlgFindont.add(BfontCancel);
myDlgFindont.add(LTfontSize);
myDlgFindont.add(TFfontDemo);
myDlgFindont.setSize(300,200);
myDlgFindont.setLocation(300,200);
myDlgFindont.setResizable(false);
myDlgFindont.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
myDlgFindont.show(false);
}
}); //為字體對(duì)話框窗體注冊(cè)事件監(jiān)聽
//=============end set font dialog
// =======set Edit frame設(shè)置編輯器窗休
myFrm.add(myText,BorderLayout.CENTER);
myFrm.setSize(500,400);
myFrm.setBackground(Color.lightGray);
myFrm.addWindowListener(this);
myFrm.setSize(500,400);
myFrm.setLocation(200,100);
myFrm.setTitle("Java編輯器");
}
//************************************************
//founction name:displayEdit()
//parameter :none
//attribute :public
//founction :initial and display the frame
//************************************************
public void displayEdit(){ //顯示窗體
myFrm.setVisible(true);
//---------------------- auto save ---------------------
VTtime = new Timer(true);
VTtime.schedule(new java.util.TimerTask(){
public void run(){
if(VSmyFileName!=null){
save(VSmyFileName+".java");
VSmyBFileName=VSmyFileName+".bak";
} //添加自動(dòng)保存功能
save(VSmyBFileName);
}
}, VImin*60*1000,VImin*60*1000);
//parament 1 the task
//parament 2 when to start the task
//parament 3 set the interval time }
//****************************************************
// class name :KeyEvents
// implements :ActionListener
// extends :KeyAdapter
// attribute :default
// founction :implement the mouse and key action
//*****************************************************
class KeyEvents extends KeyAdapter implements ActionListener{
//********************************************************
//founction name:actionPerformed()
//parameter :none
//attribute :public
//return :void
//founction :realize the key action in the menu
//*********************************************************
public void actionPerformed(ActionEvent e){
//完成菜單事件的功能
// File Menu
if (e.getActionCommand()=="新建"){
//remind you
JFrame aFrame=new JFrame();
aFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JOptionPane optionPane=new JOptionPane();
String choices[]={"是","否","取消"};
int n=optionPane.showOptionDialog(aFrame,"文件正文已更改,是否保存更改","文本編輯器",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null,choices,choices[0]);
//保存文件后新建
if(n==0){//若文件存在,保存在原文件中,再新建文件
try{
if(VFmyFile.exists()){
save(VSmyFileName); // call the save founction
myText.setText("");
VIindex++;
}
else{//若文件不存在,則保存后再新建
myFDlg=new FileDialog(myFrm,"保存文件",FileDialog.SAVE);
myFDlg.setFile(VSmyFileName);
myFDlg.show();
VSmyFileName=myFDlg.getDirectory()+myFDlg.getFile();
save(VSmyFileName);
myText.setText("");
VIindex++;
}
}
catch(Exception ne){}
}
//不保存文件新建
if(n==1){
myText.setText("");
VIindex++;
}
//取消新建
if(n==0){return;}
}
//打開菜單 Open Menu
if (e.getActionCommand()=="打開") {
myFDlg=new FileDialog(myFrm,"打開",FileDialog.LOAD);
myFDlg.show();
if (myFDlg.getFile()!="") {
VFmyFile=new File(myFDlg.getDirectory()+myFDlg.getFile());
VSmyFileName=myFDlg.getDirectory()+myFDlg.getFile();
if( VFmyFile.exists()){
try{
FileReader fr=new FileReader(VFmyFile);
BufferedReader br=new BufferedReader(fr);
String text;
myText.setText("");
while ((text=br.readLine())!=null)
myText.append(text+"\r\n");
br.close();
fr.close();
}
catch(IOException ioe){
VStitle="提示";
VSmessage="打開文件出錯(cuò)";
JOptionPane.showMessageDialog(myFrm,VSmessage,VStitle,VItype);
}
}
}
}
//保存菜單 Save Menu
if (e.getActionCommand()=="保存"){
myFDlg=new FileDialog(myFrm,"保存文件",FileDialog.SAVE);
myFDlg.setFile(VSmyFileName);
myFDlg.show();
VSmyFileName=myFDlg.getFile();
if(VSmyFileName!=null){
VSmyFileName=myFDlg.getDirectory()+myFDlg.getFile();
save(VSmyFileName);
}
}
//另存為菜單 SaveAs Menu
if (e.getActionCommand()=="另存為"){
myFDlg=new FileDialog(myFrm,"文件另存為",1);
myFDlg.setFile(VSmyFileName);
myFDlg.show();
VSmyFileName=myFDlg.getFile();
if(VSmyFileName!=null){
VSmyFileName=myFDlg.getDirectory()+myFDlg.getFile();
save(VSmyFileName);
}
}
//退出菜單 exit Menu
if (e.getActionCommand()=="退出")
System.exit(0);
//編輯 Edit Menu
if (e.getActionCommand()=="剪切"){
//Cut
String text =myText.getSelectedText();
StringSelection selection = new StringSelection(text);
myCB.setContents(selection, null);
myText.replaceRange("",myText.getSelectionStart(),myText.getSelectionEnd());
}
if (e.getActionCommand()=="復(fù)制"){
//copy
String text=myText.getSelectedText();
if(text!=null){
StringSelection selection=new StringSelect
急求 日歷記事本課程設(shè)計(jì)報(bào)告 java編寫
日歷記事本課程設(shè)計(jì)報(bào)告
java編寫
/*
說(shuō)明:主程序
*/
import
java.util.Calendar;
import
javax.swing.*;
import
java.awt.*;
import
java.awt.event.*;
import
java.io.*;
import
java.util.Hashtable;
public
class
CalendarPad
extends
JFrame
implements
MouseListener
{
int
year,month,day;
Hashtable
hashtable;
File
file;
JTextField
showDay[];
JLabel
title[];
Calendar
日歷;
int
星期幾;
NotePad
notepad=null;
Month
負(fù)責(zé)改變?cè)?
Year
負(fù)責(zé)改變年;
String
星期[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
JPanel
leftPanel,rightPanel;
public
CalendarPad(int
year,int
month,int
day)
{
leftPanel=new
JPanel();
//左邊日歷...........
JPanel
leftCenter=new
JPanel();
JPanel
leftNorth=new
JPanel();
leftCenter.setLayout(new
GridLayout(7,7));
rightPanel=new
JPanel();
this.year=year;
this.month=month;
this.day=day;
負(fù)責(zé)改變年=new
Year(this);
負(fù)責(zé)改變年.setYear(year);
負(fù)責(zé)改變?cè)?new
Month(this);
負(fù)責(zé)改變?cè)?setMonth(month);
title=new
JLabel[7];
showDay=new
JTextField[42];
for(int
j=0;j7;j++)
{
title[j]=new
JLabel();
title[j].setText(星期[j]);
title[j].setBorder(BorderFactory.createRaisedBevelBorder());
leftCenter.add(title[j]);
}
........
看下是不是收到了啊
額外人提問(wèn)
急!Java 題庫(kù)維護(hù)系統(tǒng)課程報(bào)告
import?java.io.BufferedReader;
import?java.io.BufferedWriter;
import?java.io.File;
import?java.io.FileReader;
import?java.io.FileWriter;
import?java.io.IOException;
import?java.text.SimpleDateFormat;
import?java.util.ArrayList;
import?java.util.Date;
import?java.util.List;
import?java.util.Scanner;
public?class?Main?{
public?static?final?String?DATE_FORMAT?=?"MM月dd日";
private?static?final?Scanner?scanner?=?new?Scanner(System.in);
public?static?ListItem?itemList?=?null;
private?static?final?String?itemPath?=?"d:/item.txt";
public?static?int?total;
private?static?int?current=1;
public?static?void?main(String[]?args)?{
try?{
process();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
private?static?void?init()?throws?IOException?{
itemList?=?ItemReaderWriter.readItemsFromFile(itemPath);
total?=?itemList.size();
}
private?static?void?process()?throws?IOException?{
show();
String?c?=?getInput();
while?(!c.equals("a")??!c.equals("i")??!c.equals("d")??!c.equals("l"))?{
System.err.println("輸入錯(cuò)誤!請(qǐng)輸入a/i/d/l");
process();
}
if?("a".equals(c))?{
aOperation();
}
else?if?("i".equals(c))?{
iOperation();
}
else?if?("d".equals(c))?{
dOperation();
}
else?if?("l".equals(c))?{
lOperation();
}
}
private?static?void?print(String...?msg)?{
if?(msg?!=?null??msg.length??0)?{
System.out.println(msg[0]);
}
else?{
System.out.println();
}
}
private?static?String?getDateNow()?{
SimpleDateFormat?sdf?=?new?SimpleDateFormat(DATE_FORMAT);
return?sdf.format(new?Date());
}
private?static?void?show()?{
print("/********************************************************/");
String?dateStr?=?getDateNow();
print("題庫(kù)維護(hù)系統(tǒng)???今天"+dateStr+"..........");
print("請(qǐng)選擇相關(guān)操作:");
print("1.添加題目??按鍵盤字符(a)");
print("2.導(dǎo)入題目??按鍵盤字符(i)");
print("3.刪除題目??按鍵盤字符(d)");
print("4.顯示題目??按鍵盤字符(l)");
print("/********************************************************/");
}
private?static?void?aOperation()?throws?IOException?{
init();
print("***********************************************************");
print("添加題目,題庫(kù)已有試題"+total+"條,當(dāng)前錄入第"+current+"條");
print("***********************************************************");
print("請(qǐng)輸入題目:");
String?title?=?(total+1)?+?"."?+?getInput();
print("請(qǐng)輸入選項(xiàng)A:");
String?a?=?"A."?+?getInput();
print("請(qǐng)輸入選項(xiàng)B:");
String?b?=?"B."?+?getInput();
print("請(qǐng)輸入選項(xiàng)C:");
String?c?=?"C."?+?getInput();
print("請(qǐng)輸入選項(xiàng)D:");
String?d?=?"D."?+?getInput();
Item?item?=?new?Item(title,a,b,c,d);
System.out.println(item);
ItemReaderWriter.writeToFile(item,?itemPath);
total?+=?1;
current?+=?1;
print("輸入成功,否繼續(xù)輸入?(y/n)");
String?s?=?getInput();
if?("y".equals(s))?{
aOperation();
}
else?{
process();
}
}
private?static?void?iOperation()?throws?IOException{
init();
print("請(qǐng)輸入需要導(dǎo)入題庫(kù)文件路徑:");
String?path?=?getInput();
File?f?=?new?File(path);
if?(!f.exists())?{
throw?new?IOException("不是一個(gè)有效的路徑!");
}
else?{
try?{
ItemReaderWriter.importToFile(itemPath,path,?total);
print("題庫(kù)導(dǎo)入成功!");
}?catch?(Exception?e)?{
System.err.println("題庫(kù)導(dǎo)入失??!"?+?e.getMessage());
e.printStackTrace();
}
}
process();
}
private?static?void?dOperation()?throws?IOException?{
init();
print("***********************************************************");
print("刪除題目");
print("***********************************************************");
print("請(qǐng)輸入所需刪除題號(hào):");
String?numStr?=?getInput();
int?num?=?0;
try?{
num?=?Integer.valueOf(numStr);
ItemReaderWriter.deleteByNum(itemPath,num);
print("刪除試題成功!");
}?catch?(NumberFormatException?e)?{
System.err.println("輸入的不是有效的題號(hào)!");
e.printStackTrace();
}?catch?(IOException?ee)?{
System.out.println("刪除題目失敗!"?+?ee);
ee.printStackTrace();
}
process();
}
private?static?void?lOperation()?throws?IOException?{
init();
print("***********************************************************");
if?(itemList?==?null?||?itemList.size()?==?0)?{
print("目前題庫(kù)中沒(méi)有題目!");
return;
}
print("目前題庫(kù)中共有"?+?itemList.size()?+?"道試題!");
for?(int?i=0;iitemList.size();i++)?{
Item?item?=?itemList.get(i);
print(item.getTitle());
print(item.getA());
print(item.getB());
print(item.getC());
print(item.getD());
print();
}
print("***********************************************************");
process();
}
private?static?String?getInput()?{
String?cstr?=?scanner.next();
while?(cstr?==?null?||?cstr.trim().length()?==?0)?{
print("請(qǐng)輸入內(nèi)容!");
cstr?=?scanner.next();
}
return?cstr;
}
}
final?class?ItemReaderWriter?{
//?假定題目的格式如下:
//?題目表述:
//?選項(xiàng)A:
//?選項(xiàng)B:
//?選項(xiàng)C:
//?選項(xiàng)D:
//?1道題有5行組成
public?static?ListItem?readItemsFromFile(String?filePath)?throws?IOException?{
File?f?=?new?File(filePath);
if?(!f.exists())?{
f.createNewFile();
}
ListItem?itemList?=?new?ArrayListItem();
BufferedReader?br?=?new?BufferedReader(new?FileReader(filePath));
String?line?=?null;
while?((line?=?br.readLine())?!=?null)?{
//?標(biāo)題
String?title?=?line;
//?選項(xiàng)A
String?a?=?line?=?br.readLine();
//?選項(xiàng)B
String?b?=?line?=?br.readLine();
//?選項(xiàng)C
String?c?=?line?=?br.readLine();
//?選項(xiàng)D
String?d?=?line?=?br.readLine();
Item?item?=?new?Item(title,a,b,c,d);
itemList.add(item);
//?空行,每題之間空一行
line?=?br.readLine();
}
return?itemList;
}
public?static?synchronized?void?writeToFile(Item?item,String?filePath)?throws?IOException?{
FileWriter?fw?=?new?FileWriter(filePath,true);
if?(Main.itemList?!=?null??Main.itemList.size()?=?0)?{
//?空行,題目之間空一行
fw.write("\n\n");
}
//?標(biāo)題
fw.write(item.getTitle());
fw.write("\n");
//?選項(xiàng)A
fw.write(item.getA());
fw.write("\n");
//?選項(xiàng)B
fw.write(item.getB());
fw.write("\n");
//?選項(xiàng)C
fw.write(item.getC());
fw.write("\n");
//?選項(xiàng)D
fw.write(item.getD());
fw.close();
}
public?static?void?importToFile(String?itemPath,String?filePath,int?total)?throws?IOException?{
BufferedReader?br?=?new?BufferedReader(new?FileReader(new?File(filePath)));
String?line?=?null;
while?((line?=?br.readLine())?!=?null)?{
//?標(biāo)題
String?title?=?line;
if?(title.matches("^\\d+.*$"))?{
title?=?title.replaceFirst("\\d+",?"");
title?=?(++total)?+?title;
}
//?選項(xiàng)A
String?a?=?line?=?br.readLine();
//?選項(xiàng)B
String?b?=?line?=?br.readLine();
//?選項(xiàng)C
String?c?=?line?=?br.readLine();
//?選項(xiàng)D
String?d?=?line?=?br.readLine();
Item?item?=?new?Item(title,a,b,c,d);
writeToFile(item,?itemPath);
//?讀取下一個(gè)空行
line?=?br.readLine();
}
br.close();
}
public?static?synchronized?void?deleteByNum(String?filePath,int?num)?throws?IOException?{
ListItem?itemList?=?readItemsFromFile(filePath);
boolean?find?=?false;
if?(itemList?!=?null??itemList.size()??0)?{
for?(Item?item?:?itemList)?{
if?(item.getTitle().startsWith(Integer.toString(num)))?{
find?=?true;
itemList.remove(item);
break;
}
}
}
else?{
System.out.println("題庫(kù)中沒(méi)有試題");
}
if?(find)?{
BufferedWriter?bw?=?new?BufferedWriter(new?FileWriter(new?File(filePath)));
for?(int?i=0;iitemList.size();i++)?{
Item?item?=?itemList.get(i);
//?標(biāo)題
String?title?=?item.getTitle();
title?=?title.replaceFirst("\\d+",?"");
title?=?(i+1)?+?title;
bw.write(title);
bw.write("\n");
//?選項(xiàng)A
bw.write(item.getA());
bw.write("\n");
//?選項(xiàng)B
bw.write(item.getB());
bw.write("\n");
//?選項(xiàng)C
bw.write(item.getC());
bw.write("\n");
//?選項(xiàng)D
bw.write(item.getD());
if?(i?!=?itemList.size()?-?1)?{
bw.write("\n\n");
}
}
bw.close();
}
}
}
class?Item?{
private?String?title;
private?String?a;
private?String?b;
private?String?c;
private?String?d;
public?Item()?{
}
public?Item(String?title,String?a,String?b,String?c,String?d)?{
this.title?=?title;
this.a?=?a;
this.b?=?b;
this.c?=?c;
this.d?=?d;
}
public?String?getTitle()?{
return?title;
}
public?void?setTitle(String?title)?{
this.title?=?title;
}
public?String?getA()?{
return?a;
}
public?void?setA(String?a)?{
this.a?=?a;
}
public?String?getB()?{
return?b;
}
public?void?setB(String?b)?{
this.b?=?b;
}
public?String?getC()?{
return?c;
}
public?void?setC(String?c)?{
this.c?=?c;
}
public?String?getD()?{
return?d;
}
public?void?setD(String?d)?{
this.d?=?d;
}
@Override
public?String?toString()?{
return?"Item?[title="?+?title?+?",?a="?+?a?+?",?b="?+?b?+?",?c="?+?c
+?",?d="?+?d?+?"]";
}
}
Java課程設(shè)計(jì)報(bào)告模板及范文的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于Java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告模板、Java課程設(shè)計(jì)報(bào)告模板及范文的信息別忘了在本站進(jìn)行查找喔。
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。