当前位置:文档之家› 优质汽车销售管理系统的设计与实现

优质汽车销售管理系统的设计与实现

目录一、引言1.1、编写目的 (1)1.2、定义………………………………………………2.1.3、数据库设计步骤 (3)二、需求分析2.1、功能分析 (3)2.2、业务活动 (5)2.3、数据字典 (7)2.4、数据流图 (11)三、结构设计3.1、概念设计 (11)3.2、总体E-R图设计 (12)3.3、逻辑设计 (14)3.4、物理设计 (14)四、运用设计4.1、程序源码与用户界面 (17)4.3、系统运行与维护 (19)五、参考文献5.1、参考文献 (20)1引言1.1编写目的目前大多数厂商忽略了汽车销售管理系统的重要性,而本系统专为具有一定规模和经济条件的大型汽车厂设计。

从进货管理:车辆采购、车辆入库,销售管理到车辆销售、收益统计等,为每个环节明确分工,并通过可视化的软件支持,有效减小了人为差错的概率,代之以高效、便捷、准确的数字化服务系统,使汽车销售管理更加规范化。

根据所学的数据库原理与程序设计的知识,能够针对一个小型的数据库管理系统进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平,通过设计实际的数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能力,提高分析问题和解决问题的能力。

从而达到掌握开发一个小型数据库的目的。

1.2定义1、系统名称:汽车销售管理系统2、数据库管理软件:Microsoft SQL Server3、数据库设计人员:洪保江4、使用本数据库的程序:。

5、数据库设计采用软件:Microsoft Office Visio 20036、系统采用C/S体系结构:Client (客户端)负责提供表达逻辑、显示用户界面信息、访问数据库服务器;Server (服务器)端用于提供数据服务。

7、运行平台:windows 2000/xp/linux1.3、数据库设计步骤2、需求分析2.1功能分析进行需求分析首先是调查清楚用户的实际要求,与用户达成共识,然后分析与表达这些需求。

调查厂商与各部门需求的具体步骤如下:(1).调查厂商组织情况。

包括了解各组织的部门组成情况,各部门的职责等,为分析信息流程做准备。

(2).调查各部门的业务活动情况。

包括了解各个部门和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么,这些是调查的重点。

(3).在熟悉了业务活动的基础上,协助用户明确对新系统的各种要求,包括信息要求,处理要求,安全性与完整性要求,这是调查的又一重点。

(4).确定新系统的边界。

对前面调查的结果进行初步分析,确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成。

调查本地从事汽车销售的企业,根据企业汽车销售的情况,设计用于汽车销售的管理系统,主要功能有:①基础信息管理:厂商信息、车型信息和客户信息;②进货管理:车辆采购、车辆入库;③销售管理:车辆销售(处理车辆销售单)、销售代办(处理销售代办单)、车辆查询、销售日记录、销售月记录;④仓库管理:库存车辆、仓库明细、进销存统计;⑤系统维护:如数据安全管理(含备份与恢复)、操作员管理、权限设置等;2.2业务活动一、市场工作1、获取订单(有能力可做)A、联络经销商仓管员,了解经销商库存;B、联络经销商采购购─报价;C、结合经销商库存情况,主动争取订单;D、寻找经销商的配货意向进行展异议处理;E、获得订单,并交由分公司助理安排送货;F、跟踪送货员贷物交接情况及协助送贷员解决收款中遇到的困难。

二、客户拜访及市场工作第一步准备工作:A、检查每周工作记事表,确定当日拜记路线;B、准备当日需解决的问题,预约当日需拜访客户;第二步销售拜访A、接触:问候或自我介绍通过改变交谈环境、车轮话术等方法,确定良好的沟通氛围;B、收集市场资讯及客户销售资料及填报表;C、了解竞争对手及品牌机型的市场动向;D、进行异议处理、协助客户在销售中存在的问题。

第三步总结与调整A、回顾当日工作进展状况,填写每日《工作日记》;B、总结当时工作中遇到的问题,失误与成就,并及时做出调整;C、根据当时进展状况,对《每周工作记事》表做出调整。

