Design and Implementation of Graduation Design Topic Selection Management System Based on PHP+MySQL

Contents
Abstract 1
1. Requirements Analysis 2
1.1 Teacher Requirements 2
1.2 Student Requirements 2
1.3 Administrator Requirements 2
2. Design Pattern 3
2.1 MVC Design Pattern 3
2.2 RBAC Authority Model 3
3. Overall System Design 3
3.1 Overall Function Module 3
3.1.1 Teacher module 3
3.1.2 Student module 3
3.1.3 Administrator module 3
3.2 Interface design 3
3.2.1 Teacher interface 4 3.2.2
Student interface 4
3.2.3 Administrator interface 4
3.3 Database design 5
3.3.1 Database entity relationship diagram 5
3.3.2 Database Constraint Relationship Diagram 5
3.3.3 Data Table Statement 6
CREATE TABLE gproject( 6
4. Implementation Code 9
4.1 Entry File 9
4.2 Binding File 9
4.3 System Behavior Extension: Static Cache Read 10
4.4 Database SAE Mode Convention Configuration File 12
5. Run Instructions 12

1. Requirements analysis
1.1 Teacher needs
In the topic selection process of the graduation project, the teacher's needs are: user personal information management; new topic declaration, operations such as deletion, modification, and re-declaration of unapproved topics; selection of students who have already selected topics; Topic progress check and message management.
1.2 Students' needs
In the topic selection process of graduation design, students' needs are: management of user personal information; operations such as browsing, viewing, selecting and unselecting topics; if the topic has been confirmed, check the details of the topic; management of project progress; message sending and acceptance and other management operations.
1.3 Administrator Requirements
In the topic selection process of the graduation project, the requirements of the system administrator are: student management (addition of new students, deletion of students, and initialization of student login system data), teacher management (addition of new teachers, deletion of teachers, and teacher system login) Data initialization operation), subject management (review and process new subjects submitted by teachers, delete illegal subjects), user management (add administrators at each authority level, delete administrators, administrator system for subset authority groups Login data initialization operation) and message notification (publishing system messages of different objects, viewing and deleting all messages).
2. Design pattern
2.1 MVC design pattern
MVC (Model View Controller) design pattern is the abbreviation of model-view-controller. As a layered design concept, its purpose is to realize a dynamic and separable program design , which is more simplified in the subsequent modification and expansion of the program, and improves the reuse rate of certain parts of the program.
2.2 RBAC permission model
RBAC (Role-Based Access Control) role-based access control, system permissions are associated with user roles, users can obtain corresponding permissions by becoming members of appropriate roles, graduation design topic selection management system system administrator permission control Based on the RBAC model, the role-based access control model is a more neutral and more flexible access control technology than mandatory access control and free selection access control.
3. Overall system design
3.1 Overall functional modules
insert image description here
3.1.1 Teacher module
The main pages of the teacher module include personal management, new topics, topic list management, message management, and progress list management.
3.1.2 Student module
The main pages of the student module include personal management, my subjects, subject list, subject selection, message management, and progress management.
3.1.3 Administrator module
The main pages of the administrator module include personal management, student list management, teacher list management, subject list management, message list management, and user list management.

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <[email protected]> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
namespace Think;

class Page{
    
    
    public $firstRow; // 起始行数
    public $listRows; // 列表每页显示行数
    public $parameter; // 分页跳转时要带的参数
    public $totalRows; // 总行数
    public $totalPages; // 分页总页面数
    public $rollPage   = 11;// 分页栏每页显示的页数
	public $lastSuffix = true; // 最后一页是否显示总页数

    private $p       = 'p'; //分页参数名
    private $url     = ''; //当前链接URL
    private $nowPage = 1;

	// 分页显示定制
    private $config  = array(
        'header' => '<span class="rows">%TOTAL_ROW% 条记录</span>',
        'prev'   => '<<',
        'next'   => '>>',
        'first'  => '1...',
        'last'   => '...%TOTAL_PAGE%',
        'theme'  => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',
    );

