鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: ssg

[已解决]求助关于 如何分开对链表数据排序

[复制链接]
 楼主| 发表于 2018-5-4 07:58:35 From FishC Mobile | 显示全部楼层
人造人 发表于 2018-5-3 23:54
把代码发完整
^_^

只需实现x==1那里的排序就行,剩下的选项2我自己参考着写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-4 08:01:53 From FishC Mobile | 显示全部楼层
人造人 发表于 2018-5-3 23:54
把代码发完整
^_^

把这部分代码删除了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-4 13:38:50 | 显示全部楼层
ssg 发表于 2018-5-4 07:56
可以写专业1  专业2    班级写1班,2班这样,比较简洁

好主意
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-5 11:59:25 | 显示全部楼层
debug 版本已经完成
我还需要花些时间,修改一下,把输入数据改成动态输入,而不是使用info_tab
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

// 本科生
// debug版本
struct UndergraduateDebug
{
        int                num;                        // 学号
        std::string        name;                        // 姓名
        std::string        sex1;                        // 性别
        std::string        profession;                // 专业
        std::string        classroom;                // 班级
        int                Undergraduate_math;        // 本科生 高数
        int                Undergraduate_English;        // 本科生 英语
        int                Undergraduate_Cscore;        // 本科生 c语言
        int                TotalScore;                // 总成绩
        int                Classrank;                // 班级排名
        int                Schoolrank;                // 校排名
};


// 本科生
struct Undergraduate
{
        int                num;                        // 学号
        std::string        name;                        // 姓名
        std::string        sex1;                        // 性别
        int                Undergraduate_math;        // 本科生 高数
        int                Undergraduate_English;        // 本科生 英语
        int                Undergraduate_Cscore;        // 本科生 c语言
        int                TotalScore;                // 总成绩
        int                Classrank;                // 班级排名
        int                Schoolrank;                // 校排名
};

// 班级
struct Classroom
{
        std::string        classroom_name;                // 班级名
        std::vector<Undergraduate> u;                // 本科生
};

// 专业
struct Profession
{
        std::string        profession_name;        // 专业名
        std::vector<Classroom> c;                // 班级
};

// 学校
struct School
{
        std::string        school_name;                // 校名
        std::vector<Profession> pro;                // 专业
};

// 录入数据
void InputDataDebug(School &dest, const std::vector<UndergraduateDebug> &src)        // debug版本
{
        for(auto iterator = src.begin(); iterator != src.end(); ++iterator)
        {
                // 确定专业
                std::vector<Profession>::iterator i = dest.pro.end();
                for(auto iter = dest.pro.begin(); iter != dest.pro.end(); ++iter)
                {
                        if(iterator->profession == iter->profession_name)
                        {
                                i = iter;
                                break;
                        }
                }

                // 没有就加一个
                if(i == dest.pro.end())
                {
                        // 在添加时确保专业是有序的
                        for(auto iter = dest.pro.begin(); iter != dest.pro.end(); ++iter)
                        {
                                if(iter->profession_name > iterator->profession)
                                {
                                        i = dest.pro.insert(iter, Profession({iterator->profession, std::vector<Classroom>()}));
                                        break;
                                }
                        }

                        // i 任然等于dest.pro.end(),添加到最后
                        if(i == dest.pro.end())
                        {
                                dest.pro.push_back(Profession({iterator->profession, std::vector<Classroom>()}));
                                i = dest.pro.end() - 1;
                        }
                }

                // 确定班级
                std::vector<Classroom>::iterator j = i->c.end();
                for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
                {
                        if(iterator->classroom == iter->classroom_name)
                        {
                                j = iter;
                                break;
                        }
                }

                // 没有就加一个
                if(j == i->c.end())
                {
                        // 在添加时确保班级是有序的
                        for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
                        {
                                if(iter->classroom_name > iterator->classroom)
                                {
                                        j = i->c.insert(iter, Classroom({iterator->classroom, std::vector<Undergraduate>()}));
                                        break;
                                }
                        }

                        // j 任然等于i->c.end(),添加到最后
                        if(j == i->c.end())
                        {
                                i->c.push_back(Classroom({iterator->classroom, std::vector<Undergraduate>()}));
                                j = i->c.end() - 1;
                        }
                }

                // 确定学生在班级中的位置
                std::vector<Undergraduate>::iterator k = j->u.end();
                int TotalScore = iterator->Undergraduate_math + iterator->Undergraduate_English + iterator->Undergraduate_Cscore;
                for(auto iter = j->u.begin(); iter != j->u.end(); ++iter)
                {
                        if(iter->TotalScore < TotalScore)
                        {
                                k = iter;
                                break;
                        }
                }

                Undergraduate u;
                u.num = iterator->num;
                u.name = iterator->name;
                u.sex1 = iterator->sex1;
                u.Undergraduate_math = iterator->Undergraduate_math;
                u.Undergraduate_English = iterator->Undergraduate_English;
                u.Undergraduate_Cscore = iterator->Undergraduate_Cscore;
                u.TotalScore = TotalScore;        // 上面已经计算过了
                u.Classrank = 0;                // 暂时填0
                u.Schoolrank = 0;                // 暂时填0

                j->u.insert(k, u);
        }
}


