基于Python实现的合同管理系统设计

详细设计说明书

1.引言 1
1.1编写目的 1
1.2项目背景 1
1.3定义 2
1.4参考资料 2
2.总体设计 2
2.1需求概述 2
2.2软件结构 2
3.程序描述 2
3.1功能 2
3.2性能 2
3.3输入项目 2
3.4输出项目 2
3.5算法 2
3.6程序逻辑 2
3.7接口 2
3.8存储分配 2
3.9限制条件 2
3.10测试要点 2
1.2项目背景
系统名称:合同管理系统 开发语言:JAVA 开发工具:MyEclipse
WEB服务器:Tomcat+Apache结合。Tomcat解析JSP/Servlet,Apache解析静态HTML文件;
数据库:SQL Server2005 开发环境:Windows 10
开发人员:
1.3定义
SQL SERVER:系统服务器所使用的数据库管理系统(DBMS)。
SQL:一种用于访问查询数据库的语言。
类图(class diagram):表述系统中各个对象的类型及其间存在的各种静态关系。 交互图(interactive diagram):是表述各组对象如何依某种行为进行协作的模型。
SQL(Structured Query Language):结构化查询语言。
1.4参考资料
a.项目开发计划;
b.需求规格说明书;
c.概要设计说明书;
d.测试计划(初稿);
e.用户操作手册(初稿);
f.文档中所引用的其他资料、软件开发标准或规范
2.总体设计
2.1需求概述
按照需求分析文档中的规格要求,使用数据库存储了公司的所有合同以及员工的基本信息,并且提供对存储的数据进行查询、修改、增添、删除的界面,方便用户使用。同时,系统最大限度地实现易安装,易维护性,易操作性,运行稳定,安全可靠。
2.2软件结构
合同管理系统由三个大模块,六个小模块组成,系统的组织结构图如下图所示:
在这里插入图片描述

3.程序描述
3.1用户登录程序模块
3.11程序特征描述
本程序模块是合同管理系统的一个子模块,操作对象是用户,负责用户登陆控制。
3.12程序功能描述
本模块的核心程序是UserLoginManager类,此类根据界面输入的用户名密码来请求服务器验证用户登陆。http://www.biyezuopin.vip/onews.asp?id=16971
主要功能:

  1. 根据用户输入的用户名密码进行登录验证,验证成功进入主界面,显示合约列表;
    1)编写登陆界面:界面有用户名,密码两个输入框,有“登录”、“退出”连个功能按钮;
    a. 若点击“退出”按钮,退出程序。
    b. 若点击“登录”按钮,开始用户登陆。
    先显示查找服务器等待界面,若查找失败,提示失败原因,重新返回登陆界面,若成功,进入登陆等待界面;
    在登陆等待界面,若登陆成功,进入程序主界面,显示合约列表。若登陆失败,提示用户失败原因,重新返回登陆界面。
    2)编写查询服务器等待界面:显示查找等待进度条。
    3)编写登陆等待界面:显示登陆等待进度条。
    4)编写合约列表界面。
    2.要能处理网络连接出错等异常情况:发生异常后,均给出提示,再重新返回
    登录界面
  2. 输入的用户名,密码要进行合法性检查:用户名,密码不能为空
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>我的合同_悦合同_专业合同服务商</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="renderer" content="webkit">
    <meta name="viewport"
          content="width=device-width, initial-scale=1,minimum-scale=1,maximum-scale=1, user-scalable=no">
    <meta name="applicable-device" content="pc,mobile">
    <meta name="description" content="网站地图_悦合同_专业合同服务商">
    <meta name="keywords" content="网站地图,悦合同"/>
    <meta name="author" content="YCY, yuehetong.com">
    <link rel="icon" href="https://s1.yuehetong.com/favicon.ico">
    <link
            href="/static/sitemedia/bootstrap-3.3.6/css/bootstrap.min.css"
            rel="stylesheet">
    <link
            href="/static/sitemedia/font-awesome-4.7.0/css/font-awesome.min.css"
            rel="stylesheet">
    <link href="/static/sitemedia/css/main.css" rel="stylesheet">
    <script
            src="/static/sitemedia/bootstrap-3.3.6/js/html5shiv.min.js"></script>
    <script src="/static/sitemedia/Respond/respond.min.js"></script>
    <script src="/static/sitemedia/js/jquery-1.12.1.min.js"></script>
    <script src="/static/sitemedia/js/sweetalert2.all.min.js"></script>
    <link href="/static/sitemedia/css/sweetalert2.min.css" rel="stylesheet">
    <link
            href="https://s1.yuehetong.com/sitemedia/Respond/respond-proxy.html"
            id="respond-proxy" rel="respond-proxy"/>
    <link href="Respond/respond.proxy.gif" id="respond-redirect"
          rel="respond-redirect"/>
    <script>var _hmt = _hmt || [];
    (function () {
        var hm = document.createElement("script");
        hm.src = "//hm.baidu.com/hm.js?ddb1682f05aed1b904266a0f9c1c0816";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    })();
    var global_contracts = {}
    $(document).ready(function () {
        document.querySelectorAll('td')
            .forEach(e => {
                if (e.id) {
                    global_contracts[e.id] = e.textContent;
                    if (e.textContent.length > 50)
                        e.textContent = e.textContent.slice(0, 50) + '...'
                }
            });
        document.querySelectorAll('td').forEach(e => e.addEventListener('click', function () {
            if (e.textContent.length > 50) {
                Swal({
                    title: '合同主要内容',
                    type: 'info',
                    text: global_contracts[e.id],
                });
            }
        }))
    })
    </script>
    <style>
        .swal2-popup {
            font-size: 1.6rem !important;
        }
    </style>
