C++实现简单学生成绩管理系统

本文实例为大家分享了C++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下

一、问题描述

设计一个学生成绩管理程序,实现按班级完成对学生成绩信息的录入和修改,并用文件保存。实现按班级输出学生的成绩单;实现按学号和姓名进行查询,按平均成绩进行排序功能。

二、基本要求

(1)使用面向对象编程思想编写开发过程中需要用到的类,比如:Person 类,学生类继承Person类,管理类实现对成绩信息的操作。

(2)输入和输出可以使用文本文件重定向输入(保存数据为磁盘文件);也可以使用标准输入输出进行(提交时需要提交TXT格式输入数据)。比如 score.txt 的文件(包含 20 个 以上记录),包含数据信息有:学号(长度为10位,不允许重复)、姓名、班级(至少有 2 个)、 课程成绩(至少 3 门);在运行程序时自动载入,若文件不存则创建一个空文件。平均成绩 不作为类成员,只是在程序运行时产生,也不须保存。
平均成绩设置独立的计算函数,对文件的所有数据进行遍历,将每个人三门课程的成绩累加起来然后除以课程数最终得到每个人的平均成绩,在每次输出时,将平均成绩同时输出出来,但在文件保存时对平均成绩不保存。

(3)程序运行时显示菜单功能,按班录入成绩,查询个人成绩,修改成绩,按班输出成绩单,按平均分排序显示。
按平均分排序显示需要对所有同学的平均成绩进行比较,然后排序,初步考虑在遍历的过程中进行比较,然后借助中间变量进行排序,后来查找资料发现头文件下有sort专门的排序函数,不过默认的是从小到大的排序,因此需要对排序方式进行定义。

(4)基本功能要求具有增、删、改、查。

基本流程图

(1)score.h

#include <iostream>
#include <string>//为了使用string类 
#include <vector>//vector数组的头文件 
#include <fstream>//文件操作的头文件 
#include<conio.h>//使用getch()函数
#include<algorithm>//使用库函数sort进行排序 
using namespace std; 
class person
{
    public:
        string Number;//学号 
        string Name;//姓名 
        string Class;//班级 
        person(){} //缺省构造函数 
        ~person(){}//析构函数 
} ;
class student:public person//学生类,继承person类 
{
    public:
        double Lesson_1;//课程1 
        double Lesson_2;//课程2 
        double Lesson_3; //课程3 
    friend istream& operator>>(istream& in, student & t)//重载>>操作符
    {
        in>>t.Number>>t.Name>>t.Class>>t.Lesson_1>>t.Lesson_2>>t.Lesson_3;
     } 
    friend ostream& operator<<(ostream& out, const student& t)//重载<<操作符 
    {
        out<<t.Number<<"\t"<<t.Name<<"\t"<<t.Class<<"\t"<<t.Lesson_1<<"\t"<<t.Lesson_2<<"\t"<<t.Lesson_3<<endl; 
    }
};
class Admin//管理类 
{
    public:
        vector<student>stu;//vector数组 
        void AddScore();//添加成绩  
        void ShowScore();//显示成绩 
        void ChangeScore();//修改成绩 
        void ShowClass();//按班输出成绩单
        void DelScore();//删除学生成绩 
        void SearchScore();//查找学生成绩 
        void ShowSort();//按平均分排序 
        int GetScore();//获取文件中的学生成绩 
        void Keep();//保存为文件数据 
};

(2)main.cpp

