版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、山東建筑大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院程序設(shè)計(jì)實(shí)用案例選講大作業(yè)說明書題 目: 某高校餐廳餐卡管理系統(tǒng)課 程: 程序設(shè)計(jì)實(shí)用案例選講 院 (部): 計(jì)算機(jī)科學(xué)與技術(shù)專 業(yè): 網(wǎng)絡(luò)工程班 級(jí): 網(wǎng)絡(luò)121學(xué)生姓名: *琳學(xué) 號(hào): 指導(dǎo)教師: 袁*華完成日期: 2014/01/01第 1 頁 共 38 頁山東建筑大學(xué)計(jì)算機(jī)學(xué)院大作業(yè)設(shè)計(jì)說明書目 錄某高校餐廳餐卡管理系統(tǒng)1一、問題描述2二、設(shè)計(jì)思想2三、系統(tǒng)結(jié)構(gòu)2四、程序流程(或模塊劃分)3五、源程序1六、系統(tǒng)測試及操作界面1結(jié) 論2參考文獻(xiàn)3第 2 頁 共 38 頁山東建筑大學(xué)計(jì)算機(jī)學(xué)院大作業(yè)設(shè)計(jì)說明書某高校餐廳餐卡管理系統(tǒng)一、問題描述某高校餐廳餐卡管
2、理系統(tǒng),主要實(shí)現(xiàn)下列操作: 一、生成一張新卡,卡號(hào)自動(dòng)生成如“2012*”,將卡號(hào)與學(xué)生姓名綁定,并能輸入其總金額,并能在系統(tǒng)中存儲(chǔ)這些系統(tǒng)。 二、查詢操作:輸入卡號(hào),能查詢出其余額。 三、掛失操作:某卡被掛失后,其金額不能再增加或減少。 四、消費(fèi)操作:輸入一個(gè)消費(fèi)金額(消費(fèi)金額有上限,如一次最多消費(fèi)20元),能夠從卡的總金額中減去被消費(fèi)的金額。2、 設(shè)計(jì)思想 系統(tǒng)需求:win7 eclipseJDK1.7 系統(tǒng)設(shè)計(jì):首先做好界面布局,出現(xiàn)登陸頁面,實(shí)現(xiàn)觸發(fā)事件處理,連接數(shù)據(jù)庫,完成數(shù)據(jù)庫處理功能,返回退出。3、 系統(tǒng)結(jié)構(gòu)Class Loadfirst()只有此類含有main()方法,登陸頁面
3、;Class Load()登陸進(jìn)去時(shí),系統(tǒng)的主頁面,功能的主目錄Class Into()實(shí)現(xiàn)注冊功能,后臺(tái)數(shù)據(jù)庫自動(dòng)生成卡號(hào);Class Find()實(shí)現(xiàn)輸入卡號(hào),查詢數(shù)據(jù)庫信息功能;Class Lost()實(shí)現(xiàn)掛失信息操作,掛失信息不能再修改。四、程序流程(或模塊劃分)這里是系統(tǒng)的主要流程圖和流程圖的語言介紹流程圖如下:流程圖圖1 登陸主界面圖2 系統(tǒng)運(yùn)行主界面圖3 注冊主界面圖4 注冊界面圖5 我的卡號(hào)圖6 掛失卡號(hào)5、 源程序登陸主頁面:public final class Loadfirst extends JFrame implements ActionListener,Runnab
4、leprivate static Thread Scoll = null;private static Thread coll = null;JButton yes,no;TextField text;JLabel label,wel,timer ,time;JPanel p1,p2,p3;boolean stop,on;private JPasswordField password;public Loadfirst()JFrame j=new JFrame("餐卡信息管理系統(tǒng)登陸界面");p1=new JPanel();p2=new JPanel();p3=new JPa
5、nel();timer=new JLabel("親,您目前訪問的時(shí)間是:");time=new JLabel();label=new JLabel(" 請輸入登錄密碼: ");wel=new JLabel("親!歡迎進(jìn)入餐卡信息管理系統(tǒng)!"); text=new TextField("");text.setEchoChar('*'); /JPasswordField password = new JPasswordField(8);/password.setEchoChar('*')
6、;setLayout(new FlowLayout();setBounds(500, 50, 250, 100);yes=new JButton("登錄系統(tǒng)");no=new JButton("退出查詢");p1.add(label);p1.add(text);p1.add(yes);p1.add(no);p2.add(wel);p3.add(timer);p3.add(time);p1.setLayout(new GridLayout(2,2);p3.setLayout(new GridLayout(1,2);j.setBounds(500, 200,
7、 450, 400);j.add(BorderLayout.NORTH,p1);j.add(BorderLayout.CENTER,p2);j.add(BorderLayout.SOUTH,p3);Font font = new Font("楷體",Font.BOLD,25);Font nt = new Font("楷體",Font.BOLD,15);wel.setFont(font);timer.setFont(nt);label.setFont(nt);time.setFont(nt);yes.setFont(nt);no.setFont(nt);s
8、etLayout(new FlowLayout();wel.setForeground(Color.RED);yes.setForeground(Color.BLUE);no.setForeground(Color.DARK_GRAY);yes.setBackground(Color.green);no.setBackground(Color.RED);yes.addActionListener(this);no.addActionListener(this);j.setVisible(true);j.setBackground(Color.GREEN);j.setDefaultCloseOp
9、eration(JFrame.EXIT_ON_CLOSE);Scoll=new Thread(this);coll=new Thread(this);Scoll.start();coll.start();public void run()if(Thread.currentThread()=Scoll)while(true)int x=wel.getBounds().x;int y = 120;x +=10;wel.setLocation(x, y);if (x > 300) x =5;wel.setLocation(x, y);tryThread.sleep(100);catch(Int
10、erruptedException er)er.printStackTrace();if(stop=true)return;else if(Thread.currentThread()=coll)Date date = new Date();String timeStr = date.toString().substring(11, 19);time.setText(timeStr);try Thread.sleep(1000);catch(InterruptedException er)er.printStackTrace();if(on=true)return; public void a
11、ctionPerformed(ActionEvent e) if(e.getSource()=yes&&text.getText().toString().equals("123")new Load();dispose();else if(e.getSource()=no)stop=false;dispose();System.exit(0);/else if(!password.getPassword() .equals("123") )else if(!text.getText().toString() .equals("1
12、23") )JOptionPane.showMessageDialog(this,"親,您的密碼怎么輸入錯(cuò)誤了?。?quot;);text.setText("");System.out.println("密碼輸入錯(cuò)了怎么辦呢?");public static void main(String args) new Loadfirst();查詢頁面:public class Find extends JFrame implements ActionListenerString DBDriver = "com.mysql.jdbc
13、.Driver"String connectionStr = "jdbc:mysql:/localhost:3306/canterbury"Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;JLabel l1,l2,l3,l4;JTextField t1,t2,t3,t4;JButton yes,no;JPanel p1,p2,p3;JTextArea result;JLabel label,timer ,time;boolean judge = false;Find()
14、JFrame j=new JFrame("查詢信息:");p1=new JPanel();p2=new JPanel();p3=new JPanel();t1=new JTextField();t2=new JTextField();t3=new JTextField();t4=new JTextField();timer=new JLabel("親,您目前訪問的時(shí)間是:2014年1月2日");time=new JLabel();l1=new JLabel("卡號(hào):");l2=new JLabel("姓名:");l
15、3=new JLabel("充值余額:");l4=new JLabel("最低消費(fèi)余額:");setLayout(new FlowLayout();setBounds(500, 50, 250, 100);yes=new JButton("點(diǎn)擊查詢");no=new JButton("退出系統(tǒng)");result=new JTextArea();p1.add(l1);p1.add(t1);p1.add(yes);p1.add(no);p3.add(timer);p3.add(time);p1.setLayout(ne
16、w GridLayout(2,2);/p3.setLayout(new GridLayout(1,2);j.setBounds(500, 200, 450, 400);j.add(BorderLayout.NORTH,p1);j.add(BorderLayout.SOUTH,p3);Font into = new Font("楷體",Font.BOLD,15);yes.setFont(into);no.setFont(into);l1.setFont(into);l2.setFont(into);l3.setFont(into);l4.setFont(into);timer
17、.setFont(into);setLayout(new FlowLayout();yes.setForeground(Color.BLUE);no.setForeground(Color.DARK_GRAY);yes.setBackground(Color.green);l1.setBackground(Color.green);l2.setBackground(Color.green);l3.setBackground(Color.green);l4.setBackground(Color.green);no.setBackground(Color.RED);yes.addActionLi
18、stener(this);no.addActionListener(this);j.setVisible(true);j.setBackground(Color.GREEN);j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Date date = new Date();String timeStr = date.toString().substring(11, 19);time.setText(timeStr);public void actionPerformed(ActionEvent e) if(e.getSource() = no) d
19、ispose();System.exit(0);if(t1.getText().equals("")JOptionPane.showMessageDialog(this, "親,這樣是不可以查詢信息的呦!");else if(e.getSource() = yes)tryClass.forName(DBDriver);con = DriverManager.getConnection(connectionStr,"root","123malin");String select = "select * fr
20、om cante where id = ?"stmt = con.prepareStatement(select);stmt.setString(1,t1.getText();rs = stmt.executeQuery();String t1,t2,t3,t4;if(rs.next()t1= rs.getString("id");t2= rs.getString("name");t3 = rs.getString("sur");t4 = rs.getString("only");JOptionPane.
21、showMessageDialog(this, "n卡號(hào):"+t1+"n姓名:"+t2+"n剩余額度:"+t3+"n最高消費(fèi):"+t4);con.close();stmt.close();if(!rs.next()JOptionPane.showMessageDialog(this, "親,對不住喲,居然沒有你要的信息!");catch(ClassNotFoundException er)er.printStackTrace();catch(SQLException er)er.printSta
22、ckTrace();注冊主頁面:public class Into extends JFrame implements ActionListenerString DBDriver = "com.mysql.jdbc.Driver"String connectionStr = "jdbc:mysql:/localhost:3306/canterbury"Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;JLabel l1,l2,l3,l4,l5,l6;JTextF
23、ield t1,t2,t3,t4,t5,t6;JButton yes,no;JPanel p1,p2,p3;JTextArea result;JLabel label,wel,timer ,time,sert;Into()JFrame j=new JFrame("注冊新餐廳卡:");p1=new JPanel();p2=new JPanel();p3=new JPanel();t1=new JTextField();t1.setEnabled(false);t1.setText("卡號(hào)是不需要輸入的!");t2=new JTextField();t3=n
24、ew JTextField();t4=new JTextField();timer=new JLabel("親,您目前訪問的時(shí)間是:");time=new JLabel();l1=new JLabel("卡號(hào):");l2=new JLabel("姓名:");l3=new JLabel("充值余額:");l4=new JLabel("最低消費(fèi)余額:");setLayout(new FlowLayout();setBounds(500, 50, 250, 100);yes=new JButton(&
25、quot;注冊");no=new JButton("返回");result=new JTextArea();p1.add(l1);p1.add(t1);p1.add(l2);p1.add(t2);p1.add(l3);p1.add(t3);p1.add(l4);p1.add(t4);p1.add(yes);p1.add(no);p3.add(timer);p3.add(time);p1.setLayout(new GridLayout(5,2);p3.setLayout(new FlowLayout();j.setBounds(500, 200, 450, 400
26、);j.add(BorderLayout.NORTH,p1);j.add(BorderLayout.SOUTH,p3);Font into = new Font("楷體",Font.BOLD,15);yes.setFont(into);no.setFont(into);l1.setFont(into);l2.setFont(into);l3.setFont(into);l4.setFont(into);t1.setFont(into);setLayout(new FlowLayout();yes.setForeground(Color.BLUE);no.setForegro
27、und(Color.DARK_GRAY);yes.setBackground(Color.green);l1.setBackground(Color.green);l2.setBackground(Color.green);l3.setBackground(Color.green);l4.setBackground(Color.green);no.setBackground(Color.RED);t1.setBackground(Color.RED);yes.addActionListener(this);no.addActionListener(this);j.setVisible(true
28、);j.setBackground(Color.GREEN);j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Date date = new Date();String timeStr = date.toString().substring(11, 19);GregorianCalendar calender=new GregorianCalendar();int year=calender.get(Calendar.YEAR);int month=calender.get(Calendar.MONTH)+1;int day=calender.
29、get(Calendar.DAY_OF_MONTH);String str=(year+"年"+month+"月"+day+"日"+timeStr);time.setText(str);public void actionPerformed(ActionEvent e) if(e.getSource() = no) dispose();new Load();if(e.getSource() = yes)tryClass.forName(DBDriver);con = DriverManager.getConnection(connec
30、tionStr,"root","123malin");catch(ClassNotFoundException er)er.printStackTrace();catch(SQLException er)er.printStackTrace();tryString n = "insert into cante(id,name,sur,only) values(?,?,?,?)"PreparedStatement stmt = con.prepareStatement(n); double i = 0;stmt.setDouble(1,
31、i);stmt.setString(2, t2.getText();stmt.setString(3, t3.getText(); stmt.setString(4, t4.getText();stmt.executeUpdate();/rs = stmt.executeQuery();JOptionPane.showMessageDialog(this, "成功添加信息!nn注冊信息如下:"+"n姓名:"+t2.getText()+"n充值金額"+t3.getText()+"n最低消費(fèi)額:"+t4.getText
32、();System.out.println("成功添加信息!nn注冊信息如下:"+"n姓名:"+t2.getText()+"n充值金額"+t3.getText()+"n最低消費(fèi)額:"+t4.getText();dispose();stmt.close();con.close();setVisible(false);catch(SQLException er)er.printStackTrace();系統(tǒng)主頁面:public class Load extends JFrame implements ActionLis
33、tener,Runnableprivate static Thread Scoll = null;private static Thread coll = null;JButton yes,no,select,res,lost,my;JTextField text;JLabel label,wel,timer ,time,sert,date;JPanel p1,p2,p3;JTextArea result;String DBDriver = "com.mysql.jdbc.Driver"String connectionStr = "jdbc:mysql:/loc
34、alhost:3306/canterbury"Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;boolean stop,on;public Load()JFrame j=new JFrame("餐廳管理系統(tǒng)主界面");p1=new JPanel();p2=new JPanel();p3=new JPanel();timer=new JLabel("親,您目前訪問的時(shí)間是:2014年1月2日");time=new JLabel();sert=new J
35、Label();date=new JLabel();wel=new JLabel("親!歡迎進(jìn)入餐廳管理系統(tǒng)!");text=new JTextField();setLayout(new FlowLayout();setBounds(500, 50, 250, 100);yes=new JButton("關(guān)于我們");no=new JButton("退出系統(tǒng)");res=new JButton("注冊新卡");lost=new JButton("掛失餐卡");select=new JButton
36、("查詢信息");my=new JButton("我的餐卡");result=new JTextArea();p1.add(res);p1.add(lost);p1.add(select);p1.add(my);p1.add(yes);p1.add(no);p2.add(wel);p2.add(sert);p2.add(date);p3.add(timer);p3.add(time);p1.setLayout(new GridLayout(3,2);p2.setLayout(new FlowLayout();j.setBounds(450, 100,60
37、0, 550);j.add(BorderLayout.NORTH,p1);j.add(BorderLayout.CENTER,p2);j.add(BorderLayout.SOUTH,p3);Font font = new Font("楷體",Font.BOLD,25);Font into = new Font("楷體",Font.BOLD,15);wel.setFont(font);date.setFont(font);yes.setFont(into);no.setFont(into);select.setFont(into);my.setFont(
38、into);lost.setFont(into);res.setFont(into);sert.setFont(into);timer.setFont(into);setLayout(new FlowLayout();wel.setForeground(Color.RED);date.setForeground(Color.GREEN);yes.setForeground(Color.BLUE);no.setForeground(Color.DARK_GRAY);yes.setBackground(Color.green);res.setBackground(Color.green);lost
39、.setBackground(Color.green);select.setBackground(Color.green);my.setBackground(Color.green);no.setBackground(Color.RED);res.addActionListener(this);lost.addActionListener(this);select.addActionListener(this);yes.addActionListener(this);no.addActionListener(this);my.addActionListener(this);j.setVisib
40、le(true);j.setBackground(Color.GREEN);j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);GregorianCalendar calender=new GregorianCalendar();int year=calender.get(Calendar.YEAR);int month=calender.get(Calendar.MONTH)+1;int day=calender.get(Calendar.DAY_OF_MONTH);String da=("現(xiàn)在是"+year+"年&
41、quot;+month+"月"+day+"日啦!你準(zhǔn)備好了么!");date.setText(da);Date date = new Date();String timeStr = date.toString().substring(11, 19);String str=(year+"年"+month+"月"+day+"日"+timeStr);time.setText(str);Scoll=new Thread(this);coll=new Thread(this);Scoll.start();
42、coll.start();public void run()if(Thread.currentThread()=Scoll)while(true)int x=wel.getBounds().x;int y = 150;x +=9;wel.setLocation(x, y+25);date.setLocation(x-20, y-15);if (x > 380) x =10;wel.setLocation(x, y+20);date.setLocation(x, y-29);tryThread.sleep(100);catch(InterruptedException er)er.prin
43、tStackTrace();if(stop=true)return;else if(Thread.currentThread()=coll)try Thread.sleep(1000);catch(InterruptedException er)er.printStackTrace();if(on=true)return; public void actionPerformed(ActionEvent e) if(e.getSource()=no)stop=false;dispose();on=true;System.exit(0);else if(e.getSource()=yes)JOpt
44、ionPane.showMessageDialog(this,"親,這是網(wǎng)絡(luò)121班學(xué)號(hào)為:20121113020的馬琳,也就是在下" +"編寫的課程設(shè)計(jì)題目:餐卡信息管理系統(tǒng)!");else if(e.getSource()=res)new Into();else if(e.getSource()=lost)new Lost();else if(e.getSource()=select )new Find();else if(e.getSource()=my )tryClass.forName(DBDriver);con = DriverManager
45、.getConnection(connectionStr,"root","123malin");String select = "select * from cante where id = 20121113020"stmt = con.prepareStatement(select);rs = stmt.executeQuery();String t1,t2,t3,t4;if(rs.next()t1= rs.getString("id");t2= rs.getString("name");t3
46、 = rs.getString("sur");t4 = rs.getString("only");JOptionPane.showMessageDialog(this, "n卡號(hào):"+t1+"n姓名:"+t2+"n剩余額度:"+t3+"n最高消費(fèi):"+t4);con.close();stmt.close();catch(ClassNotFoundException er)er.printStackTrace();catch(SQLException er)er.printSt
47、ackTrace();掛失主頁面:public class Lost extends JFrame implements ActionListenerString DBDriver = "com.mysql.jdbc.Driver"String connectionStr = "jdbc:mysql:/localhost:3306/canterbury"Connection con = null;PreparedStatement stmt = null;ResultSet rs = null;JButton yes,no;JPanel p1,p2,p3
48、;JLabel label,timer ,time,input;JTextField in;Lost() JFrame j=new JFrame("掛失卡信息:");label=new JLabel("親,掛失后就不能再用咯!記得哦!");input=new JLabel("請輸入卡號(hào):");in=new JTextField("");p1=new JPanel();p2=new JPanel();p3=new JPanel();timer=new JLabel("親,您目前訪問的時(shí)間是:");
49、time=new JLabel();setLayout(new FlowLayout();setBounds(500, 50, 250, 100);yes=new JButton("確定掛失");no=new JButton("退出系統(tǒng)");p3.add(timer);p3.add(time);p2.add(label);p1.add(input);p1.add(in);p1.add(yes);p1.add(no);p1.setLayout(new GridLayout(2,2);p3.setLayout(new FlowLayout();j.setBo
50、unds(500, 200, 450, 400);j.add(BorderLayout.NORTH,p1);j.add(BorderLayout.CENTER,p2);j.add(BorderLayout.SOUTH,p3);Font into = new Font("楷體",Font.BOLD,15);Font labell = new Font("楷體",Font.BOLD,25);yes.setFont(into);label.setFont(labell);no.setFont(into);input.setFont(into);timer.se
51、tFont(into);setLayout(new FlowLayout();yes.setForeground(Color.BLUE);label.setForeground(Color.GRAY);no.setForeground(Color.DARK_GRAY);yes.setBackground(Color.green);no.setBackground(Color.RED);yes.addActionListener(this);no.addActionListener(this);j.setVisible(true);j.setBackground(Color.GREEN);j.s
52、etDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Date date = new Date();String timeStr = date.toString().substring(11, 19);GregorianCalendar calender=new GregorianCalendar();int year=calender.get(Calendar.YEAR);int month=calender.get(Calendar.MONTH)+1;int day=calender.get(Calendar.DAY_OF_MONTH);String
53、str=(year+"年"+month+"月"+day+"日"+timeStr);time.setText(str);System.out.println("現(xiàn)在北京時(shí)間是"+str);public void actionPerformed(ActionEvent e) if(e.getSource() = no) dispose(); JOptionPane.showMessageDialog(this, "親,下次再見!"); System.exit(0); else if(e.getSource() = yes) System.out.println("現(xiàn)在進(jìn)行掛失餐卡操作!"); if( in.getText().equals("") JOptionPane.sho
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版房地產(chǎn)尾款支付及產(chǎn)權(quán)過戶協(xié)議3篇
- 二零二五年車輛抵押維修保養(yǎng)合同3篇
- 二零二五版貿(mào)促會(huì)棉花期貨交易專區(qū)棉花現(xiàn)貨買賣合同3篇
- 二零二五年度企業(yè)法律風(fēng)險(xiǎn)防控培訓(xùn)合同3篇
- 主體架構(gòu)工程分包合同(2024年度)一
- 專屬分店管理承包協(xié)議模板版A版
- 二零二五年度多人合伙經(jīng)營酒吧合作協(xié)議范本3篇
- 二零二五年度礦山車輛運(yùn)輸安全責(zé)任合同范本3篇
- 2025年度勞動(dòng)者工傷賠償協(xié)議標(biāo)準(zhǔn)版4篇
- 專屬會(huì)員卡轉(zhuǎn)讓條款合同版B版
- 《健康體檢知識(shí)》課件
- 生產(chǎn)計(jì)劃主管述職報(bào)告
- 名表買賣合同協(xié)議書
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
- 練字本方格模板
評論
0/150
提交評論