题目要求(手打,累):设计一个类CStudent,类中包含一个学生的基本数据如下:

编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。

并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。如:

1 LiPing m 18 89 98 94

请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具体连续编码的编号num为"序"来对文件中各对象进行随机读写处理)。并设计该类的成员函数,而且对输出运算符"<<"进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。要求成员函数完成以下功能:

(1) 从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。

(2) 按编号对学生信息进行检索并将检索结果显示在屏幕上。

(3) 按姓名对学生信息进行检索并将检索结果显示在屏幕上。

(4) 计算某编号学生的总成绩与平均成绩。

(5) 列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。

思考:可进一步对上述程序进行扩充,如,添加学生的基本数据(籍贯,专业,班级,其他各门成绩,奖罚记录等),并添加所需要的其他相关处理函数(如可通过咨询教学办公室管理人员后确立),进而将其编织成为一个简单而且实用的小型学籍与成绩管理软件。

以下为代码:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <iomanip>
using namespace std;
#define NUM 10000

void Menu();    //菜单功能
class CStudent
{
    private:
        int num;    //编号
        string name;   //姓名
        char gender;    //性别
        int age;    //年龄
        double math;   //数学成绩
        double physics;    //物理成绩
        double computer;   //计算机成绩
        double english;    //外语成绩
        string major;   //专业
        string RP;  //奖罚记录
        double sum; //总成绩
        double ave; //平均成绩
    public:
        void Insert(CStudent & S);  //插入,添加
        void Dlete();  //删除
        void Numseek(); //按编号查找
        void Nameseek();    //按姓名查找
        void Grade();   //计算某个学生的平均成绩和总成绩
        void Sort(CStudent & S);    //对学生的总成绩进行排序
        void Inquire(double n, char ch); //根据输入的成绩和性别排查超过输入成绩且性别一样的同学
        void Save();    //保存数据到文件
        void Read();    //读取数据
        void Sum(){sum = math + physics + computer + english;}   //计算总成绩
        void Ave(){ave = (math + physics + computer + english) / 4;}
        void operator <<(CStudent & S)
        {
            cout << setw(5) << S.num << setw(5) << S.name << setw(5) << S.gender << setw(5) << S.age << setw(5) << S.math << setw(5) << S.physics << setw(7) << S.computer
                 << setw(5)<< S.english << setw(5) << S.major << setw(9) << S.RP << endl;
        }
};
static int j;
CStudent C[NUM];
int main()
{
    fstream File("学生学籍与成绩管理系统.txt");
    cout << "\n\t\t^^^检查文件是否存在中^^^" << endl << endl << endl;
    if(!File)
    {
        cout << "\t\t文件不存在,请创建名为学生学籍与成绩管理系统的文档!" << endl;
        exit(1);
    }
    cout << "\t\t该文件存在,是否进入管理系统" << endl << endl << endl;
    cout << "\t\t是请按1,不是请按0" <<endl << endl << endl;
    bool n;
    cin >> n;
    if(!n)
    {
        cout << "\t\t谢谢使用!" << endl;
        File.close();
        exit(1);
    }
    File.close();
    CStudent S;
    char ch;
    while(1)
    {
        Menu();
        cin >> ch;
        switch(ch)
        {
            case '1':{S.Insert(S); break;}
            case '2':{S.Dlete(); break;}
            case '3':{S.Numseek(); break;}
            case '4':{S.Nameseek(); break;}
            case '5':{S.Grade(); break;}
            case '6':{S.Sort(S); break;}
            case '7':{double n; char ch; cout << "请输入要查询多少分以上的成绩\n"; cin >> n; cout << "请输入性别\n";
                      cin >> ch; S.Inquire(n, ch); break;}
            case '8':{S.Read(); break;}
            case '0':{exit(0);}
        }
    }
    return 0;
}
//---------------------------------------------------------------------------------------------------菜单功能
void Menu()
{
    system("cls");
    cout << "\n\t\t\t欢迎进入学生学籍与成绩管理系统" << endl << endl;
    cout << "\t\t\t按1添加数据" << endl << endl;
    cout << "\t\t\t按2删除数据" << endl << endl;
    cout << "\t\t\t按3根据编号查找学生信息" << endl << endl;
    cout << "\t\t\t按4根据姓名查找学生信息" << endl << endl;
    cout << "\t\t\t按5输入学生编号计算他的平均成绩和总成绩" << endl << endl;
    cout << "\t\t\t按6排序" << endl << endl;
    cout << "\t\t\t按7输入成绩和性别查询学生" << endl << endl;
    cout << "\t\t\t按8读取数据" << endl << endl;
    cout << "\t\t\t按0退出程序" << endl << endl;
}
//---------------------------------------------------------------------------------------------------插入添加
void CStudent::Insert(CStudent & S)
{
    while(1)
    {
        bool judge = true;
        cout << "\n\n请输入编号(1~10000):";
        cin >> S.num;
        cout << "\n请输入姓名:";
        cin >> S.name;
        for(int i = 0; i <= j; i++)
        {
            if(C[i].num == S.num || (C[i].name).compare(S.name) == 0)  //判断了编号重复和姓名重复的情况
            {
                cout << "输入编号或姓名重复,退出添加系统" << endl;
                system("pause");
                judge = false;
            }
        }
        if(judge == false)
            break;
        while(1)
        {
            cout << "\n请输入性别(男:m,女:n):";
            cin >> S.gender;
            if(S.gender == 'm' || S.gender == 'n')
                break;
            else
                cout << "格式输入错误" << endl;
        }
        cout << "\n请输入年龄:";
        cin >> S.age;
        cout << "\n请输入数学成绩:";
        cin >> S.math;
        cout << "\n请输入物理成绩:";
        cin >> S.physics;
        cout << "\n请输入计算机成绩:";
        cin >> S.computer;
        cout << "\n请输入外语成绩:";
        cin >> S.english;
        cout << "\n请输入专业:";
        cin >> S.major;
        cout << "\n请输入奖罚记录:";
        cin >> S.RP;
        cout << "\n是否保存数据(按1保存,按0不保存):";
        char ch;
        cin >> ch;
        if(ch == '1')
        {
            C[j] = S;
            j++;
            Save();
        }
        else
        {
            cout << "数据没保存" << endl << endl;
        }
        cout << "\n是否继续添加(按1继续,按0退出添加程序)?" << endl;
        cin >> ch;
        if(ch == '0')
        break;
    }
}
//---------------------------------------------------------------------------------------------------删除
void CStudent::Dlete()
{
    while(1)
    {
        int num;
        cout << "请输入你要删除的学生的编号:";
        cin >> num;
        for(int i = 0; i < j; i++)
        {
            if(C[num-1].num == C[i].num)
                for(int k = i; k < j; k++)
                    C[k] = C[k+1];
        }
        char ch;
        cout << "\n是否删除数据(按1删除,按0不删除):";
        cin >> ch;
        if(ch == '1')
        {
            j--;
            Save();
        }
        else
        {
            cout << "数据没删除" << endl << endl;
        }
        cout << "\n是否继续删除(按1继续,按0退出删除程序)?" << endl;
        cin >> ch;
        if(ch == '0')
            break;
    }
}
//---------------------------------------------------------------------------------------------------按编号查找
void CStudent::Numseek()
{
    while(1)
    {
        bool judge = false;
        int num;
        cout << "请输入要查找的学生的编号:";
        cin >> num;
        for(int i = 0; i < j; i++)
            if(num == C[i].num)
            {
                cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
                     << setw(5) << "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << endl;
                C[i] << C[i];
                judge = true;
            }
        if(judge == false)
            cout << "你输入的学生编号不存在" << endl;
        char ch;
        cout << "是否继续查找(按1继续,按0退出查找程序)?" << endl;
        cin >> ch;
        if(ch == '0')
            break;
    }
}
//---------------------------------------------------------------------------------------------------按姓名查找
void CStudent::Nameseek()
{
    while(1)
    {
        bool judge = false;
        string name;
        cout << "请输入要查找的学生的姓名:";
        cin >> name;
        for(int i = 0; i < j; i++)
            if(name.compare(C[i].name) == 0)
            {
                cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
                     << setw(5) << "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << endl;
                C[i] << C[i];
                judge = true;
            }
        if(judge == false)
            cout << "你输入的学生姓名不存在" << endl;
        char ch;
        cout << "是否继续查找(按1继续,按0退出查找程序)?" << endl;
        cin >> ch;
        if(ch == '0')
            break;
    }
}
//--------------------------------------------------------------------------------------------------计算学生的总成绩和平均成绩
void CStudent::Grade()
{
    for(int i = 0; i < j; i++)
    {
        C[i].Sum();
        C[i].Ave();
    }
    cout << "请输入学生的编号:";
    int num;
    cin >> num;
    for(int i = 0; i < j; i++)
        if(C[i].num == num)
        {
            cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
                 << setw(5)<< "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << setw(9) << "平均成绩" << setw(7) << "总成绩" << endl;
            cout << setw(5) << C[i].num << setw(5) << C[i].name << setw(5) << C[i].gender << setw(5) << C[i].age << setw(5) << C[i].math << setw(5) << C[i].physics << setw(7) << C[i].computer
                 << setw(5) << C[i].english << setw(5) << C[i].major << setw(9) << C[i].RP << setw(9) << C[i].ave << setw(7) << C[i].sum << endl;
        }
    system("pause");
}
//--------------------------------------------------------------------------------------------------对学生的总成绩进行排序
void CStudent::Sort(CStudent & S)
{
    for(int i = 0; i < j; i++)
        C[i].Sum();
    for(int i = 0; i < j; i++)
        for(int k = i+1; k < j; k++)
            if(C[k].sum > C[i].sum)
            {
                S = C[k];
                C[k] = C[i];
                C[i] = S;
            }
    cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
         << setw(5)<< "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << setw(7) << "总成绩" << endl;
    for(int i = 0; i < j; i++)
        cout << setw(5) << C[i].num << setw(5) << C[i].name << setw(5) << C[i].gender << setw(5) << C[i].age << setw(5) << C[i].math << setw(5) << C[i].physics << setw(7) << C[i].computer
             << setw(5) << C[i].english << setw(5) << C[i].major << setw(9) << C[i].RP << setw(7) << C[i].sum << endl;
    system("pause");
}
//---------------------------------------------------------------------------------------------------//根据输入的成绩和性别排查超过输入成绩且性别一样的同学
void CStudent::Inquire(double n, char ch)
{
    for(int i = 0; i < j; i++)
        C[i].Sum();
    bool judge = false;
    for(int i = 0; i < j; i++)
    {
        if(C[i].sum >= n && C[i].gender == ch)
        {
            cout << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
                 << setw(5) << "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << endl;
            C[i] << C[i];
            judge = true;
        }
    }
    if(judge == false)
        cout << "没有相匹配的学生" << endl;
    system("pause");
}
//---------------------------------------------------------------------------------------------------读取数据
void CStudent::Read()
{
    cout << endl << endl;
    ifstream File2("学生学籍与成绩管理系统.txt");
    static char st[81];
    while(!File2.eof())
    {
        File2.getline(st, 80);
        cout << st << endl;
    }
    File2.close();
    system("pause");
}
//----------------------------------------------------------------------------------------------------保存数据到文件
void CStudent::Save()
{
    ofstream File1("学生学籍与成绩管理系统.txt", ios::binary);  //以二进制添加的方式输入数据
    File1 << setw(5) << "编号" << setw(5) << "姓名" << setw(5) << "性别" << setw(5) << "年龄" << setw(5) << "数学" << setw(5) << "物理" << setw(7) << "计算机"
          << setw(5) << "英语" << setw(5) << "专业" << setw(9) << "奖罚记录" << endl;
    for(int i = 0; i < j; i++)
        File1 << setw(5) << C[i].num << setw(5) << C[i].name << setw(5) << C[i].gender << setw(5) << C[i].age << setw(5) << C[i].math << setw(5) << C[i].physics << setw(7) << C[i].computer
              << setw(5) << C[i].english << setw(5) << C[i].major << setw(9) << C[i].RP << endl;
    cout << "\n\n数据已保存到文件中" << endl << endl;
    File1.close();
}
写的可能很乱,毕竟初学,希望大家可以多多支持!

