基于C++、链表以及泛型编程的学生成绩管理系统

来源:互联网 发布:湖北大学网络课程 编辑:程序博客网 时间:2024/06/07 01:53

     在网上可以查找到不少学生成绩管理系统的实现方法,但本文是基于C++,应用链表和类的方法来实现,并且用泛型编程的思路使得链表的实现比C语言实现起来简单很多,下面是实验的简单介绍。

    

一、学生成绩管理系统具有如下功能

 

1、能录入学生的基本信息,包括ID,姓名,专业、班级、电话、email等。

2、能录入课程信息:包含学期、课程名、学分、成绩。

3、能根据输入的学号查找学生信息,并可以进行信息的修改。

4、可以根据学号查询学生成绩,包括可以查看各门课程成绩,平均成绩,学分绩点。

5、可以查看各班每一课程不及格的学生名单。

6、可以统计课程成绩不及格数超过30%的学生名单。

7、具有文件操作功能,可以保存学生信息文件,读入学生信息文件等。

二、概要设计

 

将学生成绩管理系统划分为以下六个模块

 

1  主模块

 功能概述:

(1)提供系统菜单的显示功能; 

(2)提供打开文件,并导入文件记录的功能;

(3)提供保存文件信息的功能。

  

2  添加学生信息

  功能:

(1)  根据输入的相关信息,将学生信息添加到单向链表中。

  

3  显示学生信息

功能:

  (1)将链表中的所有信息完全显示。

 

4  添加学生课程成绩信息

功能:

(1)  根据输入的相关信息,将学生课程成绩信息添加到另一单向链表中

  

5 查找学生信息

功能:(查找学生信息包含根据输入学号进行查找和根据输入的姓名进行查找两种方式,并根据返回的学生信息,进行以下三种操作)

(1)查询学生信息,直接返回找到的信息; 

(2)修改学生信息,根据找到的学生信息,对其进行修改;

(3)删除学生信息,根据找到的相关学生信息,从链表中删除这条记录。

 

6  查询学生课程成绩信息

(1)  根据输入的学号查找该学生各门课程的成绩,可以查询平均成绩以及学分绩点,并标记该生不及格课程成绩是否超过30%;

(2)  根据输入班级号查询该班各门课程成绩;

(3)  可以查询各门课程所有不及格的学生名单。

三、程序实验代码(中间可能存在个别错误仅供参考)

1.student.h

/用类实现学生信息:ID,姓名,专业、班级、电话、email等;

#ifndef STUDENT_H
#define STUDENT_H

#include<string>
using namespace std;

class student{
private:
        string ID;
        string Name;
        string Major;
        int Class;
        string Phone;
        string Email;
public:
    student(string ID1, string Name1, string Major1, int Class1, string Phone1, string Email1);
    void setID(string ID1);
    void setName(string Name1);
    void setMajor( string Major1);
    void setClass( int Class1);
    void setPhone(string Phone1);
    void setEmail(string Email1);
    string getID();
    string getName();
    string getMajor();
    int getClass();
    string getPhone();
    string getEmail();
    void setstd();
    void printS();
    void readFile();

       
    ~student(){}
};
2.student.cpp

#include"student.h"
#include<iostream>
#include<algorithm>



student::student(string ID1, string Name1, string Major1, int Class1, string Phone1, string Email1){
    ID = ID1;
    Name = Name1;
    Major = Major1;
    Class = Class1;
    Phone = Phone1;
    Email = Email1;
}
void student::setID(string ID1){
    ID=ID1;
}
void student::setName(string Name1){
    Name=Name1;
}
void student::setMajor(string Major1){
    Major=Major1;
}
void student::setClass(int Class1){
     Class=Class1;
}
void student::setPhone(string Phone1){
     Phone=Phone1;
}
void student::setEmail(string Email1){
    Email=Email1;
}
string student::getID(){
    return ID;
}
string student::getName(){
    return Name;
}
string student::getMajor(){
    return Major;
}
int student::getClass(){
    return Class;
}
string student::getPhone(){
    return Phone;
}
string student::getEmail(){
    return Email;
}
void student::setstd(){
    cout << "ID:"; cin >> ID; while (ID.length() != 6){ cout << "请输入6位ID!" << endl; cout << "ID:"; cin >> ID; }
    cout << "Name:"; cin >> Name;
    cout << "Major:"; cin >> Major;
    cout << "Class:"; cin >> Class;
    cout << "Phone:"; cin >> Phone; while (Phone.length()>11){ cout << "请输入的电话号码不要超过11位!" << endl; cout << "Phone:"; cin >> Phone; }
    cout << "Email:"; cin >> Email;
}