</head>
<body>


<!-- Copyright � 2008. Spidersoft Ltd -->
<style>
    A.applink:hover {
        border: 2px dotted #DCE6F4;
        padding: 2px;
        background-color: #ffff00;
        color: green;
        text-decoration: none
    }

    A.applink {
        border: 2px dotted #DCE6F4;
        padding: 2px;
        color: #2F5BFF;
        background: transparent;
        text-decoration: none
    }

    A.info {
        color: #2F5BFF;
        background: transparent;
        text-decoration: none
    }

    A.info:hover {
        color: green;
        background: transparent;
        text-decoration: underline
    }
</style>
<!-- /Copyright � 2008. Spidersoft Ltd -->

<nav class="nav">
    <div class='container-fluid nav-top-cont'>
        <div class="navbar-header">
            <a class="logo1" href="yuehetong.html">悦合同_专业合同服务商</a><span
                class="logo2">专业合同服务商</span>
        </div>
        <div id="navbar-menu">
				<span id='top-main-menu'>
					<a href='report.html' class='btn'>悦读</a>
					<a href='event.html' class='btn'>悦活动</a>
					<a href='../hetongfanben' class='btn'>智能合同</a>
					<a href='../xiehetong' class='btn'>写合同</a>
					<a href='../gaihetong' class='btn'>审合同</a>
				</span>
            <a
                    href='javascript:toggleMore();' class='btn' id='top-nav-bt'><i
                    class="fa fa-bars" aria-hidden="true"></i></a><span id='nav-login-area'><div
                id='top-my-menu'>
						<a href='report.html' class='btn'>悦读</a><a href='event.html'
                                                                   class='btn'>悦活动</a><a href='hetongfanben.html'
                                                                                         class='btn'>智能合同</a><a
                href='xiehetong.html' class='btn'>写合同</a><a href='gaihetong.html'
                                                            class='btn'>审合同</a>
					</div>
					<span class='split'>&nbsp;</span>
				<script>hasLogin = true;
				</script>
            <!--<a href='#' class='btn' data-toggle="modal" data-target="#modalLogin">登录</a>-->
					<a class='btn' href='/my' id='mbt'><i class='fa fa-vine'></i>{{ username }}</a>
					<a class='btn' href='/logout' id='mbt'><i class="fa fa-user-o"></i>登出</a>
        </span>
        </div>
    </div>