bool Compare(const std::vector<Undergraduate>::iterator &a, const std::vector<Undergraduate>::iterator &b)
{
        return a->TotalScore > b->TotalScore;
}

std::string AlignString(std::string s, int length)
{
        while(s.length() != length)
                s.push_back(' ');

        return s;
}
void DebugPrint(School &s)
{
#if 1
        int length = 15;

        std::cout << AlignString("校名:", length) << s.school_name << std::endl;
        for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
        {
                std::cout << "-------------------------" << std::endl;
                std::cout << AlignString("专业名:", length) << i->profession_name << std::endl;
                std::cout << "-------------------------" << std::endl;
                for(auto j = i->c.begin(); j != i->c.end(); ++j)
                {
                        std::cout << "*************************" << std::endl;
                        std::cout << AlignString("班级名:", length) << j->classroom_name << std::endl;
                        for(auto k = j->u.begin(); k != j->u.end(); ++k)
                        {
                                std::cout << AlignString("学号:", length)                << k->num << std::endl;
                                std::cout << AlignString("姓名:", length)                << k->name << std::endl;
                                std::cout << AlignString("性别:", length)                << k->sex1 << std::endl;
                                std::cout << AlignString("本科生 高数:", length)        << k->Undergraduate_math << std::endl;
                                std::cout << AlignString("本科生 英语:", length)        << k->Undergraduate_English << std::endl;
                                std::cout << AlignString("本科生 c语言:", length)        << k->Undergraduate_Cscore << std::endl;
                                std::cout << AlignString("总成绩:", length)                << k->TotalScore << std::endl;
                                std::cout << AlignString("班级排名:", length)                << k->Classrank << std::endl;
                                std::cout << AlignString("校排名:", length)                << k->Schoolrank << std::endl;
                                std::cout << std::endl;
                        }
                        std::cout << std::endl;
                }
        }
#else
        // 另一种输出,按校级排名输出
        std::vector<std::vector<Undergraduate>::iterator> tmp;
        for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
        {
                for(auto j = i->c.begin(); j != i->c.end(); ++j)
                {
                        for(auto k = j->u.begin(); k != j->u.end(); ++k)
                        {
                                tmp.push_back(k);
                        }
                }
        }

        // 排序
        std::sort(tmp.begin(), tmp.end(), Compare);

        int length = 15;
        for(auto iter = tmp.begin(); iter != tmp.end(); ++iter)
        {
                std::cout << AlignString("学号:", length) << (*iter)->num << std::endl;
                std::cout << AlignString("姓名:", length) << (*iter)->name << std::endl;
                std::cout << AlignString("性别:", length) << (*iter)->sex1 << std::endl;
                std::cout << AlignString("本科生 高数:", length) << (*iter)->Undergraduate_math << std::endl;
                std::cout << AlignString("本科生 英语:", length) << (*iter)->Undergraduate_English << std::endl;
                std::cout << AlignString("本科生 c语言:", length) << (*iter)->Undergraduate_Cscore << std::endl;
                std::cout << AlignString("总成绩:", length) << (*iter)->TotalScore << std::endl;
                std::cout << AlignString("班级排名:", length) << (*iter)->Classrank << std::endl;
                std::cout << AlignString("校排名:", length) << (*iter)->Schoolrank << std::endl;
                std::cout << std::endl;
        }
#endif
}
// ********************************************************************************************


