第一篇:軟件工程課程設計 (個人賬本管理系統)
軟件工程課程設計報告---個人帳本管理
一、需求分析
1、系統開發背景
當今社會是一個信息與科技并行的時代,在社會中消費時每個人都有的社會行為,消費與人的日常生活是息息相關的,一個人如果有一個很好的消費觀的話能給自己帶來很到好處。鑒于此目的,編寫了一個小型的個人賬本管理系統。此系統是一個簡單的系統,可以管理個人的日常消費,可以為一般人所使用。對于業務較多的用戶來說此系統就不是一個很好的選擇。
2、軟件主要組成及功能
? 收入模塊
功能:錄入收入
任何時間錄入你所得到的收入(共有以下幾種選擇:
1、工資;
2、獎金;
3、其他收入;);
輸入你所的到的金額; 錄入金額的原因(可選);
? 支出模塊
功能:支出的記錄
什么時候
什么類型的支出(1、生活費;
2、日常用品;
3、休閑娛樂;
4、社交應酬;
5、交通費;
6、通訊費;
7、醫療保健;
8、其他支出)輸入支出的金額 什么原因的支出
? 查詢模塊 功能:查詢
以選擇查詢的類型(1、支出;
2、收入;
3、全部)
時間(1、今天;
2、昨天;
3、本周;
4、上周;
5、本月;
6、上月;
7、本年;
8、去年;
9、全部;)以及什么類別
消費的金額在什么范圍之類的記錄 將時間,類別,金額,備注顯示出來
? 統計模塊 功能:統計
選擇統計的類型(1、支出;
2、收入;)
時間(1、今天;
2、昨天;
3、本周;
4、上周;
5、本月;
6、上月;
7、本年;
8、去年;
9、全部;)什么類別
統計的方式(1、總和;
2、平均值;
3、最大值;
4、最小值;)將時間,類別,方式,數值顯示出來
? 管理模塊
功能:完成系統相應的管理
可以對數據庫進行備份 數據庫的還原 查看日志操作。
? 修改模塊
功能:對已有數據進行修改更新操作
對記錄進行修改 對記錄刪除。
? 退出模塊 退出此系統3、4、用戶特點及一般約束 功能需求(DFD圖)
收入 頂層圖:
填寫相應的信息收入錄入事務確認成功錄入成功
一層圖: 收入錄入事務填寫相應的信息返回確認信息確認成功錄入成功D:添加收入信息
支出 頂層圖:
填寫相應的信息支出錄入事務確認成功錄入成功
一層圖:
填寫相應的信息支出錄入事務返回確認信息確認成功錄入成功D:添加支出信息
查詢 頂層圖:
填寫相應的信息查詢命令輸入事務確認成功查詢成功
一層圖: 查詢命令輸入事務填寫相應的信息返回確認信息確認成功顯示查詢結果D:查詢信息
統計 頂層圖:
填寫相應的信息統計命令輸入事務確認成功顯示統計結果
一層圖:
填寫相應的信息統計命令輸入事務返回確認信息確認成功顯示統計結果D:查詢信息
管理 頂層圖:
填寫相應的信息管理命令輸入事務確認成功管理成功
一層圖: 管理命令輸入事務填寫相應的信息返回確認信息確認成功處理成功D:記錄 查詢
修改 頂層圖:
填寫相應的信息修改命令輸入事務確認成功修改成功
一層圖:
填寫相應的信息修改命令輸入事務返回確認信息確認成功修改成功D:查詢數據庫
5、外部接口需求
在用戶界面方面要求對每一個操作都以主界面為前提彈出相應的對話框,硬軟件接口方面沒有特別的需求,一般用戶都可以直接使用。
6、性能需求
因為系統本身較小,實際使用的人群的特點,響應時間可能有不同的要求。
7、軟件屬性需求
在數據的檢索、數據的增刪改方面必須做到絲毫不差,滿足軟件開發的正確性的要求。必須充分考慮軟件的異常處理機制以及軟件的復用性,以增強軟件的健壯性。
在軟件的保密性方面可以不用考慮,此軟件主要是面向小型用戶,對系統的保密沒有要求。
所開發出來的軟件必須是可維護的,要有可以升級的空間,要預留接口,方便后面軟件的升級。
8、二、項目概要設計
1、總體設計(系統總流程圖)
個人賬本管理系統數據需求(ER圖)
收入管理模塊支出管理模塊查詢功能模塊統計模塊管理模塊修改模塊退出模塊
2、各個界面的截圖及相應的操作規則
在第一次運行是要首先運行此文件對控件進行注冊。
? 第一次運行的結果如圖所示
? 收入
? 支出
? 查詢
? 統計
? 管理
? 退出
三、詳細設計
1、進行項目詳細設計工作;
2、寫出詳細設計說明書。
四、編 碼
1、此系統用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()//數據庫備份 { // 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()//數據庫還原 { // 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(”數據庫文件|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;} }
統計模塊:
// CCount 消息處理程序
void CCount::OnBnClickedOk()//確定統計 { // 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;} }
五、項目測試1、2、3、4、黑盒測試用例: 白盒測試用例: 黑盒測試記錄: 白盒測試記錄:
第二篇:軟件工程 課程設計 銷售管理系統
銷售管理系統一.項目簡介
隨著計算機技術的迅猛發展,存在于網絡的企業銷售管理系統將逐步代替傳統的管理模式進入企業。為了更高效得完成銷售方面的工作,也可以有更多的時間處理更多的別的事務,企業也將擺脫原有的管理形勢完全進入信息化管理。銷售管理系統在企業的管理過程中起著巨大的作用
二.功能需求
一個銷售管理系統,設計者的目標是滿足公司運營和日常管理的需要,具有對產品,客戶管理的功能。客戶登錄銷售管理系統進行售后服務查詢,銷售員可以對銷售的產品進行登記,并將銷售情況反饋給數據庫。為管理的方便性和信息傳遞的快速性提供了一個很好的平臺。系統開發的總體任務是實現售后服務及銷售登記自動化。總之,銷售管理系統要實現登陸驗證、商品銷售管理、商品銷售報表管理、客戶信息管理四大部分。1.客戶對功能的需求
1>查看自己的信息,了解自己近期的購買情況。2>查看產品的信息,熟悉產品情況。2>查看售后服務信息。
2.銷售人員對功能的需求
1>查看自己的信息,了解自己近期的銷售情況。2>查看產品的信息,熟悉產品情況。3>登記銷售產品。
4>添加新產品,并填寫產品相關信息。
3.售后服務人員對功能的需求
1>查看售后服務信息。2>添加售后服務信息。
三.分析模型時序圖
銷售管理系統頂層圖
1.客戶管理
第三層DFD圖 客戶管理子系統
2.銷售管理
第三層DFD圖 銷售管理子系統
3.售后服務管理
第三層DFD圖 售后服務管理子系統
4.客戶登錄動態時序圖為
四.模塊活動圖,登錄流程圖
1.注冊、登陸模塊
1>模塊功能描述
該模塊主要實現對用戶能否進入系統的確認以及對進入系統的用戶權限的設定;因為本系統涉及到三類使用者,不可能每一類用戶都具有相同的操作權限,如前所說,必然會早成系統的混亂和崩潰,嚴重影響其安全性和有效性。所以采取在通常的注冊,登錄模式下加上用戶類型的選擇,非常簡潔地就完成了對用戶類型的區別及權限的劃分。2>在模塊的詳細設計后,便能得出實現該部分的具體流程,如圖
用戶注冊模塊程序流程圖
登錄模塊程序流程圖
活動圖為:
2.客戶管理模塊
1>模塊功能描述
顯示客戶的基本信息。庫戶可以查看自己的等級和交易次數。
2>在模塊的詳細設計后,便能得出實現該部分的具體流程,如圖3-8。
客戶管理模塊流程圖
活動圖為:
3.銷售管理模塊 >模塊功能描述
在這個模塊可以登記銷售記錄。并且在提交記錄時,更新數據庫:
(1)更新客戶信息。如果是“老客戶”系統會按照客戶等級給出對應的優惠價。(2)更新產品信息。主要是更新該產品數量。
2>在模塊的詳細設計后,便能得出實現該部分的具體流程,如圖
銷售管理模塊流程圖
活動圖為
五.數據庫設計
1.客戶信息表
字段khidkhnamegyshjchzhgzhugteladrkhtelfaxbzh數據類型IntVarCharVarCharVarCharnCharVarCharncharVarChartext是否是主鍵是否否否否否否否否是否為空否否否是是是否是是說明客戶編號客戶名稱客戶簡稱采購主管采購主管聯系方式客戶地址客戶電話傳真備注
2.商品進貨表
字段數據類型intVarCharCharCharCharnumericnumericint是否是主鍵是否否否否否否否是否為空說明進貨編號商品名稱商品名稱首拼大單位小單位進貨成本jhbhshpmchshpshpddwxdwjhchbxshjgjhshulgyshjhrqbzh否否否否是否否否銷售價格進貨數量供應商進貨日期備注VarCharsmalldatetimeVarChar否否否是否是 3.商品銷售表
字段xshbhshpmchshpshpxshjgxshshlxshryxshrqkhbzh數據類型IntVarCharVarCharNumericIntVarCharSmalldatetimeVarChartext是否是主鍵是否否否否否否否否是否為空否否否是是是否是是說明銷售編號商品名稱商品名稱首拼銷售價格銷售數量銷售人員銷售日期客戶簡稱備注
六.運行界面與代碼
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
`進貨管理
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(”確定刪除當前記錄,數據將不可恢復?“, 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(”確定刪除當前記錄,數據將不可恢復?“, 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 ”數據沒有輸入完整,請重新輸入!“, 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 '在庫存表中將庫存數量減去已售出的數量 If SaleData.action = ”add“ Then rs(”goodcount“)= rs(”goodcount“)(GoodText(0).Text-salecount)End If rs.Update rs.Close MsgBox ”數據更新成功!“, 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.設計背景
隨著科學技術的不斷提高,計算機科學技術日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領域并發揮著越來越重要的作用。現在我國的教育機構對學生成績管理還普遍停留在紙介質的基礎上,這樣的機制已經不能適應時代的發展,因為它浪費了許多人力和物力,在信息時代,這種傳統的管理方法必然被計算機為基礎的信息管理所取代。
通過調查,要求系統具有權限設置功能的登錄模塊,學生可以實現成績信息查詢功能。教務管理人員能夠實現注冊新用戶,學生成績信息的查詢、錄入、刪除、修改、瀏覽、統計等。同時學院在教學這一部分主要是由教務處對課程、對學生、對學生成績進行合理地安排以及統籌計劃,以及讓教務處在最短的時間段把學生的成績核算出來,提高教務處的辦事效率。同時,能夠隨時對學生、學生成績進行各種查詢和統計,以及很好地對系統進行維護。此種學生成績管理系統提供了強大的學生成績管理管理功能,方便了系統管理員對學生成績等信息的添加、修改,打印等操作,同時一樣方面的學生可以對自己各科成績查詢,學習的交流,滿足了時代的需要。
2.設計方案
2.1總體設計
本系統是將現代化的計算機技術和傳統的教學、教務工作相結合,按照學院的工作流程設計完成的。為了使系統在學院的管理中發揮更大的作用,實現工作過程的計算機化,提高工作效率和工作質量,現提出如下的系統開發目標: 1.系統應具有實用性、可靠性和適用性,同時注意到先進性。2.對各個數據庫進行動態管理,防止混亂。
3.能夠按照用戶選擇的不同的條件進行簡單查詢和復合查詢。4.能夠對查詢結果進行分類匯總,實現報表打印。5.注意數據的安全性,具有數據備份和恢復的功能。6.方便用戶的操作,盡量減少用戶的操作。
2.2模塊設計
本系統主要實現以下功能:①添加學生成績; ②刪除學生成績; ③查詢學生成績;④班級創建或刪除; ⑤科目調整和刪除 具體要求為:
a.添加學生成績:輸入要添加的學生的學號、姓名、課程成績等信息,且學號字段不能為空,確定則錄入取消則放棄該操作。
b .刪除功能:輸入要刪除的學生的學號,且必須輸入密碼驗證,確定則執行該操作修改該學生信息,取消則放棄該操作。
c.查詢功能: 查詢功能是本系統的一個重要功能,按照科目成績的相關信息可進行查找,應盡量使操作簡化,節省使用者的時間。
d.班級創建:選擇要創建的班級名稱,或要刪除班級的名稱,單擊確定創建成功,選擇刪除將刪除該班級信息。
e.科目調整:選擇要調整的科目名稱、班級名稱,或要刪除科目和班級的名稱,單擊增加調整成功,選擇刪除將刪除該班級的該項科目信息。
3.方案實施
3.1成績管理各模塊功能介紹
添加學生成績,輸入要添加的學生的學號、姓名、課程成績等信息,且學號字段不能為空,確定則錄入取消則放棄該操作。刪除學生成績,輸入要刪除的學生的學號,且必須輸入密碼驗證,確定則執行該操作修改該學生信息,取消則放棄該操作。查詢學生成績,查詢功能是本系統的一個重要功能,按照科目成績的相關信息可進行查找,應盡量使操作簡化,節省使用者的時間。班級創建或刪除,選擇要創建的班級名稱,或要刪除班級的名稱,單擊確定創建成功,選擇刪除將刪除該班級信息。科目調整和刪除,選擇要調整的科目名稱、班級名稱,或要刪除科目和班級的名稱,單擊增加調整成功,選擇刪除將刪除該班級的該項科目信息。
3.2成績管理模塊功能具體實現
具體實現功能如下:添加學生成績、刪除學生成績、查詢學生成績、班級創建或刪除、科目調整和刪除等。科目管理中科目添加和科目刪除的部分代碼如下:
科目管理
科目添加
ReturnBook()import java.awt.event.*;import javax.swing.*;import java.awt.*;import java.awt.Container;import java.util.*;import java.sql.*;import javax.swing.text.JTextComponent;
//extends JFrame class ReturnBook
implements ActionListener {
JFrame f3;Container cp;JPanel jp1,jp2,jp3,jp4,jp,jpanelWest;JButton jbt1,jbt2;//按鈕:確定、取消、JLabel label;
//標簽
JTextField tf1,tf2;
//定義文本框
JLabel label1,label2,label3,label4;String stuName;
ReturnBook()
{
f3=new JFrame();cp=f3.getContentPane();// 初始化面板、按鈕、標簽、文本框
jp1=new JPanel();
jp2=new JPanel();jp3=new JPanel();jp4=new JPanel();jpanelWest=new JPanel();jp=new JPanel();//-----------------jbt1=new JButton(“確定”);
jbt2=new JButton(“取消”);
//-----------------label=new JLabel(“ size='4'>
學生科目添加
//-----------------tf1=new JTextField(20);tf2=new JTextField(20);
// tf6=new JTextField(20);//-----------------//布局,添加控件
jp1.add(jbt1);jp1.add(jbt2);
stuName=tf2.getText();
jp1.add(new JLabel(“您好”+stuName+“歡迎登陸學生信息系統”));
JPanel jpanel=new JPanel();jpanel.add(label);
JPanel pp4=new JPanel();
JPanel jpane4=new JPanel();
cp.add(pp4,“West”);cp.add(pp2,“Center”);
cp.add(pp3,“South”);
cp.add(jpanel,“North”);JPanel pp2=new JPanel(new GridLayout(5,1));JPanel pp3=new JPanel();pp4.setLayout(new GridLayout(5,1));pp4.add(new JLabel(“學號”,SwingConstants.CENTER));pp2.add(tf1);pp4.add(new JLabel(“科目”,SwingConstants.CENTER));pp2.add(tf2);
pp3.add(jbt1);pp3.add(jbt2);cp.add(jpane4,“East”);
//-----------------
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension screen=kit.getScreenSize();int x=screen.width;
/*取得顯示器窗口的寬度*/ int y=screen.height;f3.setSize(350,330);int xcenter=(x-350)/2;int ycenter=(y-330)/2;f3.setLocation(xcenter,ycenter);/*顯示在窗口中央*/
/*取得顯示器窗口的高度*/
f3.setVisible(true);
//------------------
jbt1.addActionListener(this);//注冊監聽器
jbt2.addActionListener(this);
/*f3.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
} System.exit(0);} });*/ //-----------------
public void insertRecord(){
if(tf1.getText().equals(“")||tf2.getText().equals(”“))
{ JOptionPane.showMessageDialog(f3,”請填寫學生信息“);return;}
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
}catch(ClassNotFoundException e){System.out.println(”加載驅動程序失敗!“);}
try{ String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=Book.mdb“;//直接
Connection con=DriverManager.getConnection(url);Statement sql;
String s=”insert into course values('“+tf1.getText()+”','“+tf2.getText()+”');“;
//查詢輸入的學號是否在數據庫中存在 使用當前類目錄下的數據庫文件
String query=”select * from course where 學號='“+tf1.getText()+”'“;
sql=con.createStatement();
ResultSet rs=sql.executeQuery(query);//返回查詢結果集 boolean moreRecords=rs.next();//判斷結果集是否有數據
if(moreRecords)
{
JOptionPane.showMessageDialog(f3,”學號已經被使用,請重新輸入“);
con.close();tf1.setText(”“);return;
}
int insert=sql.executeUpdate(s);if(insert==1)
{ JOptionPane.showMessageDialog(null,”學生信息錄入成功!“);
tf1.setText(”“);tf2.setText(”“);
}
}catch(SQLException g)
{
System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage());
}
}
public void actionPerformed(ActionEvent e){
String cmd=e.getActionCommand();
if(cmd.equals(”確定“))
{
insertRecord();
}
else if(cmd.equals(”取消“))
}
f3.hide();
public static void main(String []arg){
}
} 科目刪除
BorrowBook()
import java.awt.event.*;import javax.swing.*;import java.awt.*;import java.awt.Container;import java.util.*;import java.sql.*;
class BorrowBook implements ActionListener {
JFrame f;
Container cp;JPanel jpS,jpanelWest;JButton jbt1,jbt2,jbt3,jbt4;//按鈕,查詢、取消、修改 JLabel label,L;
//標簽:請輸入姓名學號 JTextField tf;
//定義文人框
StudentIn a=new StudentIn();JTable table;//用來接收數據庫中返回的信息
Object columnName[]={”學號“,”科目“};
Object ar[][] =new Object[80][6];String sno;String count=”0“;
BorrowBook()
{
f=new JFrame();cp=f.getContentPane();// 初始化面板、按鈕、標簽、文人框 jpS=new JPanel();
jpanelWest=new JPanel();
//-----------------jbt1=new JButton(”查詢“);
jbt2=new JButton(”刪除“);
jbt3=new JButton(”錄入“);
jbt4=new JButton(”關閉“);
//-----------------label=new JLabel(” size='4'> 請 輸 入 科 目 :
table=new JTable(ar,columnName);//ar存放表中的數據,columnname表示列名
JScrollPane scrollpane = new JScrollPane(table);
//-----------------tf=new JTextField(18);
//-----------------
//
//-----------------//布局,添加控件
jpS.add(jbt1);jpS.add(jbt2);jpS.add(jbt3);jpS.add(jbt4);
JPanel jpanel=new JPanel();jpanel.add(label);jpanel.add(tf);
JPanel pp4=new JPanel();
JPanel jpE=new JPanel();
cp.add(jpanel,”North“);JPanel jp=new JPanel();//jp.add(scrollpane);JPanel p=new JPanel();//用來放兩個表 p.setLayout(new BorderLayout());
p.add(L,”North“);p.add(scrollpane);
cp.add(pp4,”West“);cp.add(p,”Center“);
cp.add(jpS,”South“);
cp.add(jpE,”East“);
//-----------------Dimension screen=kit.getScreenSize();int x=screen.width;
/*取得顯示器窗口的寬度*/ int y=screen.height;f.setSize(400,330);
/*取得顯示器窗口的高度*/
Toolkit kit=Toolkit.getDefaultToolkit();int xcenter=(x-350)/2;int ycenter=(y-330)/2;f.setLocation(xcenter,ycenter);/*顯示在窗口中央*/
f.setVisible(true);
//------------------
jbt1.addActionListener(this);//注冊監聽器
jbt2.addActionListener(this);
jbt3.addActionListener(this);
jbt4.addActionListener(this);
/*f.addWindowListener(new WindowAdapter(){
});*/ public void windowClosing(WindowEvent e){ System.exit(0);} } //-----------------int i=0;
public void showRecord(String ql){
while(i>=0)
{
ar[i][0]=”“;ar[i][1]=”“;
i--;} i=0;
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
}catch(ClassNotFoundException e){System.out.println(”加載驅動程序失敗!“);}
try{
String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=Book.mdb“;//直
Connection con=DriverManager.getConnection(url);Statement sql;
String s=”select * from course where 科目 ='“+ql +”'“;
ResultSet rs=sql.executeQuery(s);
接使用當前類目錄下的數據庫文件
sql=con.createStatement();
while(rs.next())
{
String bname=rs.getString(1);
String bno=rs.getString(2);
ar[i][0]=bname;ar[i][1]=bno;i++;
}
count=”“+i+”“;
L.setText(”“+count+”人“);
f.repaint();
con.close();System.out.println(ar[0][1]);
}catch(SQLException g)
{ System.out.println(”E Code“+g.getErrorCode());
System.out.println(”E M“+g.getMessage());
} }
public void deleteRecord(int index)
{
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
}catch(ClassNotFoundException e){System.out.println(”加載驅動程序失敗!“);}
try{
String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=Book.mdb“;//直接使用當前類目錄下的數據庫文件
Connection con=DriverManager.getConnection(url);Statement sql;
String ql=(String)(ar[index][0]);
String s=”delete * from grade where 學號 ='“+ql +”'“;
sql=con.createStatement();
int del=sql.executeUpdate(s);
if(del==0)
{JOptionPane.showMessageDialog(null,”刪除成功!“,”信息“, JOptionPane.YES_NO_OPTION);}
con.close();
f.repaint();
}catch(SQLException g)
{
System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage());
}
}
public void actionPerformed(ActionEvent e)
{
String remember=”“;String ql=”“;
String cmd=e.getActionCommand();
if(cmd.equals(”查詢“))
{
ql=tf.getText().trim();remember=ql;
showRecord(ql);
}
// if(cmd.equals(”刪除“))
// {
// new BorrowIn();
//}
//**************
if(cmd.equals(”刪除“))
{
int index=table.getSelectedRow();
if(index==-1)
JOptionPane.showMessageDialog(null,”請選定要刪除的姓名“,”輸入錯誤“, JOptionPane.YES_NO_OPTION);
else{
BorrowIn k=new BorrowIn();
k.setData(ar[index][0].toString(),ar[index][1].toString());
}
}
//**************
//if(cmd.equals(”還書“))
//new ReturnBook();
if(cmd.equals(”關閉"))
//
f.setVisible(false);
f.dispose();
} public static void main(String []arg){
}
}
BorrowBook a=new BorrowBook();
4.結果與結論
結果:本設計完成了一個具有添加學生成績、刪除學生成績、查詢學生成績、班級創建或刪除、科目調整和刪除等功能的學生成績管理系統。
結論:本系統為學生成績管理系統,主要提供方便高效的管理功能以及網上的信息查閱平臺,學生可以查閱相關的成績和基本信息,管理員可以管理所有信息。包括瀏覽所有用戶信息以及相關的成績信息,實現添加,查詢,或刪除學生成績和信息,并且能夠實現班級創建或刪除和科目調整和刪除等功能。
論文首先介紹了本系統開發的背景研究意義和開發環境,在進行了可行性需求分析后對本系統進行了概要設計,最后利用JAVA開發環境實現了系統設計時所確定的幾種功能,并進行了調試和運行,基本符合了學生成績管理系統的要求。
但是,由于一些技術和設備所限,本系統存在一些不足之處,有待進一步改進和完善,在開發過程中遇到了以下問題:
(1)對后臺數據庫中數據的日常維護,包括自動清理過時數據;
(2)程序中錯誤處理和輸入控制不夠全面,可能導致輸入無效引發錯誤;
(3)對補考學生的處理。
總之此次設計使我受益匪淺,雖然過程中有許多不盡人意的地方,但通過大家的努力最終還是把問題給攻克了。在此次設計中學到的知識對我終生受用。
5.收獲與致謝
軟件工程設計是軟件工程實踐教學的重要組成部分,合理的組織,精心的準備,加上有序的實施,使我們的實踐能力得到很大的提高,同時培養了我們的團隊合作精神,增強了我們學習的自信心,并為我們畢業后從事相關工作打下良好基礎。
在此次的設計中我不僅利用了自己的所學,而且還學到了許多新的知識,不知不覺中我們的設計已經接近了尾聲,在這里非常感謝我們的指導老師王瑞平老師,感謝她給我們的設計所提出的很多很多好的建議和意見,讓我從中獲益匪淺,同時也幫助我們圓滿的完成了課程設計。
最后我要感謝我們組的全體人員,沒有大家的幫助和鼓勵,我也不可能完成這么多的設計,也不可能學到這麼多有用的知識。
謝謝同學們對我的幫助,同時也謝謝老師對我們的輔導。沒有大家的共同努力就沒有我們今天課程設計的圓滿完成。向我摯愛的王瑞平老師以及可愛的同學們送上我最崇高的敬意!謝謝你們!
6.參考文獻
[1]王 晟.《Visual Basic.NET 數據庫開發經典案例解析》.清華大學出版社.2005 [2]馬朝暉等.Java教程.(第4版)[M].北京:人民郵電出版社.2006 [3] 張白一,崔尚森.面向對象程序設計——Java[M].西安:電子科技大學出版社.2004 [4] 袁世鷹.微機教務管理系統的設計與實現[P].北京:開明出版社.2001
第四篇:軟件工程課程設計——物業管理系統
軟件工程
——物業管理系統的開發
學生姓名: 武鵬艷 喬海亮
學生班級: 軟件工程122002班
學生學號: 201220040220 201220040213 指導老師: 潘理虎 日 期: 2014.6.20
目錄
一.背景分析...............................................................................................1 二.系統設計問題定義..............................................................................1 三.系統分析.............................................................................................1
1、現行系統分析................................................................................1
2、系統可行性分析............................................................................1 四.系統描述.............................................................................................2
1、系統需求具體描述........................................................................2
2、系統功能具體描述........................................................................3 五.系統流程圖設計................................................................................3 六.系統功能模塊圖設計........................................................................4
1、系統性能需求分析......................................................................4
2、系統功能需求分析......................................................................5 七.系統功能模型設計............................................................................5 八.系統所涉及的實體聯系設計............................................................5 九. 系統狀態圖設計..............................................................................6 十. 系統數據流圖設計..........................................................................7 十一.系統人機交互界面的設計............................................................9 十二. 系統設計的實現........................................................................11 十三. 系統設計的代碼附錄................................................................20
一.背景分析
隨著市場經濟的發展和人們生活水平的提高,小區物業方面繳費方面越來越多,但繳費難的問題繼續困擾著我們,需要有一個系統來實現銀行卡交水電費,實現小區管理而且小區用戶可以更好的維護小區各項物業管理業務,處理工作,實現繳費方便功能,就可以避免應繳費不及時而造成停電停水的情況發生。二.系統設計問題定義
1、實現對住戶水電使用信息管理。
2、實現住戶的信息查詢與更新。三.系統分析(1)現行系統分析
以往住戶的更替使水電費管理有些混亂,不能順利收取費用。現在的系統會對小區水電管理存在的不完善之處做相應的改進,及時提醒住戶繳費,而且對每戶人員及時更新并做詳細記錄,為操作人員做權限設置。
(2)系統可行性分析 A系統成本效益分析
1、貨幣的時間價值
假設生命周期為t年,編寫程序需m元,應用程序后,每年可節省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系統可行性綜述
1、經濟可行性:獲益是當初投資總額的三倍或三倍以上,可以進行投資。
2、技術可行性:該系統簡單、使用,且以現有的技術可以實現系統中的功能。
3、社會可行性:該系統面向全社會小區居民的物業管理,沒有負面影響,并且可以為社會帶來很高的效益。四.系統描述
(1)系統需求具體描述
所設計的物業管理系統,它是由住戶信息管理,繳費管理,投訴管理,樓房管理組成的網絡系統。a住戶信息管理
由住戶注冊,注冊姓名,聯系方式,住址,郵箱,入住時間。注冊成功后,由系統管理員統一管理,管理員可以進行查詢,修改信息。住戶注冊成功可以進行登錄系統進行查詢,但是不可以修改。進行信息的修改需要投訴給管理員,管理員進行修改。b繳費管理
由住戶執行,住戶可以查詢水電費使用情況,余額不足進行繳費,進入銀行繳費界面,輸入賬號密碼,進行繳費。
c投訴管理
由管理員進行查詢,用戶可以對小區物業管理水電費物業部門投訴建議。管理員可以根據客戶要求,能對住戶水電費信息、修改、查詢和刪除等操作,并且還要實現包括水、電、煤氣費在內的各項物業管理費用的統計、查詢和報表生成。d住戶和管理員
住戶可以管理自己的信息,可以提交投訴信息,可以瀏覽收費信息和繳費信息。管理員可以對紀錄進行增加、刪除、修改,管理投訴等更新操作。用戶進入系統必須先輸入用戶名和密碼,按“確認”按鈕后,系統辨別用戶身份,對合法用戶根據用戶的權限賦予相應的使用功能。
(2)系統功能具體描述
小區物業管理系統具體實現以下功能:
1.對小區所有房屋資料的錄入和增,刪,改,查詢等功能的實現。
2.對本小區內住戶的詳細資料的管理,包括增,刪,改,查詢等功能的實現。
3.實現物業設備管理,儀表包括水,電數據管理,收費管理。儀表數據管理模塊管理每個住戶的水,電的資料,統計住戶每月的用量以及需要交納的費用,收費管理記錄物業公司對住戶的每一筆收費,包括水,電等使用費用和物業管理費用,余額不足進行銀行卡充值。五.系統流程圖設計
六.系統功能模塊圖設計
1、系統性能需求分析
所設計的系統主要涉及到四大部分:系統管理,基本信息管理,水電管理,費用查詢。
(1)系統管理:管理系統操作人員,設置操作人員口令和權限。在滿足不同系統用戶的操作需求的基礎上,提高系統的安全性。(2)基本信息管理:維護小區基本信息。
住戶信息管理:入住登記,信息修改,遷出注銷,查詢。房屋信息管理:房屋信息添加,修改,刪除,查詢。戶型信息管理:小區戶型登記。(3)水電服務管理:完成小區各種服務,例如物業費用繳費管理功能。
(4)查詢統計管理:本系統中各種數據的統計與查詢功能。
2、系統功能需求分析
小區物業管理水電費物業部門用來對住宅小區內水費,電費,繳費情況信息管理系統。根據客戶要求,系統要能對住戶水電費信息、修改、查詢和刪除等操作,并且還要實現包括水、電、煤氣費在內的各項物業管理費用的統計、查詢和報表生成。因此,實現該物業管理系統功能模塊圖如下
七.系統功能模型設計
八.系統所涉及的實體聯系設計
九.系統狀態圖設計(1)總狀態圖設計
(2)系統銀行卡模塊狀態設計
十.系統數據流圖設計
(1)系統數據流程圖
(2)系統數據字典(1)
名字:用水信息記錄表 別名:用水信息
描述:水量剩余小于臨界值時報告住戶
定義:用水信息記錄表=戶主信息+水量使用費+收費日期
位置:輸出打印機(2)
名字:用電信息表 別名:電量信息
描述:剩余電量小于臨界值時報告住戶
定義:用電信息表=戶主信息+電量使用費+收費日期 位置:輸出打印機(3)
名字:住戶信息表 描述:每戶人員的詳細信息
定義:住戶信息表=住戶姓名+性別+年齡+聯系方式+證件號碼 位置:輸出打印機,顯示在屏幕 十一.系統人機交互界面的設計 ①登陸界面的設計
②住戶界面的設計
③管理員界面的設計
十二.系統設計的實現(1)數據庫載入
(2).住戶登陸成功界面
(3)住戶界面
(4)住戶修改信息
(5)住戶查詢物業信息
(6)住戶反饋
(7)住戶繳費
(8)銀行卡登陸
(9)銀行卡登陸成功
(10)銀行卡繳費界面
(11)銀行卡修改密碼界面
(12)管理員登陸
(13)管理員界面
(14)管理員查詢住戶信息界面
(15)管理員修改住戶信息
(16)管理員更新物業信息
(17)管理員添加管理員信息
(18)管理員接收反饋
(19)管理員接收反饋界面
十三.系統設計的代碼附錄
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(“物業系統登錄”);
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=物業管理系統”,“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=物業管理系統”,“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(“繳費”);JMenu back = new JMenu(“反饋”);JMenuItem Item1 = new JMenuItem(“修改住戶信息”);JMenuItem Item2 = new JMenuItem(“查詢物業信息”);JMenuItem Item3 = new JMenuItem(“發送反饋”);JMenuItem Item4 = new JMenuItem(“交電費”);JMenuItem Item5 = new JMenuItem(“交水費”);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(“更新物業信息”);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(“職業:”,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=物業管理系統”,“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 { /*查詢學生信息控件*/ static Serch s;JPanel jpl = new JPanel();JLabel SCH = new JLabel(”物業信息“,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=物業管理系統“,”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(”請選擇你要的服務“)); this.add(p);/*各種服務功能*/ button1 = new Button(”繳水費“); p1.add(button1); this.add(p1); button2 = new Button(”交電費“); 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(”交水費“,act); } if(e.getSource()==button2){//取款 GetBalance gb = new GetBalance(”交電費“,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(){ //創建JFrame對象 JFrame f=new JFrame(”反饋“);//創建具有指定文本的JLbabel對象 JLabel Label=new JLabel(”反饋:“);Font ft = new Font(”黑體“ , Font.BOLD , 24); Label.setFont(ft); Label.setForeground(Color.black);//創建列數為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(”職業:“)};JTextField[] txt = {new JTextField(), new JTextField(), new JTextField(), new JTextField(), new JTextField(),new JTextField(), new JTextField(),new JTextField()};JButton add = new JButton(”確認“);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=物業管理系統“,”sa“,”11111111“); Statement stmt = con.createStatement(); int a = stmt.executeUpdate(”insert into inhabitant(門牌號,姓名,性別,年齡,籍貫,身份證號,電話,職 37 業)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(”職業:“)};JTextField[] txt = {new JTextField(), new JTextField(), new JTextField(), new JTextField(), new JTextField(),new JTextField(), new JTextField(),new JTextField()};JButton add = new JButton(”確認“);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=物業管理系統“,”sa“,”11111111“); Statement stmt = con.createStatement(); int a = stmt.executeUpdate(”insert into inhabitant(門牌號,姓名,性別,年齡,籍貫,身份證號,電話,職業)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(”更新物業信息“,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(”更新物業信息“);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注冊驅動 Connection con = DriverManager.getConnection(”jdbc:sqlserver://localhost:1433;DatabaseName=物業管理系統“,”sa“,”11111111“); String sql = ”insert into PropertyInformation(門牌號 ,姓名, 性別 , 電量 , 水量)values(?,?,?,?,?)“; //2預處理 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執行 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){//構造方法 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()); /*監聽器*/ 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);//初始化 /*選擇各種服務*/ if(e.getSource()== button1){ String number1,number2;//輸入的兩個卡號和密碼的變量 number1=tf1.getText(); number2=tf2.getText(); /*判斷兩次輸入的卡號和密碼是否正確*/ if((”123“.equals(number1))&&(”123“.equals(number2))) { Selection s = new Selection(”選擇服務“,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){//構造函數 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(”選擇服務“,act);//返回選擇服務 } } } 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){//構造函數 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(”請輸入你想交電費的數目")); 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){//判斷余額是否為負 dispose(); ErrorWarn4 ew4 = new ErrorWarn4(); } else if(money<=act.get_Money()){//交費的數額不大于余額 if((money%100!=0)||(money>=5000)){ dispose(); ErrorWarn6 ew6 = new ErrorWarn6(); } 48 目 錄 目錄...............................................................................................................第一章 緒 論.................................................................................................1.1 開發背景說明....................................................................................1.2課程設計目的.....................................................................................1.3課程題目及內容.................................................................................1.4課程設計要求.....................................................................................1.5預期目標.............................................................................................1.6 系統環境............................................................................................第二章 可行性分析.........................................................................................2.1 可行性研究前提................................................................................2.2 經濟上可行性....................................................................................2.3 技術可行性........................................................................................2.4目標方案可行性.................................................................................2.5操作可行性.........................................................................................第三章 需求分析.............................................................................................3.1引言.....................................................................................................3.2任務陳述.............................................................................................3.3市場需求分析.....................................................................................3.4系統功能需求分析.............................................................................3.5系統性能需求分析.............................................................................3.6 系統業務數據流...................................................錯誤!未定義書簽。3.7用例分析...........................................................................................3.8用例列表...........................................................................................3.9繪制系統模型圖...............................................................................第四章 系統概要設計...................................................................................4.1模塊分析和概要設計.......................................................................4.2 系統數據庫邏輯結構設計..............................................................4.3概念模型轉換為關系數據模型.......................................................4.4 數據庫設計......................................................................................第五章 詳細設計...........................................................................................5.1登錄管理...........................................................................................-***39424243443 入帳目時的錯誤,可以根據職工的考勤、職務、部門、各種稅費等等,自動求出工資。為了便于企業領導掌握本企業的工資信息在系統中應加入各種查詢功能,包括個人信息、職工工資、本企業內某一個月或某一部門的工資情況查詢。系統應能輸出各類統計報表。 本系統需要完成的功能主要有:系統數據初始化;職工基本信息數據的輸入、修改、刪除;企業工資的基本設定;職工工資的瀏覽;職工個人工資表的查詢;職工工資的計算;工資報表打印。 數據流: 職工基本狀況:包括職工編號、職工姓名、性別、年齡、職位等。工資級別和工資金額:包括工資等級、工資額。 企業部門及工作崗位信息:包括部門名稱、工作崗位名稱、工作崗位工資等。工資信息:包括職工編號、職工姓名、職工基本工資、職工崗位工資、職工工齡工資、公司津貼、職工實發工資等。工齡和工資金額:包括工齡及對應工資額。 1.4課程設計要求 堅持“規格嚴格,功夫到家”的優良傳統,加強基本功訓練,做到理論與實際相結合,繼承與創新相結合,充分發揮學生的主觀能動性與教師因材施教、嚴格要求相結合,抓智力因素教育與非智力因素教育相結合,教書育人。所設計的工資管理系統應包含輸入輸出、修改、刪除、查詢等基本功能。根據題目的基本需求,畫出流程圖、用例圖、類圖等,編寫程序,并寫出詳細的設計說明書。課程設計過程中,要嚴格遵守課程設計的時間安排,聽從指導教師的指導。正確地完成上述內容,規范完整地撰寫出課程設計報告。 1.5預期目標 計劃設計:對于企、事業單位的工資發放來說,不需要太大型的數據庫系統,只需要一個操作方便,功能實用,能滿足財務部門對工資及時的發放。本工資管理系統預期目標就是實現如下的一些功能:查詢瀏覽記錄功能,增加記錄功能、修改記錄功能、刪除記錄功能、刷新記錄功能、最后實現統計計算功能。 1.6 系統環境 1.6.1硬件:個人PC 1.6.2軟件: Windows XP、Microsoft Visual C++6.0、Rational Rose。 第二章 可行性分析 2.1 可行性研究前提 要求:滿足對工資管理的基本要求及功能,并對職工信息收集、處理、保存。目標:實現無紙化辦公,節省成本,提高工作效率。 條件、假定、限制:當企業工資管理的信息量和復雜程度達到某一限度時,即管理人員的勞動強度超過其承受能力時,就必須采用新的管理手段,如用計算機技術對信息的收集、加工、傳遞和存貯等,這樣,一個工資管理系統就可以對企業職工工資進行高效、合理、恰當地管理。 2.2 經濟上可行性 開發成本要低廉。 效益:大幅度地提高工資管理信息系統的工作質量和效率,讓企業掌握整個工資管理系統的全面情況,為管理人員提供了準確的工資管理信息,促進工資管理工作的規范化及各項管理制度與指標體系的建立和健全;提供各種加工處理了的工資管理信息,以滿足工資管理的特殊要求,適應新形勢對職工隊伍提出的新要求。 效益/投資比:暫時無法估算。投資回收期內: (1)企業有能力承擔系統開發費用。 (2)新系統將為企業帶來經濟效益。管理系統是一個信息化、智能化和先進。理理念的集合體。而管理是一個動態過程,在其運行過程中要采取多項措施。其最主要的表現就是減少了企業管理費用和人力開支。 2.3 技術可行性 (1)軟件需求:操作系統WINDOWS 2000 Advance Server以上。 硬件需求:賽揚1.7G CPU、512M內存 80G硬盤的計算機。(2)本系統采用VC++實現,依靠其強大的面向對象系統,與數據庫管理系統相結合。 (3)要求掌握計算機技術,熟悉系統的功能和使用方法使系統能夠順利運行。 2.4目標方案可行性 計算機設備處理繁雜的工資增減問題,大幅度減少人力、物力,極大地提高企業的管理水平和管理效率。 管理水平和管理效率的提高能直接產生經濟效益。 格,如完成任務表、考勤表、考核表、職工當月的扣款情況(包括水電費、病事假扣款等)等計算職工變動工資、個人所得稅和應發放工資等,編制工資單。按類進行匯總,編制工資匯總表。將實發工資轉入代發銀行,由銀行代發工資,并進行賬務處理。工資結算過程主要設計如下會計賬戶:現金、銀行存款、應付工資、其他應付款、其他應收款等。 3.3市場需求分析 工資管理系統是一個企業單位不可或缺的部分,他能為用戶提供充足的信息和快捷的查詢手段。一個工資管理系統可以高效能、大容量的收集、處理、存儲工資管理信息,大幅度的工資管理信息系統的工作質量和效率。 能夠為企業管理人員及時掌握整個工資管理系統的全面情況,提供系統的準確的工資管理信息,可以促進工資管理工作的規范化及各項管理制度與指標體系的建立和健全。為企業提供各種加工管理了工資管理信息,以滿足工資管理的特殊要求,適應新形勢對職工隊伍建設提出的新要求,幫助管理人員選擇方案,實現優化決策。雖然當前,不少單位的工資管理部門對于計算機應用還僅限于簡單的單機應用,隨著時間的推移、任務的復雜、用戶的需求,其應用還會擴大。 3.4系統功能需求分析 工資管理系統涉及到員工基本信息的錄入、修改和刪除,工資標準的設定、查詢和結算等。 典型的工資管理系統主要有以下基本功能: a)系統數據初始化 b)員工基本信息的錄入、修改、刪除等功能 c)工資標準的設定功能,集體包括職務工資、職稱工資、其他工資標準和福利的設定。 d)工資信息的瀏覽 e)員工工資信息表的創建及查詢 f)工資調整管理 g)工資計算 h)工資報表打印 3.5系統性能需求分析 3.5.1 需求分析總體目標 需求分析的目的在于與開發人員與用戶之間達成系統開發的共識,使開發人員所考慮的系統在功能(系統能做什么)、簡單操作,良好界面,個人信息保密性,系統安全與穩定,良好帳戶管理,友好信息返回模式(如報表及打印功能)。 時,防止數據被不法分析任意的修改和破壞,對所有的敏感數據均進行基于SSL協議 的加密操作,只有對信息解密的人員才能最終讀取數據信息。這樣,能 最大程度的防止數據在傳輸過程的安全保密性。 3.6 系統業務數據流 3.6.1 數據流分析 數據流程圖是一種能全面描述信息系統邏輯模型的主要工具,也是系統分析人員與用戶進行交流的有效手段。本系統的數據流程圖把握住對系統總體目標與總體功能的要求,基于上述的業務流程圖,從科學性,合理性和可行性入手,采用自頂向下,逐層分解的方法建立本管理信息系統的邏輯模型,綜合地反映出信息在本系統中的流動,處理和存儲,具有抽象性和概括性.通過進行用戶調查收集用戶需求后,就要對用戶需求進行分析,并表達用戶的需求。采用結構化分析方法,主要采用數據流圖對用戶需求進行分析,用數字字典和加工說明對數據流圖進行補充和說明。數據流圖用于描述系統中數據流動的過程,反映的是加工處理的對象。 3.6.2 流程圖,模塊圖如下: 流程圖 模塊圖 112 3.9.2活動圖: 分析用例中的邏輯流程,描述用例的事件流,進而畫出各用例對應的活動圖 用戶登錄活動圖: 管理員工信息活動圖: 3.9.3 類圖: 類圖是面向對象的軟件開發中的一個核心概念。Rose中的類圖用于描述軟件系統中涉及到的類的相關信息,以及類與類之間的相互關系。 〔1〕類的識別 類的識別通常由分析員在分析問題域的基礎上來完成。常用的方法有: ? a.名詞識別法。? b.系統識別法。? c.從用例中識別類。? d.利用分解與抽象技術。〔2〕系統類圖 3.9.4狀態圖: 狀態圖(State Diagram)用來描述一個特定對象的所有可能狀態及其引起狀態轉移的事件。 3.9.5 時序圖: 時序圖用來描述對象之間動態的交互關系,著重體現對象間消息傳送消息的時間順序。下面分別給出各個用例的時序圖: 用戶登錄時序圖: 職工時序圖: 71819 設計一般分為三個步驟: 〔1〕概念模型轉換為關系數據模型。〔2〕關系模型的優化。〔3〕設計用戶子模式書號。 4.3概念模型轉換為關系數據模型 一般轉換原則如下: 〔1〕一個實體轉換為一個表(Table),則實體的屬性轉換為表的列(Column),實體的碼轉換為表的主鍵(Primary Key)。 〔2〕實體間的聯系根據聯系的類型,轉換如下: ① 1:n 的聯系: 1:n 的聯系是比較普遍的聯系,其轉換比較直觀。轉換規律是在n 端的實體對應的表中增加屬性,該屬性是1 端實體對應表的主碼。如:崗位和員工的關系是1:n 的聯系。 ② m:n 的聯系: 通過引進一個新表來表達兩個實體間多對多的聯系,新表的主碼由聯系兩端實體的主碼組合而成,同時增加相關的聯系屬性。如:部門與員工的聯系是n:m 聯系。 4.4 數據庫設計 數據庫的物理結構設計是指為邏輯數據模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法),它完全取決于給定的計算機系統。物理結構可分兩步進行。第一步是分析所得到的各種數據模型,依據在實際執行時可能產生的數據容量以及各種數據模型之間的相互依賴程度等,確定數據庫的物理結構;第二步則要根據某種方法對所設計的物理結構進行評價,評價重點是時間和空間的效率。數據庫實施是指建立數據庫,編制與調試應用程序,組織數據入庫,并進行試運行。 根據人員規模,我們只建立起一個數據庫,在此數據庫基礎上建立起如下表: ·職工表 ·用戶表 ·工資表 下面說明各表的字段名稱和數據類型: 工資表: 職工表: 用戶表: 第五章 詳細設計 詳細設計階段主要是將系統中的每個模塊完成的功能進行具體描述。 5.1登錄管理 根據系統總體結構可以得出登錄管理模塊實現用戶登錄、密碼修改和退出系統三個功能。其中,退出系統實現流程很容易,只需要一行代碼即可;用戶登錄的實現流程是用戶在登錄窗口輸入用戶名稱和密碼,如果沒有用戶名和密碼可以進行注冊后再登錄,選擇了用戶角色后,單擊【登錄】按鈕進行提交,系統開始驗證用戶提交的登錄信息是否正確。如果正確,則打開工資管理系統,并根據用戶角色賦于相應的操作權限;否則給出錯誤信息。 5.1.1界面設計 登錄界面如下: 5.1.2 代碼 部分核心代碼設計: 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{//捕捉表的主鍵存在重復值的異常 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 {//創建連接對象實例 } catch(_com_error e){ AfxMessageBox(e.Description());m_pConnection.CreateInstance(“ADODB.Connection”);//設置連接字符串 Cstring strConnect=“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=salary.mdb;Persist Security Info=False;”;//使用Open方法連接數據庫 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用戶管理 用戶管理模塊用于實現用戶的添加、刪除、更新功能。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查詢管理 該模塊實現功能是職工查詢工資的詳細信息,查詢個人詳細信息的功能。 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);{//創建連接對象實例 } catch(_com_error e){ AfxMessageBox(e.Description());m_pConnection.CreateInstance(”ADODB.Connection“);//設置連接字符串 CString strConnect=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=salary.mdb;Persist Security Info=False;“;//使用Open方法連接數據庫 m_pConnection->Open((_bstr_t)strConnect,”“,”“,adModeUnknown); } OnInitADOConn();//設置查詢字符串 CString bstrSQL;bstrSQL.Format(”select * from 工資表 where 職工編號='%s' order by 職//創建記錄集指針對象實例 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(“補貼”));m_gzlist.SetItemText(0,6,(char*)(_bstr_t)m_pRecordset->GetCollect(“房貼”));m_gzlist.SetItemText(0,7,(char*)(_bstr_t)m_pRecordset->GetCollect(“交通補貼”));m_gzlist.SetItemText(0,8,(char*)(_bstr_t)m_pRecordset->GetCollect(“應發數”));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(“會費”));m_gzlist.SetItemText(0,12,(char*)(_bstr_t)m_pRecordset->GetCollect(“個人所得稅”));m_gzlist.SetItemText(0,13,(char*)(_bstr_t)m_pRecordset->GetCollect(“應扣數”));m_gzlist.SetItemText(0,14,(char*)(_bstr_t)m_pRecordset->GetCollect(“實發數”)); } void CGXGZ::ExitConnect(){if(m_pRecordset!=NULL) } m_pRecordset->Close();m_pConnection->Close();//將記錄集指針移動到下一條記錄 } //AfxMessageBox(“123”);//斷開數據庫連接 ExitConnect();m_pRecordset->MoveNext(); 第六章 系統測試 6.1 測試方法 (1)測試人員: 測試隊伍由兩位成員組成。軟件的設計者在測試整個過程中負責整體測試方案的制定和測試進度的掌握以及白盒測試的測試者。第二位成員由未參加軟件制作者擔任,主要責任是進行軟件的黑盒測試以及軟件環境,硬件要求和極限測試工作。 (2)機器測試: 通過在計算機上直接運行被測程序,來發現程序中的錯誤。機器測試包括黑盒測試盒白盒測試。黑盒測試也稱功能測試,將軟件看作黑盒子,在完全不考慮程序的內部結構和特性的情況下,研究軟件的外部特性。根據軟件的需求規格說明書測試用例,從程序的輸入和輸出特性上測試是否滿足設定的功能。白盒測試也稱結構測試,將軟件看作一個透明的白盒子,按照程序的內部結構和處理邏輯來選定測試用例,對軟件的邏輯路徑及過程進行測試,檢查與測試是否相符。 6.2測試內容 1)軟件的正常運行、關閉及退出時保存記錄的提示。 2)用戶登錄界面友好,可操作性及安全性能較好,能對不同管理級別者進行限制,以保證數據庫的安全。 3)數據庫的可維護性好,數據的錄入、刪除及更改均能順利完成,并能實現動態更新。 4)數據查詢便捷,能對各種不同的查詢條件搜索,以找到最合適的答案。5)數據溢出、越界均能進行非法提示,以警告用戶正確使用。對用戶的正常操作方式也提出警告。 6)數據類型填寫錯誤時,系統能夠報錯。 7)軟件對操作系統的兼容性良好,可移植性完好。 6.3測試結果 本系統有提示消息! 錄入相同編號的數據: 該系統有報錯功能! 查詢職工工資信息: 查詢職工信息成功! 1424344- 牟永敏 清華大學出版社第五篇:工資管理系統--軟件工程課程設計2