#include"score.h"
void Admin::AddScore()//添加 成绩 
{
    student s; //定义student类的对象 
    cout<<"Input Number: "; cin>>s.Number; 
    cout<<"Input Name: "; cin>>s.Name; 
    cout<<"Input Class: "; cin>>s.Class; 
    cout<<"Input学生课程1的成绩: "; cin>>s.Lesson_1; 
    cout<<"Input学生课程2的成绩: "; cin>>s.Lesson_2; 
    cout<<"Input学生课程3的成绩: "; cin>>s.Lesson_3; 
    stu.push_back(s);
    cout<<"学生成绩添加成功!"<<endl; 
}
void Admin::ShowScore()//显示所有学生的成绩 
{
    vector<student>::iterator iter; //定义学生Vector数组的迭代器 
    for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行遍历,调用begin()和end()函数进行 
    {
        cout<<"Number: "<<iter->Number<<"   Name:  "<<iter->Name<<"  Class:  "<<iter->Class<<"  课程1:  "<<iter->Lesson_1
        <<"  课程2:  "<<iter->Lesson_2<<"  课程3:  "<<iter->Lesson_3<<"  平均分:  "<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;
        }    
}
void Admin::ChangeScore()//修改学生成绩信息 
{
    if(stu.empty())//判断数组是否有学生成绩信息, 
    {
        cout<<"暂无学生成绩信息,无法修改"<<endl;
        return;  //返回主函数 
    }
    string _name;
    cout<<"Input Name: ";cin>>_name;
    vector<student>::iterator iter; //定义学生Vector数组的迭代器 
    for(iter=this->stu.begin();iter!=this->stu.end();)//对vector数组进行遍历,调用begin()和end()函数进行 
    {
        if(iter->Name==_name)    //根据输入的Name找到成绩信息 
        {
            cout<<"Input Number: ";cin>>iter->Number;
            cout<<"Input Class: ";cin>>iter->Class; 
            cout<<"Input 课程1的成绩: ";cin>>iter->Lesson_1; 
            cout<<"Input 课程2的成绩: ";cin>>iter->Lesson_2; 
            cout<<"Input 课程3的成绩: ";cin>>iter->Lesson_3; 
            this->Keep();  //调用keep函数将修改后的数据保存 
            cout<<"修改成功!"<<endl; 
        }
        else
            iter++; 
    }
}
void Admin::ShowClass()//按Class输出成绩单 
{
    string _Class;
    cout<<"Input  Class: "; cin>>_Class;
    if(Class!="网络1901"||Class!="网络1902") 
    {
        cout<<"请在网络1901和网络1902两个班之间选择"<<endl'
        return;' 
    }
    vector<student>::iterator iter; //定义学生Vector数组的迭代器 
    for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行遍历,调用begin()和end()函数进行 
    {
        if(iter->Class==_Class)
        {
        cout<<"Number: "<<iter->Number<<"   Name:  "<<iter->Name<<"  Class:  "<<iter->Class<<"  课程1:  "<<iter->Lesson_1
        <<"  课程2:  "<<iter->Lesson_2<<"  课程3:  "<<iter->Lesson_3<<"  平均分:  "<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;}
    }
} 
void Admin::DelScore()//删除学生成绩 
{
    if(stu.empty())//判断vector数组是否有学生成绩信息, 
    {
        cout<<"暂无学生成绩信息,无法修改"<<endl;
        return;  //返回主函数 
    }
    string _name;
    cout<<"Input  Name:  " ;cin>>_name;
    vector<student>::iterator iter; //定义学生Vector数组的迭代器 
    for(iter=this->stu.begin();iter!=this->stu.end();)//对vector数组进行遍历,调用begin()和end()函数进行 
    {
        if(iter->Name==_name){
            stu.erase(iter);//从vector数组中删除这条学生信息 
            this->Keep();//保存学生信息 
        }
    }
} 
void Admin::SearchScore()//查询学生成绩信息 
{
    cout<<"     1、按 姓 名 查 找"<<endl;
    cout<<"     2、按 学 号 查 找  "<<endl; 
    int n;
    cout<<"请选择-> "; cin>>n;
    switch(n)
    {
        case 1:
            {
                string _name;
                cout<<"Input  Name: "; cin>>_name;
                vector<student>::iterator iter; //定义学生Vector数组的迭代器 
                for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行遍历,调用begin()和end()函数进行 
                {
                    if(iter->Name==_name)
                    {
                    cout<<"Number: "<<iter->Number<<"   Name:  "<<iter->Name<<"  Class:  "<<iter->Class<<"  课程1:  "<<iter->Lesson_1
                    <<"  课程2:  "<<iter->Lesson_2<<"  课程3:  "<<iter->Lesson_3<<"  平均分:  "<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;}
                }
            }break;
        case 2:
            {
                string _number;
                cout<<"Input  Number: "; cin>>_number;
                vector<student>::iterator iter; //定义学生Vector数组的迭代器 
                for(iter=this->stu.begin();iter!=this->stu.end();iter++)//对vector数组进行遍历,调用begin()和end()函数进行 
                {
                    if(iter->Number==_number)
                    {
                    cout<<"Number: "<<iter->Number<<"   Name:  "<<iter->Name<<"  Class:  "<<iter->Class<<"  课程1:  "<<iter->Lesson_1
                    <<"  课程2:  "<<iter->Lesson_2<<"  课程3:  "<<iter->Lesson_3<<"  平均分:  "<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;}
                }    
            }
    } 
 }