// 排名
void Rank(School &s)
{
        // 处理班级排名
        // 学生在班级中已经是有序的
        for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
        {
                for(auto j = i->c.begin(); j != i->c.end(); ++j)
                {
                        int count = 0;
                        for(auto k = j->u.begin(); k != j->u.end(); ++k)
                        {
                                k->Classrank = ++count;
                        }
                }
        }

        // 处理校级排名
        // 我也没有什么好办法^_^
        std::vector<std::vector<Undergraduate>::iterator> tmp;
        for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
        {
                for(auto j = i->c.begin(); j != i->c.end(); ++j)
                {
                        for(auto k = j->u.begin(); k != j->u.end(); ++k)
                        {
                                tmp.push_back(k);
                        }
                }
        }

        // 排序
        std::sort(tmp.begin(), tmp.end(), Compare);

        // 填序号就可以了
        int count = 0;
        for(auto iter = tmp.begin(); iter != tmp.end(); ++iter)
        {
                (*iter)->Schoolrank = ++count;
        }
}

int main()
{
        // 学号我就不管了,有重复也不管了,^_^
        std::vector<UndergraduateDebug> info_tab =
        {
                {0, "学生1", "女", "专业3", "班级2", 70, 50, 20, 0, 0, 0},
                {1, "学生2", "男", "专业1", "班级3", 99, 45, 80, 0, 0, 0},
                {2, "学生3", "男", "专业2", "班级1", 30, 20, 80, 0, 0, 0},
                {3, "学生4", "男", "专业2", "班级2", 20, 40, 60, 0, 0, 0},
                {4, "学生5", "女", "专业1", "班级1", 10, 58, 70, 0, 0, 0},
                {5, "学生6", "女", "专业3", "班级3", 55, 60, 90, 0, 0, 0},
                {6, "学生7", "男", "专业1", "班级1", 75, 57, 62, 0, 0, 0},
                {7, "学生8", "女", "专业3", "班级2", 75, 52, 18, 0, 0, 0},
                {8, "学生9", "男", "专业1", "班级3", 97, 89, 55, 0, 0, 0},
                {9, "学生10", "男", "专业2", "班级1", 35, 21, 88, 0, 0, 0},
                {10, "学生11", "男", "专业2", "班级2", 13, 18, 64, 0, 0, 0},
                {11, "学生12", "女", "专业1", "班级1", 19, 59, 53, 0, 0, 0},
                {12, "学生13", "女", "专业3", "班级3", 59, 51, 52, 0, 0, 0},
                {13, "学生14", "男", "专业1", "班级1", 70, 68, 30, 0, 0, 0}
        };
        
        School s = {"校名", std::vector<Profession>()};
        InputDataDebug(s, info_tab);
        Rank(s);
        DebugPrint(s);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-5 12:59:06 From FishC Mobile | 显示全部楼层
人造人 发表于 2018-5-5 11:59
debug 版本已经完成
我还需要花些时间,修改一下,把输入数据改成动态输入,而不是使用info_tab

好厉害,大佬学c多少年了,羡慕嫉妒恨
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-5 13:16:56 | 显示全部楼层
ssg 发表于 2018-5-5 12:59
好厉害,大佬学c多少年了,羡慕嫉妒恨

5年
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-5 18:08:54 | 显示全部楼层

我看了半天没看懂你的c++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-5 18:12:49 | 显示全部楼层
ssg 发表于 2018-5-5 18:08
我看了半天没看懂你的c++

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-5 18:13:18 | 显示全部楼层
ssg 发表于 2018-5-5 18:08
我看了半天没看懂你的c++

哪里不懂?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-5 18:52:55 | 显示全部楼层

添加专业那些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-5 18:53:55 | 显示全部楼层

.end()  是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-5 19:53:41 | 显示全部楼层
ssg 发表于 2018-5-5 18:53
.end()  是什么意思

C++迭代器iterator
#include <iostream>
#include <vector>

int main()
{
        std::vector<int> v = {1, 2, 3, 4, 5};
        for(auto iter = v.begin(); iter != v.end(); ++iter)
        {
                std::cout << *iter << std::endl;
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-5 21:15:23 | 显示全部楼层    本楼为最佳答案   
动态输入的版本 “完成了”
只完成了动态输入部分,其他部分没有完成,也不会被完成了
^_^
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <windows.h>

// 本科生
struct Undergraduate
{
        int                num;                        // 学号
        std::string        name;                        // 姓名
        std::string        sex1;                        // 性别
        int                Undergraduate_math;        // 本科生 高数
        int                Undergraduate_English;        // 本科生 英语
        int                Undergraduate_Cscore;        // 本科生 c语言
        int                TotalScore;                // 总成绩
        int                Classrank;                // 班级排名
        int                Schoolrank;                // 校排名
};

// 班级
struct Classroom
{
        std::string        classroom_name;                // 班级名
        std::vector<Undergraduate> u;                // 本科生
};

// 专业
struct Profession
{
        std::string        profession_name;        // 专业名
        std::vector<Classroom> c;                // 班级
};

// 学校
struct School
{
        std::string        school_name;                // 校名
        std::vector<Profession> pro;                // 专业
};

//// 录入数据
//void InputDataDebug(School &dest, const std::vector<UndergraduateDebug> &src)        // debug版本
//{
//        for(auto iterator = src.begin(); iterator != src.end(); ++iterator)
//        {
//                // 确定专业
//                std::vector<Profession>::iterator i = dest.pro.end();
//                for(auto iter = dest.pro.begin(); iter != dest.pro.end(); ++iter)
//                {
//                        if(iterator->profession == iter->profession_name)
//                        {
//                                i = iter;
//                                break;
//                        }
//                }
//
//                // 没有就加一个
//                if(i == dest.pro.end())
//                {
//                        // 在添加时确保专业是有序的
//                        for(auto iter = dest.pro.begin(); iter != dest.pro.end(); ++iter)
//                        {
//                                if(iter->profession_name > iterator->profession)
//                                {
//                                        i = dest.pro.insert(iter, Profession({iterator->profession, std::vector<Classroom>()}));
//                                        break;
//                                }
//                        }
//
//                        // i 任然等于dest.pro.end(),添加到最后
//                        if(i == dest.pro.end())
//                        {
//                                dest.pro.push_back(Profession({iterator->profession, std::vector<Classroom>()}));
//                                i = dest.pro.end() - 1;
//                        }
//                }
//
//                // 确定班级
//                std::vector<Classroom>::iterator j = i->c.end();
//                for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
//                {
//                        if(iterator->classroom == iter->classroom_name)
//                        {
//                                j = iter;
//                                break;
//                        }
//                }
//
//                // 没有就加一个
//                if(j == i->c.end())
//                {
//                        // 在添加时确保班级是有序的
//                        for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
//                        {
//                                if(iter->classroom_name > iterator->classroom)
//                                {
//                                        j = i->c.insert(iter, Classroom({iterator->classroom, std::vector<Undergraduate>()}));
//                                        break;
//                                }
//                        }
//
//                        // j 任然等于i->c.end(),添加到最后
//                        if(j == i->c.end())
//                        {
//                                i->c.push_back(Classroom({iterator->classroom, std::vector<Undergraduate>()}));
//                                j = i->c.end() - 1;
//                        }
//                }
//
//                // 确定学生在班级中的位置
//                std::vector<Undergraduate>::iterator k = j->u.end();
//                int TotalScore = iterator->Undergraduate_math + iterator->Undergraduate_English + iterator->Undergraduate_Cscore;
//                for(auto iter = j->u.begin(); iter != j->u.end(); ++iter)
//                {
//                        if(iter->TotalScore < TotalScore)
//                        {
//                                k = iter;
//                                break;
//                        }
//                }
//
//                Undergraduate u;
//                u.num = iterator->num;
//                u.name = iterator->name;
//                u.sex1 = iterator->sex1;
//                u.Undergraduate_math = iterator->Undergraduate_math;
//                u.Undergraduate_English = iterator->Undergraduate_English;
//                u.Undergraduate_Cscore = iterator->Undergraduate_Cscore;
//                u.TotalScore = TotalScore;        // 上面已经计算过了
//                u.Classrank = 0;                // 暂时填0
//                u.Schoolrank = 0;                // 暂时填0
//
//                j->u.insert(k, u);
//        }
//}

// 录入数据
void InputData(School &s, const std::string profession_name, const std::string classroom_name, const Undergraduate &u)
{
        // 确定专业
        std::vector<Profession>::iterator i = s.pro.end();
        for(auto iter = s.pro.begin(); iter != s.pro.end(); ++iter)
        {
                if(profession_name == iter->profession_name)
                {
                        i = iter;
                        break;
                }
        }

        // 没有就加一个
        if(i == s.pro.end())
        {
                // 在添加时确保专业是有序的
                for(auto iter = s.pro.begin(); iter != s.pro.end(); ++iter)
                {
                        if(iter->profession_name > profession_name)
                        {
                                i = s.pro.insert(iter, Profession{profession_name, std::vector<Classroom>()});
                                break;
                        }
                }

                // i 任然等于dest.pro.end(),添加到最后
                if(i == s.pro.end())
                {
                        s.pro.push_back(Profession{profession_name, std::vector<Classroom>()});
                        i = s.pro.end() - 1;
                }
        }

        // 确定班级
        std::vector<Classroom>::iterator j = i->c.end();
        for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
        {
                if(classroom_name == iter->classroom_name)
                {
                        j = iter;
                        break;
                }
        }

        // 没有就加一个
        if(j == i->c.end())
        {
                // 在添加时确保班级是有序的
                for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
                {
                        if(iter->classroom_name > classroom_name)
                        {
                                j = i->c.insert(iter, Classroom{classroom_name, std::vector<Undergraduate>()});
                                break;
                        }
                }

                // j 任然等于i->c.end(),添加到最后
                if(j == i->c.end())
                {
                        i->c.push_back(Classroom{classroom_name, std::vector<Undergraduate>()});
                        j = i->c.end() - 1;
                }
        }

        // 确定学生在班级中的位置
        std::vector<Undergraduate>::iterator k = j->u.end();
        for(auto iter = j->u.begin(); iter != j->u.end(); ++iter)
        {
                if(iter->TotalScore < u.TotalScore)
                {
                        k = iter;
                        break;
                }
        }

        j->u.insert(k, u);
}

bool Compare(const std::vector<Undergraduate>::iterator &a, const std::vector<Undergraduate>::iterator &b)
{
        return a->TotalScore > b->TotalScore;
}

std::string AlignString(std::string s, int length)
{
        while(s.length() != length)
                s.push_back(' ');

        return s;
}
void DebugPrint(School &s)
{
#if 1
        int length = 15;

        std::cout << AlignString("校名:", length) << s.school_name << std::endl;
        for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
        {
                std::cout << "-------------------------" << std::endl;
                std::cout << AlignString("专业名:", length) << i->profession_name << std::endl;
                std::cout << "-------------------------" << std::endl;
                for(auto j = i->c.begin(); j != i->c.end(); ++j)
                {
                        std::cout << "*************************" << std::endl;
                        std::cout << AlignString("班级名:", length) << j->classroom_name << std::endl;
                        for(auto k = j->u.begin(); k != j->u.end(); ++k)
                        {
                                std::cout << AlignString("学号:", length)                << k->num << std::endl;
                                std::cout << AlignString("姓名:", length)                << k->name << std::endl;
                                std::cout << AlignString("性别:", length)                << k->sex1 << std::endl;
                                std::cout << AlignString("本科生 高数:", length)        << k->Undergraduate_math << std::endl;
                                std::cout << AlignString("本科生 英语:", length)        << k->Undergraduate_English << std::endl;
                                std::cout << AlignString("本科生 c语言:", length)        << k->Undergraduate_Cscore << std::endl;
                                std::cout << AlignString("总成绩:", length)                << k->TotalScore << std::endl;
                                std::cout << AlignString("班级排名:", length)                << k->Classrank << std::endl;
                                std::cout << AlignString("校排名:", length)                << k->Schoolrank << std::endl;
                                std::cout << std::endl;
                        }
                        std::cout << std::endl;
                }
        }
#else
        // 另一种输出,按校级排名输出
        std::vector<std::vector<Undergraduate>::iterator> tmp;
        for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
        {
                for(auto j = i->c.begin(); j != i->c.end(); ++j)
                {
                        for(auto k = j->u.begin(); k != j->u.end(); ++k)
                        {
                                tmp.push_back(k);
                        }
                }
        }

        // 排序
        std::sort(tmp.begin(), tmp.end(), Compare);

        int length = 15;
        for(auto iter = tmp.begin(); iter != tmp.end(); ++iter)
        {
                std::cout << AlignString("学号:", length) << (*iter)->num << std::endl;
                std::cout << AlignString("姓名:", length) << (*iter)->name << std::endl;
                std::cout << AlignString("性别:", length) << (*iter)->sex1 << std::endl;
                std::cout << AlignString("本科生 高数:", length) << (*iter)->Undergraduate_math << std::endl;
                std::cout << AlignString("本科生 英语:", length) << (*iter)->Undergraduate_English << std::endl;
                std::cout << AlignString("本科生 c语言:", length) << (*iter)->Undergraduate_Cscore << std::endl;
                std::cout << AlignString("总成绩:", length) << (*iter)->TotalScore << std::endl;
                std::cout << AlignString("班级排名:", length) << (*iter)->Classrank << std::endl;
                std::cout << AlignString("校排名:", length) << (*iter)->Schoolrank << std::endl;
                std::cout << std::endl;
        }
#endif
}
// ********************************************************************************************


// 排名
void Rank(School &s)
{
        // 处理班级排名
        // 学生在班级中已经是有序的
        for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
        {
                for(auto j = i->c.begin(); j != i->c.end(); ++j)
                {
                        int count = 0;
                        for(auto k = j->u.begin(); k != j->u.end(); ++k)
                        {
                                k->Classrank = ++count;
                        }
                }
        }

        // 处理校级排名
        // 我也没有什么好办法^_^
        std::vector<std::vector<Undergraduate>::iterator> tmp;
        for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
        {
                for(auto j = i->c.begin(); j != i->c.end(); ++j)
                {
                        for(auto k = j->u.begin(); k != j->u.end(); ++k)
                        {
                                tmp.push_back(k);
                        }
                }
        }

        // 排序
        std::sort(tmp.begin(), tmp.end(), Compare);

        // 填序号就可以了
        int count = 0;
        for(auto iter = tmp.begin(); iter != tmp.end(); ++iter)
        {
                (*iter)->Schoolrank = ++count;
        }
}

// 为了方便,就把所有函数挤在一个cpp文件了
// 这样好像并不“方便”,目前就这样了

//static void SetXY(int x, int y)
//{
//        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), COORD({(short)x, (short)y}));
//}
//
//static COORD GetXY()
//{
//        CONSOLE_SCREEN_BUFFER_INFO csbi;
//        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
//        return COORD{csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y};
//}
//
//static void HideCursor()
//{
//        HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
//        CONSOLE_CURSOR_INFO cci;
//        GetConsoleCursorInfo(hOut, &cci);
//        cci.bVisible = false;
//        SetConsoleCursorInfo(hOut, &cci);
//}

//void DrawMenu()
//{
//        const int WINDOW_X = 180;
//        const int WINDOW_Y = 45;
//        const std::string menu_select[] =
//        {
//                "1.添加 --- 添加学生信息",
//                "2.删除 --- 删除学生信息",
//                "3.修改 --- 修改学生信息",
//                "4.查看 --- 查看学生信息"
//        };
//
//        for(int y = 0; y < WINDOW_Y - 1; ++y)
//        {
//                for(int x = 0; x < WINDOW_X; ++x)
//                {
//                        if(((y == 0) || (y == WINDOW_Y - 2)) || ((x == 0) || (x == WINDOW_X - 1)))
//                        {
//                                SetXY(x, y);
//                                std::cout.put('*');
//                        }
//                }
//        }
//
//
//}

int main()
{
        School s = {"校名", std::vector<Profession>()};
        int count = 5;
        while(count--)
        {
                std::string profession_name;
                std::string classroom_name;
                Undergraduate u;
                std::cout << "学号:";
                std::cin >> u.num;
                std::cout << "姓名:";
                std::cin >> u.name;
                std::cout << "性别:";
                std::cin >> u.sex1;
                std::cout << "专业:";
                std::cin >> profession_name;
                std::cout << "班级:";
                std::cin >> classroom_name;
                std::cout << "本科生 高数:";
                std::cin >> u.Undergraduate_math;
                std::cout << "本科生 英语:";
                std::cin >> u.Undergraduate_English;
                std::cout << "本科生 c语言:";
                std::cin >> u.Undergraduate_Cscore;
                u.TotalScore = u.Undergraduate_math + u.Undergraduate_English + u.Undergraduate_Cscore;
                u.Classrank = 0;
                u.Schoolrank = 0;

                InputData(s, profession_name, classroom_name, u);
        }
        Rank(s);
        DebugPrint(s);

        //HideCursor();
        //DrawMenu();

        //// 学号我就不管了,有重复也不管了,^_^
        //std::vector<UndergraduateDebug> info_tab =
        //{
        //        {0, "学生1", "女", "专业3", "班级2", 70, 50, 20, 0, 0, 0},
        //        {1, "学生2", "男", "专业1", "班级3", 99, 45, 80, 0, 0, 0},
        //        {2, "学生3", "男", "专业2", "班级1", 30, 20, 80, 0, 0, 0},
        //        {3, "学生4", "男", "专业2", "班级2", 20, 40, 60, 0, 0, 0},
        //        {4, "学生5", "女", "专业1", "班级1", 10, 58, 70, 0, 0, 0},
        //        {5, "学生6", "女", "专业3", "班级3", 55, 60, 90, 0, 0, 0},
        //        {6, "学生7", "男", "专业1", "班级1", 75, 57, 62, 0, 0, 0},
        //        {7, "学生8", "女", "专业3", "班级2", 75, 52, 18, 0, 0, 0},
        //        {8, "学生9", "男", "专业1", "班级3", 97, 89, 55, 0, 0, 0},
        //        {9, "学生10", "男", "专业2", "班级1", 35, 21, 88, 0, 0, 0},
        //        {10, "学生11", "男", "专业2", "班级2", 13, 18, 64, 0, 0, 0},
        //        {11, "学生12", "女", "专业1", "班级1", 19, 59, 53, 0, 0, 0},
        //        {12, "学生13", "女", "专业3", "班级3", 59, 51, 52, 0, 0, 0},
        //        {13, "学生14", "男", "专业1", "班级1", 70, 68, 30, 0, 0, 0}
        //};
        //
        //School s = {"校名", std::vector<Profession>()};
        //InputDataDebug(s, info_tab);
        //Rank(s);
        //DebugPrint(s);

        return 0;
}
学号:0
姓名:姓名0
性别:男
专业:专业0
班级:班级0
本科生 高数:99
本科生 英语:10
本科生 c语言:30
学号:1
姓名:姓名1
性别:女
专业:专业1
班级:班级0
本科生 高数:10
本科生 英语:2
本科生 c语言:32
学号:2
姓名:姓名2
性别:女
专业:专业1
班级:班级0
本科生 高数:12
本科生 英语:32
本科生 c语言:34
学号:3
姓名:姓名3
性别:男
专业:专业0
班级:班级0
本科生 高数:12
本科生 英语:45
本科生 c语言:78
学号:4
姓名:姓名4
性别:女
专业:专业0
班级:班级1
本科生 高数:87
本科生 英语:65
本科生 c语言:43
校名:         校名
-------------------------
专业名:       专业0
-------------------------
*************************
班级名:       班级0
学号:         0
姓名:         姓名0
性别:         男
本科生 高数:  99
本科生 英语:  10
本科生 c语言: 30
总成绩:       139
班级排名:     1
校排名:       2

学号:         3
姓名:         姓名3
性别:         男
本科生 高数:  12
本科生 英语:  45
本科生 c语言: 78
总成绩:       135
班级排名:     2
校排名:       3


*************************
班级名:       班级1
学号:         4
姓名:         姓名4
性别:         女
本科生 高数:  87
本科生 英语:  65
本科生 c语言: 43
总成绩:       195
班级排名:     1
校排名:       1


-------------------------
专业名:       专业1
-------------------------
*************************
班级名:       班级0
学号:         2
姓名:         姓名2
性别:         女
本科生 高数:  12
本科生 英语:  32
本科生 c语言: 34
总成绩:       78
班级排名:     1
校排名:       4

学号:         1
姓名:         姓名1
性别:         女
本科生 高数:  10
本科生 英语:  2
本科生 c语言: 32
总成绩:       44
班级排名:     2
校排名:       5


请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 23:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表