2.3数据字典1、数据项2.4数据流图1、顶层进程――销售管理子系统第一层数据流图2、第二层 (1)进程1――接受订单(2) 进程2――处理订单物料入库流程图(3) 进程3――开发票(4) 进程4――结帐系统3、结构设计3.1概念结构设计在概念设计中,通常用四种方法:(1). 自顶向下,首先定义全局概念结构的框架,然后逐步细化.(2). 自底向上,首先定义各局部应用的概念结构,然后将他们集成起来,得到全局概念结构.(3). 逐步扩张. 首先定义最核心的概念结构,然后向外扩充,,直至总体概念结构.(4). 混合策略. 即自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构.我在此设计中采用自底向上的方法,逐步实现数据库的设计,得到全局概念.3.2、总体E-R图设计3.3逻辑结构设计3.3.1基本表1、客户基本表2、车辆基本表1、空闲厂商(厂商号,厂商名)从厂商基本表导出2、进销存统计(仓库号,进货车辆数,出货车辆数)从仓库基本表导出3、所有车辆销售信息(车型号,厂商号,车辆状态)从车辆和厂商基本表导出4、付款(车型号,厂商号,车辆名,价格)从车辆表、厂商表导出5、订单生成视图订单(订单号,客户号,订货日期,交货日期,地址,是否存有,是否已订)从订单表、客户表导出6、收益统计信息(车型号,出售车辆数,车辆总成本,获取总金额,利润)从车辆表、车辆销售表导出3.4物理结构设计在物理结构设计阶段首先分两步走:(1)确定数据库的物理结构,在关系数据库中主要是指存取方法和存储结构。

(2)对物理结构的评价是时间和空间效率。

选取正确的关系模式存取方法,常用的有:(1)存取索引方法。

(2)聚簇存取。

(3)HASH存取方法等。

