数据结构课程设计---教学任务安排系统【没看】

本文介绍了一种用于教学任务安排的系统设计与实现,包括初始化、教师专业特长设定、课程安排、教师专长浏览及修改等功能。系统通过算法确保高效合理的教学任务分配,提高教学管理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

教学任务安排系统:


#include "stdlib.h"
#include "stdio.h"
#define MAX 100   
typedef struct
{   
    int s[MAX][MAX];//用二维数组存放教师专业特长   
    int D[MAX]; //用一维数组存放安排的教学任务   
}MGraph;
MGraph G;
int creat(int *k,int n) //初始化,将二维数组s和一维数组D的adj全部赋值为0   
{   
    int i,j;   
    for(i=1;i<=n;i++)
    {   
        G.D[i]=0;   
        k[i]=0;   
        for(j=1;j<=n;j++)
            G.s[i][j]=0;  
    }
    printf("/n");   
    printf("科目数成功确定为 %d/n",n);   
    return 1;
}

int techer_speciality(int n)   
{   

    int k,i;   
    printf("请输入教师专业特长编号(1-%d) 0表示结束输入:/n",n);   
    for(i=1;i<=n;i++)   
    {   
        printf("输入教师编号为 %d 的特长专业号:",i);   
        do
        {
            scanf("%d",&k);   
            if(k>n)
            {
                printf("超出范围,重新输入: ");
                continue;
            }   
            else
                G.s[i][k]=1;
        }while(k);   
    }   
    printf("设定成功!/n");;   
    return 1;//设定成功!   
}   

int serch(int i,int j,int n)   
{   
    for(;j<=n;j++)
	{
        if(G.s[i][j]==1)
            break;
	}
    return j;   
}

int serch_error(int *k,int n)//在所有老师都有被进行安排过的情况下运行   
{   
    int t,i,j;
    static int b=0; //b检测是否有两个或两个以上的专业只有一个老师可授   
    for(j=1;j<=n;j++)   
        if(k[j]==0) //存在有科目没有老师授课   
            for(i=1;i<=n;i++) //哪个老师可以授此科目且此科目当前还没有老师授课   
                if(G.s[i][j]==1)   
                {   
                    if(b!=i)
                        b=i;
                    else
                        return 0; //if(b!=i)b=i记录第一个没有授课的科目但有老师可以授课的老师下标   
                    //若再次运行这个函数且另一个没有授课的科目也是这位老师可授,即有   
                    //多个科目只有此老师可授,即调用此函数的老师没有科目可授。   
                    t=G.D[i];   
                    if(G.D[i]==0)
                        return 0; //可能有后面老师还没受到安排,返回等所有老师都有被进行安排过才进行   
                    G.D[i]=j;
                    k[j]=i;
                    k[t]=0;
                    return 1;//有,让此老师授此课,原来所授的课取消,重新安排过。   
                }
				return 0; //(没有科目没有被安排)或者(有科目没有被安排但没有老师有此专长)   
}
int anpai(int *k,int n)   
{   
    int c[MAX]={0},i,j, js, p=0,t;   
    for(i=1;i<=n;i++)
	{
        if(G.D[i]==0)   
        {
            j=1;   
            while(1)   
            {   
                js=serch(i,j,n);   
                if(js<=n)   
                {   
                    c[p++]=js;//保存从serch里返回的教师专长   
                    if(k[js]<=0)   
                    {   
                        G.D[i]=js;k[js]=i;p=0;break;   
                    }   
                    else
                    {
                        j=js;
                        j++;
                    }   
                }   
                else
                {   
                    p=0;   
                    t=k[c[p]];   
                    j=c[p]+1;   
                    while(1)   
                    {   
                        js=serch(t,j,n);   
                        if(k[js]<=0 && js<=n)   
                        {   
                            k[c[p]]=0; G.D[t]=js; k[js]=t; G.D[i]=c[p]; k[c[p]]=i; p=0; break;   
                        }   
                        else if(js<=n)
                            j++;   
                        else
                        {   
                            p++;
                            if(c[p]==0)   
                            {   
                                G.D[i]=0;
                                if(serch_error(k,n))
                                    anpai(k,n);
                                break;   
                            }
                            t=c[p];j=c[p]+1;   
                        }  
                    }   
                    break;   
                }   
            }  
        }
	}
	printf("教师专长课程设定成功!/n");
	return 1;
} 

void display(int n)   
{
    int ch,i;
    printf(" 教师编号         课程编号/n"); 
    for(i=1;i<=n;i++)
        printf("%5d  %13d/n",i,G.D[i]);   
}   