</nav>
<div class="container index-body" style="width: 100%">
    <div class="row depot-outer">
        <div class='col-sm-3 col-xs-2 depot-list-outer'>
            <ul class='row depot-list-left'>
                <li><a href='sitemap.html' class='depot-list sel' style="margin-left: 40px;margin-right: 40px;"><h1>
                    我的合同</h1></a></li>
            </ul>
        </div>
        <div class='col-sm-9 col-xs-10 dl-cont-outer sys-outer' style="padding-left: 15px;">
            <div class='row'>
                <div class="container">
                    <table class="table table-striped">
                        <thead>
                        <tr>
                            <th>类型</th>
                            <th>联系人</th>
                            <th>联系电话</th>
                            <th>联系邮箱</th>
                            <th>合同主要内容</th>
                            <th>时间</th>
                            <th>价钱</th>
                            <th>审核进度</th>
                        </tr>
                        </thead>
                        <tbody>
                        {% if contracts %}
                            {% for contract in contracts %}
                                <tr>
                                    <td>{{ contract.title }}</td>
                                    <td>{{ contract.name }}</td>
                                    <td>{{ contract.phone }}</td>
                                    <td>{{ contract.email }}</td>
                                    <td id={{ contract.contract_id }}>{{ contract.content }}</td>
                                    <td>{{ contract.time }}</td>
                                    <td>{{ contract.price }}</td>
                                    <td>{{ contract.result }}</td>
                                </tr>
                            {% endfor %}
                        {% endif %}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
        <div class='clearfix'></div>
    </div>
</div>
<footer>
    <div class="container" id='footer-in'>
        <div class='col-sm-8 footer-menu'>
            <div class='col-sm-6'>
                <div class='col-xs-6'>
                    <div class='ftitle'>产品</div>
                    <a href='product/xiehetong.html' title='写合同范本'>写合同</a><a
                        href='product/gaihetong.html' title='审合同.改合同'>审合同</a>
                    <!--<a href='https://yuehetong.com/product/zhixun'title='法律|合同咨询'>法律咨询</a>-->
                    <a href='product/guwen.html' title='法律|合同顾问'>合同顾问</a>
                </div>
                <div class='col-xs-6'>
                    <div class='ftitle'>政策</div>
                    <a href='service/agreement.html' title='服务协议'>服务协议</a><a
                        href='faq.html' title='faq.常见问题'>常见问题</a><a
                        href='service/member.html' title='悦合同会员政策'>会员政策</a><a
                        href='service/planV.html' title='悦合同会员权益'>会员权益</a><a
                        href='service/pricing.html' title='服务和商品定价标准'>定价标准</a>
                </div>
                <div class='clearfix'></div>
            </div>
            <div class='col-sm-6'>
                <div class='col-xs-6'>
                    <div class='ftitle'>公司</div>
                    <a href='company/brandstory.html' title='品牌故事'>品牌故事</a><a
                        href='company/about.html' title='关于我们'>关于我们</a><a
                        href='company/contact.html' title='联系方式:客服|合作'>联系我们</a><a
                        href='company/join.html' title='悦合同招聘'>加入我们</a>
                </div>
                <div class='col-xs-6'>
                    <div class='ftitle'>资源</div>
                    <a href='sitemap.html'>网站地图</a><a href='feedback.html'>意见反馈</a>
                </div>
                <div class='clearfix'></div>
            </div>
        </div>
        <div class='col-sm-4 cp'>
            <p>&copy; 悦合同</p>
            <p>
                <a href='yuehetong.html'>yuehetong.com</a>
            </p>
            <p>
                <a target="_blank" href="http://www.miibeian.gov.cn/"
                   rel="nofollow">粤ICP备16004471</a>
            </p>
            <p>版权所有 &copy; 广州诚心网络科技有限公司</p>
        </div>
        <div class='clearfix'></div>
    </div>
    <!-- /container -->