bool operator < (student &A,student &B)//定义排序规则 
{
    return (A.Lesson_1+A.Lesson_2+A.Lesson_3)/3 > (B.Lesson_1+B.Lesson_2+B.Lesson_3)/3;
}
void Admin::ShowSort()//按平均分排序 
{
    sort(stu.begin(),stu.end());//调用库函数sort 
    vector<student>::iterator iter;//定义迭代器 
    for (iter = this->stu.begin(); iter != this->stu.end();iter++ )//对vector数组进行循环 
    {        
        cout<<"Number: "<<iter->Number<<"   Name:  "<<iter->Name<<"  Class:  "<<iter->Class<<"  课程1:  "<<iter->Lesson_1
        <<"  课程2:  "<<iter->Lesson_2<<"  课程3:  "<<iter->Lesson_3<<"  平均分:  "<<(iter->Lesson_1+iter->Lesson_2+iter->Lesson_3)/3<<endl;
    }
 } 
int Admin::GetScore()//从文件中获取学生成绩数据 
{
    fstream readfile("score.txt");//打开文件操作 
    int rows = 0;
    if (readfile)//先判断文件是否存在,如果文件存在
    {
        student s;
        if (!(readfile >>s.Number>>s.Name>>s.Class>>s.Lesson_1>>s.Lesson_2>>s.Lesson_3))//如果第一次读取为空
        {
            cout << "文件为空"<<endl;
            return 1;
        }
        stu.push_back(s); //push_back将文件中的数据存入Vector数组中 
        rows++;
        while(readfile >>s.Number>>s.Name>>s.Class>>s.Lesson_1>>s.Lesson_2>>s.Lesson_3)//读取后存入vector容器中
        {
            rows++;
            stu.push_back(s); //vector数组第要调用 push_back函数进行读入 
        }
        cout<<"数据读取成功!"<<endl; 
        readfile.close();//文件操作完成后,需要关闭文件 
        return rows;
    }
    else
    {
        ofstream outfile;//磁盘中不存在文件的话则创建
        outfile.open("score.txt");//创建通讯录文件 
        if (!outfile.is_open()) //未能打开新创建的文件 
        {
            cout << "文件没有创建!"<<endl;
            return -1;
        }
        else    cout<<"文件为空"<<endl; 
        outfile.close();//文件操作完成后,需要关闭文件 
    }
    return 2;
 }
