精华内容
下载资源
问答
  • 运用动态规划法编制采掘计划的步骤,孟醒,冯继伟,采煤工作面生产和新工作面的掘进准备是矿井生产的中心环节,因此采掘计划的制定是矿井整个生产计划的核心。通常采用的人工排队法
  • import java.util.Arrays; public class MyArrayList { private int[] elem; private int usedSize; private static final int intCapacity = 10; public int[] getElem() { return elem;... pu...
    import java.util.Arrays;
    
    public class MyArrayList {
    private int[] elem;
    private int usedSize;
    private static final int intCapacity = 10;
        public int[] getElem() {
            return elem;
        }
        public void setElem(int[] elem) {
            this.elem = elem;
        }
        public int getUsedSize() {
            return usedSize;
        }
        public void setUsedSize(int usedSize) {
            
            this.usedSize = usedSize;
        }
        public MyArrayList()  {
        this.elem = new int[intCapacity];
        this.usedSize = 0;
        }
        private boolean isFull() { 
            return this.usedSize == elem.length;
        }
    //添加数据
        public void add(int pos,int data) {
        if(pos < 0 || pos > this.usedSize) {
            throw new RuntimeException("pos位置不合法");
        }
        if (isFull()) {
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }
        for (int i = this.usedSize-1; i >= pos; i--) {
            this.elem[i+1] = this.elem[i];
        }
            this.elem[pos] = data;
            this.usedSize++;
    }
    //打印顺序表
        public void display() {
            for (int i = 0; i < this.usedSize; i++) {
                System.out.print(this.elem[i]+" ");
            }
            System.out.println();
    }
    //判断是否包含某个元素
        public boolean contains(int toFind) {
            for (int i = 0; i < this.usedSize; i++) {
                if(toFind == this.elem[i]) {
                    return true;
                }
            }
            return false;
    }
    //查找某个元素对应的位置
        public int search(int toFind) {
            for (int i = 0; i < this.usedSize; i++) {
                if (toFind == this.elem[i]) {
                    return i;
                }
            }
            throw new RuntimeException("找不到");
        }
        private boolean isEmpty() {
            
            return this.usedSize == 0;
        }
    //获取pos位置的元素    
        public int getPos(int pos) {
            if(isEmpty()) {
                throw new RuntimeException("顺序表为空");
            }
            if(pos < 0 || pos>= this.usedSize) {
                throw new RuntimeException("pos位置不合法");
            }
            return this.elem[pos];
    }
    //删除第一次出现的关键字
        public void remove(int toRemove) {
            if(isEmpty()) {
                throw new RuntimeException("顺序表为空");
            }
            int tmp = search(toRemove);
            for (int i = tmp; i < this.usedSize-1 ; i++) {
                this.elem[i] = this.elem[i+1];
            }
            this.usedSize--;
    }
    //清空顺序表
        public void clear() {
            this.usedSize = 0;
        }
        public void setPos(int pos,int value) {
            if(pos < 0 || pos >= this.usedSize) {
                throw new RuntimeException("pos位置不合法");
            }
            this.elem[pos] = value;
        }
    }
    
    展开全文
  • #include template class MyArray { private: int m_nTotalSize; int m_nValidSize; T *m_pData; public: MyArray(int nSize); void add(T value); int GetSize() { r
    #include<stdio.h>
    template<class T>
    class MyArray
    {
    private:
         int m_nTotalSize;
         int m_nValidSize;
         T *m_pData;
    public:
         MyArray(int nSize=3);
         void add(T value);
         int GetSize()
         {
              return m_nValidSize;
         }
         T Get(int pos)
         {
              return m_pData[pos];
         }
         virtual ~MyArray()
         {
              if(m_pData!=NULL)
              {
                   delete[] m_pData;
                   m_pData=NULL;
              }
         }
    };
    template<class T>
    MyArray<T>::MyArray(int nSize)
    {
         m_pData=new T[nSize];
         m_nTotalSize=nSize;
         m_nValidSize=0;
    }
    template<class T>
    void MyArray<T>::add(T value)
    {
         if(m_nValidSize<m_nTotalSize)
         {
              m_pData[m_nValidSize]=value;
              m_nValidSize++;
         }
         else
         {
              T *tmpData=new T[m_nTotalSize];
              for(int i=0;i<m_nTotalSize;i++)
              {
                   tmpData[i]=m_pData[i];
              }
              delete[] m_pData;
              m_nTotalSize*=2;
              m_pData=new T[m_nTotalSize];
              for(int i=0;i<m_nValidSize;i++)
              {
                   m_pData[i]=tmpData[i];
              }
              delete[] tmpData;
              m_pData[m_nValidSize]=value;
              m_nValidSize++;
         }
    }
    int main()
    {
         MyArray<int>obj;
         obj.add(1);
         obj.add(2);
         obj.add(3);
         obj.add(4);
         for(int i=0;i<obj.GetSize();i++)
         {
              printf("%d\n",obj.Get(i));
         }
         return 0;
    }
    

    展开全文
  • 1. 数码管静态、动态显示原理 静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于...

    1. 数码管静态、动态显示原理7ebdf0dc072aa1def90cf2e21947c268.png

           静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高

           动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的电阻阻值

    2.原理图

    ff5f9aa2f60bfc7ef634630c3343efe1.png

    5b2a2c90ec2767ecb8d9ac1be0cbdc6c.png

    3. 静、动态数码管程序

               一实现现象:下载程序后数码管静态显示0。

    #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

    typedef unsigned int u16;  //对数据类型进行声明定义

    typedef unsigned char u8;

    sbit LSA=P2^2;

    sbit LSB=P2^3;

    sbit LSC=P2^4;

    u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

    /*******************************************************************************

    * 函 数 名       : main

    * 函数功能 : 主函数

    * 输    入       : 无

    * 输    出     : 无

    *******************************************************************************/

    void main()

    {

    LSA=0;

    LSB=0;

    LSC=0;//控制38译码器的Y0输出低电平

    P0=smgduan[1];

    LSA=1;

    LSB=0;

    LSC=0;//控制38译码器的Y0输出低电平

    P0=smgduan[1];

    while(1);

    }

        二 、实现现象:下载程序后数码管从右至左显示0-7

    #include "reg52.h" 

    typedef unsigned int u16;  //对数据类型进行声明定义

    typedef unsigned char u8;

    sbit LSA=P2^2;

    sbit LSB=P2^3;

    sbit LSC=P2^4;

    u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

    /*************************************

    * 函 数 名      : delay

    * 函数功能    : 延时函数,i=1时,大约延时10us

    ************************************/

    void delay(u16 i)

    {

    while(i--);

    }

    /*************************************

    * 函 数 名       : DigDisplay

    * 函数功能     : 数码管动态扫描函数,循环扫描8个数码管显示

    *************************************/

    void DigDisplay()

    {

       u8 i;

       for(i=0;i<8;i++)

    {

        switch(i) //位选,选择点亮的数码管,

    {

     case(0):

    LSA=0;LSB=0;LSC=0; break;//显示第0位

     case(1):

    LSA=1;LSB=0;LSC=0; break;//显示第1位

    case(2):

    LSA=0;LSB=1;LSC=0; break;//显示第2位

    case(3):

    LSA=1;LSB=1;LSC=0; break;//显示第3位

    case(4):

    LSA=0;LSB=0;LSC=1; break;//显示第4位

    case(5):

    LSA=1;LSB=0;LSC=1; break;//显示第5位

    case(6):

    LSA=0;LSB=1;LSC=1; break;//显示第6位

    case(7):

    LSA=1;LSB=1;LSC=1; break;//显示第7位

    }

    P0=smgduan[i];//发送段码

    delay(100); //间隔一段时间扫描

    P0=0x00;//消隐

    }

    }

    /*********************************************************

    * 函 数 名       : main

    * 函数功能      : 主函数

    * 输    入        : 无

    * 输    出        : 无

    ***********************************************************/

    void main()

    {

    while(1)

    {

    DigDisplay();  //数码管显示函数

    }

    }

    ---基于普中科技51单片机开发板普中科技51单片机开发板
    展开全文
  • 能够实现新建,打开,保存教学计划编制文件(后缀名为.tms的文件)的,可以支持对Excel文件的导入以及导出的,并能根据均匀或者集中两种分配模式来对输入的课程进行教学安排的,还能实现动态拓扑排序演示的————...

    (能百度到这篇博客的,应该都是被数据结构课程设计搞得很烦躁的人吧哈哈哈)

    先介绍一下这个系统,它是一个用VB和.NET开发的,能够实现新建,打开,保存教学计划编制文件(后缀名为.tms的文件)的,可以支持对Excel文件的导入以及导出的,并能根据均匀或者集中两种分配模式来对输入的课程进行教学安排的,还能实现动态拓扑排序演示的————软件!

    为什么使用VB呢?我觉得有以下几点:

    一是VB和windows相性非常好,

    二是并且开发图形界面特别方便,

    三是可以很方便地生成安装包(方便在其他windows机器上进行演示)。

     

    好了话不多说,先上界面:

     

    图1.1.1 

    系统主界面如图1.1.1,界面有三个大区域,左方的课程信息区为datagridview组件。右上的教学计划区为textbox组件和

    radiobutton组件。右下的功能区是6个button组件。

     

     

    图1.1.2

    结果界面如图1.1.2,界面有两个大区域,左方的编排结果区为treeview组件。右方的结果详细区为datagirdview组件。

     

    图1.1.3

    图形化演示界面如图1.1.3,界面有两个大区域,左方为GDI+绘图区域。右方的结果区为treeview组件。

     

     

     

    接下来是代码,注释写得差不多,就不另讲解了。

     

    系统主界面的代码:

     

     

    Imports System.IO
    
    Public Class TeachingManagementSystem
        Public RowsNum = 15
        Public ImportFilePath = ""
        Public AllData(399) As String
        'ALLData数组中数据含义:0:文件地址,1:学期总数,千位/学分上限百位十位个位,2:分配方式,3:行数,4-399:数据
        '所以一共可以存99种课程信息。
    
        Private Sub TeachingManagementSystem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            '设置窗体不可最大化,不可更改大小
            FormBorderStyle = BorderStyle.FixedSingle
            MaximizeBox = False
    
            '课程信息初始设定为15行
            For a = 0 To 15
                CourseTable.Rows.Add()
            Next
    
            '设定data数组的初始值
            AllData(1) = ""
            AllData(2) = "0"
            AllData(3) = CStr(RowsNum)
            For a = 4 To 399
                AllData(a) = ""
            Next
    
            EnableItems(False)
        End Sub
    
        '关闭窗体之前弹出是否保存的消息框
        Private Sub TeachingManagementSystem_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed
            Dim buttom = vbYesNo + vbDefaultButton2
            Dim response = MsgBox("您想在退出之前保存所做的更改吗?", buttom)
    
            If response = vbYes Then
                If AllData(0) <> "" Then
                    File.WriteAllLines(AllData(0), AllData, System.Text.Encoding.Default)
                    MsgBox("保存成功")
                Else
                    MsgBox("保存失败")
                End If
            End If
        End Sub
    
        '右键datagridview,添加一行
        Private Sub AddRowToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AddRowToolStripMenuItem.Click
            CourseTable.Rows.Add()
            RowsNum = RowsNum + 1
            AllData(3) = CStr(RowsNum)
        End Sub
    
        '右键datagridview,删除一行
        Private Sub DeleteRowToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DeleteRowToolStripMenuItem.Click
            For Each row As DataGridViewCell In CourseTable.SelectedCells
                If row.RowIndex < 0 Then
                    RowsNum = 0
                    AllData(3) = CStr(RowsNum)
                Else
                    RowsNum = RowsNum - 1
                    AllData(3) = CStr(RowsNum)
                    AllData(row.RowIndex * 4 + 4) = ""
                    AllData(row.RowIndex * 4 + 5) = ""
                    AllData(row.RowIndex * 4 + 6) = ""
                    AllData(row.RowIndex * 4 + 7) = ""
                    CourseTable.Rows.RemoveAt(row.RowIndex)
                End If
            Next
        End Sub
    
        '新建教学计划编制文件
        Private Sub NewTeaching_Click(sender As Object, e As EventArgs) Handles NewTeaching.Click
            Dim newProjectPath = FolderBrowserDialog1.ShowDialog()
            If newProjectPath = DialogResult.OK Then
                AllData(0) = FolderBrowserDialog1.SelectedPath
            Else
                Exit Sub
            End If
    
            Dim projectName = InputBox("请输入教学计划编制名称:", "输入框", "")
    
            If projectName = "" Then
                MsgBox("输入名不能为空")
                Exit Sub
            End If
    
            '判断文件是否存在,若不存在,则新建文件并写入数据
            If Dir(AllData(0) + "\" + projectName) = "" Then
                AllData(0) = AllData(0) + "\" + projectName + ".tms"
                File.WriteAllLines(AllData(0), AllData, System.Text.Encoding.Default)
                EnableItems(True)
            Else
                MsgBox("已有同名文件!")
            End If
        End Sub
    
        '打开教学计划编制文件
        Private Sub OpenTeaching_Click(sender As Object, e As EventArgs) Handles OpenTeaching.Click
            OpenFileDialog1.Filter = "Teaching Management System Files (*.tms)|*.tms"
            If Not OpenFileDialog1.ShowDialog(Me) = vbOK Then
                Exit Sub
            End If
    
            AllData = File.ReadAllLines(OpenFileDialog1.FileName, System.Text.Encoding.Default)
            '打开后赋值
            Terms.Text = CInt(AllData(1)) \ 1000
            MaxCredit.Text = CInt(AllData(1)) Mod 1000
            If (AllData(2) = "1") Then
                RadioButton2.Checked = True
            Else
                RadioButton1.Checked = True
            End If
            CourseTable.Rows.Clear()
            RowsNum = CInt(AllData(3))
            For a = 1 To RowsNum
                CourseTable.Rows.Add()
                For b = 0 To 3
                    CourseTable(b, a - 1).Value = AllData(4 * a + b)
                Next
            Next
            EnableItems(True)
            MsgBox("打开成功!")
        End Sub
    
        '保存教学计划编制文件
        Private Sub SaveTeaching_Click(sender As Object, e As EventArgs) Handles SaveTeaching.Click
            Try
                AllData(1) = CStr(CInt(MaxCredit.Text) + CInt(Terms.Text) * 1000)
                File.WriteAllLines(AllData(0), AllData, System.Text.Encoding.Default)
                MsgBox("保存成功!")
            Catch ex As Exception
                MsgBox("保存失败!数据不符合规范")
            End Try
        End Sub
    
        '选择集中分配or均匀分配课程
        Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
            If (RadioButton1.Checked) Then
                AllData(2) = "0"
            Else
                AllData(2) = "1"
            End If
        End Sub
    
        '选择集中分配or均匀分配课程
        Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged
            If (RadioButton1.Checked) Then
                AllData(2) = "0"
            Else
                AllData(2) = "1"
            End If
        End Sub
    
        Private Sub CourseTable_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles CourseTable.CellEndEdit
            For Each cell As DataGridViewCell In CourseTable.SelectedCells
                If CourseTable(cell.ColumnIndex, cell.RowIndex).Value <> "" Then
                    AllData(cell.RowIndex * 4 + cell.ColumnIndex + 4) = CourseTable(cell.ColumnIndex, cell.RowIndex).Value.ToString
                Else
                    AllData(cell.RowIndex * 4 + cell.ColumnIndex + 4) = ""
                    CourseTable(cell.ColumnIndex, cell.RowIndex).Value = ""
                End If
            Next
        End Sub
    
        '导入Excel数据
        Private Sub ImportData_Click(sender As Object, e As EventArgs) Handles ImportData.Click
            OpenFileDialog1.Filter = "Excel Files (*.xls;*.xlsx)|*.xls;*.xlsx"
            If Not OpenFileDialog1.ShowDialog(Me) = vbOK Then
                Exit Sub
            End If
            ImportFilePath = OpenFileDialog1.FileName
    
            Try
                Dim xlApp = CreateObject("Excel.Application")
                Dim xlBook = xlApp.Workbooks.Open(ImportFilePath)
                Dim xlSheet = xlBook.worksheets(1)
    
                Dim excelRow = 0
    
                xlSheet.Activate() '激活工作表
                CourseTable.Rows.Clear()
    
                While xlSheet.Cells(excelRow + 2, 1).Text.ToString <> ""
                    CourseTable.Rows.Add()
                    excelRow = excelRow + 1
                End While
    
                For a = 1 To excelRow
                    For b = 1 To 4
                        CourseTable(b - 1, a - 1).Value = xlSheet.Cells(a + 1, b).Text
                        AllData(4 * a + b - 1) = xlSheet.Cells(a + 1, b).Text
                    Next
                Next
    
                MsgBox("导入完成")
                Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
                xlSheet = Nothing
                xlBook.Close()
                Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
                xlBook = Nothing
                xlApp.Quit()
                Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
                xlApp = Nothing
            Catch ex As Exception
                MessageBox.Show(ex.Message, "出错啦!", MessageBoxButtons.OK)
            End Try
        End Sub
    
        '开始计算
        Private Sub Output_Click(sender As Object, e As EventArgs) Handles Output.Click
            If IsNumeric(Terms.Text) And InStr(Terms.Text, " ") = 0 And Terms.Text <> "" And IsNumeric(MaxCredit.Text) And InStr(MaxCredit.Text, " ") = 0 And MaxCredit.Text <> "" And CheckData() Then
                Consequence.Show()
            Else
                MsgBox("您有未填写或填写不正确的数据哦")
            End If
        End Sub
    
        '软件信息
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            SoftwareInfo.Show()
        End Sub
    
        '使组件可用or不可用
        Function EnableItems(flag)
            Terms.Enabled = flag
            MaxCredit.Enabled = flag
            RadioButton1.Enabled = flag
            RadioButton2.Enabled = flag
            CourseTable.Enabled = flag
            SaveTeaching.Enabled = flag
            ImportData.Enabled = flag
            Output.Enabled = flag
            Return Nothing
        End Function
    
        '检查输入的数据是否合法,主要判别是否有空值,是否有课序号重复的值,是否有先修课不合法的值。
        Function CheckData()
            Dim dataRow = 0
            Dim target() As String
            For a = 0 To CourseTable.RowCount - 1
                If CourseTable(0, a).Value <> "" Then
                    dataRow = dataRow + 1
                End If
            Next
    
    
            For a = 0 To dataRow - 1
                For b = a + 1 To dataRow - 1
                    If CourseTable(0, b).Value = CourseTable(0, a).Value Then
                        Return False
                        Exit Function
                    End If
                Next
            Next
    
            Dim flag = 0
            For a = 0 To dataRow - 1
    
                target = Split(CourseTable(3, a).Value, "&")
                For c = 0 To target.Length - 1
                    flag = 0
    
                    For b = 0 To dataRow - 1
                        If target(c) <> CourseTable(0, b).Value And CourseTable(3, a).Value <> "" Then
                            flag = flag + 1
                        End If
                    Next
    
                    If flag = dataRow Then
                        Return False
                        Exit Function
                    End If
                Next
            Next
            Return True
        End Function
    End Class

     

    结果界面的代码:

     

    Public Class Consequence
        Dim Terms = CInt(TeachingManagementSystem.Terms.Text)
        Public CredictLimitFinal As Integer
    
        Private Sub Consequence_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim CreditLimit = 0
            Dim NowCredit = 0
            Dim NowTerms = 0
            Dim CoursesNum = 0
    
            '设置窗体不可最大化,不可更改大小
            FormBorderStyle = BorderStyle.FixedSingle
            MaximizeBox = False
    
            '获取课程总数和学分限制
            While CoursesNum < TeachingManagementSystem.CourseTable.RowCount
                If TeachingManagementSystem.CourseTable(0, CoursesNum).Value <> "" Then
                    CreditLimit = CreditLimit + CInt(TeachingManagementSystem.CourseTable(2, CoursesNum).Value)
                    CoursesNum = CoursesNum + 1
                Else
                    Exit While
                End If
            End While
    
            If CoursesNum <= 0 Then
                MsgBox("数据不足,无法生成结果")
                Exit Sub
            End If
    
            '若为均匀分配,则每学期的学分限制的初始值为总学分/学期数+1,若不能分配,则学分限制变为总学分/学期数+2,以此类推,直至学分限制=学分上限。
            '若为集中分配,则为学分上限
            If TeachingManagementSystem.RadioButton1.Checked Then
                Dim AllCredit = CInt(TeachingManagementSystem.MaxCredit.Text)
                Calculate2(CoursesNum, NowCredit, AllCredit, NowTerms)  '判断能否分配,若连集中分配方式都无法正常分配的话,均匀方式更无法分配
                CreditLimit = CInt(CreditLimit / Terms + 1)
    
                While CreditLimit < AllCredit
                    If Calculate1(CoursesNum, NowCredit, CreditLimit, NowTerms) Then
                        Exit While
                    Else
                        CreditLimit = CreditLimit + 1
                    End If
                End While
                CredictLimitFinal = CreditLimit
            Else
                CreditLimit = CInt(TeachingManagementSystem.MaxCredit.Text)
                CredictLimitFinal = CreditLimit
                Calculate2(CoursesNum, NowCredit, CreditLimit, NowTerms)
            End If
        End Sub
    
        '导出结果至Excel
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim SavePath = ""
            Dim NewExcel = FolderBrowserDialog1.ShowDialog()
            If NewExcel = DialogResult.OK Then
                SavePath = FolderBrowserDialog1.SelectedPath()
            Else
                Exit Sub
            End If
    
            Dim ExportName = InputBox("请输入文件名称:", "输入框", "")
            If ExportName = "" Then
                MsgBox("输入文件名不能为空")
                Exit Sub
            End If
    
            If Dir(FolderBrowserDialog1.SelectedPath + "\" + ExportName) = "" Then '判断文件夹是否存在
                SavePath = SavePath + "\" + ExportName + ".xlsx"
            Else
                MsgBox("已有同名文件夹!")
                Exit Sub
            End If
    
            Try
                Dim xlApp = CreateObject("Excel.Application")
                Dim xlBook = xlApp.Workbooks.Add()
                Dim xlSheet = xlBook.Worksheets(1)
                xlSheet.Activate()
    
                Dim ExcelRow = 1
    
                For a = 0 To TreeView1.Nodes.Count - 1
                    xlSheet.Cells(ExcelRow, 1) = TreeView1.Nodes(a).Text
                    ExcelRow = ExcelRow + 1
                    xlSheet.Cells(ExcelRow, 1) = "课程号"
                    xlSheet.Cells(ExcelRow, 2) = "课程名称"
                    xlSheet.Cells(ExcelRow, 3) = "学分"
                    xlSheet.Cells(ExcelRow, 4) = "先修课"
                    ExcelRow = ExcelRow + 1
    
                    For Each ChildNode In TreeView1.Nodes(a).Nodes
                        Dim RealTag = ChildNode.Tag Mod 100
                        For c = 0 To 3
                            xlSheet.Cells(ExcelRow, c + 1) = TeachingManagementSystem.CourseTable(c, RealTag).Value
                        Next
                        ExcelRow = ExcelRow + 1
                    Next
    
                    ExcelRow = ExcelRow + 1
                Next
    
                xlBook.SaveAs(SavePath)
    
                MsgBox("导出完成")
                Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
                xlSheet = Nothing
                xlBook.Close()
                Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
                xlBook = Nothing
                xlApp.Quit()
                Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
                xlApp = Nothing
            Catch ex As Exception
                MessageBox.Show(ex.Message, "出错啦!", MessageBoxButtons.OK)
            End Try
        End Sub
    
        '选择TreeView上的一个节点,在右面的datagridview中显示课程的具体信息
        Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect
            OutputTable.Rows.Clear()
    
            Dim RootTag = CInt(TreeView1.SelectedNode.Tag / 100) * 100
            For a = 0 To Terms - 1
                Dim Rows = 0
                If TreeView1.Nodes(a).Tag = RootTag Then
                    For Each ChildNode In TreeView1.Nodes(a).Nodes
                        OutputTable.Rows.Add()
                        Rows = Rows + 1
                    Next
    
                    Dim b = 0
                    For Each ChildNode In TreeView1.Nodes(a).Nodes
                        Dim RealTag = ChildNode.Tag Mod 100
                        For c = 0 To 3
                            OutputTable(c, b).Value = TeachingManagementSystem.CourseTable(c, RealTag).Value
                        Next
                        b = b + 1
                    Next
                End If
            Next
        End Sub
    
        '拓扑排序功能函数,根据邻接矩阵选择入度为0的节点
        Private Function FindRoot(CourseMatrix, CoursesNum)
            Dim temp = 0
            Dim output = -1
            For a = 0 To CoursesNum - 1
                For b = 0 To CoursesNum - 1
                    temp = temp + CourseMatrix(b, a)
                Next
    
                If temp = 0 Then
                    output = a
                    For b = 0 To CoursesNum - 1
                        If CourseMatrix(a, b) > 0 Then
                            CourseMatrix(a, b) = CourseMatrix(a, b) - 1
                        End If
                    Next
    
                    For b = 0 To CoursesNum - 1
                        CourseMatrix(b, a) = -1
                    Next
                    Exit For
                End If
    
                temp = 0
            Next
    
            Return output
        End Function
    
        '在控制台输出邻接矩阵(调试用函数)
        Private Function ShowMatrix(CourseMatrix, CoursesNum)
            '输出邻接矩阵
            For a = 0 To CoursesNum - 1
                For b = 0 To CoursesNum - 1
                    Console.Write(CourseMatrix(a, b))
                    Console.Write(" ")
                Next
                Console.WriteLine()
            Next
            Console.WriteLine()
            Return Nothing
        End Function
    
        '拓扑排序功能函数,根据均匀分配课程的学分限制进行拓扑排序
        Private Function Calculate1(CoursesNum, NowCredit, CreditLimit, NowTerms)
            '构建学期树
            TreeView1.Nodes.Clear()
    
            For a = 1 To Terms
                Dim nodes As New TreeNode With {
                    .Text = "第" + CStr(a) + "学期",
                    .Tag = (a - 1) * 100
                }
                TreeView1.Nodes.Add(nodes)
            Next
    
            '构建邻接矩阵
            Dim CourseMatrix(CoursesNum - 1, CoursesNum - 1) As Integer
            For a = 0 To CoursesNum - 1
                For b = 0 To CoursesNum - 1
                    '遍历查找(3,a)中的字符串有无(0,b)的数据
                    If InStr(TeachingManagementSystem.CourseTable(3, a).Value, TeachingManagementSystem.CourseTable(0, b).Value) > 0 Then
                        CourseMatrix(b, a) = 1
                    End If
                Next
            Next
    
            ShowMatrix(CourseMatrix, CoursesNum)
    
            For a = 1 To CoursesNum
                Dim root = FindRoot(CourseMatrix, CoursesNum)
                If root >= 0 Then
                    NowCredit = NowCredit + CInt(TeachingManagementSystem.CourseTable(2, root).Value)
                    While NowCredit > CreditLimit
                        NowCredit = 0
                        NowCredit = NowCredit + CInt(TeachingManagementSystem.CourseTable(2, root).Value)
                        NowTerms = NowTerms + 1
                        If NowTerms >= Terms Then
                            TreeView1.Nodes.Clear()
                            OutputTable.Rows.Clear()
                            Return False
                            Exit Function
                        End If
                    End While
    
                    If NowCredit <= CreditLimit Then
                        Dim nodes As New TreeNode With {
                            .Text = TeachingManagementSystem.CourseTable(1, root).Value,
                            .Tag = NowTerms * 100 + root
                        }
                        TreeView1.Nodes(NowTerms).Nodes.Add(nodes)
                        ShowMatrix(CourseMatrix, CoursesNum)
                    End If
                End If
            Next
    
            TreeView1.ExpandAll()
            Return True
        End Function
    
        '拓扑排序功能函数,根据集中分配课程的学分限制进行拓扑排序
        Private Function Calculate2(CoursesNum, NowCredit, CreditLimit, NowTerms)
            '构建学期树
            TreeView1.Nodes.Clear()
    
            For a = 1 To Terms
                Dim nodes As New TreeNode With {
                    .Text = "第" + CStr(a) + "学期",
                    .Tag = (a - 1) * 100
                }
                TreeView1.Nodes.Add(nodes)
            Next
    
            '构建邻接矩阵
            Dim CourseMatrix(CoursesNum - 1, CoursesNum - 1) As Integer
            For a = 0 To CoursesNum - 1
                For b = 0 To CoursesNum - 1
                    '遍历查找(3,a)中的字符串有无(0,b)的数据
                    If InStr(TeachingManagementSystem.CourseTable(3, a).Value, TeachingManagementSystem.CourseTable(0, b).Value) > 0 Then
                        CourseMatrix(b, a) = 1
                    End If
                Next
            Next
    
            ShowMatrix(CourseMatrix, CoursesNum)
    
            For a = 1 To CoursesNum
                Dim root = FindRoot(CourseMatrix, CoursesNum)
                If root >= 0 Then
                    NowCredit = NowCredit + CInt(TeachingManagementSystem.CourseTable(2, root).Value)
                    While NowCredit > CreditLimit
                        NowCredit = 0
                        NowCredit = NowCredit + CInt(TeachingManagementSystem.CourseTable(2, root).Value)
                        NowTerms = NowTerms + 1
                        If NowTerms >= Terms Then
                            MsgBox("课程太多,无法分配")
                            TreeView1.Nodes.Clear()
                            OutputTable.Rows.Clear()
                            Close()
                            Return False
                            Exit Function
                        End If
                    End While
    
                    If NowCredit <= CreditLimit Then
                        Dim nodes As New TreeNode With {
                            .Text = TeachingManagementSystem.CourseTable(1, root).Value,
                            .Tag = NowTerms * 100 + root
                        }
                        TreeView1.Nodes(NowTerms).Nodes.Add(nodes)
                        ShowMatrix(CourseMatrix, CoursesNum)
                    End If
                End If
            Next
    
            TreeView1.ExpandAll()
            Return True
        End Function
    
        '进入图形化演示拓扑排序
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim CoursesNum = 0
            While CoursesNum < TeachingManagementSystem.CourseTable.RowCount
                If TeachingManagementSystem.CourseTable(0, CoursesNum).Value <> "" Then
                    CoursesNum = CoursesNum + 1
                Else
                    Exit While
                End If
            End While
    
            If CoursesNum > 8 Then
                MsgBox("数据超过8个,演示效果过差,无法进行图形化演示")
            Else
                PictureShow.Show()
            End If
        End Sub
    End Class

     

    图形化演示界面代码(利用GDI+):

     

    Public Class PictureShow
        Dim Terms = CInt(TeachingManagementSystem.Terms.Text)
        Dim CoursesText() As String = {"a", "b", "c", "d", "e", "f", "g", "h"}
        Dim Matrix(,) As Integer = {
            {-1, -1, -1, -1, -1, -1, -1, -1},
            {-1, -1, -1, -1, -1, -1, -1, -1},
            {-1, -1, -1, -1, -1, -1, -1, -1},
            {-1, -1, -1, -1, -1, -1, -1, -1},
            {-1, -1, -1, -1, -1, -1, -1, -1},
            {-1, -1, -1, -1, -1, -1, -1, -1},
            {-1, -1, -1, -1, -1, -1, -1, -1},
            {-1, -1, -1, -1, -1, -1, -1, -1}
        }
    
        Private Sub PictureShow_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            '设置窗体不可最大化,不可更改大小
            FormBorderStyle = BorderStyle.FixedSingle
            MaximizeBox = False
        End Sub
    
        '初始化面板,根据邻接矩阵和课程信息,在界面上画N个圆圈代表N种要排序的课程
        Private Sub getMatrixPictuer(Matrix(,) As Integer, Text() As String, Panel As Panel, drawWindow As Graphics)
            Dim drawPenRed As New Pen(Color.FromArgb(253, 121, 35), 6)
            Dim drawPenBlue As New Pen(Color.FromArgb(249, 178, 113), 3)
            Dim Xarray() = {250, 120, 380, 80, 420, 120, 380, 250}
            Dim Yarray() = {20, 70, 70, 180, 180, 290, 290, 340}
    
            If Matrix(0, 0) <> -1 Then
                drawWindow.DrawEllipse(drawPenRed, 250, 20, 20, 20)
                Label1.Location = New Point(Xarray(0) - Label1.Size.Width / 2 + 12, (Yarray(0) - 30 + 12))
                Label1.Text = Text(0)
                Label1.Visible = True
            Else
                Label1.Visible = False
            End If
    
            If Matrix(0, 1) <> -1 Then
                drawWindow.DrawEllipse(drawPenRed, 120, 70, 20, 20)
                Label2.Location = New Point(Xarray(1) - Label1.Size.Width / 2 + 12, (Yarray(1) - 30 + 12))
                Label2.Text = Text(1)
                Label2.Visible = True
            Else
                Label2.Visible = False
            End If
    
            If Matrix(0, 2) <> -1 Then
                drawWindow.DrawEllipse(drawPenRed, 380, 70, 20, 20)
                Label3.Location = New Point(Xarray(2) - Label1.Size.Width / 2 + 12, (Yarray(2) - 30 + 12))
                Label3.Text = Text(2)
                Label3.Visible = True
            Else
                Label3.Visible = False
            End If
    
            If Matrix(0, 3) <> -1 Then
                drawWindow.DrawEllipse(drawPenRed, 80, 180, 20, 20)
                Label4.Location = New Point(Xarray(3) - Label1.Size.Width - 25 + 12, (Yarray(3) + 12 - Label1.Size.Height / 2))
                Label4.Text = Text(3)
                Label4.Visible = True
            Else
                Label4.Visible = False
            End If
    
            If Matrix(0, 4) <> -1 Then
                drawWindow.DrawEllipse(drawPenRed, 420, 180, 20, 20)
                Label5.Location = New Point(Xarray(4) + 25 + 12, (Yarray(4) + 12 - Label1.Size.Height / 2))
                Label5.Text = Text(4)
                Label5.Visible = True
            Else
                Label5.Visible = False
            End If
    
            If Matrix(0, 5) <> -1 Then
                drawWindow.DrawEllipse(drawPenRed, 120, 290, 20, 20)
                Label6.Location = New Point(Xarray(5) - Label1.Size.Width / 2 + 12, (Yarray(5) + 15 + 12))
                Label6.Text = Text(5)
                Label6.Visible = True
            Else
                Label6.Visible = False
            End If
    
            If Matrix(0, 6) <> -1 Then
                drawWindow.DrawEllipse(drawPenRed, 380, 290, 20, 20)
                Label7.Location = New Point(Xarray(6) - Label1.Size.Width / 2 + 12, (Yarray(6) + 15 + 12))
                Label7.Text = Text(6)
                Label7.Visible = True
            Else
                Label7.Visible = False
            End If
    
            If Matrix(0, 7) <> -1 Then
                drawWindow.DrawEllipse(drawPenRed, 250, 340, 20, 20)
                Label8.Location = New Point(Xarray(7) - Label1.Size.Width / 2 + 12, (Yarray(7) + 15 + 12))
                Label8.Text = Text(7)
                Label8.Visible = True
            Else
                Label8.Visible = False
            End If
    
            For a = 0 To 7
                For b = 0 To 7
                    If Matrix(a, b) = 1 Then
                        Arrow(drawWindow, drawPenBlue, Xarray(a) + 10, Yarray(a) + 10, Xarray(b) + 10, Yarray(b) + 10, 15)
                    End If
                Next
            Next
    
        End Sub
    
        '画箭头
        Private Sub Arrow(drawWindow As Graphics, drawPen As Pen, X0 As Single, Y0 As Single, x1 As Single, y1 As Single, ArrowLen As Single)
            Dim Xa As Single, Ya As Single, Xb As Single, Yb As Single, D As Double
            D = Math.Sqrt((y1 - Y0) * (y1 - Y0) + (x1 - X0) * (x1 - X0))
            If D > 0.0000000001 Then
                Xa = x1 + ArrowLen * ((X0 - x1) + (Y0 - y1) / 2) / D
                Ya = y1 + ArrowLen * ((Y0 - y1) - (X0 - x1) / 2) / D
                Xb = x1 + ArrowLen * ((X0 - x1) - (Y0 - y1) / 2) / D
                Yb = y1 + ArrowLen * ((Y0 - y1) + (X0 - x1) / 2) / D
                drawWindow.DrawLine(drawPen, Xa, Ya, x1, y1)
                drawWindow.DrawLine(drawPen, Xb, Yb, x1, y1)
                drawWindow.DrawLine(drawPen, X0, Y0, x1, y1)
            End If
        End Sub
    
        '拓扑排序功能函数,找到入度为0的节点
        Private Function FindRoot(CourseMatrix, CoursesNum)
            Dim temp = 0
            Dim output = -1
            For a = 0 To CoursesNum - 1
                For b = 0 To CoursesNum - 1
                    temp = temp + CourseMatrix(b, a)
                Next
    
                If temp = 0 Then
                    output = a
                    For b = 0 To CoursesNum - 1
                        If CourseMatrix(a, b) > 0 Then
                            CourseMatrix(a, b) = CourseMatrix(a, b) - 1
                        End If
                    Next
    
                    For b = 0 To CoursesNum - 1
                        CourseMatrix(b, a) = -1
                    Next
                    Exit For
                End If
    
                temp = 0
            Next
    
            Return output
        End Function
    
        '输出邻接矩阵
        Private Function ShowMatrix(CourseMatrix, CoursesNum)
            For a = 0 To CoursesNum - 1
                For b = 0 To CoursesNum - 1
                    Matrix(a, b) = CourseMatrix(a, b)
                    Console.Write(CourseMatrix(a, b))
                    Console.Write(" ")
                Next
                Console.WriteLine()
            Next
            Console.WriteLine()
            Return Nothing
        End Function
    
        '刷新界面
        Private Function getPicture()
            Refresh()
    
            Dim MyGraphics As Graphics = Panel1.CreateGraphics()    '声明一个Graphics类的对象并实例化
            getMatrixPictuer(Matrix, CoursesText, Panel1, MyGraphics)
            TreeView1.ExpandAll()
            Return Nothing
        End Function
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim CreditLimit = 0
            Dim NowCredit = 0
            Dim NowTerms = 0
            Dim CoursesNum = 0
    
            '获取课程总数和学分限制
            While CoursesNum < TeachingManagementSystem.CourseTable.RowCount
                If TeachingManagementSystem.CourseTable(0, CoursesNum).Value <> "" Then
                    CreditLimit = CreditLimit + CInt(TeachingManagementSystem.CourseTable(2, CoursesNum).Value)
                    CoursesText(CoursesNum) = TeachingManagementSystem.CourseTable(1, CoursesNum).Value
                    CoursesNum = CoursesNum + 1
                Else
                    Exit While
                End If
            End While
    
            CreditLimit = Consequence.CredictLimitFinal
            '构建学期树
            TreeView1.Nodes.Clear()
    
            For a = 1 To Terms
                Dim nodes As New TreeNode With {
                    .Text = "第" + CStr(a) + "学期",
                    .Tag = (a - 1) * 100
                }
                TreeView1.Nodes.Add(nodes)
            Next
    
            '构建邻接矩阵
            Dim CourseMatrix(CoursesNum - 1, CoursesNum - 1) As Integer
            For a = 0 To CoursesNum - 1
                For b = 0 To CoursesNum - 1
                    If InStr(TeachingManagementSystem.CourseTable(3, a).Value, TeachingManagementSystem.CourseTable(0, b).Value) > 0 Then
                        CourseMatrix(b, a) = 1
                    End If
                    Matrix(b, a) = CourseMatrix(b, a)
                Next
            Next
    
            ShowMatrix(Matrix, CoursesNum)
            getPicture()
            MsgBox("点击确定进行下一步")
    
            For a = 1 To CoursesNum
                Dim root = FindRoot(CourseMatrix, CoursesNum)
                If root >= 0 Then
                    NowCredit = NowCredit + CInt(TeachingManagementSystem.CourseTable(2, root).Value)
                    While NowCredit > CreditLimit
                        NowCredit = 0
                        NowCredit = NowCredit + CInt(TeachingManagementSystem.CourseTable(2, root).Value)
                        NowTerms = NowTerms + 1
                    End While
    
                    If NowCredit <= CreditLimit Then
                        Dim nodes As New TreeNode With {
                            .Text = TeachingManagementSystem.CourseTable(1, root).Value,
                            .Tag = NowTerms * 100 + root
                        }
                        TreeView1.Nodes(NowTerms).Nodes.Add(nodes)
                        ShowMatrix(CourseMatrix, CoursesNum)
                        getPicture()
                        MsgBox("点击确定进行下一步")
                    End If
                End If
            Next
    
            TreeView1.ExpandAll()
        End Sub
    End Class

     

     

    以上~

     

     

    如果有什么问题还请多多指教哦~

     

    GitHub传送门:

    https://github.com/shadowings-zy/TeachingManagementSystem

    我的个人网站:

    www.shadowingszy.top

     

    展开全文
  • 开源QQ群: .net 开源基础服务 238543768.Net动态脚本引擎 NScript用于解决.net环境windows系统下类似java中Grovvy的功能和方向。在互联网项目可以用来做一些功能,如动态营销活动(营销业务解耦和剥离),规则引擎,...
  • 用AS3.0编制声音波形动态

    千次阅读 2010-12-03 17:01:00
    import flash.display.Graphics; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net....
  • ...I create the pages by creating a link from my home page like this ...content=This is my blog </code></pre> ...<p>Do I really have to create a unique page for every entry I create?...<p>Do sites like ...
  • 注意:本文只是记录自己应用过程中遇到的一些故障,不代表他人一定是这种...无法定位程序输入点GetFinalPathNameByHandleW于动态链接库KERNEL32.dll上 因为GetFinalPathNameByHandle函数最低系统要求为Vista. ...
  • 野外动态信息采集2.0设计文档

    千次阅读 2010-11-19 15:13:00
    #功能需求# 公司的采集仪...如果能通过 一个好的存储机制和一个良好的UI来动态适应动态编制业务需求(牺牲某些#自由#,得到一个在规则下运行的动态 采集的性价比最高的方案)。 #数据库设计# 1.0版本 动态模板内容设计
  • 动态选路协议 这一章真的看不懂 动态选路只是将 路由信息进行更新,ip选路的机制仍然没有变。 RIP:选路信息协议 先介绍RIP 协议 初始化:在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一...
  • 动态代理

    2020-10-14 19:17:42
    InvocationHandler是一个接口,通过实现该接口的定义的横切逻辑,并通过反射机制调用目标类的代码,动态的将横切和业务逻辑编制在一起。Proxy 利用 InvocationHandler 动态创建一个符合某一接口的实例,生成目标类的...
  • 支持数据采集、数据分层分类编码、空间数据处理、自动生成空间拓扑关系、自动匹配符号、基于空间规则的数据检查、图属一体的数据处理、矢栅一体共线融合处理、动态统计分析检测、自动化制图制表等,划区时面积动态...
  • 本软件专门针对进度计划的编制及管理而研制开发的软件,可快速、高效地编制与安排计划,实时动态控制实际进度。 本系统使用网络计划技术对项目进行计划管理、进度控制、资源管理等。 网络计划技术的主要思路就是...
  • 针对动态、开放网络环境下复杂多变的业务需求,本文在前期语义编程语言SPL研究的基础上,提出一种基于Agent和本体的语义Web服务编制方法,形成一个以语义编程语言SPL为核心的、可适用于将语义Web服务与多A-gent技术无缝...
  • InvocationHandler是由代理实例的调用处理程序实现的接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编制在一起。 Proxy提供了创建动态代理类和实例的静态方法,它也...
  • 本文这里分析Linux动态库和windows动态库通常采用的动态库调用方法以及程序编制方式。动态库的目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。采用动态库技术对于升级软件版本更加容易,动态库里面的...
  • 动态分区管理

    2015-01-10 17:39:35
    动态分区管理是应用较广泛的一种存储管理技术。本实验要求用一种结构化高级语言构造分区描述器, 编制动态分区分配算法和回收算法模拟程序,并讨论不同分配算法的特点。
  • 用PB调用VC编制DLL

    千次阅读 2011-11-04 14:21:24
    使用PowerBuilder(PB)开发应用程序时,可调用VC语言编制动态链接库(DLL)来实现在PB中不容易实现的功能。实践中我们曾使用VC建立DLL,并在PB中调用VC创建的DLL函数,应用效果不错。在此主要介绍动态链接库的基本...
  • JDK动态代理

    2016-09-03 10:10:00
    JDK动态代理 JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。 InvocationHandler是一个...动态将横切逻辑和业务逻辑编制在一起。 Proxy利用InvocationHandler动态创建一个...
  • 用VC编制DLL程序的方法小结在VC 6.0中的MFC可以支持三种形式的DLL,包括常规静态DLL、常规动态DLL以及扩展DLL
  • 针对其运量大、时限紧, 动态性强、车辆利用率要求高的特点, 可采用动态服务网络理论编制其输送计划, 其目标是提高货物列车的利用率及运输需求的满足程度. 在构建重空车流时空网络图的基础上, 建立了基于固定路径的...
  • 目前,劳动力动态曲线主要通过累加方式生成,既不能反映劳动最优安排,又不能对人员安排均衡性进行评价.为此提出了基于生命表编制劳动力曲线的方法.该方法可通过内廪增长率研究劳动力安排均衡问题,利用劳动力实际增长...
  • 跨站点脚本编制可能是一个危险的安全性问题,在设计安全的基于 Web 的应用程序时应该考虑这一点。本文中,描述了这种问题的本质、它是如何起作用的,并概述了一些推荐的修正策略。  当今的大多数网站都对 Web 页面...
  • 编制计划和开展执行的过程中,必须自始至终关注组织内外部环境及其动态变化,并为适应变化而对项目计划做必要的调整。例如,组织战略目标的变化、国家法律法规的变化、行业技术标准的变化、市场情况的变..
  • 随着市场经济的发展,基建管理,特别是地方煤矿建设工程造价发生了明显改变,这就要求实行工程...文章阐述了地方煤矿工程造价动态管理的必要性,介绍了动态概算编制方法,对地方煤矿工程造价动态管理的具体实施进行阐述。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,032
精华内容 412
关键字:

动态编制