结构的二维数组

时间:2015-11-22 22:53:32

标签: c++ arrays

说明

该程序将读取一个包含学生5分的数据文件 计算机科学(CS)测试。每个学生记录将首先包含他/她的姓氏 姓名,数字学生ID,学生用户名,5个考试成绩,这5个成绩的平均分, 和CS课程的成绩。该文件将由程序处理并生成一个 报告。

该报告包含七个部分:

  1. 学生的用户名
  2. 每位学生五项考试的平均分数。
  3. 每个学生的CS课程的成绩。
  4. 班级的平均分数。
  5. A,B,C,D和F年级的学生总数。
  6. 根据用户选择排序的学生姓名和ID:降序或升序 成绩。
  7. 输入学生用户名ID搜索学生成绩。 (例如,参见附带的样本输入和输出。)
  8. 规格:

    1. 所有输入数据都将位于输入文件中。将使用的数据文件的名称 你的程序必须是grade.dat。您可能需要创建自己的 在打开之前测试程序的grade.dat版本。您还必须 提交此项目时,请提交此测试文件内容的打印输出。
    2. 学生用户名由学生的姓名和身份证号码生成 根据以下规则。学生用户名将是前两个首字母 和学生证号码的四位数字。例如,对于学生约翰(最后 名称),Doe(名字),ID号为1122,他的用户名是:jd1122。 用户名都是小写字母。
    3. 您的程序需要使用结构来存储学生信息,包括 姓氏,名字数字学生证,学生用户名,5个考试成绩, 这五个分数的平均分,以及CS课程的分数。
    4. 您的程序需要在程序中至少编写三个函数:For 例如:找到平均值,找到等级,搜索得分等。 2
    5. 您的程序需要进行输入检查:(1)正确的输入选择以进行排序: 上升或下降; (2)正确的用户ID格式:前两个是字母 最后四位是数字。
    6. 提交要求:

      你必须 通过myClasses @ SU提交您的C ++源代码,即.cpp文件 在:

      1. 设计/伪代码/层次结构图。你的算法。
      2. 源代码的打印副本。
      3. 您的示例输入数据文件集
      4. 您的一组示例屏幕输出对应于每个输入数据文件。
      5. 计划报告:明确说明您的计划是否运作良好。什么是 问题?或者你想让我知道的任何事情,例如,你得到了帮助 其他学生。你不能复制他人的工作。这是个人计划 分配<!/ LI>
      6. 您需要准备好演示您的项目并准备回答任何问题 与项目有关。
      7. 评分量规:

        Algorithm design/Pseudocode 10
        Correct outputs 20
        Structures 20
        Functions 10
        File reading 10
        Input checking 10
        Searching and sorting 10
        Readability/comments of program (including project report) 10
        3
        Sample Run
        

        示例输入文件grade.dat包含:

        Bonebrake Nicole 1111 90 85 50 78 85
        Boyer Dennie 2222 100 90 99 89 88
        Bozick Julia 3333 52 85 44 66 87
        Carroll Sandra 4444 87 88 95 85 100
        Creighton Sarah 5555 91 55 80 88 75
        Everett Terry 6666 60 70 59 79 89
        Freeman Andrew 7777 92 95 94 96 97
        Fugett Brandon 8888 77 88 75 95 80
        

        这是我到目前为止所拥有的:

        #include <iostream>
        #include <fstream>
        #include <string>
        using namespace std;
        
        struct StudentData
        {
            string first;
            string last;
            int studentID;
            int exam1;
            int exam2;
            int exam3;
            int exam4;
            int exam5;
        };
        
        int main()
        {
            ifstream file;
            file.open("grade.dat");
            StudentData students[8][8];
            file.close();
        }
        

        我无法将数据从文件中取出并将其放入数组中。

2 个答案:

答案 0 :(得分:0)

以下内容如何:

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;

struct StudentData
{
    string first;
    string last;
    int studentID;
    int exam1;
    int exam2;
    int exam3;
    int exam4;
    int exam5;
};

int main()
{
    ifstream file;
    string temp;
    char fname[100];
    char lname[100];
    file.open("grade.dat");
    StudentData students[8];

    for (int i = 0; i<8; i++)
    {
        getline(file, temp);
        sscanf(temp.c_str(),"%s %s %d %d %d %d %d %d", fname,lname,&students[i].studentID
               ,&students[i].exam1,&students[i].exam2,
               &students[i].exam3,&students[i].exam4,&students[i].exam5);
        students[i].first = fname;
        students[i].last =lname;
    }

    file.close();

    for (int i = 0; i<8; i++)
    {
        cout<<students[i].first<<" "<<students[i].last<<" "<<students[i].studentID 
        <<" "<< students[i].exam1<<" "<< students[i].exam2<<" "<< students[i].exam3
        <<" "<< students[i].exam4<<" "<< students[i].exam5<<endl;
    }

}

答案 1 :(得分:0)

好的,既然你需要的只是一个良好的开端,这里有一些提示:

首先,你的任务没有说明2d阵列,如果你是为了额外的功劳或其他事情而做的 - 不要这样做,既不是你的任务,也不是当前的实际任务。< / p>

第二 - 你手头的问题 - 阅读文件。您应该从一次读取一行开始。该行包含姓名,ID和成绩。获得该行后,您可以通过在空格键处拆分字符串来提取字段。这将为每个字段提供一个字符串。然后,您可以将学生姓名字段分配给字符串。还有一个函数可以将字符串转换为整数 - 这对于其他字段来说非常方便。

为了让事情看起来更专业,你可能想要考虑使用容器类而不是普通数组,std::vector是一个很好的候选者。此外,如果要进行排序,可能需要使用指针(最好是智能指针)和动态内存分配。此外,为了能够对数组进行排序,您需要编写基于不同标准比较学生的函数。容器将为您提供一种简单的方法来添加和删除学生,而不是一些僵硬的静态构造。

这里的每一步都已经在SO的答案中涵盖了,所以你需要做的就是在遇到问题时进行搜索。