void list(int n)   
{   
    int i,j;   
    for (i=1;i<=n;i++)   
    {
        printf("%3d号教师的专业特长有:",i);  
        for(j=1;j<=n;j++)   
            if (G.s[i][j])
                printf("%3d/n",j);
        printf("/n");   
    }   


}   

void edit(int n)   
{
    int k,i=0,m=0,j=0;
    printf("请输入要修改的老师:");
    while(i==0||i>n)
    {
        scanf("%d",&i);
        if(i>0 && i<=n)
            printf("第%d个老师的专长科目有: ",i);
        else
            printf("没这个老师!请重新输入:/n");
    }   

    for(k=1;k<=n;k++)   
    {
        if(G.s[i][k]==1)   
        {
            printf("%3d/n",k);  
            j++;   
        }   
    }   
    if(j==0)
        printf("没有专长科目/n");
    printf("/n输入你要修改的科目(输入0结束):/n");
    do
    {
        scanf("%d",&k);   
        if(k>n)
        {
            printf("超出范围,重新输入: ");
            continue;
        }   
        else if(G.s[i][k]==1)   
            G.s[i][k]=0;   
        else G.s[i][k]=1;   
    }while(k);   
    printf("修改后第%d个老师的专长科目有 :",i);
    for(k=1;k<=n;k++)   
    {
        if(G.s[i][k]==1)   
        {
            printf("%3d/n",k);
            m++;   
        }   
    }   
    if(m==0)
        printf("没有专长科目/n");
    printf("/n");
}
int main(void)   
{   
    int k[MAX],ch,i=0, n=0,w=0,a=0;//n为0 用来表示还没 i 检查是否专长课程设定 w 检查是否科目数设定 a检查是否课程安排   
    char cx;
    while(1)   
    {
        printf(" ┏━━━━━━━━欢迎进入教学任务安排系统━━━━━━━━┓/n");
        printf(" § §/n");
        printf(" § 1 -----确定科目数 2 -----教师专长课程设定 §/n");
        printf(" § 3 -----课程安排 4 -----教师专长浏览 §/n");
        printf(" § 5 -----教师专长课程修改 6------查看教学任务安排 §/n");
        printf(" § 0 -----退出系统 §/n");
        printf(" └────────────────────────────┘/n");
        printf("请选择功能  ");
        scanf("%d",&ch);
        printf("/n");   
        switch(ch)   
        {   
        case 1:
            {
                if(!w)
                {
                    printf("请确定课程数或教师人数 ");
                    scanf("%d",&n);
                    w=creat(k, n);
                    break;
                } //初始化   
                else
                {   
                    printf("你已经确定了课程数 ,是否要从新确定(是:Y/y 否:其余键 )");
                    scanf("%c",&cx);
                    if(cx=='Y'|| cx=='y')   
                    {
                        printf(" 重新输入课程数: ");
                        scanf("%d",&n);
                        w=creat(k, n);
                        break;
                    }   
                    else break;   
                }
            }
        case 2:
            {   
                if (!w)
                    printf("请先确定科目数!/n/n");   
                else if(i)
                {   
                    printf("你已经教师专长课程设定 ,是否要从新设定(是:Y/y 否:其余键 )");
                    scanf("%c",&cx); 
                    if(cx=='Y'|| cx=='y')
                    {
                        i=techer_speciality(n);
                        break; 
                    }   
                    else break;   
                }   
                else
                    i=techer_speciality(n);   
                break;
            }
        case 3:
            {   
                if (!w)
                    printf("请先确定科目数!/n/n");   
                else if(!i)
                    printf("请先教师专长课程设定!/n");   
                else
                    anpai(k,n);
                break;   
            }
        case 4:
            {   
                if (!w)
                    printf("请先确定科目数和 教师专长课程设定!/n/n");   
                else if(!i)
                    printf("请先教师专长课程设定!/n");   
                else
                    list(n);//教师专长浏览函数   
                break;
            }   
        case 5:
            {   
                if (!w)
                    printf("暂无确定科目数!/n");   
                else if(!i)
                    printf("教师专长课程暂无设定/n");   //教师专长课程修改函数
                else
                    edit(n) ; //修改函数   
                break;   
            }
        case 6:
            {   
                if (!w)
                    printf("请先确定科目数!/n/n");   
                else if(!i)
                    printf("请先教师专长课程设定!/n");   //查看教学任务安排函数 
                else if (!a)
                    printf("请先选择课程安排!/n");  
                else ;//查看教学任务安排函数;   
                break;
            }   
        case 0:
            {
                printf(" ************** 谢谢使用 ************/n");
                return ;
            }
        default:
            printf("从新选择功能:/n");
        }
    }
	system("pause");
	return 0;
}


