C++学习之路(二)C++如何实现一个超简单的学生信息管理系统?C++示例和小项目实例_学生信息管理系统c++代码-程序员宅基地

技术标签: CPP实例  C++  c++  Cpp入门  开发语言  

这个示例实现了一个简单的学生信息管理系统。它包括了学生类的定义,可以添加学生信息、显示所有学生信息,将学生信息保存到文件并从文件加载信息。通过这个示例,你可以了解到如何使用类、函数和文件操作来构建一个基本的信息管理系统。

在这里插入图片描述

一个简单的学生信息管理系统可以由C++的类、函数和文件操作组合实现。以下是示例代码:

#include <iostream>
#include <fstream> // 文件操作需要的头文件
#include <vector>

class Student {
    
private:
    std::string name;
    int id;
    float score;

public:
    // 构造函数,用于初始化学生对象
    Student(std::string n, int i, float s) : name(n), id(i), score(s) {
    }

    // 显示学生信息
    void display() {
    
        std::cout << "Name: " << name << "\tID: " << id << "\tScore: " << score << std::endl;
    }

    // 获取学生姓名
    std::string getName() {
    
        return name;
    }

    // 获取学生ID
    int getID() {
    
        return id;
    }

    // 获取学生成绩
    float getScore() {
    
        return score;
    }
};

// 添加学生信息
void addStudent(std::vector<Student> &students) {
    
    std::string name;
    int id;
    float score;

    std::cout << "Enter name: ";
    std::cin >> name;
    std::cout << "Enter ID: ";
    std::cin >> id;
    std::cout << "Enter score: ";
    std::cin >> score;

    Student newStudent(name, id, score);
    students.push_back(newStudent);
}

// 显示所有学生信息
void displayAllStudents(std::vector<Student> &students) {
    
    std::cout << "Student List:" << std::endl;
    for (const auto &student : students) {
    
        student.display();
    }
}

// 保存学生信息到文件
void saveToFile(std::vector<Student> &students) {
    
    std::ofstream file("students.txt"); // 创建文件输出流对象
    if (file.is_open()) {
    
        for (const auto &student : students) {
    
            file << student.getName() << " " << student.getID() << " " << student.getScore() << std::endl;
        }
        file.close(); // 关闭文件
        std::cout << "Student information saved to file." << std::endl;
    } else {
    
        std::cout << "Unable to open file." << std::endl;
    }
}

// 从文件加载学生信息
void loadFromFile(std::vector<Student> &students) {
    
    std::ifstream file("students.txt"); // 创建文件输入流对象
    if (file.is_open()) {
    
        std::string name;
        int id;
        float score;

        while (file >> name >> id >> score) {
    
            Student loadedStudent(name, id, score);
            students.push_back(loadedStudent);
        }
        file.close(); // 关闭文件
        std::cout << "Student information loaded from file." << std::endl;
    } else {
    
        std::cout << "No previous data found." << std::endl;
    }
}

int main() {
    
    std::vector<Student> students;
    loadFromFile(students); // 从文件加载学生信息

    int choice;
    do {
    
        std::cout << "\nStudent Management System\n";
        std::cout << "1. Add Student\n";
        std::cout << "2. Display All Students\n";
        std::cout << "3. Save to File\n";
        std::cout << "4. Exit\n";
        std::cout << "Enter your choice: ";
        std::cin >> choice;

        switch (choice) {
    
            case 1:
                addStudent(students);
                break;
            case 2:
                displayAllStudents(students);
                break;
            case 3:
                saveToFile(students);
                break;
            case 4:
                std::cout << "Exiting...\n";
                break;
            default:
                std::cout << "Invalid choice!\n";
                break;
        }
    } while (choice != 4);

    return 0;
}

本示例涵盖了许多基本的C++知识点和编程概念:

  1. 类和对象: 学生类(Student class)的定义,包括私有成员变量和公有成员函数。
  2. 文件操作: 使用fstream库进行文件读写操作,实现学生信息的保存和加载。
  3. 函数的使用: 函数用于添加学生、显示所有学生信息等功能。
  4. 控制流: 使用do-while循环和switch语句,实现用户菜单和选择功能。
  5. 容器的使用: 使用vector容器管理学生对象,存储多个学生信息。
  6. 输入输出流: 使用cin和cout进行控制台输入输出。

