鱼C论坛

 找回密码
 立即注册
查看: 2648|回复: 32

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

[复制链接]
发表于 2018-4-28 16:47:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
班级排名:计算每个学生总成绩在班级中的名次。

然后班级又有很多个,怎么对有多个数据的动态链表的学生数据进行排序并记入链表??

譬如: 计算机  软件工程 网络工程 3个专业   各有3个学生  录入学生的数据顺序是随机的  ,我该怎么把每个学生的班级排名数据写入链表???
最佳答案
2018-5-5 21:15:23
动态输入的版本 “完成了”
只完成了动态输入部分,其他部分没有完成,也不会被完成了
^_^

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. #include <windows.h>

  6. // 本科生
  7. struct Undergraduate
  8. {
  9.         int                num;                        // 学号
  10.         std::string        name;                        // 姓名
  11.         std::string        sex1;                        // 性别
  12.         int                Undergraduate_math;        // 本科生 高数
  13.         int                Undergraduate_English;        // 本科生 英语
  14.         int                Undergraduate_Cscore;        // 本科生 c语言
  15.         int                TotalScore;                // 总成绩
  16.         int                Classrank;                // 班级排名
  17.         int                Schoolrank;                // 校排名
  18. };

  19. // 班级
  20. struct Classroom
  21. {
  22.         std::string        classroom_name;                // 班级名
  23.         std::vector<Undergraduate> u;                // 本科生
  24. };

  25. // 专业
  26. struct Profession
  27. {
  28.         std::string        profession_name;        // 专业名
  29.         std::vector<Classroom> c;                // 班级
  30. };

  31. // 学校
  32. struct School
  33. {
  34.         std::string        school_name;                // 校名
  35.         std::vector<Profession> pro;                // 专业
  36. };

  37. //// 录入数据
  38. //void InputDataDebug(School &dest, const std::vector<UndergraduateDebug> &src)        // debug版本
  39. //{
  40. //        for(auto iterator = src.begin(); iterator != src.end(); ++iterator)
  41. //        {
  42. //                // 确定专业
  43. //                std::vector<Profession>::iterator i = dest.pro.end();
  44. //                for(auto iter = dest.pro.begin(); iter != dest.pro.end(); ++iter)
  45. //                {
  46. //                        if(iterator->profession == iter->profession_name)
  47. //                        {
  48. //                                i = iter;
  49. //                                break;
  50. //                        }
  51. //                }
  52. //
  53. //                // 没有就加一个
  54. //                if(i == dest.pro.end())
  55. //                {
  56. //                        // 在添加时确保专业是有序的
  57. //                        for(auto iter = dest.pro.begin(); iter != dest.pro.end(); ++iter)
  58. //                        {
  59. //                                if(iter->profession_name > iterator->profession)
  60. //                                {
  61. //                                        i = dest.pro.insert(iter, Profession({iterator->profession, std::vector<Classroom>()}));
  62. //                                        break;
  63. //                                }
  64. //                        }
  65. //
  66. //                        // i 任然等于dest.pro.end(),添加到最后
  67. //                        if(i == dest.pro.end())
  68. //                        {
  69. //                                dest.pro.push_back(Profession({iterator->profession, std::vector<Classroom>()}));
  70. //                                i = dest.pro.end() - 1;
  71. //                        }
  72. //                }
  73. //
  74. //                // 确定班级
  75. //                std::vector<Classroom>::iterator j = i->c.end();
  76. //                for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
  77. //                {
  78. //                        if(iterator->classroom == iter->classroom_name)
  79. //                        {
  80. //                                j = iter;
  81. //                                break;
  82. //                        }
  83. //                }
  84. //
  85. //                // 没有就加一个
  86. //                if(j == i->c.end())
  87. //                {
  88. //                        // 在添加时确保班级是有序的
  89. //                        for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
  90. //                        {
  91. //                                if(iter->classroom_name > iterator->classroom)
  92. //                                {
  93. //                                        j = i->c.insert(iter, Classroom({iterator->classroom, std::vector<Undergraduate>()}));
  94. //                                        break;
  95. //                                }
  96. //                        }
  97. //
  98. //                        // j 任然等于i->c.end(),添加到最后
  99. //                        if(j == i->c.end())
  100. //                        {
  101. //                                i->c.push_back(Classroom({iterator->classroom, std::vector<Undergraduate>()}));
  102. //                                j = i->c.end() - 1;
  103. //                        }
  104. //                }
  105. //
  106. //                // 确定学生在班级中的位置
  107. //                std::vector<Undergraduate>::iterator k = j->u.end();
  108. //                int TotalScore = iterator->Undergraduate_math + iterator->Undergraduate_English + iterator->Undergraduate_Cscore;
  109. //                for(auto iter = j->u.begin(); iter != j->u.end(); ++iter)
  110. //                {
  111. //                        if(iter->TotalScore < TotalScore)
  112. //                        {
  113. //                                k = iter;
  114. //                                break;
  115. //                        }
  116. //                }
  117. //
  118. //                Undergraduate u;
  119. //                u.num = iterator->num;
  120. //                u.name = iterator->name;
  121. //                u.sex1 = iterator->sex1;
  122. //                u.Undergraduate_math = iterator->Undergraduate_math;
  123. //                u.Undergraduate_English = iterator->Undergraduate_English;
  124. //                u.Undergraduate_Cscore = iterator->Undergraduate_Cscore;
  125. //                u.TotalScore = TotalScore;        // 上面已经计算过了
  126. //                u.Classrank = 0;                // 暂时填0
  127. //                u.Schoolrank = 0;                // 暂时填0
  128. //
  129. //                j->u.insert(k, u);
  130. //        }
  131. //}

  132. // 录入数据
  133. void InputData(School &s, const std::string profession_name, const std::string classroom_name, const Undergraduate &u)
  134. {
  135.         // 确定专业
  136.         std::vector<Profession>::iterator i = s.pro.end();
  137.         for(auto iter = s.pro.begin(); iter != s.pro.end(); ++iter)
  138.         {
  139.                 if(profession_name == iter->profession_name)
  140.                 {
  141.                         i = iter;
  142.                         break;
  143.                 }
  144.         }

  145.         // 没有就加一个
  146.         if(i == s.pro.end())
  147.         {
  148.                 // 在添加时确保专业是有序的
  149.                 for(auto iter = s.pro.begin(); iter != s.pro.end(); ++iter)
  150.                 {
  151.                         if(iter->profession_name > profession_name)
  152.                         {
  153.                                 i = s.pro.insert(iter, Profession{profession_name, std::vector<Classroom>()});
  154.                                 break;
  155.                         }
  156.                 }

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

  164.         // 确定班级
  165.         std::vector<Classroom>::iterator j = i->c.end();
  166.         for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
  167.         {
  168.                 if(classroom_name == iter->classroom_name)
  169.                 {
  170.                         j = iter;
  171.                         break;
  172.                 }
  173.         }

  174.         // 没有就加一个
  175.         if(j == i->c.end())
  176.         {
  177.                 // 在添加时确保班级是有序的
  178.                 for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
  179.                 {
  180.                         if(iter->classroom_name > classroom_name)
  181.                         {
  182.                                 j = i->c.insert(iter, Classroom{classroom_name, std::vector<Undergraduate>()});
  183.                                 break;
  184.                         }
  185.                 }

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

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

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

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

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

  213.         return s;
  214. }
  215. void DebugPrint(School &s)
  216. {
  217. #if 1
  218.         int length = 15;

  219.         std::cout << AlignString("校名:", length) << s.school_name << std::endl;
  220.         for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
  221.         {
  222.                 std::cout << "-------------------------" << std::endl;
  223.                 std::cout << AlignString("专业名:", length) << i->profession_name << std::endl;
  224.                 std::cout << "-------------------------" << std::endl;
  225.                 for(auto j = i->c.begin(); j != i->c.end(); ++j)
  226.                 {
  227.                         std::cout << "*************************" << std::endl;
  228.                         std::cout << AlignString("班级名:", length) << j->classroom_name << std::endl;
  229.                         for(auto k = j->u.begin(); k != j->u.end(); ++k)
  230.                         {
  231.                                 std::cout << AlignString("学号:", length)                << k->num << std::endl;
  232.                                 std::cout << AlignString("姓名:", length)                << k->name << std::endl;
  233.                                 std::cout << AlignString("性别:", length)                << k->sex1 << std::endl;
  234.                                 std::cout << AlignString("本科生 高数:", length)        << k->Undergraduate_math << std::endl;
  235.                                 std::cout << AlignString("本科生 英语:", length)        << k->Undergraduate_English << std::endl;
  236.                                 std::cout << AlignString("本科生 c语言:", length)        << k->Undergraduate_Cscore << std::endl;
  237.                                 std::cout << AlignString("总成绩:", length)                << k->TotalScore << std::endl;
  238.                                 std::cout << AlignString("班级排名:", length)                << k->Classrank << std::endl;
  239.                                 std::cout << AlignString("校排名:", length)                << k->Schoolrank << std::endl;
  240.                                 std::cout << std::endl;
  241.                         }
  242.                         std::cout << std::endl;
  243.                 }
  244.         }
  245. #else
  246.         // 另一种输出,按校级排名输出
  247.         std::vector<std::vector<Undergraduate>::iterator> tmp;
  248.         for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
  249.         {
  250.                 for(auto j = i->c.begin(); j != i->c.end(); ++j)
  251.                 {
  252.                         for(auto k = j->u.begin(); k != j->u.end(); ++k)
  253.                         {
  254.                                 tmp.push_back(k);
  255.                         }
  256.                 }
  257.         }

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

  260.         int length = 15;
  261.         for(auto iter = tmp.begin(); iter != tmp.end(); ++iter)
  262.         {
  263.                 std::cout << AlignString("学号:", length) << (*iter)->num << std::endl;
  264.                 std::cout << AlignString("姓名:", length) << (*iter)->name << std::endl;
  265.                 std::cout << AlignString("性别:", length) << (*iter)->sex1 << std::endl;
  266.                 std::cout << AlignString("本科生 高数:", length) << (*iter)->Undergraduate_math << std::endl;
  267.                 std::cout << AlignString("本科生 英语:", length) << (*iter)->Undergraduate_English << std::endl;
  268.                 std::cout << AlignString("本科生 c语言:", length) << (*iter)->Undergraduate_Cscore << std::endl;
  269.                 std::cout << AlignString("总成绩:", length) << (*iter)->TotalScore << std::endl;
  270.                 std::cout << AlignString("班级排名:", length) << (*iter)->Classrank << std::endl;
  271.                 std::cout << AlignString("校排名:", length) << (*iter)->Schoolrank << std::endl;
  272.                 std::cout << std::endl;
  273.         }
  274. #endif
  275. }
  276. // ********************************************************************************************


  277. // 排名
  278. void Rank(School &s)
  279. {
  280.         // 处理班级排名
  281.         // 学生在班级中已经是有序的
  282.         for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
  283.         {
  284.                 for(auto j = i->c.begin(); j != i->c.end(); ++j)
  285.                 {
  286.                         int count = 0;
  287.                         for(auto k = j->u.begin(); k != j->u.end(); ++k)
  288.                         {
  289.                                 k->Classrank = ++count;
  290.                         }
  291.                 }
  292.         }

  293.         // 处理校级排名
  294.         // 我也没有什么好办法^_^
  295.         std::vector<std::vector<Undergraduate>::iterator> tmp;
  296.         for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
  297.         {
  298.                 for(auto j = i->c.begin(); j != i->c.end(); ++j)
  299.                 {
  300.                         for(auto k = j->u.begin(); k != j->u.end(); ++k)
  301.                         {
  302.                                 tmp.push_back(k);
  303.                         }
  304.                 }
  305.         }

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

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

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

  317. //static void SetXY(int x, int y)
  318. //{
  319. //        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), COORD({(short)x, (short)y}));
  320. //}
  321. //
  322. //static COORD GetXY()
  323. //{
  324. //        CONSOLE_SCREEN_BUFFER_INFO csbi;
  325. //        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
  326. //        return COORD{csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y};
  327. //}
  328. //
  329. //static void HideCursor()
  330. //{
  331. //        HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  332. //        CONSOLE_CURSOR_INFO cci;
  333. //        GetConsoleCursorInfo(hOut, &cci);
  334. //        cci.bVisible = false;
  335. //        SetConsoleCursorInfo(hOut, &cci);
  336. //}

  337. //void DrawMenu()
  338. //{
  339. //        const int WINDOW_X = 180;
  340. //        const int WINDOW_Y = 45;
  341. //        const std::string menu_select[] =
  342. //        {
  343. //                "1.添加 --- 添加学生信息",
  344. //                "2.删除 --- 删除学生信息",
  345. //                "3.修改 --- 修改学生信息",
  346. //                "4.查看 --- 查看学生信息"
  347. //        };
  348. //
  349. //        for(int y = 0; y < WINDOW_Y - 1; ++y)
  350. //        {
  351. //                for(int x = 0; x < WINDOW_X; ++x)
  352. //                {
  353. //                        if(((y == 0) || (y == WINDOW_Y - 2)) || ((x == 0) || (x == WINDOW_X - 1)))
  354. //                        {
  355. //                                SetXY(x, y);
  356. //                                std::cout.put('*');
  357. //                        }
  358. //                }
  359. //        }
  360. //
  361. //
  362. //}

  363. int main()
  364. {
  365.         School s = {"校名", std::vector<Profession>()};
  366.         int count = 5;
  367.         while(count--)
  368.         {
  369.                 std::string profession_name;
  370.                 std::string classroom_name;
  371.                 Undergraduate u;
  372.                 std::cout << "学号:";
  373.                 std::cin >> u.num;
  374.                 std::cout << "姓名:";
  375.                 std::cin >> u.name;
  376.                 std::cout << "性别:";
  377.                 std::cin >> u.sex1;
  378.                 std::cout << "专业:";
  379.                 std::cin >> profession_name;
  380.                 std::cout << "班级:";
  381.                 std::cin >> classroom_name;
  382.                 std::cout << "本科生 高数:";
  383.                 std::cin >> u.Undergraduate_math;
  384.                 std::cout << "本科生 英语:";
  385.                 std::cin >> u.Undergraduate_English;
  386.                 std::cout << "本科生 c语言:";
  387.                 std::cin >> u.Undergraduate_Cscore;
  388.                 u.TotalScore = u.Undergraduate_math + u.Undergraduate_English + u.Undergraduate_Cscore;
  389.                 u.Classrank = 0;
  390.                 u.Schoolrank = 0;

  391.                 InputData(s, profession_name, classroom_name, u);
  392.         }
  393.         Rank(s);
  394.         DebugPrint(s);

  395.         //HideCursor();
  396.         //DrawMenu();

  397.         //// 学号我就不管了,有重复也不管了,^_^
  398.         //std::vector<UndergraduateDebug> info_tab =
  399.         //{
  400.         //        {0, "学生1", "女", "专业3", "班级2", 70, 50, 20, 0, 0, 0},
  401.         //        {1, "学生2", "男", "专业1", "班级3", 99, 45, 80, 0, 0, 0},
  402.         //        {2, "学生3", "男", "专业2", "班级1", 30, 20, 80, 0, 0, 0},
  403.         //        {3, "学生4", "男", "专业2", "班级2", 20, 40, 60, 0, 0, 0},
  404.         //        {4, "学生5", "女", "专业1", "班级1", 10, 58, 70, 0, 0, 0},
  405.         //        {5, "学生6", "女", "专业3", "班级3", 55, 60, 90, 0, 0, 0},
  406.         //        {6, "学生7", "男", "专业1", "班级1", 75, 57, 62, 0, 0, 0},
  407.         //        {7, "学生8", "女", "专业3", "班级2", 75, 52, 18, 0, 0, 0},
  408.         //        {8, "学生9", "男", "专业1", "班级3", 97, 89, 55, 0, 0, 0},
  409.         //        {9, "学生10", "男", "专业2", "班级1", 35, 21, 88, 0, 0, 0},
  410.         //        {10, "学生11", "男", "专业2", "班级2", 13, 18, 64, 0, 0, 0},
  411.         //        {11, "学生12", "女", "专业1", "班级1", 19, 59, 53, 0, 0, 0},
  412.         //        {12, "学生13", "女", "专业3", "班级3", 59, 51, 52, 0, 0, 0},
  413.         //        {13, "学生14", "男", "专业1", "班级1", 70, 68, 30, 0, 0, 0}
  414.         //};
  415.         //
  416.         //School s = {"校名", std::vector<Profession>()};
  417.         //InputDataDebug(s, info_tab);
  418.         //Rank(s);
  419.         //DebugPrint(s);

  420.         return 0;
  421. }
复制代码

  1. 学号:0
  2. 姓名:姓名0
  3. 性别:男
  4. 专业:专业0
  5. 班级:班级0
  6. 本科生 高数:99
  7. 本科生 英语:10
  8. 本科生 c语言:30
  9. 学号:1
  10. 姓名:姓名1
  11. 性别:女
  12. 专业:专业1
  13. 班级:班级0
  14. 本科生 高数:10
  15. 本科生 英语:2
  16. 本科生 c语言:32
  17. 学号:2
  18. 姓名:姓名2
  19. 性别:女
  20. 专业:专业1
  21. 班级:班级0
  22. 本科生 高数:12
  23. 本科生 英语:32
  24. 本科生 c语言:34
  25. 学号:3
  26. 姓名:姓名3
  27. 性别:男
  28. 专业:专业0
  29. 班级:班级0
  30. 本科生 高数:12
  31. 本科生 英语:45
  32. 本科生 c语言:78
  33. 学号:4
  34. 姓名:姓名4
  35. 性别:女
  36. 专业:专业0
  37. 班级:班级1
  38. 本科生 高数:87
  39. 本科生 英语:65
  40. 本科生 c语言:43
  41. 校名:         校名
  42. -------------------------
  43. 专业名:       专业0
  44. -------------------------
  45. *************************
  46. 班级名:       班级0
  47. 学号:         0
  48. 姓名:         姓名0
  49. 性别:         男
  50. 本科生 高数:  99
  51. 本科生 英语:  10
  52. 本科生 c语言: 30
  53. 总成绩:       139
  54. 班级排名:     1
  55. 校排名:       2

  56. 学号:         3
  57. 姓名:         姓名3
  58. 性别:         男
  59. 本科生 高数:  12
  60. 本科生 英语:  45
  61. 本科生 c语言: 78
  62. 总成绩:       135
  63. 班级排名:     2
  64. 校排名:       3


  65. *************************
  66. 班级名:       班级1
  67. 学号:         4
  68. 姓名:         姓名4
  69. 性别:         女
  70. 本科生 高数:  87
  71. 本科生 英语:  65
  72. 本科生 c语言: 43
  73. 总成绩:       195
  74. 班级排名:     1
  75. 校排名:       1


  76. -------------------------
  77. 专业名:       专业1
  78. -------------------------
  79. *************************
  80. 班级名:       班级0
  81. 学号:         2
  82. 姓名:         姓名2
  83. 性别:         女
  84. 本科生 高数:  12
  85. 本科生 英语:  32
  86. 本科生 c语言: 34
  87. 总成绩:       78
  88. 班级排名:     1
  89. 校排名:       4

  90. 学号:         1
  91. 姓名:         姓名1
  92. 性别:         女
  93. 本科生 高数:  10
  94. 本科生 英语:  2
  95. 本科生 c语言: 32
  96. 总成绩:       44
  97. 班级排名:     2
  98. 校排名:       5


  99. 请按任意键继续. . .
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. #include <windows.h>

  6. // 本科生
  7. struct Undergraduate
  8. {
  9.         int                num;                        // 学号
  10.         std::string        name;                        // 姓名
  11.         std::string        sex1;                        // 性别
  12.         int                Undergraduate_math;        // 本科生 高数
  13.         int                Undergraduate_English;        // 本科生 英语
  14.         int                Undergraduate_Cscore;        // 本科生 c语言
  15.         int                TotalScore;                // 总成绩
  16.         int                Classrank;                // 班级排名
  17.         int                Schoolrank;                // 校排名
  18. };

  19. // 班级
  20. struct Classroom
  21. {
  22.         std::string        classroom_name;                // 班级名
  23.         std::vector<Undergraduate> u;                // 本科生
  24. };

  25. // 专业
  26. struct Profession
  27. {
  28.         std::string        profession_name;        // 专业名
  29.         std::vector<Classroom> c;                // 班级
  30. };

  31. // 学校
  32. struct School
  33. {
  34.         std::string        school_name;                // 校名
  35.         std::vector<Profession> pro;                // 专业
  36. };

  37. //// 录入数据
  38. //void InputDataDebug(School &dest, const std::vector<UndergraduateDebug> &src)        // debug版本
  39. //{
  40. //        for(auto iterator = src.begin(); iterator != src.end(); ++iterator)
  41. //        {
  42. //                // 确定专业
  43. //                std::vector<Profession>::iterator i = dest.pro.end();
  44. //                for(auto iter = dest.pro.begin(); iter != dest.pro.end(); ++iter)
  45. //                {
  46. //                        if(iterator->profession == iter->profession_name)
  47. //                        {
  48. //                                i = iter;
  49. //                                break;
  50. //                        }
  51. //                }
  52. //
  53. //                // 没有就加一个
  54. //                if(i == dest.pro.end())
  55. //                {
  56. //                        // 在添加时确保专业是有序的
  57. //                        for(auto iter = dest.pro.begin(); iter != dest.pro.end(); ++iter)
  58. //                        {
  59. //                                if(iter->profession_name > iterator->profession)
  60. //                                {
  61. //                                        i = dest.pro.insert(iter, Profession({iterator->profession, std::vector<Classroom>()}));
  62. //                                        break;
  63. //                                }
  64. //                        }
  65. //
  66. //                        // i 任然等于dest.pro.end(),添加到最后
  67. //                        if(i == dest.pro.end())
  68. //                        {
  69. //                                dest.pro.push_back(Profession({iterator->profession, std::vector<Classroom>()}));
  70. //                                i = dest.pro.end() - 1;
  71. //                        }
  72. //                }
  73. //
  74. //                // 确定班级
  75. //                std::vector<Classroom>::iterator j = i->c.end();
  76. //                for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
  77. //                {
  78. //                        if(iterator->classroom == iter->classroom_name)
  79. //                        {
  80. //                                j = iter;
  81. //                                break;
  82. //                        }
  83. //                }
  84. //
  85. //                // 没有就加一个
  86. //                if(j == i->c.end())
  87. //                {
  88. //                        // 在添加时确保班级是有序的
  89. //                        for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
  90. //                        {
  91. //                                if(iter->classroom_name > iterator->classroom)
  92. //                                {
  93. //                                        j = i->c.insert(iter, Classroom({iterator->classroom, std::vector<Undergraduate>()}));
  94. //                                        break;
  95. //                                }
  96. //                        }
  97. //
  98. //                        // j 任然等于i->c.end(),添加到最后
  99. //                        if(j == i->c.end())
  100. //                        {
  101. //                                i->c.push_back(Classroom({iterator->classroom, std::vector<Undergraduate>()}));
  102. //                                j = i->c.end() - 1;
  103. //                        }
  104. //                }
  105. //
  106. //                // 确定学生在班级中的位置
  107. //                std::vector<Undergraduate>::iterator k = j->u.end();
  108. //                int TotalScore = iterator->Undergraduate_math + iterator->Undergraduate_English + iterator->Undergraduate_Cscore;
  109. //                for(auto iter = j->u.begin(); iter != j->u.end(); ++iter)
  110. //                {
  111. //                        if(iter->TotalScore < TotalScore)
  112. //                        {
  113. //                                k = iter;
  114. //                                break;
  115. //                        }
  116. //                }
  117. //
  118. //                Undergraduate u;
  119. //                u.num = iterator->num;
  120. //                u.name = iterator->name;
  121. //                u.sex1 = iterator->sex1;
  122. //                u.Undergraduate_math = iterator->Undergraduate_math;
  123. //                u.Undergraduate_English = iterator->Undergraduate_English;
  124. //                u.Undergraduate_Cscore = iterator->Undergraduate_Cscore;
  125. //                u.TotalScore = TotalScore;        // 上面已经计算过了
  126. //                u.Classrank = 0;                // 暂时填0
  127. //                u.Schoolrank = 0;                // 暂时填0
  128. //
  129. //                j->u.insert(k, u);
  130. //        }
  131. //}

  132. // 录入数据
  133. void InputData(School &s, const std::string profession_name, const std::string classroom_name, const Undergraduate &u)
  134. {
  135.         // 确定专业
  136.         std::vector<Profession>::iterator i = s.pro.end();
  137.         for(auto iter = s.pro.begin(); iter != s.pro.end(); ++iter)
  138.         {
  139.                 if(profession_name == iter->profession_name)
  140.                 {
  141.                         i = iter;
  142.                         break;
  143.                 }
  144.         }

  145.         // 没有就加一个
  146.         if(i == s.pro.end())
  147.         {
  148.                 // 在添加时确保专业是有序的
  149.                 for(auto iter = s.pro.begin(); iter != s.pro.end(); ++iter)
  150.                 {
  151.                         if(iter->profession_name > profession_name)
  152.                         {
  153.                                 i = s.pro.insert(iter, Profession{profession_name, std::vector<Classroom>()});
  154.                                 break;
  155.                         }
  156.                 }

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

  164.         // 确定班级
  165.         std::vector<Classroom>::iterator j = i->c.end();
  166.         for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
  167.         {
  168.                 if(classroom_name == iter->classroom_name)
  169.                 {
  170.                         j = iter;
  171.                         break;
  172.                 }
  173.         }

  174.         // 没有就加一个
  175.         if(j == i->c.end())
  176.         {
  177.                 // 在添加时确保班级是有序的
  178.                 for(auto iter = i->c.begin(); iter != i->c.end(); ++iter)
  179.                 {
  180.                         if(iter->classroom_name > classroom_name)
  181.                         {
  182.                                 j = i->c.insert(iter, Classroom{classroom_name, std::vector<Undergraduate>()});
  183.                                 break;
  184.                         }
  185.                 }

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

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

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

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

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

  213.         return s;
  214. }
  215. void DebugPrint(School &s)
  216. {
  217. #if 1
  218.         int length = 15;

  219.         std::cout << AlignString("校名:", length) << s.school_name << std::endl;
  220.         for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
  221.         {
  222.                 std::cout << "-------------------------" << std::endl;
  223.                 std::cout << AlignString("专业名:", length) << i->profession_name << std::endl;
  224.                 std::cout << "-------------------------" << std::endl;
  225.                 for(auto j = i->c.begin(); j != i->c.end(); ++j)
  226.                 {
  227.                         std::cout << "*************************" << std::endl;
  228.                         std::cout << AlignString("班级名:", length) << j->classroom_name << std::endl;
  229.                         for(auto k = j->u.begin(); k != j->u.end(); ++k)
  230.                         {
  231.                                 std::cout << AlignString("学号:", length)                << k->num << std::endl;
  232.                                 std::cout << AlignString("姓名:", length)                << k->name << std::endl;
  233.                                 std::cout << AlignString("性别:", length)                << k->sex1 << std::endl;
  234.                                 std::cout << AlignString("本科生 高数:", length)        << k->Undergraduate_math << std::endl;
  235.                                 std::cout << AlignString("本科生 英语:", length)        << k->Undergraduate_English << std::endl;
  236.                                 std::cout << AlignString("本科生 c语言:", length)        << k->Undergraduate_Cscore << std::endl;
  237.                                 std::cout << AlignString("总成绩:", length)                << k->TotalScore << std::endl;
  238.                                 std::cout << AlignString("班级排名:", length)                << k->Classrank << std::endl;
  239.                                 std::cout << AlignString("校排名:", length)                << k->Schoolrank << std::endl;
  240.                                 std::cout << std::endl;
  241.                         }
  242.                         std::cout << std::endl;
  243.                 }
  244.         }
  245. #else
  246.         // 另一种输出,按校级排名输出
  247.         std::vector<std::vector<Undergraduate>::iterator> tmp;
  248.         for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
  249.         {
  250.                 for(auto j = i->c.begin(); j != i->c.end(); ++j)
  251.                 {
  252.                         for(auto k = j->u.begin(); k != j->u.end(); ++k)
  253.                         {
  254.                                 tmp.push_back(k);
  255.                         }
  256.                 }
  257.         }

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

  260.         int length = 15;
  261.         for(auto iter = tmp.begin(); iter != tmp.end(); ++iter)
  262.         {
  263.                 std::cout << AlignString("学号:", length) << (*iter)->num << std::endl;
  264.                 std::cout << AlignString("姓名:", length) << (*iter)->name << std::endl;
  265.                 std::cout << AlignString("性别:", length) << (*iter)->sex1 << std::endl;
  266.                 std::cout << AlignString("本科生 高数:", length) << (*iter)->Undergraduate_math << std::endl;
  267.                 std::cout << AlignString("本科生 英语:", length) << (*iter)->Undergraduate_English << std::endl;
  268.                 std::cout << AlignString("本科生 c语言:", length) << (*iter)->Undergraduate_Cscore << std::endl;
  269.                 std::cout << AlignString("总成绩:", length) << (*iter)->TotalScore << std::endl;
  270.                 std::cout << AlignString("班级排名:", length) << (*iter)->Classrank << std::endl;
  271.                 std::cout << AlignString("校排名:", length) << (*iter)->Schoolrank << std::endl;
  272.                 std::cout << std::endl;
  273.         }
  274. #endif
  275. }
  276. // ********************************************************************************************


  277. // 排名
  278. void Rank(School &s)
  279. {
  280.         // 处理班级排名
  281.         // 学生在班级中已经是有序的
  282.         for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
  283.         {
  284.                 for(auto j = i->c.begin(); j != i->c.end(); ++j)
  285.                 {
  286.                         int count = 0;
  287.                         for(auto k = j->u.begin(); k != j->u.end(); ++k)
  288.                         {
  289.                                 k->Classrank = ++count;
  290.                         }
  291.                 }
  292.         }

  293.         // 处理校级排名
  294.         // 我也没有什么好办法^_^
  295.         std::vector<std::vector<Undergraduate>::iterator> tmp;
  296.         for(auto i = s.pro.begin(); i != s.pro.end(); ++i)
  297.         {
  298.                 for(auto j = i->c.begin(); j != i->c.end(); ++j)
  299.                 {
  300.                         for(auto k = j->u.begin(); k != j->u.end(); ++k)
  301.                         {
  302.                                 tmp.push_back(k);
  303.                         }
  304.                 }
  305.         }

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

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

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

  317. //static void SetXY(int x, int y)
  318. //{
  319. //        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), COORD({(short)x, (short)y}));
  320. //}
  321. //
  322. //static COORD GetXY()
  323. //{
  324. //        CONSOLE_SCREEN_BUFFER_INFO csbi;
  325. //        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
  326. //        return COORD{csbi.dwCursorPosition.X, csbi.dwCursorPosition.Y};
  327. //}
  328. //
  329. //static void HideCursor()
  330. //{
  331. //        HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  332. //        CONSOLE_CURSOR_INFO cci;
  333. //        GetConsoleCursorInfo(hOut, &cci);
  334. //        cci.bVisible = false;
  335. //        SetConsoleCursorInfo(hOut, &cci);
  336. //}

  337. //void DrawMenu()
  338. //{
  339. //        const int WINDOW_X = 180;
  340. //        const int WINDOW_Y = 45;
  341. //        const std::string menu_select[] =
  342. //        {
  343. //                "1.添加 --- 添加学生信息",
  344. //                "2.删除 --- 删除学生信息",
  345. //                "3.修改 --- 修改学生信息",
  346. //                "4.查看 --- 查看学生信息"
  347. //        };
  348. //
  349. //        for(int y = 0; y < WINDOW_Y - 1; ++y)
  350. //        {
  351. //                for(int x = 0; x < WINDOW_X; ++x)
  352. //                {
  353. //                        if(((y == 0) || (y == WINDOW_Y - 2)) || ((x == 0) || (x == WINDOW_X - 1)))
  354. //                        {
  355. //                                SetXY(x, y);
  356. //                                std::cout.put('*');
  357. //                        }
  358. //                }
  359. //        }
  360. //
  361. //
  362. //}

  363. int main()
  364. {
  365.         School s = {"校名", std::vector<Profession>()};
  366.         int count = 5;
  367.         while(count--)
  368.         {
  369.                 std::string profession_name;
  370.                 std::string classroom_name;
  371.                 Undergraduate u;
  372.                 std::cout << "学号:";
  373.                 std::cin >> u.num;
  374.                 std::cout << "姓名:";
  375.                 std::cin >> u.name;
  376.                 std::cout << "性别:";
  377.                 std::cin >> u.sex1;
  378.                 std::cout << "专业:";
  379.                 std::cin >> profession_name;
  380.                 std::cout << "班级:";
  381.                 std::cin >> classroom_name;
  382.                 std::cout << "本科生 高数:";
  383.                 std::cin >> u.Undergraduate_math;
  384.                 std::cout << "本科生 英语:";
  385.                 std::cin >> u.Undergraduate_English;
  386.                 std::cout << "本科生 c语言:";
  387.                 std::cin >> u.Undergraduate_Cscore;
  388.                 u.TotalScore = u.Undergraduate_math + u.Undergraduate_English + u.Undergraduate_Cscore;
  389.                 u.Classrank = 0;
  390.                 u.Schoolrank = 0;

  391.                 InputData(s, profession_name, classroom_name, u);
  392.         }
  393.         Rank(s);
  394.         DebugPrint(s);

  395.         //HideCursor();
  396.         //DrawMenu();

  397.         //// 学号我就不管了,有重复也不管了,^_^
  398.         //std::vector<UndergraduateDebug> info_tab =
  399.         //{
  400.         //        {0, "学生1", "女", "专业3", "班级2", 70, 50, 20, 0, 0, 0},
  401.         //        {1, "学生2", "男", "专业1", "班级3", 99, 45, 80, 0, 0, 0},
  402.         //        {2, "学生3", "男", "专业2", "班级1", 30, 20, 80, 0, 0, 0},
  403.         //        {3, "学生4", "男", "专业2", "班级2", 20, 40, 60, 0, 0, 0},
  404.         //        {4, "学生5", "女", "专业1", "班级1", 10, 58, 70, 0, 0, 0},
  405.         //        {5, "学生6", "女", "专业3", "班级3", 55, 60, 90, 0, 0, 0},
  406.         //        {6, "学生7", "男", "专业1", "班级1", 75, 57, 62, 0, 0, 0},
  407.         //        {7, "学生8", "女", "专业3", "班级2", 75, 52, 18, 0, 0, 0},
  408.         //        {8, "学生9", "男", "专业1", "班级3", 97, 89, 55, 0, 0, 0},
  409.         //        {9, "学生10", "男", "专业2", "班级1", 35, 21, 88, 0, 0, 0},
  410.         //        {10, "学生11", "男", "专业2", "班级2", 13, 18, 64, 0, 0, 0},
  411.         //        {11, "学生12", "女", "专业1", "班级1", 19, 59, 53, 0, 0, 0},
  412.         //        {12, "学生13", "女", "专业3", "班级3", 59, 51, 52, 0, 0, 0},
  413.         //        {13, "学生14", "男", "专业1", "班级1", 70, 68, 30, 0, 0, 0}
  414.         //};
  415.         //
  416.         //School s = {"校名", std::vector<Profession>()};
  417.         //InputDataDebug(s, info_tab);
  418.         //Rank(s);
  419.         //DebugPrint(s);

  420.         return 0;
  421. }
复制代码

  1. 学号:0
  2. 姓名:姓名0
  3. 性别:男
  4. 专业:专业0
  5. 班级:班级0
  6. 本科生 高数:99
  7. 本科生 英语:10
  8. 本科生 c语言:30
  9. 学号:1
  10. 姓名:姓名1
  11. 性别:女
  12. 专业:专业1
  13. 班级:班级0
  14. 本科生 高数:10
  15. 本科生 英语:2
  16. 本科生 c语言:32
  17. 学号:2
  18. 姓名:姓名2
  19. 性别:女
  20. 专业:专业1
  21. 班级:班级0
  22. 本科生 高数:12
  23. 本科生 英语:32
  24. 本科生 c语言:34
  25. 学号:3
  26. 姓名:姓名3
  27. 性别:男
  28. 专业:专业0
  29. 班级:班级0
  30. 本科生 高数:12
  31. 本科生 英语:45
  32. 本科生 c语言:78
  33. 学号:4
  34. 姓名:姓名4
  35. 性别:女
  36. 专业:专业0
  37. 班级:班级1
  38. 本科生 高数:87
  39. 本科生 英语:65
  40. 本科生 c语言:43
  41. 校名:         校名
  42. -------------------------
  43. 专业名:       专业0
  44. -------------------------
  45. *************************
  46. 班级名:       班级0
  47. 学号:         0
  48. 姓名:         姓名0
  49. 性别:         男
  50. 本科生 高数:  99
  51. 本科生 英语:  10
  52. 本科生 c语言: 30
  53. 总成绩:       139
  54. 班级排名:     1
  55. 校排名:       2

  56. 学号:         3
  57. 姓名:         姓名3
  58. 性别:         男
  59. 本科生 高数:  12
  60. 本科生 英语:  45
  61. 本科生 c语言: 78
  62. 总成绩:       135
  63. 班级排名:     2
  64. 校排名:       3


  65. *************************
  66. 班级名:       班级1
  67. 学号:         4
  68. 姓名:         姓名4
  69. 性别:         女
  70. 本科生 高数:  87
  71. 本科生 英语:  65
  72. 本科生 c语言: 43
  73. 总成绩:       195
  74. 班级排名:     1
  75. 校排名:       1


  76. -------------------------
  77. 专业名:       专业1
  78. -------------------------
  79. *************************
  80. 班级名:       班级0
  81. 学号:         2
  82. 姓名:         姓名2
  83. 性别:         女
  84. 本科生 高数:  12
  85. 本科生 英语:  32
  86. 本科生 c语言: 34
  87. 总成绩:       78
  88. 班级排名:     1
  89. 校排名:       4

  90. 学号:         1
  91. 姓名:         姓名1
  92. 性别:         女
  93. 本科生 高数:  10
  94. 本科生 英语:  2
  95. 本科生 c语言: 32
  96. 总成绩:       44
  97. 班级排名:     2
  98. 校排名:       5


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

使用道具 举报

 楼主| 发表于 2018-4-28 17:07:09 | 显示全部楼层
没有人吗???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-29 11:25:56 | 显示全部楼层
来人啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-29 13:05:25 | 显示全部楼层

这个不难吧^_^
先把你自己写的那部分贴上来,你要对链表排序,首先你先把链表写好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-29 13:19:59 | 显示全部楼层
人造人 发表于 2018-4-29 13:05
这个不难吧^_^
先把你自己写的那部分贴上来,你要对链表排序,首先你先把链表写好

我 不会写 这个函数 我只要实现void classrank(struct *undergraduate);并写入数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-29 13:26:40 | 显示全部楼层
  1. struct Undergraduate {                                                        //本科生
  2.         int num;                                                                        //学号
  3.         char name[10];                                                                //姓名
  4.         char sex1[4];                                                            //性别
  5.         char profession[20];                                                //专业
  6.         char classroom[20];                                                        //班级
  7.         int TotalScore;                                                                //总成绩
  8.         int Undergraduate_math;                                                //本科生 高数  
  9.         int Undergraduate_English;                                        //本科生 英语
  10.         int Undergraduate_Cscore;                                        //本科生 c语言  
  11.         int Classrank;                                                                //班级排名
  12.         int Schoolrank;                                                                //校排名
  13.         struct Undergraduate *next;
  14. }*under_head;
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-30 00:53:31 | 显示全部楼层

只有这些吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 18:44:32 | 显示全部楼层
  1. void luru() {
  2.         int flag;
  3.         struct Undergraduate *head1, *p1, *p2;
  4.         struct Postgraduate *head2, *p3, *p4;
  5.         int yy;
  6.         int n;
  7.         char xx;
  8.         FILE *p_file;

  9.         head1 = NULL;
  10.         p1 = NULL;
  11.         p2 = NULL;
  12.         head2 = NULL;
  13.         p3 = NULL;
  14.         p4 = NULL;

  15.         printf("\t\t_____________________________\n");
  16.         printf("\t\t|        学生管理系统       |\n");
  17.         printf("\t\t_____________________________\n");
  18.         printf("\t\t|                           |\n");
  19.         printf("\t\t|        输入1添加          |\n");
  20.         printf("\t\t|        输入0退出          |\n");
  21.         printf("\t\t|___________________________|\n");
  22.         xx = getch();
  23.         while (xx != '1'&& xx != '0') {
  24.                 printf("重新输入:");
  25.                 xx = getch();
  26.         }
  27.         if (xx == '1')
  28.                 flag = 1;
  29.         else
  30.                 flag = 0;
  31.         while (flag == 1) {
  32.                 system("CLS");
  33.                 printf("\t\t_____________________________\n");
  34.                 printf("\t\t|        学生管理系统       |\n");
  35.                 printf("\t\t_____________________________\n");
  36.                 printf("\t\t|                           |\n");
  37.                 printf("\t\t|    1.添加本科生信息       |\n");
  38.                 printf("\t\t|    2.添加研究生信息       |\n");
  39.                 printf("\t\t|    "); color(4); printf("0.退出"); color(16); printf("                 |\n");
  40.                 printf("\t\t|___________________________|\n");
  41.                 xx = getch();               
  42.                 if (xx == '1') {
  43.                         n = 0;
  44.                         p1 = p2;
  45.                         while (xx == '1') {
  46.                                 p1 = (struct  Undergraduate *)malloc(LEN1);
  47.                                 printf("请输入学生的姓名:");
  48.                                 scanf("%s", p1->name);
  49.                                 printf("请输入学生的性别(1.男/2.女):");
  50.                                 scanf("%d", &yy);
  51.                                 switch (yy) {
  52.                                 case 1:
  53.                                         strcpy(p1->sex1,"男");
  54.                                         break;
  55.                                 case 2:
  56.                                         strcpy(p1->sex1,"女");
  57.                                         break;
  58.                                 }
  59.                                 printf("请输入学生的专业:");
  60.                                 scanf("%s", &p1->profession);
  61.                                 printf("请输入学生的班级:");
  62.                                 scanf("%s", &p1->classroom);
  63.                                 printf("请输入高数成绩:");
  64.                                 scanf("%d", &p1->Undergraduate_math);
  65.                                 while (p1->Undergraduate_math < -1 || p1->Undergraduate_math>100) {
  66.                                         printf("输入错误,请重新输入:");
  67.                                         scanf("%d", &p1->Undergraduate_math);
  68.                                 }
  69.                                 printf("请输入英语成绩:");
  70.                                 scanf("%d", &p1->Undergraduate_English);
  71.                                 while (p1->Undergraduate_English < -1 || p1->Undergraduate_English>100) {
  72.                                         printf("输入错误,请重新输入:");
  73.                                         scanf("%d", &p1->Undergraduate_English);
  74.                                 }
  75.                                 printf("请输入C语言成绩:");
  76.                                 scanf("%d", &p1->Undergraduate_Cscore);
  77.                                 while (p1->Undergraduate_Cscore < -1 || p1->Undergraduate_Cscore>100) {
  78.                                         printf("输入错误,请重新输入:");
  79.                                         scanf("%d", &p1->Undergraduate_Cscore);
  80.                                 }       
  81.                                 if (p1->Undergraduate_Cscore == -1 || p1->Undergraduate_English == -1 || p1->Undergraduate_math == -1)
  82.                                         p1->TotalScore = -1;
  83.                                 else
  84.                                         p1->TotalScore = p1->Undergraduate_math + p1->Undergraduate_English + p1->Undergraduate_Cscore;
  85.                                 n++;
  86.                                 if (n == 1)
  87.                                 {
  88.                                         head1 = p1;
  89.                                 }
  90.                                 else
  91.                                 {
  92.                                         p2->next = p1;
  93.                                 }
  94.                                 p2 = p1;
  95.                                 /*
  96.                                 count1++;
  97.                                 p2->num = count1;
  98.                                 */
  99.                                 printf("\n\t\t1.继续添加          0.退出\n\n");
  100.                                 getchar();
  101.                                 xx = getch();
  102.                                 if (xx == '0') {
  103.                                         p2->next = NULL;
  104.                                         if (under_head == NULL)
  105.                                                 under_head = head1;
  106.                                         else
  107.                                         {
  108.                                                 under_head = insert_U(under_head, head1);        //插入
  109.                                         }
  110.                                         break;
  111.                                 }
  112.                         }
  113.                 }
  114.                 else if (xx == '2') {
  115.                         n = 0;
  116.                         p3 = p4;
  117.                         while (xx == '2') {
  118.                                 p3=(struct  Postgraduate *)malloc(LEN2);
  119.                                 printf("请输入学生的姓名:");
  120.                                 scanf("%s", p3->name);
  121.                                 printf("请输入学生的性别(1.男/2.女):");
  122.                                 scanf("%d", &yy);
  123.                                 switch (yy) {
  124.                                 case 1:
  125.                                         strcpy(p3->sex1, "男");
  126.                                         break;
  127.                                 case 2:
  128.                                         strcpy(p3->sex1, "女");
  129.                                         break;
  130.                                 }
  131.                                 printf("请输入学生的专业:");
  132.                                 scanf("%s", &p3->profession);
  133.                                 printf("请输入学生的班级:");
  134.                                 scanf("%s", &p3->classroom);
  135.                                 printf("请输入研究方向:");
  136.                                 scanf("%s",&p3->Postgraduate_direction);
  137.                                 while (p3->Postgraduate_direction == NULL) {
  138.                                         printf("输入错误,请重新输入:");
  139.                                         scanf("%s", &p3->Postgraduate_direction);
  140.                                 }
  141.                                 printf("请输入导师姓名:");
  142.                                 scanf("%s", &p3->Postgraduate_tutor);
  143.                                 while (p3->Postgraduate_tutor==NULL) {
  144.                                         printf("输入错误,请重新输入:");
  145.                                         scanf("%s", &p3->Postgraduate_tutor);
  146.                                 }
  147.                                 printf("请输入论文成绩:");
  148.                                 scanf("%d", &p3->Postgraduate_Thesismark);
  149.                                 while (p3->Postgraduate_Thesismark< -1 || p3->Postgraduate_Thesismark>100) {
  150.                                         printf("输入错误,请重新输入:");
  151.                                         scanf("%d", &p3->Postgraduate_Thesismark);
  152.                                 }
  153.                                 printf("请输入课程综合成绩:");
  154.                                 scanf("%d", &p3->Postgraduate_sum);
  155.                                 while (p3->Postgraduate_sum< -1 || p3->Postgraduate_sum>500) {
  156.                                         printf("输入错误,请重新输入:");
  157.                                         scanf("%d", &p3->Postgraduate_sum);
  158.                                 }
  159.                                 if (p3->Postgraduate_Thesismark == -1 || p3->Postgraduate_sum == -1)
  160.                                         p3->TotalScore = -1;
  161.                                 else
  162.                                         p3->TotalScore = p3->Postgraduate_Thesismark + p3->Postgraduate_sum;
  163.                                 n++;
  164.                                 /*
  165.                                 count2++;
  166.                                 p3->num = count2;
  167.                                 */
  168.                                 if (n == 1)
  169.                                 {
  170.                                         head2 = p3;
  171.                                 }
  172.                                 else
  173.                                 {
  174.                                         p4->next = p3;
  175.                                 }
  176.                                 p4 = p3;
  177.                                 printf("\n\t\t2.继续添加          0.退出\n\n");
  178.                                 getchar();
  179.                                 xx = getch();
  180.                                 if (xx == '0') {
  181.                                         p4->next = NULL;
  182.                                         if (post_head == NULL)
  183.                                                 post_head = head2;
  184.                                         else {
  185.                                                 post_head = insert_P(post_head, head2);//插入
  186.                                         }
  187.                                         break;
  188.                                 }
  189.                         }
  190.                 }
  191.                 else if(xx = '0')
  192.                         break;
  193.         }
  194. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

emmm 这是录入信息的 录入完 后就怎样 分班排名??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 18:47:07 | 显示全部楼层
ssg 发表于 2018-5-3 18:45
emmm 这是录入信息的 录入完 后就怎样 分班排名??

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

使用道具 举报

发表于 2018-5-3 18:53:52 | 显示全部楼层
ssg 发表于 2018-5-3 18:45
emmm 这是录入信息的 录入完 后就怎样 分班排名??


把代码发完整

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

使用道具 举报

 楼主| 发表于 2018-5-3 22:43:28 | 显示全部楼层
  1. #define LEN1 sizeof(struct Undergraduate)//本科生
  2. enum sex { 男 = 1, 女 };
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 22:46:11 | 显示全部楼层

我的代码写得乱。。。。不好意思大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 23:54:18 | 显示全部楼层
ssg 发表于 2018-5-3 22:46
我的代码写得乱。。。。不好意思大佬

把代码发完整
^_^

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

使用道具 举报

发表于 2018-5-4 00:00:43 | 显示全部楼层
这个程序必须用C语言写吗?
我想用C++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-4 00:11:09 | 显示全部楼层
我需要一些输入数据

专业 有哪些选项?
班级 有哪些选项?
成绩最高100分最低0分?


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

使用道具 举报

发表于 2018-5-4 00:21:39 | 显示全部楼层
专业 我百度到了,有好多选项
班级 应该如何填?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-4 00:45:29 | 显示全部楼层
人造人 发表于 2018-5-4 00:21
专业 我百度到了,有好多选项
班级 应该如何填?

这张表不完整,没办法继续向下写了,需要先完成这张表

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

使用道具 举报

 楼主| 发表于 2018-5-4 07:54:52 From FishC Mobile | 显示全部楼层
人造人 发表于 2018-5-4 00:00
这个程序必须用C语言写吗?
我想用C++

emmm 我修c 和 Java  没修c++成绩0-100就行,其他我自己修改下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-4 07:56:53 From FishC Mobile | 显示全部楼层
人造人 发表于 2018-5-4 00:21
专业 我百度到了,有好多选项
班级 应该如何填?

可以写专业1  专业2    班级写1班,2班这样,比较简洁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 11:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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