采用C++编写,完成了题目的所有要求,并附有说明文档。 大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学 期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在 开设时间的安排必须满足先修关。每门课程有哪些先修课程是确定的,可以有任意多门, 也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。 [基本要求] (1)输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。 (2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。 (3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。 [测试数据] 学期总数:6;学分上限:10;该专业共开设12门课,课程号从C01到C12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。先修关如下: 课程编号 课程名称 先决条件 C1 程序设计基础 无 C2 离散数学 C1 C3 数据结构 C1,C2 C4 汇编语言 C1 C5 语言的设计和分析 C3,C4 C6 计算机原理 C11 C7 编译原理 C5,C3 C8 操作系统 C3,C6 C9 高等数学 无 C10 线性代数 C9 C11 普通物理 C9 C12 数值分析 C9,C10,C1 [实现提示] 可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。应建立内部课程序号与课程号之间的对应关
排课表系统可行性研究报告 一、 引言 1.1编写目的 编本可行性报告目的是为了以后排课工作节省时间、提高教学效率、便于课程设计的管理。 1.2 项目背景 a. 软件的名称是排课表系统。 b. 项目的委托单位:中州大学信息工程学院。 c. 本项目是08信管2班张钦钦、张杰、李水莲、王珂、曹建超五个人参与软件过程开发。 2可行性研究前提 2.1 要求 a 功能完善。 b 便于操作。 c 结构严紧。 d 便于管理。 e 使用方便、快捷。 f 易于在数据库上实现。 2.2 目标 a 本排课表系统目标是每学期都可使用. b 机器代替手工工作。 c 便于课程教学的管理,减少人工排课的工作量。 d 可以进行精确查询。 e 与数据库连接,研究所处理数据的最优算法,提高计算机的处理速度。 f不断改善软件开发前各项决策系统的研发。 二、可行性分析 1、对现有系统的分析: 1.1现有系统是人工操作的。 1.2费时费力。 1.3工作效率低。 1.4容易出错。 1.5人力投入费用高。 2、系统的可行性从四个方面考虑 2.1、技术可行性 a.通过研究及查资料了解到当前的技术可以实现这个课程表管理系统。 b.五个人为一组,所学专业为计算机信息管理能满足此系统的开发。 c. 有充足的时间完成本系统。 2.2经济可行性 a.经过调查了解各个学校也有这个经济实力使用我们开发的课程表管理系统。 b.使用本系统不受时间限制。 c.排课一般为每学期一次,系统工作量不大。 d.本系统是学生自己开发的小型软件,设备和软件配置变化对支出和效益的影响比较小。 2.3、操作可行性 操作系统:我们开发的课程表管理系统适应于各个操作系统,比如windows xp ,vista,unix,linux等。 支持环境:IIS5.0数据库:Microsoft SQL Server 2000 2.4、法律可行性 我们开发的课程表管理系统没有任何抄袭,不会引起任何侵权问题。 3、系统的简要描述 这个系统要与数据库连接,并依赖于数据库,可以方便的查询课程和上课时间,上课地点,任课老师,可自动编排课程表。 4、与现有系统比较的优越性 这个系统比原系统更可靠,快速,且减少了出错的几率,减少了人力的投入,降低了成本,提高了工作效率,减少了编排课程表人员的工作量和劳动强度。 5、结论意见 通过分析可着手开发 三.需求分析 1.开发排课系统的必要性 现在课程表的编排使用的是人工,人来完成课程编排增加了人的劳动量,而且人工容易出错,人力投入资金多,效率不高,使用的范围有限,鉴于以上这些情况很有必要开发课程表排课系统。 2.此软件能实现的功能 只需操作人员输入校名,级别,班级,专业名及授课教师名,这样本软件就可以自动完成一周内各年级各专业的每个班级所上课程,上课时段,上课地点及任课老师的编排工作,操作人员不必过多参与。 3.动态数据 a.输入学校名。 b.输入院名。 c.输入班级名。 d.输入专业课名及对应的授课教师名。 e.选择规定课程的时段。 4.其他非功能需求 本软件应具有可维护性,可扩展性,可测试性,兼容性. 5.使用范围 此系统不设密码,任何学校都可以使用。 6.功能模块 模块一:输入学校名,院名,班级名,专业课名及授课教师名。 模块二:显示结果,支持手工修改,打印,并可以导出到word文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值