void Admin::Keep()//保存 
 {
     ofstream outfile("score.txt");//打开文件 
    vector<student>::iterator iter;//vector数组保存的磁盘文件 
    for (iter=this->stu.begin(); iter!=this->stu.end();iter++) //vector数组的头部要用begin(),尾部要用end(),从头到尾利用迭代器进行遍历
    {
        outfile<<iter->Number<<"\t"<<iter->Name<<"\t"<<iter->Class<<"\t"<<iter->Lesson_1<<"\t"<<iter->Lesson_2<<"\t"<<iter->Lesson_3<<endl;
    }
    outfile.close(); //关闭文件 
} 
int main()
{
    int n;
    Admin a;//定义对象 
    a.GetScore();//从文件中读取数据 
    do{
        cout<<endl<<" 学生成绩管理系统  "<<endl;
        cout<<"1、添加学生成绩   " <<endl;  
        cout<<"2、显示学生成绩   " <<endl; 
        cout<<"3、修改学生成绩   " <<endl; 
        cout<<"4、按班级显示学生成绩" <<endl; 
        cout<<"5、删除学生成绩   " <<endl; 
        cout<<"6、按平均分排序学生成绩" <<endl; 
        cout<<"7、查询学生个人成绩" <<endl; 
        cout<<"8、保存并退出   " <<endl; 
        cout<<"请选择 " ;cin>>n;
        switch(n)
        {
            case 1: a.AddScore();getch();break;
            case 2: a.ShowScore();getch();break;
            case 3: a.ChangeScore();getch();break;
            case 4: a.ShowClass();getch();break;
            case 5: a.DelScore();getch();break;
            case 6: a.ShowSort();getch();break;
            case 7: a.SearchScore(); getch();break;
            case 8: exit(0);
         } 
    }while(1);
    return 0;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++课程设计之学生成绩管理系统

    本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下 /*要求:设立程序管理学生如下信息:学生学号.姓名.班级,语文.数学.英语成绩. 至少要有10名以上学生. 能够实现根据以下关键字查询:学生姓名 .学号.班级.课程名称. 能够实现按照单科成绩.总成绩.平均成绩.学号排序. 能够实现学生信息的插入.删除和修改. 能够查询每个课程的最高分.最低分及相应学生姓名.班级和学号. 能够查询每个班级某门课程的优秀率(90分及以上).不及格率,并进行排序.*/ #include<

  • 学生成绩管理系统C++实现代码

    本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下 * (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: <C++编写 学生成绩管理系统> * 作 者: 刘江波 * 完成日期: 2012 年 6 月 26 日 * 版 本 号: v.626 * 对任务及求解方法的描述部分 * 问题描述: 用C++编写一个学生成绩管理系统 1.可以实现以下

  • C++学生信息管理系统

    本文实例为大家分享了C++学生信息管理系统源码,供大家参考,具体内容如下 1. tea_list.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include"teacher.h" int sq_tea ; PTEA head = NULL ; FILE *fp ; int tea_llopen(const char* path)//打开文件 { fp=fopen(path,&q

  • C++实现学生成绩管理系统最新版

    学生成绩管理系统,供大家参考,具体内容如下 一.问题描述及功能要求 (1)输入同学的学号,姓名,三门科成绩(应用数学.大学英语.计算机应用基础) (2)可以计算出每个学生三门课的平均成绩. (3)可通过输入姓名.学号查询成绩,也可通过姓名修改学生信息,也可通过主界面删除学生信息,以及清楚所有信息 二.代码实现 带有注释 废话不说,直接代码,欢迎指正. 大家CV可能有不兼容的情况,可以跟我滴滴,尽可能解决问题地回复. #include <cstdlib> #include <iostrea

  • C++基础学生管理系统

    本文实例为大家分享了C++基础学生管理系统的实现代码,供大家参考,具体内容如下 适用于c++6.0,codeblocks等常用工具 1. 链表处理部分 #include<stdio.h> #include<string.h> #include<stdlib.h> #include"linklist.h" #include"elem.h" void dispnode(linklist h) { node *p; p=h->ne

  • C++实现班级成绩管理系统

    本文实例为大家分享了C++实现班级成绩管理系统的具体代码,供大家参考,具体内容如下 本文定义了一个学生类的结构体,通过vector 数组来存储这个结构体.通过运算求出每个同学的总分,平均分.计算得到班级中各科的最高分和最低分,总成绩的最高分和最低分. #include<iostream> #include<vector> #include<algorithm> #include<string> //引入头文件 using namespace std; //

  • C++实现简单的学生管理系统

    C++实现简单的学生管理系统 //Student.cpp #include<iostream> using namespace std; struct Stu { char no[10]; char name[16]; int math; int chi; double ave; }; class Student { public: Stu st; Student * next; public: Student(){} Student(Stu s) { st=s; next=NULL; st.

  • C++实现简单班级成绩管理系统

    本文实例为大家分享了C++实现简单班级成绩管理系统的具体代码,供大家参考,具体内容如下 #include<iostream> #include<fstream> #include<cstring> #include <stdlib.h> #include <conio.h> using namespace std; int n=0; class Student {public:       string name;     string num;

  • C++实现学生成绩管理系统

    终于结束了期末考试,有时间将这学期C++作业整理一下,都是一些基础的内容,写出来希望给一些初学者一些参考.主要使用到C++的面对对象编程思想,对学生信息类及链表类进行封装 文章可能有点长,可以只参考需要的部分 题目要求 用C++及类和对象来进行抽象.封装与实现,用作课内的第四次作业.注意学生的成绩需要用链表来实现,并且链表也需要实现封装. 成绩管理系统 信息描述: 现有学生成绩信息,内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 0

  • 基于C语言实现简单学生成绩管理系统

    本文实例为大家分享了C语言实现简单学生成绩管理系统的具体代码,供大家参考,具体内容如下 一.系统主要功能 1.密码登录2.输入数据3.查询成绩4.修改成绩5.输出所有学生成绩6.退出系统 二.代码实现 #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 struct student {     char num[10];     char name[20];     int ol

  • C语言实现简单学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C语言小项目 实现一个学生成绩管理系统 系统功能: 1.实现所有学生成绩的录入(利用结构体数组),当输入字符为end时候,结束成绩的录入:  2.实现所有学生信息的输出  3.输入指定学生姓名,并能输出这名学生的信息  4.将学生成绩按照语文和数学成绩排序 思路: 1. 首先,先把这个小项目的框架打好.考虑要写几个文件,每一个文件里面实现怎样的功能.考虑到这个小项目的代码量以及程序的易读性,我决定将写三个文件.一

  • java实现简单学生成绩管理系统

    本文实例为大家分享了java实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 /*  *@copyright by LzyRapx on 2016/4/12.  *@name:java学生成绩管理系统.  *@功能:学生相关信息,录入,查询,统计,修改等....  *@PS:图形界面的学生管理系统不要求就不做了.  */   import java.util.Scanner; import java.lang.*; import java.io.*; class Student {   

  • C++实现简单学生成绩管理系统

    本文实例为大家分享了C++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 一.问题描述 设计一个学生成绩管理程序,实现按班级完成对学生成绩信息的录入和修改,并用文件保存.实现按班级输出学生的成绩单:实现按学号和姓名进行查询,按平均成绩进行排序功能. 二.基本要求 (1)使用面向对象编程思想编写开发过程中需要用到的类,比如:Person 类,学生类继承Person类,管理类实现对成绩信息的操作. (2)输入和输出可以使用文本文件重定向输入(保存数据为磁盘文件):也可以使用标准输入输出进行

  • C语言实现简单学生成绩管理系统项目

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 系统界面及相关要求 1)系统运行,打开如下界面.列出系统帮助菜单(即命令菜单),提示输入命令. 2)开始时还没有录入成绩,所以输入命令 L 也无法列出成绩.应提示“成绩表为空!请先使用命令 T 录入学生成绩.” 同理,当输入其他的成绩处理命令时也作相应的处理. 3)输入命令 T,调用Type子函数录入成绩. 界面提示输入学生人数 输入3 提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提

  • php实例 简单学生成绩管理系统

    学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScript和PHP,数据库用到了MySQL.麻雀虽小,五脏俱全.算是对这些知识的一次总结吧. 首先通过login_in 进入登录页面 用户输入信息到login.php中 ,login.php 连接数据库判断是否账号密码是否正确. 通过验证转入welcome_mag.html页面用户选择跳入Select_mag.html查看成

  • C++实现简单的学生成绩管理系统

    本文实例为大家分享了C++实现简单学生成绩管理系统的具体代码,供大家参考,具体内容如下 manage.h #include <iostream> #include <fstream> #include <string> using namespace std; //学生 template <class T> class Student {     template <class T>     friend class StudentManage;

  • C语言版学生成绩管理系统

    本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D:\\data"; char tm

  • 基于C语言实现学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 这里只贴代码,具体介绍省略. #include <stdio.h> #include <io.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 200 struct student { char no[10]; // 学号 char name[50]; // 姓名 f

  • python实现简单的学生成绩管理系统

    本文实例为大家分享了python实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 需求: 代码: import os filename = 'student.txt' def main():     while True:         menu()         choice = int(input("请选择:"))         if choice in [0,1,2,3,4,5,6,7]:             if choice==0:            

随机推荐