c++课设学生成绩与学籍管理系统的更多相关文章

  1. Java学生成绩绩点管理系统

    一.考试要求: 1.按照测试内容要求完成程序的设计与编程: 2.建立学号姓名文件夹,如:“信 1805-1 班 20180001 XXX”,将源程序文件保存在文件夹中,压缩成 rar 文件提交. 3. ...

  2. JAVA课设 学生基本信息管理 团队博客

    1.成员 邹其元 网络1512 201521123060 杨钧宇 网络1512 201521123062 2.项目Git地址 团队项目码云地址 //添加截图 3. 项目git提交记录截图(要体现出每个 ...

  3. Java项目:学生成绩管理系统(二)

    学生成绩管理系统(二):项目介绍 一.设计要求: 1.1 简单的图形界面登录功能. 1.2 对数据库的的信息的查询功能. 1.3 对数据库的的信息的修改功能. 1.4 对数据库的的信息的删除功能. 1 ...

  4. 学生管理系统 C++课设

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> u ...

  5. Qt实现学生学籍管理系统(文件存储)

    记录 19:53 2019-07-30 在小学期学c++做完课设后萌生了把写完的课设放在博客上的想法,于是,我第一篇博客诞生了. 22:32:19 2019-07-30 下棋 16:04:56 201 ...

  6. Java课程设计—学生成绩管理系统(201521123005 杨雪莹)

    一.团队课程设计博客链接 学生成绩管理系统 二.个人负责模块或任务说明 学生成绩录入 显示所有学生信息 显示各科平均成绩 显示学生成绩(按降序排序) 三.自己的代码提交记录截图 四.自己负责模块或任务 ...

  7. Java项目:学生成绩管理系统(一)

    学生成绩管理系统(一) 项目名称:学生成绩管理系统 项目需求分析(Need 需求): (1)该系统的用户分为教师和学生.教师的功能有:管理某一学生或课程的信息以及成绩,包括增.删.查.报表打印等:学生 ...

  8. c++学生成绩管理系统

    虽然比较水 =.= 但是写了两节课+一个中午 都是强迫症的锅 http://www.cnblogs.com/wenruo/p/4940182.html #include <cstdio> ...

  9. Java课程设计—学生成绩管理系统(201521123004-林艺如)

    1.团队课程设计博客 团队课程设计博客链接 2.个人负责模块或任务说明 ①.Menu Menu.jsp 在页面中给出提示,用HTML的 MenuTeacher.jsp 利用Menu.jsp进行具体化完 ...