void student::printS(){
    cout << "查找到的---学生信息---为:" << endl;
    cout << "ID:" << ID << endl;
    cout << "Name:" << Name << endl;
    cout << "Major:" << Major << endl;
    cout << "Class:" << Class << endl;
    cout << "Phone:" << Phone << endl;
    cout << "Email:" << Email << endl;

}
/*void student::readFile(){
    ifstream infile("student.dat", ios::in);

    if (!infile)
    {
        cout << "文件打开失败,程序终止!" << endl;

        exit(0);
    }
        infile >>ID >>Name >>Major>>Class>>Phone >>Email;
        
}*/

3.courseInformation.h
/用类实现课程信息:包含学期、课程名、学分、成绩

#ifndef COURSEINFORMATION_H
#define COURSEINFORMATION_H
#include<iostream>
#include<string>
using namespace std;

class courseInformation{
private:
    string CID;
    int Term;
    string Course;
    int Credit;
    int Score ;
public:
    courseInformation(string CID1, int Term1,string Course1, int Credit1, int Score1);
    void setCID();
    void setTerm();
    void setCourse();
    void setCredit();
    void setScore();
    void readCID(string CID1);
    void readTerm(int Term1);
    void readCourse(string Course1);
    void readCredit(int Credit1);
    void readScore(int Score1);
    string getCID();
    int getTerm();
    string getCourse();
    int getCredit();
    int getScore();
    void showC();
    //courseInformation(courseInformation &p);
    ~courseInformation(){}
};


#endif
4.courseInformation.cpp

#include"courseInformation.h"
#include<iostream>
courseInformation::courseInformation(string CID1, int Term1,string Course1, int Credit1, int Score1){
    CID = CID1;
    Term = Term1;
    Course = Course1;
    Credit = Credit1;
    Score = Score1;
}
/*courseInformation::courseInformation(courseInformation &p)
{
    CID = p.CID;
    Term = p.Term;
    Course = p.Course;
    Credit = p.Credit;
    Score =p.Score;
}*/
void courseInformation::readCID(string CID1){
     CID=CID1;
}
void courseInformation::readTerm(int Term1){
    Term=Term1;
}
void courseInformation::readCourse(string Course1){
    Course=Course1;
}
void courseInformation::readCredit(int Credit1){
    Credit=Credit1;
}
void courseInformation::readScore( int Score1){
    Score=Score1;
}
void courseInformation::setCID(){
     cin>>CID;
}
void courseInformation::setTerm(){
    cin >> Term;
}
void courseInformation::setCourse(){
    cin >> Course;
}
void courseInformation::setCredit(){
    cin >> Credit;
    while (Credit<0 ||Credit>10)
    {
        cout << "请输入的学分在0~10以内!" << endl;
        cout<<"Course:";cin>>Credit;
    }
    
}
void courseInformation::setScore(){
    cin >> Score;
    while (Score<0 ||Score>100)
    {
        cout << "请输入的成绩在0~100以内!" << endl;
        cout<<"Score:";cin>>Score;
    }
}
string courseInformation::getCID(){
    return CID;
}
int courseInformation::getTerm(){
    return Term;
}
string courseInformation::getCourse(){
    return Course;
}
int courseInformation::getCredit(){
    return Credit;
}
int courseInformation::getScore(){
    return Score;
}

void courseInformation::showC(){
    cout << "CID:" << CID << endl;
    cout << "Term:"<<Term<<endl;
    cout << "Course:"<<Course<<endl;
    cout << "Credit:"<<Credit<<endl;
    cout << "Score:"<<Score<<endl;
    
}
 //courseInformation courseInformation::operator()(courseInformation &p, courseScore &q){
        // return p(q);}

