c和c++的一些训练题(9)(学生成绩管理系统)

来源:互联网 发布:回家吃饭网络订餐 编辑:程序博客网 时间:2024/06/11 15:37

问题的提出:编程建立学生成绩管理系统。要求具有以下功能:一个学生的信息包括学号、姓名、英语成绩、语文成绩、数学成绩,要求输入每位学生的信息并显示这些信息;同时计算每位学生的总分即英语、语文、数学成绩之和,并对输入的若干学生按总分排名,按总分名次输出每位学生及其信息;最后计算这些学生的英语平均分、语文平均分和数学平均分,并输出结果。

遇到的问题:

(1).1>test7.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall Student::Student(void)" (??0Student@@QAE@XZ),该符号在函数 _wmain 中被引用
1>D:\jiangshan\test7\Debug\test7.exe : fatal error LNK1120: 1 个无法解析的外部命令

这是因为你在类定义里面列出了构造函数的原型,但是没有函数体,所以链接时发生错误

需要把构造函数Student();改为Student() {}


(2).new和delete的使用方法

new和delete运算符用于动态分配和撤销内存的运算符

new用法:

         1.     开辟单变量地址空间

               1)new int;  //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a.

               2)int *a = new int(5) 作用同上,但是同时将整数赋值为5

         2.     开辟数组空间

               一维: int *a = newint[100];开辟一个大小为100的整型数组空间

               二维: int **a = newint[5][6]

               三维及其以上:依此类推.

        一般用法: new 类型 [初值]

delete用法:

         1. int *a = new int;

               delete a;   //释放单个int的空间

          2.int *a = new int[5];

               delete [] a; //释放int数组空间

代码:

// test3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <iomanip>#include <string>using namespace std;class Student{private://int total;int number;string name;float Chin;float Engl;float Math;float sumS;public:Student(){}Student(int n, string str, float c, float e, float m){number=n;name=str;Chin=c;Engl=e;Math=m;}void setup(int n, string str, float c, float e, float m){//Student s;number=n;name=str;Chin=c;Engl=e;Math=m;//return s;}void sum(float c, float e, float m){sumS=c+e+m;}friend void Bubble(Student *s, int n);friend void Show(Student *s,int n);friend ostream & operator<<(ostream &, Student &);};ostream & operator<<(ostream &os, Student &s){cout<<left<<setw(10)<<"学生学号:"<<left<<setw(4)<<s.number;//cin>>num;cout<<left<<setw(10)<<" 学生姓名:"<<left<<setw(7)<<s.name;//cin>>str;cout<<left<<setw(10)<<" 语文成绩:"<<left<<setw(4)<<s.Chin;//cin>>c;cout<<left<<setw(10)<<"英语成绩:"<<left<<setw(4)<<s.Engl;//cin>>e;cout<<left<<setw(10)<<"数学成绩:"<<left<<setw(4)<<s.Math;//cin>>m;cout<<left<<setw(10)<<"总成绩:"<<left<<setw(4)<<s.sumS;return os;}void Bubble(Student *s, int n){Student temp;for(int i=0; i<n; i++){for(int j=0; j<n-1-i; j++){if(s[j].sumS<=s[j+1].sumS)              {                  temp=s[j];                  s[j]=s[j+1];                  s[j+1]=temp;              }  }}}void Show(Student *s,int n){cout<<left<<setw(10)<<"学生学号";//cin>>num;cout<<left<<setw(10)<<"学生姓名";//cin>>str;cout<<left<<setw(10)<<"语文成绩";//cin>>c;cout<<left<<setw(10)<<"英语成绩";//cin>>e;cout<<left<<setw(10)<<"数学成绩";//cin>>m;cout<<left<<setw(10)<<"总成绩";cout<<endl;float avg_c = 0;float avg_m = 0;float avg_e = 0;for(int i=0; i<n; i++){cout<<left<<setw(10)<<s[i].number;//cin>>num;cout<<left<<setw(10)<<s[i].name;//cin>>str;cout<<left<<setw(10)<<s[i].Chin;//cin>>c;cout<<left<<setw(10)<<s[i].Engl;//cin>>e;cout<<left<<setw(10)<<s[i].Math;//cin>>m;cout<<left<<setw(10)<<s[i].sumS;cout<<endl;avg_c=avg_c+s[i].Chin;avg_m=avg_m+s[i].Math;avg_e=avg_e+s[i].Engl;}avg_c=avg_c/n;avg_e=avg_e/n;avg_m=avg_m/n;cout<<"语文的平均分为:"<<avg_c<<endl;cout<<"英语的平均分为:"<<avg_e<<endl;cout<<"数学的平均分为:"<<avg_m<<endl;}int _tmain(int argc, _TCHAR* argv[]){cout<<"请输入一共有多少个学生:";int n;cin>>n;//分别n个学生的信息int num;string str;float c;float e;float m;Student *s = new Student[n];for(int i=0;i<n;i++){cout<<"第"<<(i+1)<<"个学生的信息:"<<endl;cout<<"学生学号:";cin>>num;cout<<"学生姓名:";cin>>str;cout<<"语文成绩:";cin>>c;cout<<"英语成绩:";cin>>e;cout<<"数学成绩:";cin>>m;s[i].setup(num,str,c,e,m);s[i].sum(c,e,m);}//根据总成绩,对这些学生进行排序Bubble(s, n);Show(s,n);//for(int i=0;i<n;i++)//{//cout<<s[i]<<endl;//}//cout<<s[0];delete [] s;system("pause");return 0;}
结果:





0 0