</footer>
<!-- Modal -->
<div class="modal fade" id="modalLogin" tabindex="-1" role="dialog"
     aria-labelledby="modalLogin" aria-hidden="true">
    <div class="modal-dialog modal-sm">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal"
                        aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
                <div class="btn-group btn-group-justified btn-login-group"
                     role="group">
                    <div class="btn-group" role="group">
                        <button type="button" class="btn bt-login"
                                onclick='switchToModal("reg");'>快速登陆/免费加入
                        </button>
                    </div>
                    <div class="btn-group" role="group">
                        <button type="button" class="btn bt-login sel">账号密码登陆</button>
                    </div>
                </div>
            </div>
            <div class="modal-body">
                <div class="alert alert-danger alert-dismissible fade in"
                     role="alert" id='modalLoginErr'>
                    <span id='modalLoginErrCont'></span>
                </div>
                <div class='form-group'>
                    <input type="text" class="form-control" id="modal-login-name"
                           placeholder='支持手机号/邮箱登陆' style='border-top:none;'>
                </div>
                <div class='form-group'>
                    <input type="password" class="form-control" id="modal-login-pwd"
                           placeholder='密码'>
                </div>
            </div>
            <!-- modal-body -->
            <div class="modal-footer">
                <div class='modal-footer-tips'>
                    <label style='float:left;'><input type="checkbox"
                                                      id="chk-rmb" value="rmb" checked='checked'> 下次自动登陆</label><a
                        href='account/pwd/forget.html'>忘记密码?</a>&nbsp;|&nbsp;<a
                        href='javascript:switchToModal("reg");'>新用户注册</a>
                </div>
                <a role="button" href="javascript:login();" class="btn btn-login"
                   data-loading-text="验证中...">登录</a>
                <hr>
                <div class='modal-footer-logbt'>
                    <a href='account/connect/weixin.html' id='wxlogbt'>微信直接登陆</a>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- End Modal -->
<!-- Modal -->
<div class="modal fade" id="modalReg" tabindex="-1" role="dialog"
     aria-labelledby="modalReg" aria-hidden="true">
    <div class="modal-dialog modal-sm">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal"
                        aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
                <div class="btn-group btn-group-justified btn-login-group"
                     role="group">
                    <div class="btn-group" role="group">
                        <button type="button" class="btn bt-login sel">快速登陆/免费加入</button>
                    </div>
                    <div class="btn-group" role="group">
                        <button type="button" class="btn bt-login"
                                onclick='switchToModal("login");'>账号密码登陆
                        </button>
                    </div>
                </div>
                <div class="alert alert-danger alert-dismissible fade in"
                     role="alert" id='alertRegTips'>
                    <span id='alertRegTipsCont'></span>
                </div>
            </div>
            <div class="modal-body">
                <div class="alert alert-danger alert-dismissible fade in"
                     role="alert" id='modalRegErr'>
                    <span id='modalRegErrCont'></span>
                </div>
                <div class='form-group'>
                    <input type="text" class="form-control" id="modal-reg-name"
                           placeholder='手机号' style='border-top:none;'>
                </div>
                <div class='form-group' id='pcode-area'>
                    <input type="text" class="form-control" id="modal-reg-pcode"
                           placeholder='6位手机验证码'>
                    <button role='button' class='btn' id='pcode-a'>获取验证码</button>
                </div>
            </div>
            <!-- modal-body -->
            <div class="modal-footer">
                <div id='reg-succ-tips'></div>
                <a role="button" href="javascript:reg();" class="btn btn-reg"
                   data-loading-text="登陆中..." id='f-reg-bt'>快捷登陆</a>
                <hr>
                <div class='modal-footer-logbt'>
                    <a href='account/connect/weixin.html' id='wxlogbt'>微信直接登陆</a>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- End Modal -->
