数据结构实验-写过的最长代码

这是一个关于数据结构实验的项目,实现了学生在导师组间的转移、研究生负责人变更、研究生删除时的本科生分配策略、增删导师以及复杂的查询功能,能够详细展示导师及其指导学生和研究生负责的本科生信息。
摘要由CSDN通过智能技术生成

①问题描述
   在高校的教学改革中,有很多学校实行了本科生导师制。一个班级的学生被分给几个老师,每个老师带n个学生,如果该老师还带研究生,那么研究生也可直接带本科生。本科生导师制问题中的数据元素具有如下形式:
导师带研究生(老师,((研究生1,(本科生1,…,本科生m1)),(研究生2,(本科生1,…,本科生m2))…))
导师不带研究生(老师,(本科生1,…,本科生m))
   导师的自然情况只包括姓名、职称;研究生的自然情况只包括姓名、班级;本科生的自然情况只包括姓名、班级。
   ②基本要求
   要求完成以下功能:
建立:建立导师广义表。
插入:将某位本科生或研究生插入到广义表的相应位置。
删除:将某本科生或研究生从广义表中删除。
查询:查询导师、本科生(研究生)的情况。
统计:某导师带了多少个研究生和本科生。
输出:将某导师所带学生情况输出。

退出:程序结束。

可以将学生从一个导师组转到另一个导师组。
可以在同一个导师组内修改本科生的研究生负责人。
当研究生带本科生时,如果要删除该研究生,可根据情况,将本科生平均分配给该导师的其他研究生,如果没有其他研究生,则由导师直接负责。
增加删除导师的功能。
查询时,如果待查人员是导师,除了输出本人信息外,还输出他所指导的学生信息;如果待查人员是研究生,除了输出其导师和本人信息外,还输出他所负责的本科生信息。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<list>
#include<string.h>
#include<string>
using namespace std;
#define N 777
#define clr(a) memset(a, 0, sizeof(a))
#define F(i, a, n) for(int i=a; i <= n; i++)
struct node{
    string name;
    string prof;
    int ty,cn,fg;
}tea[N], p, stu[N], bac[N];
list<node >lao[N];
list<node>yan[N];
list<node>xue[N];
list<node>::iterator it, it2; 
int x, y, n, m, k;
int a, b, c; 
void init(){
    y=0; x=0;
    F(i, 1, n){
        xue[i].clear(); 
        lao[i].clear(); 
        yan[i].clear();
    }
}
void scan(){
    printf("输入类型; \n"); 
    int tt;
    scanf("%d", &tt);
    if(tt==0){
        n++;
        printf("输入老师的姓名,职称,类型:\n");
        cin >> tea[n].name >> tea[n].prof >> tea[n].ty;
        tea[n].cn=n; tea[n].fg=1;
        printf("输入m,表示有这个老师有m个学生:\n");
        scanf("%d",&m);
        printf("输入学生的姓名,班级,类型:\n");  
        while(m--){
            cin >> p.name >> p.prof >> p.ty;
            if(p.ty == 1) {
                ++y, p.cn=y;p.fg=1; 
                bac[y]=p;
                yan[y].push_back(tea[n]);
            }
            else{
                ++x, p.cn=x; p.fg=1;
                stu[x]=p; 
                xue[x].push_back(tea[n]);
            }
            lao[n].push_back(p);
        }
       
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值