CRM客户关系管理系统-需求概设和详设

  • 大概设计

  大概设计就是对需求进行一个整体性分析,把需要实现的功能都列出来,对于客户关系管理系统,我们需要从角色出发,从而确定有哪些需求,最好是画个思维导图

  首先我们是为培训学校这么一个场景来开发的,所以有:学生,讲师,销售,老板这么四个角色,那接下来,我们就要对这几个角色需要实现哪些功能逐一分析了

  第一个,学生,1.交作业 2.查成绩 3.请假 4.合同 5.我的推荐 6.投诉建议

  第二个,讲师, 1.上课点名 2.批作业 3.创建上课记录 4.查看班级成绩 5.课时申报 6.问卷调查

  第三个,销售   1.存储客户信息  2.办理报名手续  3.客户跟踪记录  4.各种维度查询,过滤客户信息

  第四个,老板  1.销售报表分析  2.教学质量报表

  • 详细设计

  对详细设计的话,那就要从业务场景下的客户体验和美观性,安全性,还有在带宽上和并发量进行综合考虑了,这个事一般是架构师进行总体性的一个规划,而在这里的话,由于这个项目只是一个对内的项目,所以对美观性和安全性和带宽上要求就没有那么高了,我们就多关注一下是表的设计即可

  组件上,由于对高并发要求低,Django就非常合适了,前端的话,用bootstrap和jquery就可以了,数据就mysql吧

  首先,我们先创建一个Django项目和一个名为PerfectCRM的数据库(在创建创建数据库时,注意编码,charset utf8),并在django项目下配置数据库

  接下来就models下,建自己基于上面概设分析出来的表类(记住:现在想周全了,后面填坑就少些),主要从值的唯一性,表间关系(一对一,一对多,多对多),可不可空,节省空间上考虑

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib.auth.models import User

from django.db import models

# Create your models here.

class Customer(models.Model):
    ‘‘‘客户信息表‘‘‘
    name = models.CharField(max_length=32, blank=True, null=True)  # blank对admin起作用,而null对数据库起作用,一般两个成对写上
    qq = models.CharField(max_length=64, unique=True)
    qq_name = models.CharField(max_length=64, blank=True, null=True)
    phone = models.CharField(max_length=64, blank=True, null=True)
    source_choices = ((0, ‘转介绍‘),
                      (1, ‘QQ群‘),
                      (2, ‘官网‘),
                      (3, ‘百度推广‘),
                      (4, ‘51CTO‘),
                      (5, ‘知乎‘),
                      (6, ‘市场推广‘)
                      )
    source = models.SmallIntegerField(choices=source_choices)  # 小数字字段省空间
    referral_from = models.CharField(verbose_name=‘转介绍人qq‘, max_length=64, blank=True, null=True)

    consult_course = models.ForeignKey("Course", verbose_name=‘咨询课程‘)
    content = models.TextField(verbose_name=‘咨询详情‘)
    tags = models.ManyToManyField(‘Tag‘, blank=True, null=True)
    consultant = models.ForeignKey(‘UserProfile‘, verbose_name=‘销售顾问‘)
    memo = models.TextField(blank=True, null=True, verbose_name=‘备注‘)
    date = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.qq

    class Meta:
        verbose_name = "客户信息表"  #设置了这个,在admin中就可以显示中文,不过这个还会加上一个1个s
        verbose_name_plural = "客户信息表"  #这个就不会加s

class Tag(models.Model):
    ‘‘‘标签表,给客户打标签‘‘‘
    name = models.CharField(unique=True, max_length=32)

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name_plural = "标签表"

class CustomerFollowUp(models.Model):
    ‘‘‘客户跟踪记录表‘‘‘
    customer = models.ForeignKey(‘Customer‘)
    content = models.TextField(verbose_name=‘跟进内容‘)
    consultant = models.ForeignKey(‘UserProfile‘, verbose_name=‘跟进人‘)
    intention_choices = ((0, ‘2周内报名‘),
                         (1, ‘1个月内报名‘),
                         (2, ‘近期无报名计划‘),
                         (3, ‘已在其他机构报名‘),
                         (4, ‘已报名‘),
                         (5, ‘已拉黑‘)
                         )

    intention = models.SmallIntegerField(choices=intention_choices)
    date = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return "<%s : %s>" % (self.customer.qq, self.intention)

    class Meta:
        verbose_name_plural = "客户跟踪记录表"