<!-- Modal -->
<div class="modal fade" id="modalPwd" tabindex="-1" role="dialog"
     aria-labelledby="modalPwd" aria-hidden="true">
    <div class="modal-dialog modal-sm">
        <div class="modal-content">
            <div class="modal-header">
                <h4>设置密码</h4>
                <p>欢迎来到悦合同,首次使用请设置密码</p>
            </div>
            <div class="modal-body">
                <div class="alert alert-danger alert-dismissible fade in"
                     role="alert" id='modalPwdErr'>
                    <span id='modalPwdErrCont'></span>
                </div>
                <div class='form-group pwd-input'>
                    <input type="password" class="form-control" id="modal-reg-pwd"
                           placeholder='设置密码(不少于6位)'>
                </div>
            </div>
            <!-- modal-body -->
            <div class="modal-footer">
                <div class='modal-footer-l'>
                    <label><input type="checkbox" id="modal-achk">我已阅读并同意<a
                            href='service/agreement.html' target='_blank'>《悦合同服务协议》</a></label>
                </div>
                <div id='reg-succ-tips'></div>
                <a role="button" class="btn btn-default" data-dismiss="modal">跳过,以后再设</a><a
                    role="button" class="btn btn-primary" id='f-pwd-bt'>完成设置</a>
            </div>
        </div>
    </div>
</div>
<!-- End Modal -->
<div id='embed-captcha'></div>
<!-- query suggest -->
<div id='query-sug-outer'></div>
<!-- end query suggest -->
<div class='right-nav' id='right-nav'>
    <a href='javascript:toTop();' id='top-a' style='display:none;'><i
            class="fa fa-angle-up" aria-hidden="true"></i></a><a id='rnav-wx'
                                                                 class='rnav-wx' data-cont='微信客服'><i
        class="fa fa-weixin"></i></a>
    <div id='rnav-wxc' class='rnav-wxc'>
        <img src='/static/sitemedia/pics/rnav-wx1.jpg'
             alt='微信客服1'>
        <div id='rnav-wxd'>
            微信扫码咨询<br>请备注“<b>合同服务</b></div>
    </div>
    <!--
<a id='rnav-tel' class='rnav-tel' data-cont='客服电话'><i class="fa fa-phone" aria-hidden="true"></i></a><div id='rnav-telc' class='rnav-telc'><div><i class="fa fa-phone" aria-hidden="true"></i> 020 - 28190981</div><div class='rnav-teld'>周一至周五 9:00~18:00</div></div>-->
</div>
<div id='uitips'>
    <div id='uitipsbar'>&times;</div>
    <div id='uitipscont'></div>
</div>
<script src="/static/sitemedia/js/jquery-1.12.1.min.js"></script>
<script
        src="/static/sitemedia/js/jquery.placeholder.min.js"></script>
<script>$('#modal-login-name').placeholder();
$('#modal-login-pwd').placeholder();
$('#modal-reg-name').placeholder();
$('#modal-reg-pwd').placeholder();
$('#search-key').placeholder();
$('#search-key2').placeholder();</script>
<script
        src="/static/sitemedia/bootstrap-3.3.6/js/bootstrap.min.js"></script>
<!--[if IE 10]><script src="/static/sitemedia/bootstrap-3.3.6/js/ie10-viewport-bug-workaround.js"></script><![endif]-->
<script src="/static/sitemedia/js/gt.js"></script>
<script src="/static/sitemedia/js/common.js"></script>
</body>
</html>
<script>(function () {
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https') {
        bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
    } else {
        bp.src = 'http://push.zhanzhang.baidu.com/push.js';
    }
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(bp, s);
})();</script>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述