随机推荐

  1. tkinter绑定鼠标滚轮滚动事件 canvas.bind("<MouseWheel>", processWheel) 失效

    其实,不同系统不一样,我的是Ubuntu 所以是<Button-4>   <Button-5> 见下: 来自:https://stackoverflow.com/questio ...

  2. 1.2、CDH 搭建Hadoop在安装之前(CDH基于包的安装所需的权限)

    CDH基于包的安装所需的权限 以下部分描述了使用Cloudera Manager进行基于软件包的CDH安装的用户权限要求.这些要求是安装和管理包和服务的标准UNIX系统要求. 所需特权 sudo由Cl ...

  3. Promise.then

    [Promise.then] 1.If onFulfilled returns a promise, the return value of then will be resolved/rejecte ...

  4. 基于oslo_log的日志管理

    oslo_log是openstack中的日志模块,其对python logging的封装,可以快速便捷地写出我们的日志模块.官网上有许多参考示例,但实例永远是实例,其配合oslo_config模块,快 ...

  5. 解题(MiGong--迷宫问题(深度搜索))

    题目描述 定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0,  ...

  6. Mysql 用户 创建与删除(基础1)

    Mysql是最流行的关系型数据库管理系统之一,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个 ...

  7. VS2013 error C2556: “const int &Array<int>::operator [](int)”: 重载函数与“int &Array<int>::operator [](int)”只是在返回类型上不同

    1,VS2013 错误 1 error C2556: “const int &Array<int>::operator [](int)”: 重载函数与“int &Array ...

  8. postman使用方法

    Postman sending requests 打开Postman,可以看到界面分成左右两个部分,右边是我们后头要讲的collection,左边是现在要讲的request builder.在requ ...

  9. Shell教程 之变量

    1.Shell变量 1.1 定义变量 your_name="http://www.cnblogs.com/uniquefu" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有 ...

  10. 关于AndroidStudio的打包数字签名以及多渠道发布

    AndroidStudio右侧Gradle里边的build(工程下的)是可以生成未签名的debug和release的apk包生成前可以先clean一下工程 app下的build.gradle里边的 l ...