class Course(models.Model):
    ‘‘‘课程表,在这里与班级一对多,一个课程可以多个班,创建班级时,选择课程‘‘‘
    name = models.CharField(max_length=64, unique=True)
    price = models.PositiveSmallIntegerField(verbose_name=‘课程价格‘)
    period = models.PositiveSmallIntegerField(verbose_name=‘周期(月)‘)
    outline = models.TextField(verbose_name=‘课程大纲‘)

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name_plural = "课程表"

class Branch(models.Model):
    ‘‘‘校区‘‘‘
    name = models.CharField(max_length=128, unique=True)
    addr = models.CharField(max_length=128)

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name_plural = "校区"

class ClassList(models.Model):
    ‘‘‘班级表‘‘‘
    brance = models.ForeignKey(‘Branch‘, verbose_name=‘校区‘)
    course = models.ForeignKey(‘Course‘)
    class_type_choices = ((0, ‘面授(脱产)‘),
                          (1, ‘面授(周末)‘),
                          (2, ‘网络班‘),
                          )
    class_type = models.SmallIntegerField(choices=class_type_choices, verbose_name=‘班级类型‘)
    semester = models.PositiveSmallIntegerField(verbose_name=‘学期‘)
    teachers = models.ManyToManyField(‘UserProfile‘)
    start_date = models.DateTimeField(verbose_name=‘开班日期‘)
    end_date = models.DateTimeField(verbose_name=‘结业日期‘, blank=True, null=True)

    def __unicode__(self):
        return "%s %s %s" % (self.brance, self.course, self.semester)

    class Meta:
        unique_together = (‘brance‘, ‘course‘, ‘semester‘)
        verbose_name_plural = ‘班级表‘

class CourseRecord(models.Model):
    ‘‘‘上课记录(课时) 一个班级有多节课,一个课时会有多个学生记录,主要记录哪个老师上,上课时间...‘‘‘
    from_class = models.ForeignKey("ClassList", verbose_name=‘班级‘)
    day_num = models.PositiveSmallIntegerField(verbose_name=‘第几节‘)
    teacher = models.ForeignKey(‘UserProfile‘)
    has_homework = models.BooleanField(default=True)
    homework_title = models.CharField(max_length=128, blank=True, null=True)
    homework_content = models.TextField(blank=True, null=True)
    outline = models.TextField(verbose_name=‘本节课程大纲‘)

    date = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return "%s %s" % (self.from_class, self.day_num)

    class Meta:
        unique_together = (‘from_class‘, ‘day_num‘)
        verbose_name_plural = ‘上课记录表‘

class StudyRecord(models.Model):
    ‘‘‘学习记录表‘‘‘
    student = models.ForeignKey(‘Enrollment‘)
    course_record = models.ForeignKey(‘CourseRecord‘)
    attendance_choices = ((0, ‘已签到‘),
                          (1, ‘迟到‘),
                          (2, ‘缺勤‘),
                          (3, ‘早退‘),
                          )
    attendance = models.SmallIntegerField(choices=attendance_choices, default=0)
    score_choices = ((100,‘A+‘),
                     (90, ‘A‘),
                     (85, ‘B+‘),
                     (80, ‘B‘),
                     (75, ‘B-‘),
                     (70, ‘C+‘),
                     (60, ‘C‘),
                     (40, ‘C-‘),
                     (-50, ‘D‘),
                     (-100, ‘COPY‘),
                     (0, ‘N/A‘),
                     )
    score = models.SmallIntegerField(choices=score_choices, default=0)
    memo = models.TextField(blank=True, null=True, verbose_name=‘备注‘)
    date = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return "%s %s %s" % (self.student, self.course_record, self.score)

    class Meta:
        unique_together = (‘student‘,‘course_record‘)
        verbose_name_plural = "学习记录"

