题目要求(手打,累):设计一个类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. python基础学习Day11 函数名的应用、闭包、迭代器

    一.函数名的应用 1.函数名就是函数的内存地址 def func(): print(666) func() print(func) #函数的内存地址 2.函数名可以作为变量 def func1(): ...

  2. css3文本和颜色

    1.文本阴影text-shadow 语法 text-shadow:X-Offset Y-Offset blur color; X-Offset:表示阴影的水平偏移距离,其值为正值时阴影向右偏移,反之向 ...

  3. apache常见的一些配置

    <VirtualHost *:80>ServerName www.aliyun.com #域名ServerAlias www.aliyun.com #别名DocumentRoot /dat ...

  4. JAVA 课堂测试

    package ACC; /*信1705-2班 * 20173623 * 赵墨涵 */ public class Account { String accountID; String accountn ...

  5. cakePHP 分页栏

    <div class="page"><?php if ($total > 1) echo $this->element('page_list', ar ...

  6. Unity中的四个路径

    Application.database:当前工程的Assets文件夹(编辑器) Application.StreamingAssets:IO流路径 当前工程的StreamingAssets文件夹(编 ...

  7. PHPActiveRecord 学习二

    ORM关联查询 a.一对多 针对外键来说 谁属于谁 谁有谁 user表 CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `na ...

  8. AdminLTE 动画时间

    app.js AdminLTE.css

  9. 终端设备 tty,pty,pts 概念与文件描述符的联系

    第1节 理解终端设备tty.pty.pts概念 简要描述: 终端设备默认具有输入.输出功能. 现代我们最常用的接入服务器端的方式(如:ssh通过tcp/ip的方式连接服务器端,作为服务器的终端设备)为 ...

  10. 激活 pycharm

    step1: 在本地 hosts 文件增加一行,windows 路径一般为:C:\Windows\System32\drivers\etc step2: 输入激活码 7SPIY8PDT7-eyJsaW ...