对于初学者,以下是需要特别注意的几点:

  1. 类和对象的概念: 理解类的定义、成员变量、成员函数以及对象的创建和使用。
  2. 文件操作和流: 理解文件读写的过程和基本的文件操作方法,学会打开、写入和关闭文件。
  3. 函数的使用: 函数的定义和调用,以及函数在程序中的组织和作用。
  4. 控制流和循环: 理解循环的概念,并学会使用循环结构来处理用户选择和交互。
  5. 异常处理和错误检查: 目前示例中没有添加针对输入错误的严格检查或异常处理机制,因此需要确保输入数据的有效性。

在学习过程中,重点理解面向对象编程、文件操作、函数的使用和控制流是关键。同时,要始终注意输入的有效性和错误处理,确保程序的稳健性和可靠性。逐步构建程序并理解每一部分的功能和实现方式,对于初学者来说是非常重要的。


掌握了本实例后,下一步我们还能做些什么?

一旦熟悉了这个学生信息管理系统,可以考虑对其进行进化或者尝试一个更复杂的小项目,以进一步提高编程技能。以下是一些可能的方向:

进化现有项目:

  1. 改进用户界面: 可以使用更友好的菜单系统或者图形界面(使用C++的图形库如Qt等)来提升用户体验。
  2. 增加功能: 添加修改学生信息、删除特定学生、按条件查询学生等功能,使系统更全面和实用。
  3. 错误处理和验证: 加强输入的错误处理和验证,确保用户输入的数据合法性和安全性。
  4. 模块化重构: 将程序拆分成更多模块,使用多个文件组织代码,实践模块化和分层设计。
  5. 持久化存储改进: 使用更复杂的数据结构或数据库来存储学生信息,以提高数据的组织性和检索效率。

尝试一个新项目:

  1. 图书管理系统: 创建一个可以添加、查找、删除书籍信息的系统,涵盖更多的实体和关联。
  2. 简单的游戏: 尝试编写一个文字游戏,如文本冒险游戏或简易的迷宫游戏,锻炼逻辑和交互设计。
  3. 文件加密工具: 开发一个简单的文件加密/解密工具,涉及文件读写和基本的加密算法。
  4. 简易日程管理器: 创建一个能够记录和管理用户日程的程序,包括添加事件、查看日历等功能。

选择新项目时,可以考虑涵盖更多的功能和概念,例如文件操作、数据结构、算法、面向对象编程等。挑战自己的同时,也要逐步学习和实践新的概念,不断扩展编程技能。

无论你选择改进现有项目还是尝试新项目,都可以帮助巩固已学知识、探索新概念和加强编程技能。挑战自己,逐步提升并拓展编程能力。


本文就到这里了,感谢您的阅读,明天还有更多的实例学习文章等着你 。别忘了点赞、收藏~ Thanks♪(・ω・)ノ 。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Backli/article/details/134588988

智能推荐

Kali Linux 解决Wine下中文或英文字体乱码的问题 ,一劳永逸法 。_kali wine 中文方块-程序员宅基地

文章浏览阅读4k次,点赞11次,收藏14次。  解决 Kali Linux中 Wine下英文方块乱码的方法  最近在wine下使用notepad++和sublime编辑器的时候,发现英文全部均是方块乱码,熟悉wine的朋友们一定会记得,在.wine文件夹下模拟器的文件结构是和Windows是非常相似的: nautilus .wine/drive_c/  wine中文件结构:  Windows下文件结构:  如果,我们分别在Linux终端下对.wine/drive_c和在Powershell终端对C盘进行tree查看,就会发现文件是高_kali wine 中文方块

Vue.js的双向绑定原理-程序员宅基地

文章浏览阅读285次。vue3双向绑定原理

高效生产管理:选择顺通鞋厂ERP系统派单的理由-程序员宅基地

文章浏览阅读804次,点赞26次,收藏17次。然而,传统的生产管理模式已经难以满足现代企业的需求,因此选择一款适合自身业务特点的生产管理软件成为了企业的当务之急。顺通鞋业ERP系统的派单功能具备强大的数据分析能力,能够为企业提供全面的生产数据报表。ERP系统的派单功能作为高效生产管理的解决方案,企业将获得实时监控、简化流程、智能分析、灵活配置、安全可靠和优质服务等多方面的优势。显然,传统的生产管理模式已经难以满足现代企业的需求,因此选择一款适合自身业务特点的生产管理软件成为了企业的当务之急。ERP系统的派单功能将成为企业实现高效生产管理的有力武器。

COMSOL光电、FDTD光学器件超表面、TCAD半导体器件仿真技术与应用直播学习_comsol与tcad仿真能结合起来吗-程序员宅基地

