第一篇:軟件工程課程設(shè)計——物業(yè)管理系統(tǒng)
軟件工程
——物業(yè)管理系統(tǒng)的開發(fā)
學(xué)生姓名: 武鵬艷 喬海亮
學(xué)生班級: 軟件工程122002班
學(xué)生學(xué)號: 201220040220 201220040213 指導(dǎo)老師: 潘理虎 日 期: 2014.6.20
目錄
一.背景分析...............................................................................................1 二.系統(tǒng)設(shè)計問題定義..............................................................................1 三.系統(tǒng)分析.............................................................................................1
1、現(xiàn)行系統(tǒng)分析................................................................................1
2、系統(tǒng)可行性分析............................................................................1 四.系統(tǒng)描述.............................................................................................2
1、系統(tǒng)需求具體描述........................................................................2
2、系統(tǒng)功能具體描述........................................................................3 五.系統(tǒng)流程圖設(shè)計................................................................................3 六.系統(tǒng)功能模塊圖設(shè)計........................................................................4
1、系統(tǒng)性能需求分析......................................................................4
2、系統(tǒng)功能需求分析......................................................................5 七.系統(tǒng)功能模型設(shè)計............................................................................5 八.系統(tǒng)所涉及的實(shí)體聯(lián)系設(shè)計............................................................5 九. 系統(tǒng)狀態(tài)圖設(shè)計..............................................................................6 十. 系統(tǒng)數(shù)據(jù)流圖設(shè)計..........................................................................7 十一.系統(tǒng)人機(jī)交互界面的設(shè)計............................................................9 十二. 系統(tǒng)設(shè)計的實(shí)現(xiàn)........................................................................11 十三. 系統(tǒng)設(shè)計的代碼附錄................................................................20
一.背景分析
隨著市場經(jīng)濟(jì)的發(fā)展和人們生活水平的提高,小區(qū)物業(yè)方面繳費(fèi)方面越來越多,但繳費(fèi)難的問題繼續(xù)困擾著我們,需要有一個系統(tǒng)來實(shí)現(xiàn)銀行卡交水電費(fèi),實(shí)現(xiàn)小區(qū)管理而且小區(qū)用戶可以更好的維護(hù)小區(qū)各項(xiàng)物業(yè)管理業(yè)務(wù),處理工作,實(shí)現(xiàn)繳費(fèi)方便功能,就可以避免應(yīng)繳費(fèi)不及時而造成停電停水的情況發(fā)生。二.系統(tǒng)設(shè)計問題定義
1、實(shí)現(xiàn)對住戶水電使用信息管理。
2、實(shí)現(xiàn)住戶的信息查詢與更新。三.系統(tǒng)分析(1)現(xiàn)行系統(tǒng)分析
以往住戶的更替使水電費(fèi)管理有些混亂,不能順利收取費(fèi)用?,F(xiàn)在的系統(tǒng)會對小區(qū)水電管理存在的不完善之處做相應(yīng)的改進(jìn),及時提醒住戶繳費(fèi),而且對每戶人員及時更新并做詳細(xì)記錄,為操作人員做權(quán)限設(shè)置。
(2)系統(tǒng)可行性分析 A系統(tǒng)成本效益分析
1、貨幣的時間價值
假設(shè)生命周期為t年,編寫程序需m元,應(yīng)用程序后,每年可節(jié)省n元,年利率為p。
2、純收入
工程的純收入是:r=n/(1+p)+n/(1+p)2+??+n/(1+p)^n-m
3、投資回收率
m=F1/(1+j)+F2/(1+j)2+??+Fn/(1+j)^n(Fi是第i年底效益,j是投資回收率。)B系統(tǒng)可行性綜述
1、經(jīng)濟(jì)可行性:獲益是當(dāng)初投資總額的三倍或三倍以上,可以進(jìn)行投資。
2、技術(shù)可行性:該系統(tǒng)簡單、使用,且以現(xiàn)有的技術(shù)可以實(shí)現(xiàn)系統(tǒng)中的功能。
3、社會可行性:該系統(tǒng)面向全社會小區(qū)居民的物業(yè)管理,沒有負(fù)面影響,并且可以為社會帶來很高的效益。四.系統(tǒng)描述
(1)系統(tǒng)需求具體描述
所設(shè)計的物業(yè)管理系統(tǒng),它是由住戶信息管理,繳費(fèi)管理,投訴管理,樓房管理組成的網(wǎng)絡(luò)系統(tǒng)。a住戶信息管理
由住戶注冊,注冊姓名,聯(lián)系方式,住址,郵箱,入住時間。注冊成功后,由系統(tǒng)管理員統(tǒng)一管理,管理員可以進(jìn)行查詢,修改信息。住戶注冊成功可以進(jìn)行登錄系統(tǒng)進(jìn)行查詢,但是不可以修改。進(jìn)行信息的修改需要投訴給管理員,管理員進(jìn)行修改。b繳費(fèi)管理
由住戶執(zhí)行,住戶可以查詢水電費(fèi)使用情況,余額不足進(jìn)行繳費(fèi),進(jìn)入銀行繳費(fèi)界面,輸入賬號密碼,進(jìn)行繳費(fèi)。
c投訴管理
由管理員進(jìn)行查詢,用戶可以對小區(qū)物業(yè)管理水電費(fèi)物業(yè)部門投訴建議。管理員可以根據(jù)客戶要求,能對住戶水電費(fèi)信息、修改、查詢和刪除等操作,并且還要實(shí)現(xiàn)包括水、電、煤氣費(fèi)在內(nèi)的各項(xiàng)物業(yè)管理費(fèi)用的統(tǒng)計、查詢和報表生成。d住戶和管理員
住戶可以管理自己的信息,可以提交投訴信息,可以瀏覽收費(fèi)信息和繳費(fèi)信息。管理員可以對紀(jì)錄進(jìn)行增加、刪除、修改,管理投訴等更新操作。用戶進(jìn)入系統(tǒng)必須先輸入用戶名和密碼,按“確認(rèn)”按鈕后,系統(tǒng)辨別用戶身份,對合法用戶根據(jù)用戶的權(quán)限賦予相應(yīng)的使用功能。
(2)系統(tǒng)功能具體描述
小區(qū)物業(yè)管理系統(tǒng)具體實(shí)現(xiàn)以下功能:
1.對小區(qū)所有房屋資料的錄入和增,刪,改,查詢等功能的實(shí)現(xiàn)。
2.對本小區(qū)內(nèi)住戶的詳細(xì)資料的管理,包括增,刪,改,查詢等功能的實(shí)現(xiàn)。
3.實(shí)現(xiàn)物業(yè)設(shè)備管理,儀表包括水,電數(shù)據(jù)管理,收費(fèi)管理。儀表數(shù)據(jù)管理模塊管理每個住戶的水,電的資料,統(tǒng)計住戶每月的用量以及需要交納的費(fèi)用,收費(fèi)管理記錄物業(yè)公司對住戶的每一筆收費(fèi),包括水,電等使用費(fèi)用和物業(yè)管理費(fèi)用,余額不足進(jìn)行銀行卡充值。五.系統(tǒng)流程圖設(shè)計
六.系統(tǒng)功能模塊圖設(shè)計
1、系統(tǒng)性能需求分析
所設(shè)計的系統(tǒng)主要涉及到四大部分:系統(tǒng)管理,基本信息管理,水電管理,費(fèi)用查詢。
(1)系統(tǒng)管理:管理系統(tǒng)操作人員,設(shè)置操作人員口令和權(quán)限。在滿足不同系統(tǒng)用戶的操作需求的基礎(chǔ)上,提高系統(tǒng)的安全性。(2)基本信息管理:維護(hù)小區(qū)基本信息。
住戶信息管理:入住登記,信息修改,遷出注銷,查詢。房屋信息管理:房屋信息添加,修改,刪除,查詢。戶型信息管理:小區(qū)戶型登記。(3)水電服務(wù)管理:完成小區(qū)各種服務(wù),例如物業(yè)費(fèi)用繳費(fèi)管理功能。
(4)查詢統(tǒng)計管理:本系統(tǒng)中各種數(shù)據(jù)的統(tǒng)計與查詢功能。
2、系統(tǒng)功能需求分析
小區(qū)物業(yè)管理水電費(fèi)物業(yè)部門用來對住宅小區(qū)內(nèi)水費(fèi),電費(fèi),繳費(fèi)情況信息管理系統(tǒng)。根據(jù)客戶要求,系統(tǒng)要能對住戶水電費(fèi)信息、修改、查詢和刪除等操作,并且還要實(shí)現(xiàn)包括水、電、煤氣費(fèi)在內(nèi)的各項(xiàng)物業(yè)管理費(fèi)用的統(tǒng)計、查詢和報表生成。因此,實(shí)現(xiàn)該物業(yè)管理系統(tǒng)功能模塊圖如下
七.系統(tǒng)功能模型設(shè)計
八.系統(tǒng)所涉及的實(shí)體聯(lián)系設(shè)計
九.系統(tǒng)狀態(tài)圖設(shè)計(1)總狀態(tài)圖設(shè)計
(2)系統(tǒng)銀行卡模塊狀態(tài)設(shè)計
十.系統(tǒng)數(shù)據(jù)流圖設(shè)計
(1)系統(tǒng)數(shù)據(jù)流程圖
(2)系統(tǒng)數(shù)據(jù)字典(1)
名字:用水信息記錄表 別名:用水信息
描述:水量剩余小于臨界值時報告住戶
定義:用水信息記錄表=戶主信息+水量使用費(fèi)+收費(fèi)日期
位置:輸出打印機(jī)(2)
名字:用電信息表 別名:電量信息
描述:剩余電量小于臨界值時報告住戶
定義:用電信息表=戶主信息+電量使用費(fèi)+收費(fèi)日期 位置:輸出打印機(jī)(3)
名字:住戶信息表 描述:每戶人員的詳細(xì)信息
定義:住戶信息表=住戶姓名+性別+年齡+聯(lián)系方式+證件號碼 位置:輸出打印機(jī),顯示在屏幕 十一.系統(tǒng)人機(jī)交互界面的設(shè)計 ①登陸界面的設(shè)計
②住戶界面的設(shè)計
③管理員界面的設(shè)計
十二.系統(tǒng)設(shè)計的實(shí)現(xiàn)(1)數(shù)據(jù)庫載入
(2).住戶登陸成功界面
(3)住戶界面
(4)住戶修改信息
(5)住戶查詢物業(yè)信息
(6)住戶反饋
(7)住戶繳費(fèi)
(8)銀行卡登陸
(9)銀行卡登陸成功
(10)銀行卡繳費(fèi)界面
(11)銀行卡修改密碼界面
(12)管理員登陸
(13)管理員界面
(14)管理員查詢住戶信息界面
(15)管理員修改住戶信息
(16)管理員更新物業(yè)信息
(17)管理員添加管理員信息
(18)管理員接收反饋
(19)管理員接收反饋界面
十三.系統(tǒng)設(shè)計的代碼附錄
package xuesheng;
import javax.swing.*;import java.awt.event.*;import java.sql.*;
public class systems extends JFrame implements ActionListener { static systems ss;
JPanel panel = new JPanel();JLabel label1 = new JLabel(“輸入姓名:”);JTextField name = new JTextField();JLabel label2 = new JLabel(“密 碼:”);JPasswordField pwd = new JPasswordField();JButton Enter = new JButton(“登錄”);JButton Exit = new JButton(“退出”);String url = “F:JAVA背景圖片4.jpg”;ButtonGroup bgp = new ButtonGroup();JRadioButton ihb = new JRadioButton(“住戶”);JRadioButton mg = new JRadioButton(“管理員”);
public systems(){
super(“物業(yè)系統(tǒng)登錄”);
this.setResizable(false);JLabel img = new JLabel(new ImageIcon(url));
img.setBounds(0,0,500,100);
panel.add(img);
ihb.setBounds(165,210,70,20);
mg.setBounds(265,210,70,20);
bgp.add(ihb);
bgp.add(mg);
panel.add(ihb);
panel.add(mg);
Enter.setBounds(150,250,80,20);
Exit.setBounds(270,250,80,20);
Enter.addActionListener(this);
Exit.addActionListener(this);
panel.add(Enter);
panel.add(Exit);panel.setLayout(null);
this.add(panel);20
label1.setBounds(135,130,100,25);
panel.add(label1);name.setBounds(265,130,100,25);
panel.add(name);
label2.setBounds(135,165,100,25);
panel.add(label2);pwd.setBounds(265,165,100,25);
panel.add(pwd);
this.setBounds(100,100,500,350);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
public void actionPerformed(ActionEvent e){
if(e.getSource()==Enter)
{
String username , password;
username = name.getText();
password = pwd.getText();
try
{
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
}
catch(ClassNotFoundException ce)
{
JOptionPane.showMessageDialog(ss,ce.getMessage());
}
if(ihb.isSelected())
{
try
{
//
Connection con = DriverManager.getConnection(“jdbc:sqlserver://localhost:1433;DatabaseName=物業(yè)管理系統(tǒng)”,“sa”,“11111111”);
String sql = “select * from inhabitant where 姓名=? and 密碼=?”;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
if(rs!=null)
{
JOptionPane.showMessageDialog(ss,“登陸成功”);
new inhabitants();
}
else
{
JOptionPane.showMessageDialog(ss,“登錄失敗”);
}
rs.close();
pstmt.close();
}
catch(SQLException se)
{
JOptionPane.showMessageDialog(ss,se.getMessage());
}
}
else if(mg.isSelected())
{
try
{
Connection con = DriverManager.getConnection(“jdbc:sqlserver://localhost:1433;DatabaseName=物業(yè)管理系統(tǒng)”,“sa”,“11111111”);
String sql = “select * from manager where 姓名=? and 密碼=?”;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
if(rs!=null)
{
JOptionPane.showMessageDialog(ss,“登陸成功”);
new managers();
}
else
{
JOptionPane.showMessageDialog(ss,“登錄失敗”);
}
rs.close();
pstmt.close();22
}
catch(SQLException se)
{
JOptionPane.showMessageDialog(ss,se.getMessage());
}
}
}
else
{
System.exit(0);
} }
public static void main(String[] args){
new systems();} }
package xuesheng;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class inhabitants extends JFrame implements ActionListener { JPanel panel=new JPanel();JMenuBar jmb = new JMenuBar();JMenu Message = new JMenu(“信息”);JMenu Payment = new JMenu(“繳費(fèi)”);JMenu back = new JMenu(“反饋”);JMenuItem Item1 = new JMenuItem(“修改住戶信息”);JMenuItem Item2 = new JMenuItem(“查詢物業(yè)信息”);JMenuItem Item3 = new JMenuItem(“發(fā)送反饋”);JMenuItem Item4 = new JMenuItem(“交電費(fèi)”);JMenuItem Item5 = new JMenuItem(“交水費(fèi)”);String url = “F:JAVA背景圖片36.jpg”;public inhabitants(){ 23
super(“住戶界面”);
this.setSize(500,400);
this.setVisible(true);JLabel img = new JLabel(new ImageIcon(url));
img.setBounds(0,0,500,600);
panel.add(img);
panel.setLayout(null);
this.add(panel);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setJMenuBar(jmb);
jmb.add(Message);
jmb.add(back);
jmb.add(Payment);
Message.add(Item1);
Message.add(Item2);
back.add(Item3);
Payment.add(Item4);
Payment.add(Item5);
Item1.addActionListener(this);
Item2.addActionListener(this);
Item3.addActionListener(this);
Item4.addActionListener(this);
Item5.addActionListener(this);}
public void actionPerformed(ActionEvent e){
if(e.getSource()==Item1)
{
AlterInhabitantInformation ai = new AlterInhabitantInformation();
}
else if(e.getSource()==Item2)
{
Serch ser = new Serch();
}
else if(e.getSource()==Item3)
{
tickling ib=new tickling();
}
else if(e.getSource()==Item4)24
{
ATM atm=new ATM();
}
else if(e.getSource()==Item5)
{
ATM atm=new ATM();
} }
public static void main(String[] args){
inhabitants stu = new inhabitants();} }
package xuesheng;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class managers extends JFrame implements ActionListener { JMenuBar bar = new JMenuBar();JMenu menu1 = new JMenu(“信息”);JMenu menu2 = new JMenu(“反饋”);JMenuItem item1 = new JMenuItem(“查詢住戶信息”);JMenuItem item2 = new JMenuItem(“修改住戶信息”);JMenuItem item3 = new JMenuItem(“更新物業(yè)信息”);JMenuItem item4 = new JMenuItem(“接收反饋”);JMenuItem item5 = new JMenuItem(“添加管理員信息”);String url = “F:JAVA背景圖片36.jpg”;JPanel jpl = new JPanel();
public managers(){
super(“管理員界面”);
this.setSize(500,300);
this.setResizable(false);25
} this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setJMenuBar(bar);this.add(jpl);jpl.setLayout(null);bar.add(menu1);bar.add(menu2);menu1.add(item1);menu1.add(item2);menu1.add(item3);menu1.add(item5);menu2.add(item4);item1.addActionListener(this);item2.addActionListener(this);item3.addActionListener(this);item4.addActionListener(this);item5.addActionListener(this);public void actionPerformed(ActionEvent e){ if(e.getSource()==item1){
ReferMsg rm = new ReferMsg();} if(e.getSource()==item2){
AlterInhabitantInformations ai = new AlterInhabitantInformations();} else if(e.getSource()==item3){
AddMsg sc = new AddMsg();} else if(e.getSource()==item4){
tickling tl=new tickling();} else if(e.getSource()==item5){
managerinformation mf=new managerinformation();} } 26
public static void main(String[] args){
managers mng = new managers();} }
package xuesheng;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;import java.awt.font.*;import java.sql.*;
public class ReferMsg extends JFrame implements ActionListener { static ReferMsg s;JLabel title = new JLabel(“查詢住戶信息”,JLabel.CENTER);Font f = new Font(“楷體”,Font.BOLD+Font.ITALIC,16);JPanel jpl = new JPanel();JLabel label1 = new JLabel(“請輸入門牌號:”,JLabel.CENTER);JTextField num = new JTextField();JButton serch = new JButton(“查詢”);JButton fangqi = new JButton(“返回”);JLabel label2 = new JLabel(“門牌號:”,JLabel.LEFT);JLabel label3 = new JLabel(“姓名:”,JLabel.LEFT);JLabel label4 = new JLabel(“性別:”,JLabel.LEFT);JLabel label5 = new JLabel(“年齡:”,JLabel.LEFT);JLabel label6 = new JLabel(“籍貫:”,JLabel.LEFT);JLabel label7 = new JLabel(“身份證號:”,JLabel.LEFT);JLabel label8 = new JLabel(“電話:”,JLabel.LEFT);JLabel label9 = new JLabel(“職業(yè):”,JLabel.LEFT);
JTextField[] txt ={ new JTextField(), new JTextField(), new JTextField(), new JTextField(), new JTextField(),new JTextField(), new JTextField(),new JTextField()};static int p = 140;
public ReferMsg()27
{ super(“查詢住戶信息”);this.setResizable(false);this.setSize(500,550);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);title.setFont(f);this.add(jpl);jpl.setLayout(null);title.setBounds(80,20,300,20);jpl.add(title);label1.setBounds(100,60,90,20);jpl.add(label1);num.setBounds(200,60,140,20);jpl.add(num);serch.setBounds(130,100,90,20);fangqi.setBounds(240,100,90,20);jpl.add(serch);jpl.add(fangqi);serch.addActionListener(this);fangqi.addActionListener(this);label2.setBounds(100,140,140,20);label3.setBounds(100,180,140,20);label4.setBounds(100,220,140,20);label5.setBounds(100,260,140,20);label6.setBounds(100,300,140,20);label7.setBounds(100,340,140,20);label8.setBounds(100,380,140,20);label9.setBounds(100,420,140,20);jpl.add(label2);jpl.add(label3);jpl.add(label4);jpl.add(label5);jpl.add(label6);jpl.add(label7);jpl.add(label8);jpl.add(label9);
for(int i = 0;i txt[i].setBounds(200,p,140,20); jpl.add(txt[i]); p=p+40;} 28 } public void actionPerformed(ActionEvent e){ if(e.getSource()==fangqi) { this.setVisible(false); new managers(); } if(e.getSource()==serch) { String mp = num.getText(); try { Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); } catch(ClassNotFoundException ce) { JOptionPane.showMessageDialog(s,ce.getMessage()); } try { Connection con = DriverManager.getConnection(“jdbc:sqlserver://localhost:1433;DatabaseName=物業(yè)管理系統(tǒng)”,“sa”,“11111111”); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(“select * from inhabitant where inhabitant.門牌號 ='” + mp + “' AND inhabitant.門牌號 = inhabitant.門牌號”); while(rs.next()) { for(int i = 0;i { txt[i].setText(rs.getString(i+1)); } } } catch(SQLException se) { JOptionPane.showMessageDialog(s,se.getMessage()); } } else { for(int i = 0;i { txt[i].setText(“"); } num.setText(”“); } } public static void main(String[] args){ ReferMsg s = new ReferMsg();} } package xuesheng; import java.awt.*; import javax.swing.*; import java.awt.event.*;import java.sql.*; public class Serch extends JFrame implements ActionListener { /*查詢學(xué)生信息控件*/ static Serch s;JPanel jpl = new JPanel();JLabel SCH = new JLabel(”物業(yè)信息“,JLabel.CENTER);JLabel label1 = new JLabel(”請輸入門牌號:“,JLabel.CENTER);JButton serch = new JButton(”查詢“);JLabel label2 = new JLabel(”姓名:“,JLabel.CENTER);JLabel label3 = new JLabel(”電量:“,JLabel.CENTER);JLabel label4 = new JLabel(”水量:“,JLabel.CENTER);JLabel label5 = new JLabel(”性別:“,JLabel.CENTER);ButtonGroup bgp = new ButtonGroup();JRadioButton man = new JRadioButton(”男“);JRadioButton women = new JRadioButton(”女“);JTextField num = new JTextField();JTextField nam = new JTextField();JTextField ele = new JTextField();30 JTextField wat = new JTextField();JButton fangqi = new JButton(”返回“);public Serch(){ this.setSize(500,400);this.setVisible(true);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.add(jpl);jpl.setLayout(null);serch.addActionListener(this);fangqi.addActionListener(this);/*查詢面板*/ SCH.setBounds(100,20,300,20);jpl.add(SCH);label1.setBounds(100,60,100,20);jpl.add(label1);num.setBounds(220,60,140,20);jpl.add(num);serch.setBounds(120,100,90,20);fangqi.setBounds(260,100,90,20);jpl.add(serch);jpl.add(fangqi);label2.setBounds(100,140,70,20);jpl.add(label2);nam.setBounds(190,140,140,20);jpl.add(nam);label5.setBounds(100,180,70,20);jpl.add(label5);man.setBounds(205,180,60,20);women.setBounds(285,180,60,20);bgp.add(man);bgp.add(women);jpl.add(man);jpl.add(women);label3.setBounds(100,220,70,20);jpl.add(label3);ele.setBounds(190,220,140,20);jpl.add(ele);label4.setBounds(100,260,70,20);jpl.add(label4);wat.setBounds(190,260,140,20);jpl.add(wat);31 } public void actionPerformed(ActionEvent e){ if(e.getSource()==fangqi) { this.setVisible(false); new inhabitants(); } String mp = num.getText(); if(e.getSource()==serch) { try { Class.forName(”com.microsoft.sqlserver.jdbc.SQLServerDriver“); } catch(ClassNotFoundException ce) { JOptionPane.showMessageDialog(s,ce.getMessage()); } try { Connection con = DriverManager.getConnection(”jdbc:sqlserver://localhost:1433;DatabaseName=物業(yè)管理系統(tǒng)“,”sa“,”11111111“); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(”select * from PropertyInformation where 門牌號 = '“ + mp + ”'“); while(rs.next()) { nam.setText(rs.getString(”姓名“)); if(rs.getString(”性別“).equals(”男“)) { man.setSelected(true); } else { women.setSelected(true); } ele.setText(rs.getString(”電量“)); wat.setText(rs.getString(”水量“)); } } catch(SQLException se)32 { JOptionPane.showMessageDialog(s,se.getMessage()); } } } public static void main(String[] args){ Serch sch = new Serch();} } package xuesheng;import java.awt.*;import java.awt.event.*;class Selection extends Frame implements ActionListener{ Button button1,button2,button3,button4,button5;Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act; public Selection(){} Selection(String s,Account act){ super(s); this.act=act; this.setLayout(null); this.setLayout(new GridLayout(6,1)); p.add(new Label(”請選擇你要的服務(wù)“)); this.add(p);/*各種服務(wù)功能*/ button1 = new Button(”繳水費(fèi)“); p1.add(button1); this.add(p1); button2 = new Button(”交電費(fèi)“); p2.add(button2); this.add(p2); button3 = new Button(”查詢“);33 p3.add(button3);this.add(p3);button4 = new Button(”退出“);p4.add(button4);this.add(p4);button5 = new Button(”修改密碼“);p5.add(button5);this.add(p5);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } });button1.addActionListener(this);button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);setBounds(150,150,225,275);setVisible(true);validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==button1){//取款 GetWater gw = new GetWater(”交水費(fèi)“,act); } if(e.getSource()==button2){//取款 GetBalance gb = new GetBalance(”交電費(fèi)“,act); } if(e.getSource()==button3){//查詢余額 Query q =new Query(”查詢余額“,act);} else if(e.getSource()==button4){//退出 System.exit(0); dispose();} else if(e.getSource()==button5){//修改密碼 Account 修改密碼; ChangePassword cp = new ChangePassword(”修改密碼“,act);34 dispose(); } } } package xuesheng;import java.awt.Color;import java.awt.Font; import javax.swing.*;public class tickling { public tickling(){ //創(chuàng)建JFrame對象 JFrame f=new JFrame(”反饋“);//創(chuàng)建具有指定文本的JLbabel對象 JLabel Label=new JLabel(”反饋:“);Font ft = new Font(”黑體“ , Font.BOLD , 24); Label.setFont(ft); Label.setForeground(Color.black);//創(chuàng)建列數(shù)為20的JTextField對象 JTextField t=new JTextField(20);JPanel panel=new JPanel(); panel.add(Label);t.setBounds(70,100,300,120);panel.add(t);Font fo = new Font(”黑體“ , Font.BOLD , 24);t.setFont(fo);Label.add(t);f.setVisible(true); //將JLabel組件添加到JFrame窗體上 f.getContentPane().add(Label);f.getContentPane().add(Label);f.setSize(400,350);f.setVisible(true);} public static void main(String[] args){ 35 tickling tl = new tickling();} } package xuesheng; import java.awt.*; import javax.swing.*; import java.awt.event.*;import java.sql.*; public class AlterInhabitantInformation extends JFrame implements ActionListener { static AlterInhabitantInformation ss;JLabel[] label = {new JLabel(”門牌號:“), new JLabel(”姓名:“), new JLabel(”性別:“), new JLabel(”年齡:“), new JLabel(”籍貫:“), new JLabel(”身份證號:“), new JLabel(”電話:“), new JLabel(”職業(yè):“)};JTextField[] txt = {new JTextField(), new JTextField(), new JTextField(), new JTextField(), new JTextField(),new JTextField(), new JTextField(),new JTextField()};JButton add = new JButton(”確認(rèn)“);JButton fangqi = new JButton(”返回“);JPanel jpl = new JPanel();JLabel title = new JLabel(”修改住戶信息“ , JLabel.CENTER);Font f = new Font(”黑體“ , Font.BOLD , 16);int s = 100; public AlterInhabitantInformation(){ super(”修改住戶信息“); this.setResizable(false); this.setSize(500,600); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); this.add(jpl); add.addActionListener(this); fangqi.addActionListener(this); jpl.setLayout(null);36 title.setBounds(150,40,200,20); title.setFont(f); title.setForeground(Color.red); jpl.setBackground(Color.LIGHT_GRAY); jpl.add(title); for(int i = 0;i { label[i].setBounds(100,s,140,20); jpl.add(label[i]); txt[i].setBounds(260,s,140,20); jpl.add(txt[i]); s=s+40; } add.setBounds(150,s,80,20); fangqi.setBounds(250,s,80,20); jpl.add(add); jpl.add(fangqi);} public void actionPerformed(ActionEvent e){ if(e.getSource()==fangqi) { this.setVisible(false); new inhabitants(); } if(e.getSource()==add) { try { Class.forName(”com.microsoft.sqlserver.jdbc.SQLServerDriver“); } catch(ClassNotFoundException ce) { JOptionPane.showMessageDialog(ss,ce.getMessage()); } try { Connection con = DriverManager.getConnection(”jdbc:sqlserver://localhost:1433;DatabaseName=物業(yè)管理系統(tǒng)“,”sa“,”11111111“); Statement stmt = con.createStatement(); int a = stmt.executeUpdate(”insert into inhabitant(門牌號,姓名,性別,年齡,籍貫,身份證號,電話,職 37 業(yè))values('“+txt[0].getText()+”','“+txt[1].getText()+”','“+txt[2].getText()+”','“+txt[3].getText()+”','“+txt[4].getText()+”','“+txt[5].getText()+”','“+txt[6].getText()+”','“+txt[7].getText()+”')“); if(a==1) { JOptionPane.showMessageDialog(ss,”添加成功“); } else { JOptionPane.showMessageDialog(ss,”添加失敗“); } } catch(SQLException se) { JOptionPane.showMessageDialog(ss,se.getMessage()); } } else { for(int i = 0;i { txt[i].setText(”“); txt[0].requestFocus(); } } } public static void main(String[] args){ AlterInhabitantInformation as = new AlterInhabitantInformation();} } package xuesheng; import java.awt.*; import javax.swing.*; import java.awt.event.*;import java.sql.*;38 public class AlterInhabitantInformations extends JFrame implements ActionListener { static AlterInhabitantInformation ss;JLabel[] label = {new JLabel(”門牌號:“), new JLabel(”姓名:“), new JLabel(”性別:“), new JLabel(”年齡:“), new JLabel(”籍貫:“), new JLabel(”身份證號:“), new JLabel(”電話:“), new JLabel(”職業(yè):“)};JTextField[] txt = {new JTextField(), new JTextField(), new JTextField(), new JTextField(), new JTextField(),new JTextField(), new JTextField(),new JTextField()};JButton add = new JButton(”確認(rèn)“);JButton fangqi = new JButton(”返回“);JPanel jpl = new JPanel();JLabel title = new JLabel(”修改住戶信息“ , JLabel.CENTER);Font f = new Font(”黑體“ , Font.BOLD , 16);int s = 100; public AlterInhabitantInformations(){ super(”修改住戶信息“); this.setResizable(false); this.setSize(500,600); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); this.add(jpl); add.addActionListener(this); fangqi.addActionListener(this); jpl.setLayout(null); title.setBounds(150,40,200,20); title.setFont(f); title.setForeground(Color.red); jpl.setBackground(Color.LIGHT_GRAY); jpl.add(title); for(int i = 0;i { label[i].setBounds(100,s,140,20); jpl.add(label[i]); txt[i].setBounds(260,s,140,20); jpl.add(txt[i]); s=s+40; } add.setBounds(150,s,80,20); fangqi.setBounds(250,s,80,20); jpl.add(add);39 jpl.add(fangqi);} public void actionPerformed(ActionEvent e){ if(e.getSource()==fangqi) { this.setVisible(false); new managers(); } if(e.getSource()==add) { try { Class.forName(”com.microsoft.sqlserver.jdbc.SQLServerDriver“); } catch(ClassNotFoundException ce) { JOptionPane.showMessageDialog(ss,ce.getMessage()); } try { Connection con = DriverManager.getConnection(”jdbc:sqlserver://localhost:1433;DatabaseName=物業(yè)管理系統(tǒng)“,”sa“,”11111111“); Statement stmt = con.createStatement(); int a = stmt.executeUpdate(”insert into inhabitant(門牌號,姓名,性別,年齡,籍貫,身份證號,電話,職業(yè))values('“+txt[0].getText()+”','“+txt[1].getText()+”','“+txt[2].getText()+”','“+txt[3].getText()+”','“+txt[4].getText()+”','“+txt[5].getText()+”','“+txt[6].getText()+”','“+txt[7].getText()+”')“); if(a==1) { JOptionPane.showMessageDialog(ss,”添加成功“); } else { JOptionPane.showMessageDialog(ss,”添加失敗“); } } catch(SQLException se) { JOptionPane.showMessageDialog(ss,se.getMessage()); } 40 } else { for(int i = 0;i { txt[i].setText(”“); txt[0].requestFocus(); } } } } package xuesheng; import javax.swing.*; import java.awt.event.*;import java.sql.*; public class AddMsg extends JFrame implements ActionListener { static AddMsg s;/*添加住戶信息控件*/ JPanel jpl = new JPanel();JLabel label1 = new JLabel(”更新物業(yè)信息“,JLabel.CENTER);JLabel label2 = new JLabel(”門牌號:“,JLabel.CENTER);JLabel label3 = new JLabel(”姓名:“,JLabel.CENTER);JLabel label4 = new JLabel(”性別:“,JLabel.CENTER);JLabel label5 = new JLabel(”電量:“,JLabel.CENTER);JLabel label6 = new JLabel(”水量:“,JLabel.CENTER);JTextField num = new JTextField(2);JTextField nam = new JTextField(4);ButtonGroup bgp = new ButtonGroup();JRadioButton man = new JRadioButton(”男“);JRadioButton women = new JRadioButton(”女“);JTextField ele = new JTextField();JTextField wat = new JTextField();JButton fangqi = new JButton(”返回“);JButton addmsg = new JButton(”添加“); public AddMsg()41 { } super(”更新物業(yè)信息“);this.setResizable(false);this.setSize(500,400);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.add(jpl);jpl.setLayout(null);addmsg.addActionListener(this);fangqi.addActionListener(this);/*插入面板*/ label2.setBounds(100,50,70,20);jpl.add(label2);num.setBounds(190,50,140,20);jpl.add(num); label3.setBounds(100,90,70,20);jpl.add(label3);nam.setBounds(190,90,140,20);jpl.add(nam); label4.setBounds(100,130,70,20);jpl.add(label4);man.setBounds(190,130,60,20);women.setBounds(270,130,60,20);jpl.add(man);jpl.add(women);bgp.add(man);bgp.add(women);label5.setBounds(100,170,70,20);jpl.add(label5);ele.setBounds(190,170,140,20);jpl.add(ele);label6.setBounds(100,210,70,20);jpl.add(label6);wat.setBounds(190,210,140,20);jpl.add(wat);fangqi.setBounds(120,250,90,20);addmsg.setBounds(240,250,90,20);jpl.add(fangqi);jpl.add(addmsg);42 public void actionPerformed(ActionEvent e){ if(e.getSource()==fangqi) { this.setVisible(false); new managers(); } if(e.getSource()==addmsg) { String sex; if(man.isSelected()) { sex=”男“; } else { sex=”女“; } try { Class.forName(”com.microsoft.sqlserver.jdbc.SQLServerDriver“); } catch(ClassNotFoundException ce) { JOptionPane.showMessageDialog(s,ce.getMessage()); } try { String number = num.getText(); String name = nam.getText(); String electyic = ele.getText(); String water = wat.getText(); //1注冊驅(qū)動 Connection con = DriverManager.getConnection(”jdbc:sqlserver://localhost:1433;DatabaseName=物業(yè)管理系統(tǒng)“,”sa“,”11111111“); String sql = ”insert into PropertyInformation(門牌號 ,姓名, 性別 , 電量 , 水量)values(?,?,?,?,?)“; //2預(yù)處理 PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, number); pstmt.setString(2, name); pstmt.setString(3, sex); pstmt.setString(4, electyic);43 pstmt.setString(5, water); //3執(zhí)行 int a = pstmt.executeUpdate(); if(a==1) { JOptionPane.showMessageDialog(s,”已成功添加“); } else { JOptionPane.showMessageDialog(s,”添加失敗“); } pstmt.close(); } catch(SQLException se) { System.out.println(1); JOptionPane.showMessageDialog(s,se.getMessage()); } } else { num.setText(”“); nam.setText(”“); ele.setText(”“); wat.setText(”“); num.requestFocus(); } } public static void main(String[] args){ new AddMsg();} } package xuesheng;public class ATM{ public ATM(){ new WindowBox(”登錄頁面“);} public static void main(String [] args){ ATM atm=new ATM();} 44 } package xuesheng;import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;import java.io.*;/*登陸頁面首窗口*/ class WindowBox extends Frame implements ActionListener{ Box baseBox,box1,box2;TextField tf1,tf2;Button button1;Button button2;WindowBox(String s){//構(gòu)造方法 super(s);tf1 = new TextField(6);tf2 = new TextField(6); box1= Box.createVerticalBox(); box1.add(new Label(”請輸入你的卡號“));//輸入卡號 box1.add(Box.createVerticalStrut(8)); box1.add(new Label(”請輸入你的支付密碼“));//輸入密碼 box2=Box.createVerticalBox(); box2.add(tf1); //box2.add(new TextField(16)); box2.add(Box.createVerticalStrut(8)); box2.add(tf2); //box2.add(new TextField(16)); baseBox=Box.createHorizontalBox(); baseBox.add(box1); baseBox.add(Box.createHorizontalStrut(10)); baseBox.add(box2); add(baseBox); button1= new Button(”確定“);//加入按鈕 button1.addActionListener(this); add(button1); button2 = new Button(”退卡“);//退卡按鈕 button2.addActionListener(this); add(button2); setLayout(new FlowLayout()); /*監(jiān)聽器*/ 45 this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); setBounds(220,225,225,275); setVisible(true);} public void actionPerformed(ActionEvent e){ Account act; String card;String pwd; act=new Account(”12“,”Devil“,”12“,50000);//初始化 /*選擇各種服務(wù)*/ if(e.getSource()== button1){ String number1,number2;//輸入的兩個卡號和密碼的變量 number1=tf1.getText(); number2=tf2.getText(); /*判斷兩次輸入的卡號和密碼是否正確*/ if((”123“.equals(number1))&&(”123“.equals(number2))) { Selection s = new Selection(”選擇服務(wù)“,act); }else{ dispose(); ErrorWarn ew = new ErrorWarn();//報輸入密碼或卡號不正確 } } if(e.getSource()==button2){ System.exit(0); dispose();//退出 } } } package xuesheng;import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;class Query extends Frame implements ActionListener{ 46 //Account act;Button button;Account act;Query(String s,Account act){//構(gòu)造函數(shù) super(s); this.act = act; button=new Button(”確定“); //TextField tf = new TextField(6); Panel panel1 = new Panel(); Panel panel = new Panel(); panel1.add(new Label(”你的余額為: “ + act.get_Money()));//查詢余額的方法 //panel1.add(tf); button.addActionListener(this); panel.add(button); this.add(panel); this.add(panel1); this.setLayout(new GridLayout(2,1)); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); setBounds(200,200,150,150); setVisible(true);} public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ dispose(); Selection s = new Selection(”選擇服務(wù)“,act);//返回選擇服務(wù) } } } package xuesheng;import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;47 class GetBalance extends Frame implements ActionListener{ Box baseBox, box1,box2;Button button;TextField tf;Account act;GetBalance(String s,Account act){//構(gòu)造函數(shù) super(s); this.act=act; button=new Button(”確定“); Panel panel = new Panel(); Panel panel1 = new Panel(); tf = new TextField(6); this.setLayout(new GridLayout(2,1)); panel1.add(new Label(”請輸入你想交電費(fèi)的數(shù)目")); panel1.add(tf); panel.add(button); this.add(panel1); this.add(panel); button.addActionListener(this); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); setBounds(200,200,150,150); this.setVisible(true);} public void actionPerformed(ActionEvent e){ //System.out.println(e.getActionCommand()); double money; money = Double.parseDouble(tf.getText().trim()); if(e.getSource()==button){ if(act.get_Money()<0){//判斷余額是否為負(fù) dispose(); ErrorWarn4 ew4 = new ErrorWarn4(); } else if(money<=act.get_Money()){//交費(fèi)的數(shù)額不大于余額 if((money%100!=0)||(money>=5000)){ dispose(); ErrorWarn6 ew6 = new ErrorWarn6(); } 48 銷售管理系統(tǒng)一.項(xiàng)目簡介 隨著計算機(jī)技術(shù)的迅猛發(fā)展,存在于網(wǎng)絡(luò)的企業(yè)銷售管理系統(tǒng)將逐步代替?zhèn)鹘y(tǒng)的管理模式進(jìn)入企業(yè)。為了更高效得完成銷售方面的工作,也可以有更多的時間處理更多的別的事務(wù),企業(yè)也將擺脫原有的管理形勢完全進(jìn)入信息化管理。銷售管理系統(tǒng)在企業(yè)的管理過程中起著巨大的作用 二.功能需求 一個銷售管理系統(tǒng),設(shè)計者的目標(biāo)是滿足公司運(yùn)營和日常管理的需要,具有對產(chǎn)品,客戶管理的功能??蛻舻卿涗N售管理系統(tǒng)進(jìn)行售后服務(wù)查詢,銷售員可以對銷售的產(chǎn)品進(jìn)行登記,并將銷售情況反饋給數(shù)據(jù)庫。為管理的方便性和信息傳遞的快速性提供了一個很好的平臺。系統(tǒng)開發(fā)的總體任務(wù)是實(shí)現(xiàn)售后服務(wù)及銷售登記自動化??傊?,銷售管理系統(tǒng)要實(shí)現(xiàn)登陸驗(yàn)證、商品銷售管理、商品銷售報表管理、客戶信息管理四大部分。1.客戶對功能的需求 1>查看自己的信息,了解自己近期的購買情況。2>查看產(chǎn)品的信息,熟悉產(chǎn)品情況。2>查看售后服務(wù)信息。 2.銷售人員對功能的需求 1>查看自己的信息,了解自己近期的銷售情況。2>查看產(chǎn)品的信息,熟悉產(chǎn)品情況。3>登記銷售產(chǎn)品。 4>添加新產(chǎn)品,并填寫產(chǎn)品相關(guān)信息。 3.售后服務(wù)人員對功能的需求 1>查看售后服務(wù)信息。2>添加售后服務(wù)信息。 三.分析模型時序圖 銷售管理系統(tǒng)頂層圖 1.客戶管理 第三層DFD圖 客戶管理子系統(tǒng) 2.銷售管理 第三層DFD圖 銷售管理子系統(tǒng) 3.售后服務(wù)管理 第三層DFD圖 售后服務(wù)管理子系統(tǒng) 4.客戶登錄動態(tài)時序圖為 四.模塊活動圖,登錄流程圖 1.注冊、登陸模塊 1>模塊功能描述 該模塊主要實(shí)現(xiàn)對用戶能否進(jìn)入系統(tǒng)的確認(rèn)以及對進(jìn)入系統(tǒng)的用戶權(quán)限的設(shè)定;因?yàn)楸鞠到y(tǒng)涉及到三類使用者,不可能每一類用戶都具有相同的操作權(quán)限,如前所說,必然會早成系統(tǒng)的混亂和崩潰,嚴(yán)重影響其安全性和有效性。所以采取在通常的注冊,登錄模式下加上用戶類型的選擇,非常簡潔地就完成了對用戶類型的區(qū)別及權(quán)限的劃分。2>在模塊的詳細(xì)設(shè)計后,便能得出實(shí)現(xiàn)該部分的具體流程,如圖 用戶注冊模塊程序流程圖 登錄模塊程序流程圖 活動圖為: 2.客戶管理模塊 1>模塊功能描述 顯示客戶的基本信息。庫戶可以查看自己的等級和交易次數(shù)。 2>在模塊的詳細(xì)設(shè)計后,便能得出實(shí)現(xiàn)該部分的具體流程,如圖3-8。 客戶管理模塊流程圖 活動圖為: 3.銷售管理模塊 >模塊功能描述 在這個模塊可以登記銷售記錄。并且在提交記錄時,更新數(shù)據(jù)庫: (1)更新客戶信息。如果是“老客戶”系統(tǒng)會按照客戶等級給出對應(yīng)的優(yōu)惠價。(2)更新產(chǎn)品信息。主要是更新該產(chǎn)品數(shù)量。 2>在模塊的詳細(xì)設(shè)計后,便能得出實(shí)現(xiàn)該部分的具體流程,如圖 銷售管理模塊流程圖 活動圖為 五.數(shù)據(jù)庫設(shè)計 1.客戶信息表 字段khidkhnamegyshjchzhgzhugteladrkhtelfaxbzh數(shù)據(jù)類型IntVarCharVarCharVarCharnCharVarCharncharVarChartext是否是主鍵是否否否否否否否否是否為空否否否是是是否是是說明客戶編號客戶名稱客戶簡稱采購主管采購主管聯(lián)系方式客戶地址客戶電話傳真?zhèn)渥?/p> 2.商品進(jìn)貨表 字段數(shù)據(jù)類型intVarCharCharCharCharnumericnumericint是否是主鍵是否否否否否否否是否為空說明進(jìn)貨編號商品名稱商品名稱首拼大單位小單位進(jìn)貨成本jhbhshpmchshpshpddwxdwjhchbxshjgjhshulgyshjhrqbzh否否否否是否否否銷售價格進(jìn)貨數(shù)量供應(yīng)商進(jìn)貨日期備注VarCharsmalldatetimeVarChar否否否是否是 3.商品銷售表 字段xshbhshpmchshpshpxshjgxshshlxshryxshrqkhbzh數(shù)據(jù)類型IntVarCharVarCharNumericIntVarCharSmalldatetimeVarChartext是否是主鍵是否否否否否否否否是否為空否否否是是是否是是說明銷售編號商品名稱商品名稱首拼銷售價格銷售數(shù)量銷售人員銷售日期客戶簡稱備注 六.運(yùn)行界面與代碼 1.登陸窗口 Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Private Sub CmdOk_Click()If UserName.Text <> “" And PassWord.Text <> ”“ Then Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ rs.Open ”select * from usermanage where username='“ & UserName.Text & ”'“, conn, 1, 1 If Not rs.EOF Then If rs(”password“)= PassWord.Text Then Main.Show Unload Me Else MsgBox ”非法登錄,密碼錯誤!“, vbOKOnly, ”警告“ End If Else MsgBox ”非法登錄,找不到該用戶!“, vbOKOnly, ”警告“ End If Else MsgBox ”用戶名或密碼不能為空!“, vbOKOnly, ”提示“ End If End Sub Private Sub PassWord_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then Call CmdOk_Click End If End Sub Private Sub UserName_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then Call CmdOk_Click End If End Sub `2.主界面 Private Sub Cmd_Click(Index As Integer)Select Case Index Case 0 GoodsIn.Show Me.Enabled = False Case 1 Saler.Show Me.Enabled = False Case 2 SaleData.Show Me.Enabled = False Case 3 SaleTotal.Show Me.Enabled = False Case 4 UserM.Show Me.Enabled = False End Select End Sub `進(jìn)貨管理 Private Sub Cmd_Click(Index As Integer)Select Case Index Case 0 '第一條 Adodc1.Recordset.MoveFirst Case 1 '上一條 If Not Adodc1.Recordset.BOF Then Adodc1.Recordset.MovePrevious End If Case 2 '下一條 If Not Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveNext End If Case 3 '最尾條 Adodc1.Recordset.MoveLast Case 4 '添加 Adodc1.Recordset.AddNew For i = 0 To 7 GoodText(i).Enabled = True Next Cmd(6).Enabled = True Case 5 '修改 For i = 0 To 7 GoodText(i).Enabled = True Next Cmd(6).Enabled = True Case 6 '保存 Adodc1.Recordset.Update For i = 0 To 7 GoodText(i).Enabled = False Next MsgBox ”更新記錄成功!“, vbOKOnly, ”提示“ Cmd(6).Enabled = False Case 6 '刪除 If MsgBox(”確定刪除當(dāng)前記錄,數(shù)據(jù)將不可恢復(fù)?“, vbOKCancel, ”提示“)= vbOK Then Adodc1.Recordset.Delete End If End Select End Sub Private Sub Form_Load()Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ Adodc1.RecordSource = ”select * from save“ For i = 0 To 6 Set GoodText(i).DataSource = Adodc1 GoodText(i).DataField = Adodc1.Recordset.Fields(i).Name Next Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 End Sub Private Sub Form_Unload(Cancel As Integer)Main.Enabled = True End Sub `銷售管理 Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Public id As String Public action As String Private Sub Cmd_Click(Index As Integer)Select Case Index Case 0 '第一條 If Not Adodc1.Recordset.BOF Then Adodc1.Recordset.MoveFirst End If Case 1 '上一條 If Not Adodc1.Recordset.BOF Then Adodc1.Recordset.MovePrevious End If Case 2 '下一條 If Not Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveNext End If Case 3 '最尾條 If Not Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveLast End If Case 4 '添加 action = ”add“ ManageSale.Show Me.Enabled = False Case 5 '修改 action = ”modify“ id = Adodc1.Recordset.Fields(”id“)ManageSale.Show Me.Enabled = False Case 7 '刪除 If MsgBox(”確定刪除當(dāng)前記錄,數(shù)據(jù)將不可恢復(fù)?“, vbOKCancel, ”提示“)= vbOK Then Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ rs.Open ”select goodcount from save where goodnum='“ & GoodText(0).Text & ”'“, conn, 1, 3 rs(”goodcount“)= rs(”goodcount“)+ GoodText(5).Text rs.Update rs.Close Adodc1.Recordset.Delete End If End Select End Sub Private Sub Form_Load()Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ Adodc1.RecordSource = ”select * from sale order by id“ For i = 0 To 6 Set GoodText(i).DataSource = Adodc1 GoodText(i).DataField = Adodc1.Recordset.Fields(i + 1).Name Next Adodc1.Refresh Set DataGrid1.DataSource = Adodc1 End Sub Private Sub Form_Unload(Cancel As Integer)Main.Enabled = True End Sub 添加修改銷售記錄 Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Public salecount As Long Private Sub Combo1_Change()End Sub Private Sub Cmd_Click(Index As Integer)Select Case Index Case 0 Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ If GoodText(0)= ”“ Or GoodText(3)= ”“ Or GoodText(4)= ”“ Then MsgBox ”數(shù)據(jù)沒有輸入完整,請重新輸入!“, vbOKOnly, ”提示“ Exit Sub End If If SaleData.action = ”add“ Then rs.Open ”select * from sale“, conn, 1, 3 rs.AddNew Else rs.Open ”select * from sale where id=“ & SaleData.id, conn, 1, 3 End If rs(”Goodnum“)= GNum.Text rs(”goodname“)= GoodText(1).Text rs(”danwei“)= GoodText(2).Text rs(”outdate“)= GoodText(3).Text rs(”danjia“)= GoodText(4).Text rs(”outcount“)= GoodText(0).Text rs(”salename“)= SaleName.Text rs.Update rs.Close rs.Open ”select * from save where goodnum='“ & GNum.Text & ”'“, conn, 1, 3 '在庫存表中將庫存數(shù)量減去已售出的數(shù)量 If SaleData.action = ”add“ Then rs(”goodcount“)= rs(”goodcount“)(GoodText(0).Text-salecount)End If rs.Update rs.Close MsgBox ”數(shù)據(jù)更新成功!“, vbOKOnly, ”提示“ SaleData.Adodc1.Refresh Unload Me Case 1 Unload Me End Select End Sub Private Sub Form_Load()Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ Dim saleman As String If SaleData.action = ”add“ Then rs.Open ”select goodnum from save order by goodnum“, conn, 1, 1 Do While Not rs.EOF GNum.AddItem rs(0)rs.MoveNext Loop GNum.Text = GNum.List(0)Else rs.Open ”select * from sale where id=“ & SaleData.id, conn, 1, 1 GNum.AddItem rs(”goodnum“)GoodText(1).Text = rs(”goodname“)GoodText(2).Text = rs(”danwei“)GoodText(3).Text = rs(”outdate“)GoodText(4).Text = rs(”danjia“)GoodText(0).Text = rs(”outcount“)saleman = rs(”salename“)GNum.Text = GNum.List(0)GNum.Enabled = False rs.Close rs.Open ”select * from save where goodnum='“ & GNum.Text & ”'“, conn, 1, 1 SaleNum.Max = GoodText(0).Text + rs(”goodcount“)salecount = GoodText(0).Text End If rs.Close rs.Open ”select salename from saler order by id“, conn, 1, 1 Do While Not rs.EOF SaleName.AddItem rs(0)rs.MoveNext Loop If SaleData.action = ”add“ Then SaleName.Text = SaleName.List(0)Else SaleName.Text = saleman Cmd(0).Caption = ”保存修改“ End If rs.Close End Sub Private Sub Form_Unload(Cancel As Integer)SaleData.Enabled = True End Sub Private Sub GNum_Click()Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.Open ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ & App.Path & ”人事.mdb;Persist Security Info=False“ rs.Open ”select * from save where goodnum='“ & GNum.Text & ”'“, conn, 1, 1 If Not rs.EOF Then GoodText(1).Text = rs(”goodname“)GoodText(2).Text = rs(”danwei“)SaleNum.Max = rs(”goodcount")End If End Sub 目 錄 目錄...............................................................................................................第一章 緒 論.................................................................................................1.1 開發(fā)背景說明....................................................................................1.2課程設(shè)計目的.....................................................................................1.3課程題目及內(nèi)容.................................................................................1.4課程設(shè)計要求.....................................................................................1.5預(yù)期目標(biāo).............................................................................................1.6 系統(tǒng)環(huán)境............................................................................................第二章 可行性分析.........................................................................................2.1 可行性研究前提................................................................................2.2 經(jīng)濟(jì)上可行性....................................................................................2.3 技術(shù)可行性........................................................................................2.4目標(biāo)方案可行性.................................................................................2.5操作可行性.........................................................................................第三章 需求分析.............................................................................................3.1引言.....................................................................................................3.2任務(wù)陳述.............................................................................................3.3市場需求分析.....................................................................................3.4系統(tǒng)功能需求分析.............................................................................3.5系統(tǒng)性能需求分析.............................................................................3.6 系統(tǒng)業(yè)務(wù)數(shù)據(jù)流...................................................錯誤!未定義書簽。3.7用例分析...........................................................................................3.8用例列表...........................................................................................3.9繪制系統(tǒng)模型圖...............................................................................第四章 系統(tǒng)概要設(shè)計...................................................................................4.1模塊分析和概要設(shè)計.......................................................................4.2 系統(tǒng)數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計..............................................................4.3概念模型轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型.......................................................4.4 數(shù)據(jù)庫設(shè)計......................................................................................第五章 詳細(xì)設(shè)計...........................................................................................5.1登錄管理...........................................................................................-***39424243443 入帳目時的錯誤,可以根據(jù)職工的考勤、職務(wù)、部門、各種稅費(fèi)等等,自動求出工資。為了便于企業(yè)領(lǐng)導(dǎo)掌握本企業(yè)的工資信息在系統(tǒng)中應(yīng)加入各種查詢功能,包括個人信息、職工工資、本企業(yè)內(nèi)某一個月或某一部門的工資情況查詢。系統(tǒng)應(yīng)能輸出各類統(tǒng)計報表。 本系統(tǒng)需要完成的功能主要有:系統(tǒng)數(shù)據(jù)初始化;職工基本信息數(shù)據(jù)的輸入、修改、刪除;企業(yè)工資的基本設(shè)定;職工工資的瀏覽;職工個人工資表的查詢;職工工資的計算;工資報表打印。 數(shù)據(jù)流: 職工基本狀況:包括職工編號、職工姓名、性別、年齡、職位等。工資級別和工資金額:包括工資等級、工資額。 企業(yè)部門及工作崗位信息:包括部門名稱、工作崗位名稱、工作崗位工資等。工資信息:包括職工編號、職工姓名、職工基本工資、職工崗位工資、職工工齡工資、公司津貼、職工實(shí)發(fā)工資等。工齡和工資金額:包括工齡及對應(yīng)工資額。 1.4課程設(shè)計要求 堅持“規(guī)格嚴(yán)格,功夫到家”的優(yōu)良傳統(tǒng),加強(qiáng)基本功訓(xùn)練,做到理論與實(shí)際相結(jié)合,繼承與創(chuàng)新相結(jié)合,充分發(fā)揮學(xué)生的主觀能動性與教師因材施教、嚴(yán)格要求相結(jié)合,抓智力因素教育與非智力因素教育相結(jié)合,教書育人。所設(shè)計的工資管理系統(tǒng)應(yīng)包含輸入輸出、修改、刪除、查詢等基本功能。根據(jù)題目的基本需求,畫出流程圖、用例圖、類圖等,編寫程序,并寫出詳細(xì)的設(shè)計說明書。課程設(shè)計過程中,要嚴(yán)格遵守課程設(shè)計的時間安排,聽從指導(dǎo)教師的指導(dǎo)。正確地完成上述內(nèi)容,規(guī)范完整地撰寫出課程設(shè)計報告。 1.5預(yù)期目標(biāo) 計劃設(shè)計:對于企、事業(yè)單位的工資發(fā)放來說,不需要太大型的數(shù)據(jù)庫系統(tǒng),只需要一個操作方便,功能實(shí)用,能滿足財務(wù)部門對工資及時的發(fā)放。本工資管理系統(tǒng)預(yù)期目標(biāo)就是實(shí)現(xiàn)如下的一些功能:查詢?yōu)g覽記錄功能,增加記錄功能、修改記錄功能、刪除記錄功能、刷新記錄功能、最后實(shí)現(xiàn)統(tǒng)計計算功能。 1.6 系統(tǒng)環(huán)境 1.6.1硬件:個人PC 1.6.2軟件: Windows XP、Microsoft Visual C++6.0、Rational Rose。 第二章 可行性分析 2.1 可行性研究前提 要求:滿足對工資管理的基本要求及功能,并對職工信息收集、處理、保存。目標(biāo):實(shí)現(xiàn)無紙化辦公,節(jié)省成本,提高工作效率。 條件、假定、限制:當(dāng)企業(yè)工資管理的信息量和復(fù)雜程度達(dá)到某一限度時,即管理人員的勞動強(qiáng)度超過其承受能力時,就必須采用新的管理手段,如用計算機(jī)技術(shù)對信息的收集、加工、傳遞和存貯等,這樣,一個工資管理系統(tǒng)就可以對企業(yè)職工工資進(jìn)行高效、合理、恰當(dāng)?shù)毓芾怼?/p> 2.2 經(jīng)濟(jì)上可行性 開發(fā)成本要低廉。 效益:大幅度地提高工資管理信息系統(tǒng)的工作質(zhì)量和效率,讓企業(yè)掌握整個工資管理系統(tǒng)的全面情況,為管理人員提供了準(zhǔn)確的工資管理信息,促進(jìn)工資管理工作的規(guī)范化及各項(xiàng)管理制度與指標(biāo)體系的建立和健全;提供各種加工處理了的工資管理信息,以滿足工資管理的特殊要求,適應(yīng)新形勢對職工隊(duì)伍提出的新要求。 效益/投資比:暫時無法估算。投資回收期內(nèi): (1)企業(yè)有能力承擔(dān)系統(tǒng)開發(fā)費(fèi)用。 (2)新系統(tǒng)將為企業(yè)帶來經(jīng)濟(jì)效益。管理系統(tǒng)是一個信息化、智能化和先進(jìn)。理理念的集合體。而管理是一個動態(tài)過程,在其運(yùn)行過程中要采取多項(xiàng)措施。其最主要的表現(xiàn)就是減少了企業(yè)管理費(fèi)用和人力開支。 2.3 技術(shù)可行性 (1)軟件需求:操作系統(tǒng)WINDOWS 2000 Advance Server以上。 硬件需求:賽揚(yáng)1.7G CPU、512M內(nèi)存 80G硬盤的計算機(jī)。(2)本系統(tǒng)采用VC++實(shí)現(xiàn),依靠其強(qiáng)大的面向?qū)ο笙到y(tǒng),與數(shù)據(jù)庫管理系統(tǒng)相結(jié)合。 (3)要求掌握計算機(jī)技術(shù),熟悉系統(tǒng)的功能和使用方法使系統(tǒng)能夠順利運(yùn)行。 2.4目標(biāo)方案可行性 計算機(jī)設(shè)備處理繁雜的工資增減問題,大幅度減少人力、物力,極大地提高企業(yè)的管理水平和管理效率。 管理水平和管理效率的提高能直接產(chǎn)生經(jīng)濟(jì)效益。 格,如完成任務(wù)表、考勤表、考核表、職工當(dāng)月的扣款情況(包括水電費(fèi)、病事假扣款等)等計算職工變動工資、個人所得稅和應(yīng)發(fā)放工資等,編制工資單。按類進(jìn)行匯總,編制工資匯總表。將實(shí)發(fā)工資轉(zhuǎn)入代發(fā)銀行,由銀行代發(fā)工資,并進(jìn)行賬務(wù)處理。工資結(jié)算過程主要設(shè)計如下會計賬戶:現(xiàn)金、銀行存款、應(yīng)付工資、其他應(yīng)付款、其他應(yīng)收款等。 3.3市場需求分析 工資管理系統(tǒng)是一個企業(yè)單位不可或缺的部分,他能為用戶提供充足的信息和快捷的查詢手段。一個工資管理系統(tǒng)可以高效能、大容量的收集、處理、存儲工資管理信息,大幅度的工資管理信息系統(tǒng)的工作質(zhì)量和效率。 能夠?yàn)槠髽I(yè)管理人員及時掌握整個工資管理系統(tǒng)的全面情況,提供系統(tǒng)的準(zhǔn)確的工資管理信息,可以促進(jìn)工資管理工作的規(guī)范化及各項(xiàng)管理制度與指標(biāo)體系的建立和健全。為企業(yè)提供各種加工管理了工資管理信息,以滿足工資管理的特殊要求,適應(yīng)新形勢對職工隊(duì)伍建設(shè)提出的新要求,幫助管理人員選擇方案,實(shí)現(xiàn)優(yōu)化決策。雖然當(dāng)前,不少單位的工資管理部門對于計算機(jī)應(yīng)用還僅限于簡單的單機(jī)應(yīng)用,隨著時間的推移、任務(wù)的復(fù)雜、用戶的需求,其應(yīng)用還會擴(kuò)大。 3.4系統(tǒng)功能需求分析 工資管理系統(tǒng)涉及到員工基本信息的錄入、修改和刪除,工資標(biāo)準(zhǔn)的設(shè)定、查詢和結(jié)算等。 典型的工資管理系統(tǒng)主要有以下基本功能: a)系統(tǒng)數(shù)據(jù)初始化 b)員工基本信息的錄入、修改、刪除等功能 c)工資標(biāo)準(zhǔn)的設(shè)定功能,集體包括職務(wù)工資、職稱工資、其他工資標(biāo)準(zhǔn)和福利的設(shè)定。 d)工資信息的瀏覽 e)員工工資信息表的創(chuàng)建及查詢 f)工資調(diào)整管理 g)工資計算 h)工資報表打印 3.5系統(tǒng)性能需求分析 3.5.1 需求分析總體目標(biāo) 需求分析的目的在于與開發(fā)人員與用戶之間達(dá)成系統(tǒng)開發(fā)的共識,使開發(fā)人員所考慮的系統(tǒng)在功能(系統(tǒng)能做什么)、簡單操作,良好界面,個人信息保密性,系統(tǒng)安全與穩(wěn)定,良好帳戶管理,友好信息返回模式(如報表及打印功能)。 時,防止數(shù)據(jù)被不法分析任意的修改和破壞,對所有的敏感數(shù)據(jù)均進(jìn)行基于SSL協(xié)議 的加密操作,只有對信息解密的人員才能最終讀取數(shù)據(jù)信息。這樣,能 最大程度的防止數(shù)據(jù)在傳輸過程的安全保密性。 3.6 系統(tǒng)業(yè)務(wù)數(shù)據(jù)流 3.6.1 數(shù)據(jù)流分析 數(shù)據(jù)流程圖是一種能全面描述信息系統(tǒng)邏輯模型的主要工具,也是系統(tǒng)分析人員與用戶進(jìn)行交流的有效手段。本系統(tǒng)的數(shù)據(jù)流程圖把握住對系統(tǒng)總體目標(biāo)與總體功能的要求,基于上述的業(yè)務(wù)流程圖,從科學(xué)性,合理性和可行性入手,采用自頂向下,逐層分解的方法建立本管理信息系統(tǒng)的邏輯模型,綜合地反映出信息在本系統(tǒng)中的流動,處理和存儲,具有抽象性和概括性.通過進(jìn)行用戶調(diào)查收集用戶需求后,就要對用戶需求進(jìn)行分析,并表達(dá)用戶的需求。采用結(jié)構(gòu)化分析方法,主要采用數(shù)據(jù)流圖對用戶需求進(jìn)行分析,用數(shù)字字典和加工說明對數(shù)據(jù)流圖進(jìn)行補(bǔ)充和說明。數(shù)據(jù)流圖用于描述系統(tǒng)中數(shù)據(jù)流動的過程,反映的是加工處理的對象。 3.6.2 流程圖,模塊圖如下: 流程圖 模塊圖 112 3.9.2活動圖: 分析用例中的邏輯流程,描述用例的事件流,進(jìn)而畫出各用例對應(yīng)的活動圖 用戶登錄活動圖: 管理員工信息活動圖: 3.9.3 類圖: 類圖是面向?qū)ο蟮能浖_發(fā)中的一個核心概念。Rose中的類圖用于描述軟件系統(tǒng)中涉及到的類的相關(guān)信息,以及類與類之間的相互關(guān)系。 〔1〕類的識別 類的識別通常由分析員在分析問題域的基礎(chǔ)上來完成。常用的方法有: ? a.名詞識別法。? b.系統(tǒng)識別法。? c.從用例中識別類。? d.利用分解與抽象技術(shù)。〔2〕系統(tǒng)類圖 3.9.4狀態(tài)圖: 狀態(tài)圖(State Diagram)用來描述一個特定對象的所有可能狀態(tài)及其引起狀態(tài)轉(zhuǎn)移的事件。 3.9.5 時序圖: 時序圖用來描述對象之間動態(tài)的交互關(guān)系,著重體現(xiàn)對象間消息傳送消息的時間順序。下面分別給出各個用例的時序圖: 用戶登錄時序圖: 職工時序圖: 71819 設(shè)計一般分為三個步驟: 〔1〕概念模型轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型?!?〕關(guān)系模型的優(yōu)化。〔3〕設(shè)計用戶子模式書號。 4.3概念模型轉(zhuǎn)換為關(guān)系數(shù)據(jù)模型 一般轉(zhuǎn)換原則如下: 〔1〕一個實(shí)體轉(zhuǎn)換為一個表(Table),則實(shí)體的屬性轉(zhuǎn)換為表的列(Column),實(shí)體的碼轉(zhuǎn)換為表的主鍵(Primary Key)。 〔2〕實(shí)體間的聯(lián)系根據(jù)聯(lián)系的類型,轉(zhuǎn)換如下: ① 1:n 的聯(lián)系: 1:n 的聯(lián)系是比較普遍的聯(lián)系,其轉(zhuǎn)換比較直觀。轉(zhuǎn)換規(guī)律是在n 端的實(shí)體對應(yīng)的表中增加屬性,該屬性是1 端實(shí)體對應(yīng)表的主碼。如:崗位和員工的關(guān)系是1:n 的聯(lián)系。 ② m:n 的聯(lián)系: 通過引進(jìn)一個新表來表達(dá)兩個實(shí)體間多對多的聯(lián)系,新表的主碼由聯(lián)系兩端實(shí)體的主碼組合而成,同時增加相關(guān)的聯(lián)系屬性。如:部門與員工的聯(lián)系是n:m 聯(lián)系。 4.4 數(shù)據(jù)庫設(shè)計 數(shù)據(jù)庫的物理結(jié)構(gòu)設(shè)計是指為邏輯數(shù)據(jù)模型選取一個最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)(包括存儲結(jié)構(gòu)和存取方法),它完全取決于給定的計算機(jī)系統(tǒng)。物理結(jié)構(gòu)可分兩步進(jìn)行。第一步是分析所得到的各種數(shù)據(jù)模型,依據(jù)在實(shí)際執(zhí)行時可能產(chǎn)生的數(shù)據(jù)容量以及各種數(shù)據(jù)模型之間的相互依賴程度等,確定數(shù)據(jù)庫的物理結(jié)構(gòu);第二步則要根據(jù)某種方法對所設(shè)計的物理結(jié)構(gòu)進(jìn)行評價,評價重點(diǎn)是時間和空間的效率。數(shù)據(jù)庫實(shí)施是指建立數(shù)據(jù)庫,編制與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫,并進(jìn)行試運(yùn)行。 根據(jù)人員規(guī)模,我們只建立起一個數(shù)據(jù)庫,在此數(shù)據(jù)庫基礎(chǔ)上建立起如下表: ·職工表 ·用戶表 ·工資表 下面說明各表的字段名稱和數(shù)據(jù)類型: 工資表: 職工表: 用戶表: 第五章 詳細(xì)設(shè)計 詳細(xì)設(shè)計階段主要是將系統(tǒng)中的每個模塊完成的功能進(jìn)行具體描述。 5.1登錄管理 根據(jù)系統(tǒng)總體結(jié)構(gòu)可以得出登錄管理模塊實(shí)現(xiàn)用戶登錄、密碼修改和退出系統(tǒng)三個功能。其中,退出系統(tǒng)實(shí)現(xiàn)流程很容易,只需要一行代碼即可;用戶登錄的實(shí)現(xiàn)流程是用戶在登錄窗口輸入用戶名稱和密碼,如果沒有用戶名和密碼可以進(jìn)行注冊后再登錄,選擇了用戶角色后,單擊【登錄】按鈕進(jìn)行提交,系統(tǒng)開始驗(yàn)證用戶提交的登錄信息是否正確。如果正確,則打開工資管理系統(tǒng),并根據(jù)用戶角色賦于相應(yīng)的操作權(quán)限;否則給出錯誤信息。 5.1.1界面設(shè)計 登錄界面如下: 5.1.2 代碼 部分核心代碼設(shè)計: void CZHUCE::OnButton1(){ UpdateData(TRUE);if(m_username.IsEmpty()||m_password.IsEmpty()||m_password2.IsEmpty()){AfxMessageBox(“請將資料填寫完整!”);m_password2.Empty(); m_password.Empty(); UpdateData(FALSE); return;} OnInitADOConn();if(m_password2==m_password){ CString str; str.Format(“insert into 用戶表(用戶名,密碼)('%s','%s')”,m_username,m_password); _variant_t var; int fieldrow; try{//捕捉表的主鍵存在重復(fù)值的異常 m_pConnection->Execute((_bstr_t)str,&var,adCmdText); fieldrow=(int)V_I2(&var); } catch(...) { AfxMessageBox(“用戶名已存在,注冊失敗”); m_username.Empty(); m_password.Empty(); m_password2.Empty(); UpdateData(FALSE); return;} AfxMessageBox(“注冊成功,請返回登錄!”); m_pConnection->Close(); Clogin clg; clg.DoModal();} else{AfxMessageBox(“兩次密碼輸入不一樣,注冊失敗!”); m_username.Empty(); m_password.Empty();m_password2.Empty(); }} UpdateData(FALSE);return;void CZHUCE::OnInitADOConn()try {//創(chuàng)建連接對象實(shí)例 } catch(_com_error e){ AfxMessageBox(e.Description());m_pConnection.CreateInstance(“ADODB.Connection”);//設(shè)置連接字符串 Cstring strConnect=“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=salary.mdb;Persist Security Info=False;”;//使用Open方法連接數(shù)據(jù)庫 m_pConnection->Open((_bstr_t)strConnect,“",”“,adModeUnknown); } try{if(m_pConnection==NULL){OnInitADOConn();} m_pRecordset.CreateInstance(__uuidof(Recordset));m_pRecordset->Open(sqlstr,m_pConnection.GetInterfacePtr(),adOpenDyna } catch(_com_error e){ e.Description();} return m_pRecordset; mic,adLockOptimistic,adCmdText); 5.1.3修改密碼模塊: 成功登錄主界面: 5.2用戶管理 用戶管理模塊用于實(shí)現(xiàn)用戶的添加、刪除、更新功能。5.2.1新增用戶模塊: 627UpdateData(TRUE);if(m_Bianhao.IsEmpty()||m_Name.IsEmpty()){AfxMessageBox(”not null“);return;} OnInitADOConn();CString str;str.Format(”update 職工表 set 性別='%s',年齡=%d,電話='%s',住址='%s',位='%s',備 注 ='%s' where 職 工 編 號='%s'“,m_Sex,m_Age,m_Telphone,m_Address,m_Zhiwei,m_Beizhu,m_Bianhao);m_pConnection->Execute((_bstr_t)str,NULL,adCmdText);m_pConnection->Close();m_zhglist.DeleteAllItems();AddToGrid();ClearAll();UpdateData(FALSE); {// TODO: Add your control notification handler code here } void CGXZHG::OnButton4(){ UpdateData(TRUE);if(m_tiaojian.IsEmpty()){AfxMessageBox(”請選擇刪除的職工!“);return;} OnInitADOConn();CString bstrSQL;bstrSQL.Format(”delete from 職工表 where 職工編號CMAKESURE cmake;if(cmake.DoModal()!=IDOK){ } m_pConnection->Execute((_bstr_t)bstrSQL,NULL,adCmdText);m_pConnection->Close();m_zhglist.DeleteAllItems();AddToGrid();ClearAll();AfxMessageBox(“刪除成功!”);UpdateData(FALSE);return;='%s'“,m_tiaojian);UpdateData(TRUE);m_type.GetWindowText(m_Type);if(m_Type.IsEmpty()){AfxMessageBox(”請選擇查詢的方式!“);return;} if(m_tiaojian.IsEmpty()){AfxMessageBox(”請輸入查詢的職工編號!“);return;} OnInitADOConn();CString sql; 部分核心代碼如下: void CTXGZ::OnButton2() {// TODO: Add your control notification handler code here 息!”); if(m_Bianhao.IsEmpty()||m_Jibengz==NULL||m_Yuefen.IsEmpty()){AfxMessageBox(“編號不允許空值,請重新填寫!”);ClearALL();return;} OnInitADOConn();float CString cstr1;cstr1.Format(“%.2f”,f1);m_yfsh.SetWindowText(cstr1);float f2=m_Fangzu+m_Chuxu+m_Huifei;CString cstr2;cstr2.Format(“%.2f”,f2);m_yksh.SetWindowText(cstr2);float f4;f4=calculator(f1-f2);float f3=f1-f2-f4;CString cstr3;cstr3.Format(“%.2f”,f3);m_shfsh.SetWindowText(cstr3);CString cstr4;cstr4.Format(“%.2f”,f4);m_grsdsh.SetWindowText(cstr4);CString str;str.Format(“insert into 工 資 表 values UpdateData(TRUE);m_yuefen.SetCurSel(0);// AfxMessageBox(”該編號的職工不存在,請先到職工管理添加職工信f1=m_Jibengz+m_Jintie+m_Gangtie+m_Butie+m_Fangtie+m_Jiaotongbt;('%s','%s',%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f)“,m_ } void CTXGZ::ClearALL(){ } void CTXGZ::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code here m_pConnection->Close();m_gzlist.DeleteAllItems();AddToGrid();m_yuefen.SetCurSel(0);ClearALL();m_Jibengz=NULL;m_Jintie=NULL; m_Shfsh.Empty();m_Yfsh.Empty();m_Yksh.Empty();m_Yuefen.Empty();m_Chaxun.Empty();m_Jiaotongbt=NULL;m_Huifei=NULL;m_Grsdsh.Empty();m_Fangzu=NULL;m_Fangtie=NULL;m_Chuxu=NULL;m_Bianhao=”“;m_Gangtie=NULL;UpdateData(FALSE);int position=m_gzlist.GetSelectionMark();m_Bianhao=m_gzlist.GetItemText(position,0);m_Chaxun=m_gzlist.GetItemText(position,0);m_Yuefen=m_gzlist.GetItemText(position,1);m_Jibengz=atof(m_gzlist.GetItemText(position,2));m_Jintie=atof(m_gzlist.GetItemText(position,3));m_Gangtie=atof(m_gzlist.GetItemText(position,4)); 3return;} void CTXGZ::OnButton5(){ } float CTXGZ::calculator(float a){float b=a-2000; } if(b<0){b=0;} if(0=500&&b<2000){return b=b*10/100-25;} if(b>=2000&&b<5000){return b=b*15/100-125;} if(b>=5000&&b<20000){return b=b*20/100-375;} if(b>=20000&&b<40000){return b=b*25/100-1375;} if(b>=40000&&b<60000){return b=b*30/100-3375;} if(b>=60000&&b<80000){return b=b*35/100-6375;} if(b>=80000&&b<100000){return b=b*40/100-10375;} if(b>=100000){ return b=b*45/100-15375;} UpdateData(TRUE);if(m_Chaxun.IsEmpty()){AfxMessageBox(”請輸入查詢的職工編號!“);return;} OnInitADOConn();CString sql;sql.Format(”select * from 工資表 where 職工編號='%s'“,m_Chaxun);m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);m_pConnection->Close();m_gzlist.DeleteAllItems();ClearALL();m_Chaxun=m_Chaxun;m_yuefen.SetCurSel(0);UpdateData(FALSE);5.5查詢管理 該模塊實(shí)現(xiàn)功能是職工查詢工資的詳細(xì)信息,查詢個人詳細(xì)信息的功能。 5.5.1職工信息查詢: 5.5.2工資信息查詢: 部分核心代碼如下: void CGXGZ::OnButton1(){ UpdateData(TRUE); if(m_Chaxun.IsEmpty()){AfxMessageBox(”請輸入查詢的職工編號!“);return;} OnInitADOConn();CString sql;sql.Format(”select * from 工資表 where 職工編號='%s'“,m_Chaxun);m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);m_pConnection->Close();m_gzlist.DeleteAllItems();UpdateGrid();m_Chaxun.Empty(); 6UpdateData(FALSE);{//創(chuàng)建連接對象實(shí)例 } catch(_com_error e){ AfxMessageBox(e.Description());m_pConnection.CreateInstance(”ADODB.Connection“);//設(shè)置連接字符串 CString strConnect=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=salary.mdb;Persist Security Info=False;“;//使用Open方法連接數(shù)據(jù)庫 m_pConnection->Open((_bstr_t)strConnect,”“,”“,adModeUnknown); } OnInitADOConn();//設(shè)置查詢字符串 CString bstrSQL;bstrSQL.Format(”select * from 工資表 where 職工編號='%s' order by 職//創(chuàng)建記錄集指針對象實(shí)例 m_pRecordset.CreateInstance(__uuidof(Recordset));//打開記錄集 m_pRecordset->Open((_bstr_t)bstrSQL,m_pConnection.GetInterfacePtr(),ad adLockOptimistic,adCmdText);工編號 desc “,m_Chaxun);OpenDynamic, while(!m_pRecordset->adoEOF){ m_gzlist.InsertItem(0,”“);m_gzlist.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect(”職工編號 m_gzlist.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect(“月份”));m_gzlist.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect(“基本工資”));m_gzlist.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect(“津貼”));m_gzlist.SetItemText(0,4,(char*)(_bstr_t)m_pRecordset->GetCollect(“崗貼”));m_gzlist.SetItemText(0,5,(char*)(_bstr_t)m_pRecordset->GetCollect(“補(bǔ)貼”));m_gzlist.SetItemText(0,6,(char*)(_bstr_t)m_pRecordset->GetCollect(“房貼”));m_gzlist.SetItemText(0,7,(char*)(_bstr_t)m_pRecordset->GetCollect(“交通補(bǔ)貼”));m_gzlist.SetItemText(0,8,(char*)(_bstr_t)m_pRecordset->GetCollect(“應(yīng)發(fā)數(shù)”));m_gzlist.SetItemText(0,9,(char*)(_bstr_t)m_pRecordset->GetCollect(“房租”));m_gzlist.SetItemText(0,10,(char*)(_bstr_t)m_pRecordset->GetCollect(“儲蓄”));m_gzlist.SetItemText(0,11,(char*)(_bstr_t)m_pRecordset->GetCollect(“會費(fèi)”));m_gzlist.SetItemText(0,12,(char*)(_bstr_t)m_pRecordset->GetCollect(“個人所得稅”));m_gzlist.SetItemText(0,13,(char*)(_bstr_t)m_pRecordset->GetCollect(“應(yīng)扣數(shù)”));m_gzlist.SetItemText(0,14,(char*)(_bstr_t)m_pRecordset->GetCollect(“實(shí)發(fā)數(shù)”)); } void CGXGZ::ExitConnect(){if(m_pRecordset!=NULL) } m_pRecordset->Close();m_pConnection->Close();//將記錄集指針移動到下一條記錄 } //AfxMessageBox(“123”);//斷開數(shù)據(jù)庫連接 ExitConnect();m_pRecordset->MoveNext(); 第六章 系統(tǒng)測試 6.1 測試方法 (1)測試人員: 測試隊(duì)伍由兩位成員組成。軟件的設(shè)計者在測試整個過程中負(fù)責(zé)整體測試方案的制定和測試進(jìn)度的掌握以及白盒測試的測試者。第二位成員由未參加軟件制作者擔(dān)任,主要責(zé)任是進(jìn)行軟件的黑盒測試以及軟件環(huán)境,硬件要求和極限測試工作。 (2)機(jī)器測試: 通過在計算機(jī)上直接運(yùn)行被測程序,來發(fā)現(xiàn)程序中的錯誤。機(jī)器測試包括黑盒測試盒白盒測試。黑盒測試也稱功能測試,將軟件看作黑盒子,在完全不考慮程序的內(nèi)部結(jié)構(gòu)和特性的情況下,研究軟件的外部特性。根據(jù)軟件的需求規(guī)格說明書測試用例,從程序的輸入和輸出特性上測試是否滿足設(shè)定的功能。白盒測試也稱結(jié)構(gòu)測試,將軟件看作一個透明的白盒子,按照程序的內(nèi)部結(jié)構(gòu)和處理邏輯來選定測試用例,對軟件的邏輯路徑及過程進(jìn)行測試,檢查與測試是否相符。 6.2測試內(nèi)容 1)軟件的正常運(yùn)行、關(guān)閉及退出時保存記錄的提示。 2)用戶登錄界面友好,可操作性及安全性能較好,能對不同管理級別者進(jìn)行限制,以保證數(shù)據(jù)庫的安全。 3)數(shù)據(jù)庫的可維護(hù)性好,數(shù)據(jù)的錄入、刪除及更改均能順利完成,并能實(shí)現(xiàn)動態(tài)更新。 4)數(shù)據(jù)查詢便捷,能對各種不同的查詢條件搜索,以找到最合適的答案。5)數(shù)據(jù)溢出、越界均能進(jìn)行非法提示,以警告用戶正確使用。對用戶的正常操作方式也提出警告。 6)數(shù)據(jù)類型填寫錯誤時,系統(tǒng)能夠報錯。 7)軟件對操作系統(tǒng)的兼容性良好,可移植性完好。 6.3測試結(jié)果 本系統(tǒng)有提示消息! 錄入相同編號的數(shù)據(jù): 該系統(tǒng)有報錯功能! 查詢職工工資信息: 查詢職工信息成功! 1424344- 牟永敏 清華大學(xué)出版社 軟件工程課程設(shè)計實(shí)驗(yàn)心得 經(jīng)過一個星期的軟件工程課程設(shè)計,本人在老師的指導(dǎo)下,順利完成該課程設(shè)計。通過該課程設(shè)計,收獲頗多。 一、對實(shí)驗(yàn)原理有更深的理解 通過該課程設(shè)計,掌握了什么是軟件程序,軟件程序工作的基本過程及其各階段的基本任務(wù),熟悉了軟件程序總流程框圖,了解了軟件程序的生成過程、構(gòu)造工具及其相關(guān)的技術(shù)對課本上的知識有了更深的理解,課本上的知識師機(jī)械的,表面的。通過把該算法的內(nèi)容,算法的執(zhí)行順序在計算機(jī)上實(shí)現(xiàn),把原來以為很深奧的書本知識變的更為簡單,對實(shí)驗(yàn)原理有更深的理解。 二、對該理論在實(shí)踐中的應(yīng)用有深刻的理解 通過把該算法的內(nèi)容,算法的執(zhí)行順序在計算機(jī)上實(shí)現(xiàn),知道和理解了該理論在計算機(jī)中是怎樣執(zhí)行的,對該理論在實(shí)踐中的應(yīng)用有深刻的理解。 三、激發(fā)了學(xué)習(xí)的積極性 通過該課程設(shè)計,全面系統(tǒng)的理解了軟件工程程序構(gòu)造的一般原理和基本實(shí)現(xiàn)方法。把死板的課本知識變得生動有趣,激發(fā)了學(xué)習(xí)的積極性。把學(xué)過的軟件工程的知識強(qiáng)化,能夠把課堂上學(xué)的知識通過自己設(shè)計的程序表示出來,加深了對理論知識的理解。以前對與計算機(jī)操作系統(tǒng)的認(rèn)識是模糊的,概念上的,現(xiàn)在通過 自己動手做實(shí)驗(yàn),從實(shí)踐上認(rèn)識了操作系統(tǒng)是如何處理命令的,如何協(xié)調(diào)計算機(jī)內(nèi)部各個部件運(yùn)行,對軟件工程的認(rèn)識更加深刻。課程設(shè)計中程序比較復(fù)雜,在調(diào)試時應(yīng)該仔細(xì),在程序調(diào)試時,注意指針,將不必要的命令去除。在這次課程設(shè)計中,我就是按照實(shí)驗(yàn)指導(dǎo)的思想來完成。加深了理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實(shí)現(xiàn),培養(yǎng)實(shí)踐動手能力和程序開發(fā)能力的目的。 四、理解了該知識點(diǎn)以及學(xué)科之間的融合滲透 本次課程設(shè)計程序部分是用C語言編寫的,把《計算機(jī)操作系統(tǒng)》,《軟件工程》,《算法分析與設(shè)計》《C語言》四門學(xué)科聯(lián)系起來,把各個學(xué)科之間的知識融合起來,把各門課程的知識聯(lián)系起來,對計算機(jī)整體的認(rèn)識更加深刻。使我加深了對《計算機(jī)操作系統(tǒng)》,《軟件工程》,《算法分析與設(shè)計》《C語言》四門課程的認(rèn)識。 軟件工程課程設(shè)計報告---個人帳本管理 一、需求分析 1、系統(tǒng)開發(fā)背景 當(dāng)今社會是一個信息與科技并行的時代,在社會中消費(fèi)時每個人都有的社會行為,消費(fèi)與人的日常生活是息息相關(guān)的,一個人如果有一個很好的消費(fèi)觀的話能給自己帶來很到好處。鑒于此目的,編寫了一個小型的個人賬本管理系統(tǒng)。此系統(tǒng)是一個簡單的系統(tǒng),可以管理個人的日常消費(fèi),可以為一般人所使用。對于業(yè)務(wù)較多的用戶來說此系統(tǒng)就不是一個很好的選擇。 2、軟件主要組成及功能 ? 收入模塊 功能:錄入收入 任何時間錄入你所得到的收入(共有以下幾種選擇: 1、工資; 2、獎金; 3、其他收入;); 輸入你所的到的金額; 錄入金額的原因(可選); ? 支出模塊 功能:支出的記錄 什么時候 什么類型的支出(1、生活費(fèi); 2、日常用品; 3、休閑娛樂; 4、社交應(yīng)酬; 5、交通費(fèi); 6、通訊費(fèi); 7、醫(yī)療保健; 8、其他支出)輸入支出的金額 什么原因的支出 ? 查詢模塊 功能:查詢 以選擇查詢的類型(1、支出; 2、收入; 3、全部) 時間(1、今天; 2、昨天; 3、本周; 4、上周; 5、本月; 6、上月; 7、本年; 8、去年; 9、全部;)以及什么類別 消費(fèi)的金額在什么范圍之類的記錄 將時間,類別,金額,備注顯示出來 ? 統(tǒng)計模塊 功能:統(tǒng)計 選擇統(tǒng)計的類型(1、支出; 2、收入;) 時間(1、今天; 2、昨天; 3、本周; 4、上周; 5、本月; 6、上月; 7、本年; 8、去年; 9、全部;)什么類別 統(tǒng)計的方式(1、總和; 2、平均值; 3、最大值; 4、最小值;)將時間,類別,方式,數(shù)值顯示出來 ? 管理模塊 功能:完成系統(tǒng)相應(yīng)的管理 可以對數(shù)據(jù)庫進(jìn)行備份 數(shù)據(jù)庫的還原 查看日志操作。 ? 修改模塊 功能:對已有數(shù)據(jù)進(jìn)行修改更新操作 對記錄進(jìn)行修改 對記錄刪除。 ? 退出模塊 退出此系統(tǒng)3、4、用戶特點(diǎn)及一般約束 功能需求(DFD圖) 收入 頂層圖: 填寫相應(yīng)的信息收入錄入事務(wù)確認(rèn)成功錄入成功 一層圖: 收入錄入事務(wù)填寫相應(yīng)的信息返回確認(rèn)信息確認(rèn)成功錄入成功D:添加收入信息 支出 頂層圖: 填寫相應(yīng)的信息支出錄入事務(wù)確認(rèn)成功錄入成功 一層圖: 填寫相應(yīng)的信息支出錄入事務(wù)返回確認(rèn)信息確認(rèn)成功錄入成功D:添加支出信息 查詢 頂層圖: 填寫相應(yīng)的信息查詢命令輸入事務(wù)確認(rèn)成功查詢成功 一層圖: 查詢命令輸入事務(wù)填寫相應(yīng)的信息返回確認(rèn)信息確認(rèn)成功顯示查詢結(jié)果D:查詢信息 統(tǒng)計 頂層圖: 填寫相應(yīng)的信息統(tǒng)計命令輸入事務(wù)確認(rèn)成功顯示統(tǒng)計結(jié)果 一層圖: 填寫相應(yīng)的信息統(tǒng)計命令輸入事務(wù)返回確認(rèn)信息確認(rèn)成功顯示統(tǒng)計結(jié)果D:查詢信息 管理 頂層圖: 填寫相應(yīng)的信息管理命令輸入事務(wù)確認(rèn)成功管理成功 一層圖: 管理命令輸入事務(wù)填寫相應(yīng)的信息返回確認(rèn)信息確認(rèn)成功處理成功D:記錄 查詢 修改 頂層圖: 填寫相應(yīng)的信息修改命令輸入事務(wù)確認(rèn)成功修改成功 一層圖: 填寫相應(yīng)的信息修改命令輸入事務(wù)返回確認(rèn)信息確認(rèn)成功修改成功D:查詢數(shù)據(jù)庫 5、外部接口需求 在用戶界面方面要求對每一個操作都以主界面為前提彈出相應(yīng)的對話框,硬軟件接口方面沒有特別的需求,一般用戶都可以直接使用。 6、性能需求 因?yàn)橄到y(tǒng)本身較小,實(shí)際使用的人群的特點(diǎn),響應(yīng)時間可能有不同的要求。 7、軟件屬性需求 在數(shù)據(jù)的檢索、數(shù)據(jù)的增刪改方面必須做到絲毫不差,滿足軟件開發(fā)的正確性的要求。必須充分考慮軟件的異常處理機(jī)制以及軟件的復(fù)用性,以增強(qiáng)軟件的健壯性。 在軟件的保密性方面可以不用考慮,此軟件主要是面向小型用戶,對系統(tǒng)的保密沒有要求。 所開發(fā)出來的軟件必須是可維護(hù)的,要有可以升級的空間,要預(yù)留接口,方便后面軟件的升級。 8、二、項(xiàng)目概要設(shè)計 1、總體設(shè)計(系統(tǒng)總流程圖) 個人賬本管理系統(tǒng)數(shù)據(jù)需求(ER圖) 收入管理模塊支出管理模塊查詢功能模塊統(tǒng)計模塊管理模塊修改模塊退出模塊 2、各個界面的截圖及相應(yīng)的操作規(guī)則 在第一次運(yùn)行是要首先運(yùn)行此文件對控件進(jìn)行注冊。 ? 第一次運(yùn)行的結(jié)果如圖所示 ? 收入 ? 支出 ? 查詢 ? 統(tǒng)計 ? 管理 ? 退出 三、詳細(xì)設(shè)計 1、進(jìn)行項(xiàng)目詳細(xì)設(shè)計工作; 2、寫出詳細(xì)設(shè)計說明書。 四、編 碼 1、此系統(tǒng)用MFC來編寫。 2、編碼分工: 3、各個模塊核心代碼 查詢模塊: // CSelect 消息處理程序 void CSelect::OnBnClickedOk(){ // TODO: 在此添加控件通知處理程序代碼 UpdateData(true);CString type,date,kind,count,start,end;m_type.GetLBText(m_type.GetCurSel(),type);m_date.GetLBText(m_date.GetCurSel(),date);m_kind.GetLBText(m_kind.GetCurSel(),kind);m_count.GetLBText(m_count.GetCurSel(),count);CTime t = CTime::GetCurrentTime();int tyear,tmonth,tday;CString year,month,day;tyear=t.GetYear();tmonth=t.GetMonth();tday=t.GetDay();if(date==“今天”){ year.Format(_T(“%d”),tyear); if(tmonth<10) month.Format(_T(“0%d”),tmonth); else month.Format(_T(“%d”),tmonth); if(tday<10) day.Format(_T(“0%d”),tday); //確定查詢 else day.Format(_T(“%d”),tday); start=year+_T(“-”)+month+_T(“-”)+day; end=year+_T(“-”)+month+_T(“-”)+day;} CString str,str1,str2,str3,str4;ADOConn m_AdoConn;m_AdoConn.OnInitADOConn();CString sql; if(type==_T(“0”)&&kind!=_T(“所有收入”)) sql.Format(_T(“select 時間,類別,金額,備注from mymoney where 類型= ”+type+“ and 類別= '”+kind+“' and 時間>= '”+start+“'and 時間<= '”+end+“' and 金額>= ”+count+“ order by 時間asc”)); _RecordsetPtr m_pRecordset;m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql);m_list.DeleteAllItems();while(m_AdoConn.m_pRecordset->adoEOF==0){ m_list.InsertItem(0,_T(“")); m_list.SetItemText(0,0,(_bstr_t)m_pRecordset->GetCollect(_T(”時間“))); m_list.SetItemText(0,1,(_bstr_t)m_pRecordset->GetCollect(_T(”類別“))); m_list.SetItemText(0,2,(_bstr_t)m_pRecordset->GetCollect(_T(”金額“))); m_list.SetItemText(0,3,(_bstr_t)m_pRecordset->GetCollect(_T(”備注“))); m_pRecordset->MoveNext();} str=m_list.GetItemText(0,0);if(str==_T(”“)){ m_list.DeleteAllItems(); m_date.GetLBText(m_date.GetCurSel(),str1); m_kind.GetLBText(m_kind.GetCurSel(),str2); m_count.GetLBText(m_count.GetCurSel(),str3); str4=_T(”無此記錄“); m_list.InsertItem(0,_T(”“)); } } m_list.SetItemText(0,0,str1);m_list.SetItemText(0,1,str2);m_list.SetItemText(0,2,str3);m_list.SetItemText(0,3,str4);管理模塊: void CManage::OnBnClickedButton1()//數(shù)據(jù)庫備份 { // TODO: 在此添加控件通知處理程序代碼 m_button1.EnableWindow(false);m_button2.EnableWindow(true);m_static.SetWindowTextW(_T(”請選擇備份目錄:“));m_static.ShowWindow(SW_SHOW);m_button.ShowWindow(SW_SHOW);m_edit.ShowWindow(SW_SHOW);m_edit.SetWindowTextW(_T(”“));flag=1;strname=_T(”“);UpdateData(false);Invalidate(true);} void CManage::OnBnClickedButton2()//數(shù)據(jù)庫還原 { // TODO: 在此添加控件通知處理程序代碼 m_button2.EnableWindow(false);m_button1.EnableWindow(true);m_static.SetWindowTextW(_T(”請選擇還原文件目錄:“));m_static.ShowWindow(SW_SHOW);m_button.ShowWindow(SW_SHOW);m_edit.ShowWindow(SW_SHOW);m_edit.SetWindowTextW(_T(”“));flag=-1;strname=_T(”“);UpdateData(false);Invalidate(true);} void CManage::OnBnClickedButton3()//察看日志 { // TODO: 在此添加控件通知處理程序代碼 CFile file;CTime t=CTime::GetCurrentTime();int tyear,tmonth,tday,thour,tmin,tsec;CString year,month,day,hour,min,sec;tyear=t.GetYear();tmonth=t.GetMonth();tday=t.GetDay();thour=t.GetHour();tmin=t.GetMinute();tsec=t.GetSecond();year.Format(_T(”%d“),tyear);month.Format(_T(”%d“),tmonth);day.Format(_T(”%d“),tday);hour.Format(_T(”%d“),thour);min.Format(_T(”%d“),tmin);sec.Format(_T(”%d“),sec); CString str;str=year+_T(”“)+month+_T(”“)+day+_T(” “)+hour+_T(”:“)+min+_T(” 察看日志rnrn“);} void CManage::OnBnClickedButton4()//瀏覽 { // TODO: 在此添加控件通知處理程序代碼 if(flag==1){ UpdateData(true); TCHAR szDir[MAX_PATH]; BROWSEINFO bi; ITEMIDLIST *pidl; bi.hwndOwner = this->m_hWnd; bi.pidlRoot = NULL; bi.pszDisplayName = szDir; bi.lpszTitle = _T(”請選擇目錄“); bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = 0; bi.iImage = 0; pidl = SHBrowseForFolder(&bi); if(pidl == NULL)return; if(!SHGetPathFromIDList(pidl, szDir))return; else strname=szDir; UpdateData(false);} else if(flag==-1){ CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,_T(”數(shù)據(jù)庫文件|moneyback.db||“)); if(dlg.DoModal()==IDOK) { strname=dlg.GetPathName(); } if(strname!=_T(”“)) { UpdateData(false); } } } 收入模塊: // CIncome 消息處理程序 void CIncome::OnBnClickedOk()//確定按鈕 { // TODO: 在此添加控件通知處理程序代碼 UpdateData(true);if(m_count.IsEmpty()){ MessageBox(_T(”金額不能為空“)); return;} ADOConn m_AdoConn;m_AdoConn.OnInitADOConn();_bstr_t sql;sql = ”select * from mymoney“;_RecordsetPtr m_pRecordset;m_pRecordset=m_AdoConn.GetRecordSet(sql);CString mydate,mykind;m_date.GetLBText(m_date.GetCurSel(),mydate);m_kind.GetLBText(m_kind.GetCurSel(),mykind);mydate.Remove(' ');try { m_pRecordset->AddNew();//添加新行 m_pRecordset->PutCollect(”類型“,(_bstr_t)_T(”0“)); m_pRecordset->PutCollect(”時間“,(_bstr_t)mydate); m_pRecordset->PutCollect(”類別“,(_bstr_t)mykind); m_pRecordset->PutCollect(”金額“,(_bstr_t)m_count); m_pRecordset->PutCollect(”備注“,(_bstr_t)m_remark); m_pRecordset->GetFields()->GetItem(”類型“)->Value =(_bstr_t)_T(”0“); m_pRecordset->GetFields()->GetItem(”時間“)->Value =(_bstr_t)mydate; m_pRecordset->GetFields()->GetItem(”類別“)->Value =(_bstr_t)mykind; m_pRecordset->GetFields()->GetItem(”金額“)->Value =(_bstr_t)m_count; m_pRecordset->GetFields()->GetItem(”備注“)->Value =(_bstr_t)m_remark; m_pRecordset->Update(); m_AdoConn.ExitConnect();} catch(...){ MessageBox(_T(”操作失敗“)); return;} } 統(tǒng)計模塊: // CCount 消息處理程序 void CCount::OnBnClickedOk()//確定統(tǒng)計 { // TODO: 在此添加控件通知處理程序代碼 UpdateData(true);CString type,date,kind,way,start,end;m_type.GetLBText(m_type.GetCurSel(),type);m_date.GetLBText(m_date.GetCurSel(),date);m_kind.GetLBText(m_kind.GetCurSel(),kind);m_way.GetLBText(m_way.GetCurSel(),way); if(type==”支出“) type=_T(”1“);else type=_T(”0“); CTime t = CTime::GetCurrentTime();int tyear,tmonth,tday;CString year,month,day;tyear=t.GetYear();tmonth=t.GetMonth();tday=t.GetDay(); if(date==”今天“){ year.Format(_T(”%d“),tyear); month.Format(_T(”%d“),tmonth); day.Format(_T(”%d“),tday); start=year+_T(”-“)+month+_T(”-“)+day; end=year+_T(”-“)+month+_T(”-“)+day;} ADOConn m_AdoConn;m_AdoConn.OnInitADOConn();CString sql; if(kind!=_T(”所有收入“)&&kind!=_T(”所有支出“)&&way==_T(”總和“)) sql.Format(_T(”select sum(金額)as my from mymoney where 類型= “+type+” and 類別= '“+kind+”' and 時間>= '“+start+”'and 時間<= '“+end+”' “)); _RecordsetPtr m_pRecordset;m_pRecordset = m_AdoConn.GetRecordSet((_bstr_t)sql); while(m_AdoConn.m_pRecordset->adoEOF==0){ m_list.InsertItem(0,_T(”“)); m_list.SetItemText(0,0,date); m_list.SetItemText(0,1,kind); m_list.SetItemText(0,2,way); try { m_list.SetItemText(0,3,(_bstr_t)m_pRecordset->GetCollect(_T(”my“))); } catch(...) { m_list.SetItemText(0,3,_T(”0“)); } m_pRecordset->MoveNext();} } 支出模塊: // COutlay 消息處理程序 void COutlay::OnBnClickedOk(){ // TODO: 在此添加控件通知處理程序代碼 UpdateData(true);if(m_count.IsEmpty()){ MessageBox(_T(”金額不能為空“)); return;} ADOConn m_AdoConn;m_AdoConn.OnInitADOConn();_bstr_t sql;sql = ”select * from mymoney“;_RecordsetPtr m_pRecordset;m_pRecordset=m_AdoConn.GetRecordSet(sql);CString mydate,mykind;m_date.GetLBText(m_date.GetCurSel(),mydate);m_kind.GetLBText(m_kind.GetCurSel(),mykind);mydate.Remove(' '); try { m_pRecordset->AddNew();//添加新行 m_pRecordset->PutCollect(”類型“,(_bstr_t)_T(”1“)); m_pRecordset->PutCollect(”時間“,(_bstr_t)mydate); m_pRecordset->PutCollect(”類別“,(_bstr_t)mykind); m_pRecordset->PutCollect(”金額“,(_bstr_t)m_count); m_pRecordset->PutCollect(”備注“,(_bstr_t)m_remark); m_pRecordset->GetFields()->GetItem(”類型“)->Value =(_bstr_t)_T(”1“); m_pRecordset->GetFields()->GetItem(”時間“)->Value =(_bstr_t)mydate; m_pRecordset->GetFields()->GetItem(”類別“)->Value =(_bstr_t)mykind; m_pRecordset->GetFields()->GetItem(”金額“)->Value =(_bstr_t)m_count; m_pRecordset->GetFields()->GetItem(”備注“)->Value =(_bstr_t)m_remark; m_pRecordset->Update(); m_AdoConn.ExitConnect();} catch(...){ MessageBox(_T(”操作失敗")); return;} } 五、項(xiàng)目測試1、2、3、4、黑盒測試用例: 白盒測試用例: 黑盒測試記錄: 白盒測試記錄:第二篇:軟件工程 課程設(shè)計 銷售管理系統(tǒng)
第三篇:工資管理系統(tǒng)--軟件工程課程設(shè)計2
第四篇:軟件工程課程設(shè)計
第五篇:軟件工程課程設(shè)計 (個人賬本管理系統(tǒng))