    /**
     * 架构函数
     * @param array $totalRows  总的记录数
     * @param array $listRows  每页显示记录数
     * @param array $parameter  分页跳转的参数
     */
    public function __construct($totalRows, $listRows=20, $parameter = array()) {
    
    
        C('VAR_PAGE') && $this->p = C('VAR_PAGE'); //设置分页参数名称
        /* 基础设置 */
        $this->totalRows  = $totalRows; //设置总记录数
        $this->listRows   = $listRows;  //设置每页显示行数
        $this->parameter  = empty($parameter) ? $_GET : $parameter;
        $this->nowPage    = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]);
        $this->nowPage    = $this->nowPage>0 ? $this->nowPage : 1;
        $this->firstRow   = $this->listRows * ($this->nowPage - 1);
    }

    /**
     * 定制分页链接设置
     * @param string $name  设置名称
     * @param string $value 设置值
     */
    public function setConfig($name,$value) {
    
    
        if(isset($this->config[$name])) {
    
    
            $this->config[$name] = $value;
        }
    }

    /**
     * 生成链接URL
     * @param  integer $page 页码
     * @return string
     */
    private function url($page){
    
    
        return str_replace(urlencode('[PAGE]'), $page, $this->url);
    }

    /**
     * 组装分页链接
     * @return string
     */
    public function show() {
    
    
        if(0 == $this->totalRows) return '';

        /* 生成URL */
        $this->parameter[$this->p] = '[PAGE]';
        $this->url = U(ACTION_NAME, $this->parameter);
        /* 计算分页信息 */
        $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数
        if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) {
    
    
            $this->nowPage = $this->totalPages;
        }

        /* 计算分页零时变量 */
        $now_cool_page      = $this->rollPage/2;
		$now_cool_page_ceil = ceil($now_cool_page);
		$this->lastSuffix && $this->config['last'] = $this->totalPages;

        //上一页
        $up_row  = $this->nowPage - 1;
        $up_page = $up_row > 0 ? '<a class="prev" href="' . $this->url($up_row) . '">' . $this->config['prev'] . '</a>' : '';

        //下一页
        $down_row  = $this->nowPage + 1;
        $down_page = ($down_row <= $this->totalPages) ? '<a class="next" href="' . $this->url($down_row) . '">' . $this->config['next'] . '</a>' : '';

        //第一页
        $the_first = '';
        if($this->totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){
    
    
            $the_first = '<a class="first" href="' . $this->url(1) . '">' . $this->config['first'] . '</a>';
        }

        //最后一页
        $the_end = '';
        if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){
    
    
            $the_end = '<a class="end" href="' . $this->url($this->totalPages) . '">' . $this->config['last'] . '</a>';
        }

        //数字连接
        $link_page = "";
        for($i = 1; $i <= $this->rollPage; $i++){
    
    
			if(($this->nowPage - $now_cool_page) <= 0 ){
    
    
				$page = $i;
			}elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){
    
    
				$page = $this->totalPages - $this->rollPage + $i;
			}else{
    
    
				$page = $this->nowPage - $now_cool_page_ceil + $i;
			}
            if($page > 0 && $page != $this->nowPage){
    
    

                if($page <= $this->totalPages){
    
    
                    $link_page .= '<a class="num" href="' . $this->url($page) . '">' . $page . '</a>';
                }else{
    
    
                    break;
                }
            }else{
    
    
                if($page > 0 && $this->totalPages != 1){
    
    
                    $link_page .= '<span class="current">' . $page . '</span>';
                }
            }
        }

        //替换分页内容
        $page_str = str_replace(
            array('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%'),
            array($this->config['header'], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages),
            $this->config['theme']);
        return "<div>{$page_str}</div>";
    }
}

insert image description here
insert image description here
insert image description here
insert image description here
insert image description here
insert image description here
insert image description here

Guess you like

Origin blog.csdn.net/newlw/article/details/130665328