文章浏览阅读362次。Ø 散射边界和端口边界的使用方法和技巧(波失方向和极化方向设置、S参数、反射率和透射率的计算和提取、高阶衍射通道反射投射效率的计算)Ø COMSOL WITH MATLAB 进行复杂的物理场或者集合模型的建立(如超表面波前的衍射计算)Ø COMSOL WITH MATLAB 进行复杂函数的设置(如石墨烯电导函数的设置和仿真)Ø 热电子光探测器的电磁场空间分布与FDTD材料折射率的导出(脚本计算不同金属层的吸收)Ø 利用S参数分析组并通过脚本实现金属纳米小球的吸收/散射消光与近场增强的计算。_comsol与tcad仿真能结合起来吗

〖程序员的自我修养 - 精炼面试篇⑫〗- HR面试避坑指南 - 工作能力类型问题的踩坑点-程序员宅基地

文章浏览阅读1.2w次,点赞25次,收藏24次。常见的个人能力踩坑点的问题学完了,接下来我们再看看关于 "工作能力" 的一些常见问题,面对这些问题我们又该如何的应对呢?该章节将会一一解答。

uni-app运行到小程序模拟器,微信开发者工具报错“ERR_CONNECTION_TIMED_OUT”_微信接口connect timed out-程序员宅基地

文章浏览阅读765次。uni-app运行到小程序模拟器,微信开发者工具报错“ERR_CONNECTION_TIMED_OUT”_微信接口connect timed out

随便推点

Linux——部署DNS服务二: 正向解析,反向解析,双向解析_用于减少域名到ip地址的映射的技术是-程序员宅基地

文章浏览阅读616次。一、DNS正向解析(权威配置) 作用: 用于域名到IP地址的映射,当DNS客户端请求解析某个域名时,DNS服务器通过正向查找,并返回给DNS客户端对应的IP地址 正向解析的部署:删除forwarders { 114.114.114.114; };(或者注释掉)vim /etc/named.rfc1912.zones新添加一个zone(可以复制19到23行,粘贴在底下再进行修改..._用于减少域名到ip地址的映射的技术是

学习使用idea搭建SSH框架,并实现一个简单的登录功能_intellij idea ssh 登录系统教程-程序员宅基地

文章浏览阅读2.2k次。学习利用Struts2,Spring,Hibernate这三个框架来搭建项目的主体架构,实现简单的一个登录注册功能_intellij idea ssh 登录系统教程

Golang编译选项(ldflags)有趣应用_golang ldflags-程序员宅基地

文章浏览阅读1.6k次。本文介绍了git提交日志,如何在构建时给Go程序增加信息,如GIT提交日志、编译时间等信息。最后还顺便介绍了压缩可执行文件的选项。_golang ldflags

WPF基础到企业应用系列6——布局全接触-程序员宅基地

文章浏览阅读88次。本文转自:http://knightswarrior.blog.51cto.com/1792698/365351一. 摘要首先很高兴这个系列能得到大家的关注和支持,这段时间一直在研究Windows Azure,所以暂缓了更新,同时也本着想把它写好、宁缺毋滥的精神,在速度上自然也就慢了下来,这篇文章拖拖拉拉也经历了十多天才发布出来(每天写一 点),不过请大家放心,这个系列一定会继续写下去。由..._c#的 uniformgrid x:name="wrappanel

关于深度学习人工智能模型的探讨(二)(1)_深度学习可以用不完备性定理解释么-程序员宅基地

文章浏览阅读175次。第二章 不完备性定理2.1 一剑封喉1931年,希尔伯特先生刚刚退休,清闲了没几天。有一个叫哥德尔的小混混找上门来,仅仅用了一招。仅此一招,一剑封喉,就击败了武林大盟主希尔伯特。当年哥德尔粉碎希尔伯特梦想的,是一个简洁漂亮的小证明。当这个小小的证明一横空出世,就电闪雷鸣万道金光,对雄心勃勃的数学界来说更彷如晴天霹雳,宣判了希尔伯特纲领的彻底破产。真是令人沮丧,哥德尔不完全性定理一举粉碎了..._深度学习可以用不完备性定理解释么

matlab格兰杰因果检验,如何用STATA做panel data的格兰杰因果检验-程序员宅基地

文章浏览阅读889次。Granger causality testgcause var1 var2 [if exp] [in range] , lags(#) [ exog(varlist) regress]gcause is for use with time-series data.You must tsset your data beforeusing this commands; see help tsse..._格兰杰因果分析原理 matlab

推荐文章

热门文章

相关标签