汽车租贷系统需求说明书目录摘要 (2)需求分析 (3)2.1系统目标 (3)2.2用户需求 (3)2.3性能需求 (3)2.4客户端功能 (4)2.5服务器端功能 (5)概念结构设计 (6)3.1汽车租赁系统总体的系统流程 (6)3.2租车业务流程 (7)3.3还车业务流程 (8)逻辑结构设计 (10)4.1客户—租赁公司ER图 (10)4.2数据库表的设计 (11)4.3基本表结构 (12)系统实现 (15)5.1基本信息管理(以车辆信息管理为例) (15)5.2 租车、还车、续租 (19)5.3 列表编辑框各种编辑功能(获取焦点编辑等功能)主要实现代码如下:.22 系统测试 (24)软件使用说明书 (29)7.1信息查询: (29)7.2基本信息管理主要功能详细操作如下(以销售商信息为例): (30)7.3租赁、续租、还车 (33)设计总结 (34)参考文献 (35)致谢 (36)摘要在数据信息时代,这个社会的人必然会因为要记忆各类繁多的信息多少有些烦恼。
在这个问题的解决上,计算机上的管理系统占有很大的优势和可行性。
每一个正规机构,都有自己的信息管理系统,他们分别承担不同的任务。
汽车租赁系统主要管理汽车公司整个的租车业务。
其完整的开发包括后台数据库的开发和维护,以及前端基本应用程序的开发和编写。
我们着重完成后台程序的开发,我们团队选择了C++作为编辑语言,visualc++6.0为开发工具,数据库选择了SQL server ,在老师的指导下,基本完成了设计任务要求。
基本功能:汽车类型管理、会员类型管理、保险类型管理、销售商管理、保险公司管理、客户信息管理、会员信息管理和汽车租赁、续租、归还管理。
关键词:合作信息管理数据处理需求分析2.1系统目标软件开发的意图为便于汽车租赁的管理,方便查看管理有关汽车及租赁的情况。
本系统需要实现的目标有以下几点:(1)能对车辆信息进行添加,修改,删除;(2)能对客户信息进行添加,修改,删除;(3)能对租赁信息进行查询;(4)能添加管理员;(5)能对汽车销售上信息进行管理。
2.2用户需求用户需求是指用户要求新系统应具有的全部功能和特性。
a使用范围:按汽车租赁公司的相关业务完成汽车租赁系统管理。
b使用权限:汽车租赁公司工作人员。
c需求内容:(1) 查询、修改、删除租赁信息;(2) 查询、修改、删除车辆信息;(3) 查询、修改、删除客户信息;(4)实现用户登录和密码修改。
(5) 添加管理员。
(6)使用图形用户界面,有菜单和工具栏等,符合编程规范。
(7)用数据库建立汽车租赁信息表。
(不限使用哪种数据库)(8)能进行相关信息的统计分析,排序,打印等。
(9)实现帮助功能。
2.3性能需求为了保证系统能够长期、安全、稳定、可靠、高效的运行,汽车租赁管理信息系统应该满足以下的性能需求:(1)数据处理的及时性,准确性系统处理的准确性和及时性是系统的必要性能。
本系统在设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足企业对信息处理的需求。
由于本系统的各种数据对于整个系统的功能和性能举足轻重,因此其准确性在很大程度上决定了系统功能和性能。
在系统开发过程中,必须采用一定的数据验证方法确保数据的准确性。
(2)数据安全性系统数据的安全性在整个系统中占有十分重要的地位。
任何系统都应保证数据的安全性。
(3)系统的易用性本系统是直接面向业务操作员的,而使用人员往往对计算机并不时非常熟悉。
这就要求系统能够提供易用的人机交互界面。
要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面,缩短用户对系统熟悉的过程。
2.4客户端功能图1客户端功能图2.5服务器端功能图2 服务器功能图概念结构设计3.1汽车租赁系统总体的系统流程图3汽车租赁系统总体的系统流程图从此系统流程图可以知道汽车租赁系统的总体功能,包括:客户登陆注册,业务员后台服务等。
涉及:车辆查询,车辆,客户信息管理,租赁信息,员工信息,保险公司,财务管理信息等,体现的是汽车租赁系统的总体实现功能。
图4租车业务流程图租车流程包括:网上租车,到租车公司租车,电话租车。
网上租车时:客户需先登录(注册)完成系统登录信息,选着自己中意的汽车,然后填写提交租赁订单。
到租赁公司租车时:客户需先预知租赁公司的租赁手续,挑选中意的汽车,然后出示租车所需各种证件(身份证,户口本)以及交押金,填写相关汽车租赁表。
电话租车时:在业务员提供的车型,颜色,价格中挑选自己中意的汽车,然后在指定的地点,时间去取车,完成租赁系统过程。
图5 还车业务流程客户还车流程功能,客户要还车可选这到租赁公司还车和异地还车。
到租赁公司还车时:首先业务员检查车辆的状态,如果车辆正常,只需填写相关还车手续就可完成还车业务系统;如果车辆损坏,按租赁合同相关信息进行赔偿。
异地还车时:首先要向租赁公司打电话预约时间,地点,经租赁公司同意后即可还车,当在异地还车时出示租赁公司的相关证件和完成相关手续,提交车辆完成还车业务系统。
逻辑结构设计4.1客户—租赁公司ER图图6客户—租赁公司ER图此ER图是客户与租赁公司的总体关系图。
客户包括:客户编号类型,性别,年龄,身份证,电话号码,家庭住址等。
租赁公司涉及到:车辆:包括汽车名称,汽车状况,车牌号,汽车颜色,购买日期;保险公司:包括公司名称,公司地址,联系电话;销售商:包括销售商名称编号,销售商地址,销售商电话号码等。
4.2数据库表的设计数据库中共建了8张基本表,表与表之间的关系图如图7所示。
图7 表关系图4.3基本表结构4.3.1车辆表4.3.2客户表4.3.3车辆维修记录表4.3.4汽车租赁信息表4.3.5保险公司表4.3.6销售商表4.3.7担保人信息表4.3.8管理员信息表系统实现5.1基本信息管理(以车辆信息管理为例)5.1.1 数据插入的实现主要代码如下:void CDlgCarInfo::OnCarAdd(){// 车辆信息添加//注:1.注意核对数据库,变量定义m_,c_的顺序和类型,类型全为CString,//2.修改SQL Server 表列信息//判断基础信息是否为空if (!InfoIsNull()){CStringc_car_no,c_car_name,c_car_color,c_car_series,c_car_engine_no,c_car_frame,c_car_retailer,c_car _push_time,c_safecomp_No,c_car_reatal,c_car_lim_miles,c_car_out_prince,c_car_in_prince,c_ca r_policy_outlag;m_car_no.GetWindowText(c_car_no);m_car_name.GetWindowText(c_car_name);m_car_color.GetWindowText(c_car_color);m_car_series.GetWindowText(c_car_series);m_car_engine_no.GetWindowText(c_car_engine_no);m_car_frame.GetWindowText(c_car_frame);m_car_retailer.GetWindowText(c_car_retailer);m_car_push_time.GetWindowText(c_car_push_time);m_safecomp_No.GetWindowText(c_safecomp_No);m_car_reatal.GetWindowText(c_car_reatal);m_car_lim_miles.GetWindowText(c_car_lim_miles);m_car_out_prince.GetWindowText(c_car_out_prince);m_car_in_prince.GetWindowText(c_car_in_prince);m_car_policy_outlag.GetWindowText(c_car_policy_outlag);CString sql;sql.Format("insert into tb_car values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",c_car_no,c_car_name,c_car_co lor,c_car_series,c_car_engine_no,c_car_frame,c_car_retailer,c_car_push_time,c_safecomp_No,c_ car_reatal,c_car_lim_miles,c_car_out_prince,c_car_in_prince,c_car_policy_outlag);if (m_pRs->State ==adStateOpen)m_pRs->raw_Close();try{m_pRs->Open((_bstr_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);LoadCarInfo();ClearInterface();MessageBox("操作成功.","提示",MB_OK);}catch(_com_error *e){MessageBox("操作失败.","提示",MB_OK|MB_ICONERROR);}}elseMessageBox("车辆信息不能为空.","提示",MB_OK+MB_ICONINFORMA TION);}5.1.2 数据修改的实现主要代码如下:void CDlgCarInfo::OnCarAlter(){// 车辆信息修改if (!InfoIsNull())//判断车辆信息(文本框)是否完整{if (m_car_list.GetSelectionMark()!=-1)//判断是否有焦点被选中{if (MessageBox("确实要修改数据吗?","提示",MB_YESNO|MB_ICONINFORMA TION)==IDYES){CStringc_car_no,c_car_name,c_car_color,c_car_series,c_car_engine_no,c_car_frame,c_car_retailer,c_car _push_time,c_safecomp_No,c_car_reatal,c_car_lim_miles,c_car_out_prince,c_car_in_prince,c_ca r_policy_outlag;m_car_no.GetWindowText(c_car_no);m_car_name.GetWindowText(c_car_name);m_car_color.GetWindowText(c_car_color);m_car_series.GetWindowText(c_car_series);m_car_engine_no.GetWindowText(c_car_engine_no);m_car_frame.GetWindowText(c_car_frame);m_car_retailer.GetWindowText(c_car_retailer);m_car_push_time.GetWindowText(c_car_push_time);m_safecomp_No.GetWindowText(c_safecomp_No);m_car_reatal.GetWindowText(c_car_reatal);m_car_lim_miles.GetWindowText(c_car_lim_miles);m_car_out_prince.GetWindowText(c_car_out_prince);m_car_in_prince.GetWindowText(c_car_in_prince);m_car_policy_outlag.GetWindowText(c_car_policy_outlag);int i = m_car_list.GetSelectionMark();//获得当前焦点所在的行CString str = m_car_list.GetItemText(i,0);//获得焦点所在行的第0列的内容CString sql;sql.Format("update tb_car set car_name='%s',car_color='%s',car_series='%s',car_engine_no='%s',car_frame='%s',car_retailer=' %s',car_push_time='%s',safecomp_No='%s',car_reatal='%s',car_lim_miles='%s',car_out_prince=' %s',car_in_prince='%s',car_policy_outlag='%s' where car_no = '%s'",c_car_name,c_car_color,c_car_series,c_car_engine_no,c_car_frame,c_car_retailer,c_car_pus h_time,c_safecomp_No,c_car_reatal,c_car_lim_miles,c_car_out_prince,c_car_in_prince,c_car_po licy_outlag,str);m_pRs->raw_Close();try{m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,a dCmdText);ClearInterface();//修改成功后清除文本框中的内容LoadCarInfo();//重新加载(刷新)表格中的内容MessageBox("操作成功.","提示",64);}catch(...){MessageBox("操作失败.","提示",MB_OK|MB_ICONERROR);}}}elseMessageBox("请选择欲修改的信息.","提示",MB_OK|MB_ICONINFORMA TION);}elseMessageBox("基础信息不完整.","提示",MB_OK|MB_ICONINFORMA TION);}5.1.3 数据删除的实现主要代码如下:void CDlgCarInfo::OnCarDelete(){// 车辆信息删除if (m_car_list.GetSelectionMark()!=-1){if (MessageBox("确实要删除数据吗?","提示",MB_YESNO|MB_ICONINFORMA TION)==IDYES){int i = m_car_list.GetSelectionMark();CString str = m_car_list.GetItemText(i,0);CString sql;sql.Format("delete tb_car where car_No= '%s'",str);m_pRs->raw_Close();try{m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,a dCmdText);ClearInterface();LoadCarInfo();MessageBox("操作成功.","提示",64);}catch(...){MessageBox("操作失败.","提示",MB_OK|MB_ICONERROR);}}}elseMessageBox("请选择欲删除的信息.","提示",MB_OK|MB_ICONINFORMA TION); }5.2 租车、还车、续租5.2.1 租车主要实现代码如下:void CDlgRentCarInfo::OnSava(){// TODO: Add your control notification handler code hereCStringc_contract_no,c_saleman,c_rent_time,c_rent_duration,c_rent_pattern,c_rent_type,c_discunt,c_ren t_deposit,c_total_amount;m_contract_no.GetWindowText(c_contract_no);m_saleman.GetWindowText(c_saleman);m_rent_time.GetWindowText(c_rent_time);m_rent_duration.GetWindowText(c_rent_duration);m_rent_pattern.GetWindowText(c_rent_pattern);m_rent_type.GetWindowText(c_rent_type);m_discunt.GetWindowText(c_discunt);m_rent_deposit.GetWindowText(c_rent_deposit);m_total_amount.GetWindowText(c_total_amount);if(c_car_no.IsEmpty()||c_client_no.IsEmpty()||c_contract_no.IsEmpty()||c_saleman.IsEmpty( )||c_rent_time.IsEmpty()||c_rent_duration.IsEmpty()||c_rent_pattern.IsEmpty()||c_rent_type.IsEmp ty()||c_discunt.IsEmpty()||c_rent_deposit.IsEmpty()||c_total_amount.IsEmpty()) {MessageBox("车辆信息和用户信息不能为空!","提示",MB_OK);return;}CString sql;sql.Format("insert into tb_rentinfo values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",c_contract_no,c_car_no,c_client_no,c_salem an,c_rent_time,c_rent_duration,c_rent_pattern,c_rent_type,c_discunt,c_rent_deposit,c_total_amou nt);if (m_pRs->State==adStateOpen){m_pRs->raw_Close();}try{m_pRs->Open((_bstr_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adC mdText);LoadRentInfo();MessageBox("租车成功.","提示",MB_OK);}catch(_com_error *e){MessageBox("操作失败.","提示",MB_OK|MB_ICONERROR);}}5.2.2 还车主要实现代码如下:void CDlgReturnInfo::OnReturn(){// TODO: Add your control notification handler code hereif(c_contract_no.IsEmpty()){MessageBox("请选择要归还的订单!","温馨提示",MB_OK);return;}if (m_list.GetSelectionMark()!=-1){if (MessageBox("确实要归还车辆吗?","提示",MB_YESNO|MB_ICONINFORMA TION)==IDYES){int i = m_list.GetSelectionMark();CString str = m_list.GetItemText(i,0);//获取订单号CString sql;sql.Format("delete tb_rentinfo where contract_no= '%s'",str);m_pRs->raw_Close();try{m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,a dCmdText);MessageBox("还车成功.","提示",64);}catch(...){MessageBox("操作失败.","提示",MB_OK|MB_ICONERROR);}}}}5.2.3续租主要实现代码如下:void CDlgRerentCarInfo::OnRerent(){// TODO: Add your control notification handler code hereif (MessageBox("确实要进行续租吗?","提示",MB_YESNO|MB_ICONINFORMA TION)==IDYES){CString c_contract_no,c_rent_duration,c_rent_deposit;m_contract_no.GetWindowText(c_contract_no);m_rent_duration.GetWindowText(c_rent_duration);m_rent_deposit.GetWindowText(c_rent_deposit);CString sql;sql.Format("update tb_rentinfo set rent_duration='%s',rent_deposit='%s' where contract_no = '%s'",c_rent_duration,c_rent_deposit,c_contract_no);m_pRs->raw_Close();try{m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,a dCmdText);MessageBox("续租成功.","提示",64);}catch(...){MessageBox("操作失败.","提示",MB_OK|MB_ICONERROR);}}}5.3 列表编辑框各种编辑功能(获取焦点编辑等功能)的主要实现代码如下:void CKeyEdit::OnKillfocus(){CWnd* temp = NULL;temp = GetParent();if (temp != NULL){if (temp->IsKindOf(RUNTIME_CLASS(CCustomGrid))==true){CString str;GetWindowText(str);((CCustomGrid*)(temp))->SetItemText(((CCustomGrid*)(temp))->row,((CCustomGrid*)(te mp))->col,str);ShowWindow(SW_HIDE);}}}void CCustomGrid::ShowEdit(){CRect rect; //记录当前单元格的坐标GetSubItemRect(row,col,LVIR_LABEL,rect);CString str;str = GetItemText(row,col);edit.MoveWindow(rect);edit.SetWindowText(str);edit.ShowWindow(SW_SHOW);edit.SetSel(0,100);edit.SetFocus();edit.SetReadOnly(!showedit);UpdateWindow();}系统测试6.1运行程序后进入登陆界面输入密码后进入主界面:图6.1 登陆界面6.2输入密码后进入主界面:图6.2 主界面6.3点击基本信息管理,客户信息添加界面:图6.3 客户信息管理主界面6.4输入信息后点击添加完成记录的添加:图6.4 添加客户信息6.5双击列表框中的记录,点击删除实现记录的删除:图6.5 删除客户信息6.6 点击租赁管理,进入汽车租赁界面:6.7选中客户和要租赁的车辆后点击提交即可完成车辆的租赁:图6.7 租车6.8点击续租进入续租界面并选择要续租的订单号:图6.8 续租主界面6.9双击订单号并点击续租进行续租:图6.9续租6.10 点击确定后续租成功:图6.10 续租软件使用说明书7.1信息查询:7.1.1查询是需要选择查询条件并填写查询条件,否则弹出提示:图7.1 查询选项7.2基本信息管理主要功能详细操作如下(以销售商信息为例):7.2.1添加-----在编辑框中写入数据并点击添加,填写信息有无会弹出提示:图7.2.1 添加数据操作7.2.2删除-----双击要删除的记录,点击删除后删除:图7.2.2 删除数据操作7.2.2修改-----双击要修改的记录后,记录会显示在编辑框中,在编辑框中修改后点击修改后便可修改:图7.2 修改数据操作7.3租赁、续租、还车同软件测试6.6~6.10所示。