class Enrollment(models.Model):
    ‘‘‘报名表,主要考虑一个客户可能报多个班‘‘‘
    customer = models.ForeignKey(‘Customer‘)
    enrolled_class = models.ForeignKey(‘ClassList‘, verbose_name=‘所报班级‘)

    consultant = models.ForeignKey(‘UserProfile‘, verbose_name=‘课程顾问‘)

    contract_agreed = models.BooleanField(default=False, verbose_name=‘学员已同意合同‘)
    contract_approved = models.BooleanField(default=False, verbose_name=‘合同已审核‘)
    date = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return "%s %s" % (self.customer, self.enrolled_class)

    class Meta:
        unique_together = (‘customer‘, ‘enrolled_class‘)
        verbose_name_plural = ‘报名表‘

class Payment(models.Model):
    ‘‘‘缴费记录‘‘‘
    customer = models.ForeignKey(‘Customer‘)
    course = models.ForeignKey("Course")
    amount = models.PositiveIntegerField(verbose_name=‘数额‘, default=500)
    consultant = models.ForeignKey(‘UserProfile‘)
    date = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return ‘%s %s‘ % (self.customer, self.amount)

    class Meta:
        verbose_name_plural = "缴费记录表"

class UserProfile(models.Model):
    ‘‘‘账号表‘‘‘
    user = models.ForeignKey(User)
    name = models.CharField(max_length=32)
    roles = models.ManyToManyField(‘Role‘, blank=True, null=True)

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name_plural = "账号表"

class Role(models.Model):
    ‘‘‘角色表‘‘‘
    name = models.CharField(max_length=32, unique=True)

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name_plural = "角色表"

  涉及知识点:

  • 表字段设计时,blank为True时,是对admin起作用,而null为True时,则是对数据库起作用
  • verbose_name不仅在字段中起标记作用,还可以在Meta定义,在admin中是显示你定义的内容,其中verbose_name_plural会去掉s
  • 在定义字段时,可以充分考虑使用场景,适时使用节省空间的字段类型,比如SmallIntegerField可以用在数字为选择项的时候,还有正数PositiveIntegerField
  • 联合唯一索引  class Meta:unique_together = (‘x‘,‘y‘)  x,y为字段名
  • 时间自增  auto_now_add = True
  • django 自带有一张用户常用的验证的表,可以直接继承使用 from django.contrib.auth.models import User  使用时,用外键关联(一对一和一对多都行)

原文地址:https://www.cnblogs.com/xinsiwei18/p/8280819.html

时间: 2024-10-01 11:59:18

CRM客户关系管理系统-需求概设和详设的相关文章

CRM客户关系管理系统如何分析客户的动态需求

由于激烈的市场竞争,对于怎样掌握客户的动态需求,怎样保持客户市场的稳定增长,对于企业来说已经成为普遍的关注点.CRM客户关系管理系统经过了10年的发展历程,怎样管理客户.了解客户成就了CRM客户关系管理系统的大市场. CRM供货商一般侧重于宣扬软件的特性及功用,而对其全体价值则没有做出了解的表述. 用户高档处理层一般从基础设施安顿而非运营和战略视点对待CRM客户关系管理系统施行. 由于无法从运营和战略视点安顿CRM客户关系管理系统,用户对CRM的价值认知只停留在技术功率层面上. 只需跨过技术和流

Django CRM客户关系管理系统

CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现在企业与客户之间的业务和企业内部之前部门之间的业务.因此CRM客户关系管理系统不但可以记录企业自内部信息,对于客户信息存储也是可以做到的,其中还涉及市场竞争对手的情报资料,还包括了企业进行营销.销售及支持服务所需的各种数据. 功能实现 (1)建议统一的信息编码系统; (2)设计能够良好反映事物特性的

crm客户关系管理系统大约多少钱?

随着CRM在企业中的应用普遍化,不少人相信对CRM系统并不陌生,但是更多人关注的还是CRM客户关系管理系统价格如何. 其实CRM价格并不是固定的,毕竟市面上CRM系统种类众多,种类不同,价格不一样,功能不同,价格也不一样,所以CRM客户关系管理系统价格是由多方面因素影响的. 其实不同的CRM都有不同的价格,况且现在很多CRM都分模块或分版本销售,所以会出现不同的需求不同的价格.当然了选择CRM不仅仅要看价格,而且要看这套CRM是否符合自己公司的具体需求.可以尝试多去试用,多去对比,找出适合自己企