4 运用设计4.1、程序源码与用户界面#include<stdlib.h>#include<stdio.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<Sqltypes.h>#define CAR-NO-LEN 50#define USE-AGE-SEX 5#define CAR-NAME-LEN 50#define DEPART-LEN 100#define CAR-PRICE-LEN 30#define STATUS_LEN 100int main(){/* Step 1 定义句柄和变量 *///以king开头的表示的是连接KingbaseES的变量//以server开头的表示的是连接SQLSERVER的变量SQLHENV kinghenv,serverhenv; //环境句柄SQLHDBC kinghdbc,serverhdbc; //连接句柄SQLHSTMT kinghstmt,serverhstmt; //语句句柄SQLRETURN ret;SQLCHAR cName[NAME-LEN],Depart[DEPART-LEN],cNO[NO-LEN],cPrice[PRICE-LEN],Status[STATUS-LEN];SQLINTEGER sSta,sSage;SQLINTEGER cbAge=0,cbSta=0,cbCno=SQL-NTS,cbPrice=SQL-NTS,cbName=SQL-NTS,cbDeopart=SQL-NTS;/*Step 2 初始化环境 */ret=SQLAllocHandle(SQL-HANDLE-ENV,SQL-NULL-HANDLE,&kinghenv);ret=SQLAllocHandle(SQL-HANDLE-ENV,SQL-NULL-HANDLE,&serverhenv);ret=SQLSetEnvAttr(Kinghenv,SQL-ATTR-ODBC-VERSION,(void*)SQL-OV-ODBC3,0);ret=SQLSetEnvAttr(serverhenv,SQL-ATTR-ODBC-VERSION,(void*)SQL-OV-ODBC3,0);/*Step 3:建立连接 */ret=SQLAllocHandle(SQL-HANDLE-DBC,kinghenv,&kinghdbc);ret=SQLAlloocHandle(SQL-HANDLE-DBC,serverhenv,&serverhdbc);ret=SQLConnect(kinghdbc,"KingbaseES ODBC",SQL-NTS,"SYSTEM",SQL-NTS,"MANAGER",SQL-NTS); if(! SQL-SUCCEEDED(ret)) return -1; //连接失败时返回错误值ret=SQLConnect(serverhdbc,"SQLServer",SQL-NTS,"sa",SQL-NTS,"sa",SQL-NTS);if(! SQL-SUCCEEDED(ret) return -1; //连接失败时返回错误值/* Step 4: 初始化语句句柄 */ret=SQLAllocHandle(SQL-HANDLE-STMT,kinghdbc,&kingstmt);ret=SQLSetStmtAttr(kingstmt,SQL-ATTR-ROW-BIND-BYTE,(SQLPOINTER)SQL-BIND-BY-COLUMN,SQL-IS-INTEGER);ret=SQLAllocHandle(SQL-HANDLE-STMT,serverhdbc,&serverhstmt);/* Step 5:两种方式执行语句 *//* 预编译带有参数的语句 */ret=SQLPREPARE(serverhstmt,"INSERT INTO STUDENT(CAR_NO,CAR_NAME ,DEPARTMENT_NAME,PRICE,STATUS )VALUES (?,?,?,?)",SQL_NTS);if (ret==SQL_SUCCESS ‖ ret==SQL_SUCCESS_WITH_INFO){ret===SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL-CHAR,CAR_NO_LEN,0,Car_NO,0,&cbCar_NO);ret===SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL-CHAR,CAR_NAME_LEN,0,CAR_name,0,&cbCAR_name);ret===SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL-CHAR,2,0,DEPARTMENT_name,0,&cbDEPARTMENT_name);ret===SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_FLOAT,SQL-FlOAT,0,0,price,0,&cbprice);ret===SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_BOOLEAN,SQL-BOOLEAN,0,Status,0,&cbStatus);}/*查询车辆信息的执行SQL语句*/ret=SQLExecDirect(kinghstmt,"SELECT * FROM 车辆",SQL_NTS);if (ret==SQL_SUCCESS ‖ ret==SQL_SUCCESS_WITH_INFO){ret=SQLBindCol(kingghstmt,1,SQL_C_CHAR,Car_NO,CAR_NO_LEN,&cbCar_NO);ret=SQLBindCol(kingghstmt,2,SQL_C_CHAR,CAR_name,CAR_NAME_LEN,cbCAR_name);ret=SQLBindCol(kingghstmt,3,SQL_C_CHAR,DEPARTMENT_name,&cbDEPARTMENT_name);ret=SQLBindCol(kingghstmt,4,SQL_C_FLOAT,price,0,&cbprice);ret=SQLBindCol(kingghstmt,5,SQL_C_CHAR,Status,STATUS_LEN,&cbStatus);}/* Step 6:两种方式的语句 *//*预编译客户基本表带有参数的语句 */ret=SQLPREPARE(serverhstmt,"INSERT INTO STUDENT (C_NO,User_NAME,User_SEX,User_AGE,User_tel,unit) VALUES (?,?,?,?)",SQL_NTS);if (ret==SQL_SUCCESS ‖ ret==SQL_SUCCESS_WITH_INFO){ret===SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL-CHAR,C_NO_LEN,0,c_NO,0,&cbc_NO);ret===SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL-CHAR,User_NAME_LEN,0,User_name,0,&cbUser_name);ret===SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL-CHAR,2,0,User_sex,0,&cbUser_sex);ret===SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_INT,SQL-INT,0,0,User_age,0,&cbUser_age);ret===SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_INT,SQL-INT,User_tel_LEN,0,user_tel,0,&cbuser_tel); ret===SQLBindParameter(serverhstmt,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL-CHAR,unit_LEN,0,UNIT,0,&cbUNIT);}/*查询客户信息执行SQL语句*/ret=SQLExecDirect(kinghstmt,"SELECT * FROM 客户",SQL_NTS);if (ret==SQL_SUCCESS ‖ ret==SQL_SUCCESS_WITH_INFO){ret=SQLBindCol(kingghstmt,1,SQL_C_CHAR,sc_NO,C_NO_LEN,&cbc_NO);ret=SQLBindCol(kingghstmt,2,SQL_C_CHAR,User_name,User_NAME_LEN,cbUser_name); ret=SQLBindCol(kingghstmt,3,SQL_C_CHAR,sUser_sex,&cbUser_sex);ret=SQLBindCol(kingghstmt,4,SQL_C_INT,sUser_age,User_AGE_LEN,&cbUser_age); ret=SQLBindCol(kingghstmt,5,SQL_C_INT,suser_tel,User_tel,&cbuser_tel);ret=SQLBindCol(kingghstmt,6,SQL_C_CHAR,sUNIT,User_tel,&cbUNIT);}/* Step 7:处理结果集并执行预编译后的语句 */while ( (ret=Fetch(kinghstmt) ) !=SQL_NO_DATA_FOUND){if(ret==SQL_ERROR) prinf("Fetch error\n");else ret=SQL_Execute(serverhstmt);}/* Step 8中止处理 */SQLFreeHandle(SQL_HANDLE_STMT,kinghstmt); SQLDisconnect(kinghdbc);SQLFreeHandle(SQL_HANDLE_DBC,kinghdbc); SQLFreeHandle(SQL_HANDLE_ENV,kinghenv); SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt); SQLDisconnect(serverhdbc);SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc); SQLFreeHandle(SQL_HANDLE_ENV,serverhenv); return 0;}此次数据库的一些操作界面如下4.2、数据库的运行和维护1. 数据库的转储和回复数据库的转储和回复是系统系统正式运行之后最重要的维护工作之一。

相关主题