1、于是对应要求我做了一个收费前台。虽然在数据库中没有对应相应的表。可是它的操作主要是对prescription的读取,以及对durg库存的修改。二、系统分析:2.1系统功能介绍2. 1. 1 人员信息管理系统的功能对医生、病人、药品的基本信息进行增加,删除,修改,查询等的基本功能2. 1. 2 门诊信息管理系统的功能对就诊信息的存储功能和对处方信息进行增加、删除、修改药品等的基本功能3. 2. 3 收费信息管理系统对医疗费用进行总和计算的功能和对药品库存进行修改的功能2.2功能模块系统主要功能模块图如下:三、数据库设计:3.1 E-R图:3.1.1医生信息doctor E-R图3.1.2病人信息
2、patient E-R图3.1.3药品信息drug E-R图3.1.4诊断信息diagnosis E-R图3.1.5处方信息prescription E-R图3.1.6实体间主要关系E-R图3.2数据字典:表1:doctor:表2:patient表3:durg表4:diagnosis表5:prescription四、前台设计:4.1.医生信息管理:4.2.病人信息管理:4.3.药品信息管理:4.4.诊断界面:4.5.处方界面:4.6.病人处方查询:4.7.收费信息管理:五、程序调试结果:1.主界面:2.添加功能:实现代码:void CEmployeeDlg:OnBnClickedOk() /
3、TODO: 在此添加控件通知处理程序代码 /CDialogEx:OnOK(); UpdateData(true); if(m_number.IsEmpty() MessageBox(CString(编号不能为空”); return; if(m_name.IsEmpty()名称不能为空!); if(m_idcard.IsEmpty()省份证号码不能为空! CADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); _bstr_t sql; sql = select* from doctor; _RecordsetPtr m_pRecordset; m_pReco
4、rdset=m_AdoConn.GetRecordSet(sql); try m_pRecordset-AddNew();/添加新行PutCollect(employeeno,(_bstr_t)m_number);name,(_bstr_t)m_name);sex,(_bstr_t)m_sex);age,(_bstr_t)m_age);native,(_bstr_t)m_native);nation,(_bstr_t)m_nation);office,(_bstr_t)m_office);position,(_bstr_t)m_position);idcard,(_bstr_t)m_idcar
5、d);phone,(_bstr_t)m_phone);Update();/更新数据库 m_AdoConn.ExitConnect();/断开数据库连接 catch(.)操作失败 MessageBox(CString(保存成功 m_grid.DeleteAllItems();/删除grid中原来的数据 CString str; str= AddToGrid(str);/重新遍历2.修改功能:OnBnClickedChange() CString tempSql; tempSql.Format(CString(UPDATEmydb.doctorSET name=%s,sex=,age=,nativ
6、e=,nation=,office=,position=,idcard=,phone=WHERE employeeno=),m_name,m_sex,m_age,m_native,m_nation,m_office,m_position,m_idcard,m_phone,m_number); m_AdoConn.ExecuteSQL(_bstr_t)tempSql); m_AdoConn.ExitConnect();修改成功./删除grid中原来的数据3删除功能:代码实现:OnBnClickedDelete() UpdateData(true);delete from doctor where
7、 employeeno = ),m_number); CString tenpstr; tenpstr.Format(CString(是否要删除%s的记录),m_name); if(MessageBox(tenpstr,CString(提示),MB_OKCANCEL)=IDOK) m_AdoConn.ExecuteSQL(_bstr_t)tempSql);删除成功. m_grid.DeleteAllItems(); CString str;4.查询功能:OnBnClickedSelect() CString str1,str2; int num1,num2; num1=m_combo.GetC
8、urSel(); if(0=num1) GetDlgItem(IDC_EDIT_CONTENT)-GetWindowText(str1); str2=CString(select* from doctor where employeeno like )+CString()+str1+CString(); AddToGrid(str2);/ 遍历功能信息记录 if(1=num1)select* from doctor where name like if(2=num1)select* from doctor where office like if(3=num1)select* from doc
9、tor where position like if(4=num1)select* from doctor where idcard like if(5=num1) str2=select* from doctor order by employeeno DESC5.诊断界面:6.处方界面:7.处方查询:8.付款界面:9.修改库存:对比图:付款前:付款后:六、总结:通过这次数据库大作业,我们熟悉了vs2010的数据库ADO编程。对于它的添加,修改,删除步骤都有了较大的理解。在此次作业当中遇到两大问题。一是:数据库连接问题,本来开始准备用access做后台,可是不知道为什么我的电脑一直连接不上,
10、于是改用了MYAQL连接。二是:在是使用记录集指针的问题_RecordsetPtr m_pRecordset,在实现添加,删除,修改,查询等操作时,只能执行一次就出现指针无效的结果。最后发现是在连接数据库时没有初始化COM,所以导致有指针无效的结果。然后,最让我开心的是,是实现总价的计算。我是用两个数组,amount20,和price20记住数量和单价,利用for循环计算总价的。然后,就是在 vs2010中字符之间的转换也是我们应该注意的问题。总之,这次实验,让我们学到了许多课本上学不到的知识,也锻炼了我们的思考问题,解决问题的能力。附录:医院综合信息管理系统源代码/ ADOConn.cpp
11、: 实现文件/#include stdafx.hhospital.hADOConn.h/ CADOConnCADOConn:CADOConn()CADOConn()/ CADOConn 成员函数bool CADOConn:OnInitADOConn(void) HRESULT hr; :CoInitialize(NULL); hr=m_pDBConnection.CreateInstance(ADODB.Connection if(SUCCEEDED(hr) m_pDBConnection-ConnectionTimeout=3; /设置连接字符串 _bstr_t strConnection=
12、Driver=MySQL ODBC 5.2 Unicode Driver;SERVER=127.0.0.1;DATABASE=mydb;UID=root;PASSWORD=123456;PORT=3306 hr=m_pDBConnection-Open(strConnection,adModeUnknown); catch(_com_error e)/捕捉异常 CString temp; temp.Format(CString(连接数据库错误信息:%s),e.ErrorMessage(); :MessageBox(NULL,temp,CString(提示信息),NULL); return fa
13、lse; return false;/ 断开数据库连接void CADOConn:ExitConnect(void) if (m_pRecordset!=NULL) Close(); m_pDBConnection- /释放环境CoUninitialize();/ 获取记录集_RecordsetPtr& CADOConn:GetRecordSet(_bstr_t bstrSQL) if(m_pDBConnection=NULL) OnInitADOConn(); m_pRecordset.CreateInstance(_uuidof(Recordset); m_pRecordset-Open(
14、bstrSQL,m_pDBConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); catch(_com_error e)读取数据库错误信息: return m_pRecordset;/ 执行SQL语句ExecuteSQL(_bstr_t bstrSQL) _variant_t RecordsAffected; if(m_pDBConnection=NULL) OnInitADOConn(); m_pDBConnection-Execute(bstrSQL,NULL,adCmdText); return tr
15、ue;执行SQL语句错误信息:),e.Description();/ 返回记录集对象指针的SQL执行函数_RecordsetPtr CADOConn:ExcuteSQLObj(_bstr_t bstrSQL) try m_pRecordset=m_pDBConnection- m_pRecordset=NULL;/ PrescriptionDlg.cpp :/处方:万淑妍PrescriptionDlg.hafxdialogex.h/ CPrescriptionDlg 对话框IMPLEMENT_DYNAMIC(CPrescriptionDlg, CDialogEx)CPrescriptionDl
16、g:CPrescriptionDlg(CWnd* pParent /*=NULL*/) CDialogEx(CPrescriptionDlg:IDD, pParent) m_patientno = _T( m_amount = _T( m_name = _T( m_no = 0;CPrescriptionDlg()void CPrescriptionDlg:DoDataExchange(CDataExchange* pDX) CDialogEx:DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_grid); DDX_Text(pDX, IDC
17、_PATIENTNO, m_patientno); DDX_Text(pDX, IDC_AMOUNT, m_amount); DDX_Text(pDX, IDC_DURGNAME, m_name); DDX_Control(pDX, IDC_DATETIMEPICKER1, m_time);BEGIN_MESSAGE_MAP(CPrescriptionDlg, CDialogEx) ON_BN_CLICKED(IDOK, &OnBnClickedOk) ON_BN_CLICKED(IDC_CHANGE, &OnBnClickedChange) ON_NOTIFY(NM_CLICK, IDC_L
18、IST1, &OnNMClickList1) ON_BN_CLICKED(IDC_DELETE, &OnBnClickedDelete) ON_BN_CLICKED(IDC_CLEAR, &OnBnClickedClear)END_MESSAGE_MAP()/ CPrescriptionDlg 消息处理程序BOOL CPrescriptionDlg:OnInitDialog()OnInitDialog(); 在此添加额外的初始化 flag=0; return TRUE; / return TRUE unless you set the focus to a control / 异常: OCX 属性页应返回 FALSEAddToGrid(CString str) CString sql; sql.Format(str); m_pRecords