5.main.c

#include<iostream>
#include "student.h"
#include "courseInformation.h"
#include<list>
#include <cstdlib>  
#include<fstream>
using namespace std;
int studentcount;
string findID,findCID,removeID,connectID;
int findClass;
string inID;
int totalScore=0;
float totalCS=0.0;
float averageScore,averageCS;
    student a("888888"," "," ",1," "," ");
    courseInformation b("999999",1,"数学",2,80);
   list<student> listS;
    list<courseInformation> listC;

 void showM()

 {
 cout<<"********************************"<<endl;
 cout<<"*---(1)录入学生信息------*"<<endl;
 cout<<"*---(2录入课程成绩信息-------*"<<endl;
 cout<<"*---(3)根据输入学号查找学生信息------*"<<endl;
 cout<<"*---(4)根据输入学号查询学生课程成绩------*"<<endl;
 cout<<"*---(5)添加学生信息及课程成绩信息----------*"<<endl;
 cout<<"*---(6)删除学生信息及课程成绩信息------------*"<<endl;
 cout<<"*---(7)查询某班级各门课程平均成绩----------------*"<<endl;
 cout<<"*---(0)结束程序----------------*"<<endl;
 cout<<"********************************"<<endl;

 }  

 void inputS(){


    cout<<"------------------录入学生信息---------------"<<endl;
    cout<<"学生总人数:";
    cin>>studentcount;
    ifstream infile("student.dat", ios::in);

    if (!infile)
    {
        cout << "文件打开失败,程序终止!" << endl;

        exit(0);
    }
        
    for(int i=0;i<studentcount;i++)
    {    string a1,a2,a3,a4,a5;
         int a6;
        infile >>a1 >>a2 >>a3>>a6>>a4 >>a5;
        a.setID(a1);
        a.setName(a2);
        a.setMajor(a3);
        a.setClass(a6);
        a.setPhone(a4);
        a.setEmail(a5);
       listS.push_back(a);
    }
        cout<<"学生信息录入完毕!"<<endl;
        infile.close();
    
 }
 
 
 void inputC(){
 //录入学生成绩信息,并且根据输入学生姓名或ID来录入相应课程的成绩
    ifstream infile("score.dat", ios::in);
    if (!infile)
    {
        cout << "文件打开失败,程序终止!" << endl;
        exit(0);
    }
    for(int j=0;j<(studentcount*3);j++)
    {
        string b1;
        int b2;
        string b3;
        int b4;
        int b5 ;
    infile>>b1 >>b2 >>b3>>b4>>b5;
    b.readCID(b1);
    b.readTerm(b2);
    b.readCourse(b3);
    b.readCredit(b4);
    b.readScore(b5);
    listC.push_back(b);
    }
    cout<<"学生成绩信息录入完毕!"<<endl;
    infile.close();
 }

 void findS(){
    cout<<"查找学生信息,该生ID:";
    cin>>findID;
    for(list<student>::iterator iter= listS.begin();iter!= listS.end(); ++iter)
    {

    if((*iter).getID()==findID) (*iter).printS();
    else if(iter==listS.end()) cout<<"--------没有查找到相关信息!---------"<<endl;}}

 void findC(){
    cout<<"查找学生课程成绩信息,该生ID:";
    cin>>findCID;
    for(list<courseInformation>::iterator iter=listC.begin();iter!= listC.end(); ++iter)
    {

        if((*iter).getCID()==findCID) {(*iter).showC();
        if((*iter).getScore()<60) cout<<"该生有不及格成绩:"<<(*iter).getCourse()<<":"<<(*iter).getScore()<<endl;
        totalScore+=(*iter).getScore();
        totalCS+=(*iter).getCredit()*((*iter).getScore()/10-5);//学分绩点=学分×(分数/10-5)
        }
    else if(iter==listC.end()) cout<<"--------没有相关信息存在!---------"<<endl;}
    averageScore=totalScore/3.0;
    averageCS=totalCS/3.0;
    cout<<"三门课程平均分:"<<averageScore<<endl;
    cout<<"三门课程平均平均学分绩点:"<<averageCS<<endl;
 }
 bool diyRemove(student& p)
{
    if(p.getID()==a.getID())  return true;
    else return false;}

 void add(){
cout<<"输入要添加的学生信息:"<<endl;
      a.setstd();
      for(list<student>::iterator iter= listS.begin();iter!= listS.end(); ++iter){
          if((*iter).getID()==a.getID()) cout<<"添加的学生信息已存在,不保存该信息!";
          else if(iter==--listS.end())  {cout<<"成功添加学生信息!"<<endl;listS.push_back(a);++iter;}
      }
       cout<<"输入添加课程成绩信息的ID:";cin>>inID;
       for(list<student>::iterator iter= listS.begin();iter!= listS.end(); ++iter)
    {
        if((*iter).getID()==inID){
        cout<<"ID:";b.setCID();
        cout<<"Term:";b.setTerm();
        //输入的课程包括语文、数学、英语三门
        for(int i=0;i<3;i++){
        cout<<"Course:";b.setCourse();
        cout<<"Credit:";b.setCredit();
        cout<<"Score:";b.setScore();
        listC.push_back(b);}
    }

    else if(iter==--listS.end()) cout<<"输入的学生ID不存在"<<endl;
    }

 }
 bool diyRemove1(student& p)
{
    if(p.getID()==removeID)  return true;
    else return false;
}
 bool diyRemove2(courseInformation& p)
{
    if(p.getCID()==removeID)  return true;
    else return false;
}
 void remove(){
     cout<<"删除学生信息及相关课程成绩信息对应ID:";cin>>removeID;
 listS.remove_if(diyRemove1);
 listC.remove_if(diyRemove2);
 cout<<"成功删除信息!"<<endl;
 }
 void findClassSco(){
         int chineseSco=0;
         int englishSco=0;
         int mathSco=0;
     int CScount=0;
     cout<<"输入班级号(1,2,3):";cin>>findClass;
     for(list<student>::iterator iter= listS.begin();iter!= listS.end(); ++iter){
         if((*iter).getClass()==findClass) {
             connectID=(*iter).getID();
            CScount++;
            cout<<findClass<<"班各门课程信息如下所示:"<<endl;
             for(list<courseInformation>::iterator iter=listC.begin();iter!= listC.end(); ++iter){
            if((*iter).getCID()==connectID) {
            //(*iter).showC();
            int n=1;
            while((*iter).getCourse()=="语文"&&n==1) {
                (*iter).showC();
                chineseSco+=(*iter).getScore();
                   --n;}
            while((*iter).getCourse()=="数学"&&n==1) {
                (*iter).showC();
                mathSco+=(*iter).getScore();
                  --n;}
            while((*iter).getCourse()=="英语"&&n==1) {
                (*iter).showC();
                englishSco+=(*iter).getScore();
                 --n;}
            }
            else if(iter==listC.end())  cout<<"输入的班级号没有相关课程成绩信息!"<<endl;
             }
         }
         else if(iter==listS.end()) cout<<"输入的班级号没有相关信息!"<<endl;
     }
     cout<<findClass<<"班语文平均成绩:"<<chineseSco/CScount<<endl;
     cout<<findClass<<"班数学平均成绩:"<<mathSco/CScount<<endl;
     cout<<findClass<<"班英语平均成绩:"<<englishSco/CScount<<endl;
 }
void main() {
    showM();
    while(true){
         int choise;
         cout<<"请输入操作序号: "<<endl;
         cin>>choise;
         switch (choise)
         {
        
         case 1:
             inputS();break;
         case 2:       
            inputC();break;       
         case 3:
             findS();break;
         case 4:
             findC();break;
        case 5:
             add();break;
        case 6:
            remove();break;
        case 7:
            findClassSco();break;
        case 0:{cout<<"退出程序!"<<endl;
            system("pause");}
         default:
             cout<<"对不起,有关功能正在开发!^-^"<<endl;break;
         }
    showM();
    cin>>choise;
    }
    
    system("pause");
}


1 0
原创粉丝点击