CRM客户关系管理系统如何推动企业走向成功

随着我国互联网信息技术水平的不断提高,crm客户关系管理系统发展迅速.许多的企业对crm系统进行了引进,帮助企业赢得收益与未来,那crm系统如何帮助企业走向成功的呢?下面我们一起来看看. 一.集中保存客户信息客户无疑是企业发展的根本,crm系统拥有强大的客户信息管理的能力,可以详细记录客户信息,对客户的信息进行集中管理和共享,防止出现因业务调整或人员的流动而产生客户资源或数据的流失:同时,crm系统能够保证客户信息的完整,积累企业的宝贵财富.让企业从现有客户中获取更多市场份额,让客户生命周期发挥

最好用的CRM客户关系管理系统

佳网CRM客户关系管理系统我们致力于解决企业客户管理,提高企业的办事效率,为企业提供一站式服务化繁为简: 统一管理,不再分散 解决客户资料分散于业务员个人的问题,现在每个人一个帐号,客户资料统一管理 权限设置细化明确 不同部门设置不同的菜单权限,不同的员工级别设置不同的操作权限 精准定位,多条件查找 根据级别.合同状态.所属业务员.跟单状态等不同条件快速查找客户资料 客户资料随身而行 移动端全功能支持,随时随地看客户.跟单.订单.合同资料 实时消息提醒 第一时间通知与您相关的新消息,即刻加入企业

CRM客户关系管理系统商业项目

本课程共33讲,购买课程后,可以下载项目需求分析文档,数据库设计文档,完整的项目源代码,数据库文件等资料,系统采用jsp,servlet,js,ajax,jquery,easyui,mysql数据库等相关技术实现,所有代码均为原生态,无第三方插件,系统稳定,高效,快捷,本系统是专门针对各种中小型企业量身定做的CRM客户关系管理系统,为企业管客户,管商机,管销售,从而推动业务进展,提高工作效率,管理大数据. 项目主要功能有客户管理,合同管理,合同附件管理,合同预览(放大缩小),订单管理,商务洽谈,

CRM客户关系管理系统商业项目视频课程

本课程共33讲,购买课程后,可以下载项目需求分析文档,数据库设计文档,完整的项目源代码,数据库文件等资料,系统采用jsp,servlet,js,ajax,jquery,easyui,mysql数据库等相关技术实现,所有代码均为原生态,无第三方插件,系统稳定,高效,快捷,本系统是专门针对各种中小型企业量身定做的CRM客户关系管理系统,为企业管客户,管商机,管销售,从而推动业务进展,提高工作效率,管理大数据. 项目主要功能有客户管理,合同管理,合同附件管理,合同预览(放大缩小),订单管理,商务洽谈,

CRM客户关系管理系统需求分析文档

系统简介 本软件采用现在流行的WEB架构开发,主要针对中小型公司.管销售,管客户,管商机:可以在任何能上网的地方登录使用,使用简单,功能强大,方便快捷,丰富完善的报表功能,极大的提高公司的运营效率,不会因为人员的变动而导致数据的丢失,对公司的日常业务,问题追责等提供详细数据,对于公司领导可以做到"一表知天下",具体功能如下:1.客户管理:1.1.有非常完善的客户资料信息,对不同的客户进行分类管理,如普通客户,VIP客户,成交客户和潜在客户等1.2.对客户的每次来电,拜访情况可以做详细的

CRM客户关系管理系统 北京易信软科信息技术有限公司

北京易信软科信息技术有限公司 推出大型erp系统,库存管理系统,客户关系管理系统,车辆登记管理系统,员工管理系统,采购管理系统,销售管理系统,为您的企业提供最优质的产品服务 北京易信软科您可信赖的北京软件研发服务商,公司团队有多年应用软件设计制作及开发经验,为各大企业提供软件设计.制作及维护服务,为用户提供可靠高效的应用服务平台 我们通过专业的项目实施流程,为您提供优质的软件策划.软件设计制作.软件部署服务.我们的项目实施和管理流程可以最大限度的控制整个项目进度.确保项目质量 联系方式 1581