C++基础学生管理系统

C++基础学生管理系统:完整攻略

简介

学生管理系统是程序开发中常见的一个小型项目,用于对学生信息、成绩等进行管理。本篇攻略将介绍如何使用C++编写一个简单的学生管理系统。

功能分析

根据需求,我们将实现以下功能:

  1. 添加学生信息(包括姓名、学号、性别、年龄、身份证号、联系电话、家庭住址等);
  2. 查询所有学生信息;
  3. 按条件查询学生信息(可以按学号、姓名、年龄等条件查询);
  4. 修改学生信息;
  5. 删除学生信息。

前期准备

在开始开发之前,我们需要安装开发环境。本篇攻略使用Visual Studio Code作为开发工具,使用MinGW作为编译器,同时还需要安装C/C++插件。

代码实现

1. 添加学生信息

用户需要输入学生信息,然后将学生信息保存到文件中。代码示例:

#include <iostream>
#include <fstream>
using namespace std;

struct Student 
{
    string name;    // 姓名
    string id;      // 学号
    string gender;  // 性别
    int age;        // 年龄
    string id_card; // 身份证号
    string phone;   // 联系电话
    string address; // 家庭住址
};

void add_student() 
{
    Student stu;
    cout << "请输入学生信息:" << endl;
    cout << "姓名:";
    cin >> stu.name;
    cout << "学号:";
    cin >> stu.id;
    cout << "性别:";
    cin >> stu.gender;
    cout << "年龄:";
    cin >> stu.age;
    cout << "身份证号:";
    cin >> stu.id_card;
    cout << "联系电话:";
    cin >> stu.phone;
    cout << "家庭住址:";
    cin >> stu.address;

    ofstream out("students.txt", ios::app);
    out << stu.name << " " << stu.id << " " << stu.gender << " " << stu.age << " " << stu.id_card << " " << stu.phone << " " << stu.address << endl;
    out.close();
}

2. 查询所有学生信息

从文件中读取所有学生信息,并输出到屏幕上。代码示例:

void show_all_students() 
{
    ifstream in("students.txt");
    string line;
    while (getline(in, line)) 
    {
        cout << line << endl;
    }
    in.close();
}

3. 按条件查询学生信息

根据用户输入的条件,从文件中查询学生信息,并输出到屏幕上。代码示例:

void find_students() 
{
    cout << "请输入查询条件(学号/姓名/年龄):";
    string cond;
    cin >> cond;
    ifstream in("students.txt");
    string line;
    while (getline(in, line)) 
    {
        stringstream ss(line);
        string id, name, gender, id_card, phone, address;
        int age;
        ss >> name >> id >> gender >> age >> id_card >> phone >> address;
        // 根据条件查询
        if (cond == id || cond == name || cond == to_string(age)) 
        {
            cout << line << endl;
        }
    }
    in.close();
}

4. 修改学生信息

从文件中读取所有学生信息,根据学号查询到对应的学生,然后让用户修改信息,最后将修改后的结果保存到文件中。代码示例:

void update_student() 
{
    string sid;
    cout << "请输入要修改的学生学号:";
    cin >> sid;
    ifstream in("students.txt");
    string line;
    bool found = false;
    Student stu;
    while (getline(in, line)) 
    {
        stringstream ss(line);
        ss >> stu.name >> stu.id >> stu.gender >> stu.age >> stu.id_card >> stu.phone >> stu.address;
        if (stu.id == sid) 
        {
            found = true;
            break;
        }
    }
    in.close();
    if (!found) 
    {
        cout << "找不到该学生!" << endl;
        return;
    }
    cout << "学生信息如下:" << endl;
    cout << "姓名:" << stu.name << endl;
    cout << "学号:" << stu.id << endl;
    cout << "性别:" << stu.gender << endl;
    cout << "年龄:" << stu.age << endl;
    cout << "身份证号:" << stu.id_card << endl;
    cout << "联系电话:" << stu.phone << endl;
    cout << "家庭住址:" << stu.address << endl;

    cout << "请输入修改后的信息:" << endl;
    cout << "姓名:";
    cin >> stu.name;
    cout << "学号:";
    cin >> stu.id;
    cout << "性别:";
    cin >> stu.gender;
    cout << "年龄:";
    cin >> stu.age;
    cout << "身份证号:";
    cin >> stu.id_card;
    cout << "联系电话:";
    cin >> stu.phone;
    cout << "家庭住址:";
    cin >> stu.address;

    ofstream out("students.tmp", ios::app);
    ifstream in2("students.txt");
    while (getline(in2, line)) 
    {
        stringstream ss(line);
        string id;
        ss >> name >> id >> gender >> age >> id_card >> phone >> address;
        if (id != sid) 
        {
            out << line << endl;
        }
    }
    in2.close();

    out << stu.name << " " << stu.id << " " << stu.gender << " " << stu.age << " " << stu.id_card << " " << stu.phone << " " << stu.address << endl;
    out.close();
    remove("students.txt");
    rename("students.tmp", "students.txt");

    cout << "修改学生信息成功!" << endl;
}

5. 删除学生信息

从文件中读取所有学生信息,根据学号查询到对应的学生,然后将该学生从列表中删除。代码示例:

void delete_student() 
{
    string sid;
    cout << "请输入要删除的学生学号:";
    cin >> sid;
    ifstream in("students.txt");
    string line;
    bool found = false;
    Student stu;
    while (getline(in, line)) 
    {
        stringstream ss(line);
        ss >> stu.name >> stu.id >> stu.gender >> stu.age >> stu.id_card >> stu.phone >> stu.address;
        if (stu.id == sid) 
        {
            found = true;
            break;
        }
    }
    in.close();
    if (!found) 
    {
        cout << "找不到该学生!" << endl;
        return;
    }
    ofstream out("students.tmp", ios::app);
    ifstream in2("students.txt");
    while (getline(in2, line)) 
    {
        stringstream ss(line);
        string id;
        ss >> name >> id >> gender >> age >> id_card >> phone >> address;
        if (id != sid) 
        {
            out << line << endl;
        }
    }
    in2.close();

    out.close();
    remove("students.txt");
    rename("students.tmp", "students.txt");

    cout << "删除学生信息成功!" << endl;
}

总结

本篇攻略介绍了如何使用C++编写一个简单的学生管理系统,并实现了添加、查询、修改、删除等功能。在开发过程中,需要注意代码的优化以及错误处理。如有任何疑问或建议,请留言讨论。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++基础学生管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言 strcoll()函数

    C语言 strcoll()函数使用攻略 一、简介 strcoll()函数是C语言中字符串比较函数之一,用于比较两个字符串的大小。不同于常用的strcmp()函数,strcoll()函数对于某些语言(如汉语、日语等)有更好的支持。 二、函数原型 int strcoll(const char *s1, const char *s2); s1和s2分别表示需要比较…

    C 2023年5月9日
    00
  • C语言实现进程间通信原理解析

    C语言实现进程间通信原理解析 什么是进程间通信? 进程是计算机中运行的程序的基本单位。每个进程都有自己的地址空间、代码、数据、变量等,它们相互独立,互相不干扰。进程间通信指的是不同的进程之间进行数据交换和共享资源的一种机制。 进程间通信的常见方式 进程间通信的常见方式有: 管道(Pipe) 消息队列(Message queue) 信号量(Semaphore)…

    C 2023年5月23日
    00
  • C#中的char、string和StringBuilder的使用详解

    C#中的char、string和StringBuilder的使用详解 在C#中,char、string和StringBuilder都是用来表示字符串以及相关操作的工具。本文将详细讲解它们的使用方法及不同点。 Char Char是一个表示单个Unicode字符的数据类型。在C#中,它通常用于对单个字符进行操作。以下是一些对Char变量进行操作的示例: char…

    C 2023年5月23日
    00
  • C++实现扫雷小游戏(控制台版)

    以下是“C++实现扫雷小游戏(控制台版)”的完整攻略: 1. 确定游戏规则 在实现扫雷游戏前,需要确定游戏的具体规则,包括雷区大小、雷数、标记雷的方式以及游戏胜利条件等。通常一个雷区是由若干个格子组成,每个格子可能包含地雷,也可能不包含地雷,游戏胜利条件可以是找到所有没有地雷的格子,或者是正确标记了所有地雷的位置。 2. 编写程序 在明确游戏规则后,可以开始…

    C 2023年5月23日
    00
  • 详解安卓系统中的Android.mk文件

    下面我就为你详细讲解“详解安卓系统中的Android.mk文件”的攻略。 1. Android.mk文件的基本概念 Android.mk是一个GNU Makefile文件,用于管理一个或多个模块(Module)的编译。每个模块通常都由一组源文件组成,可以是代码文件(.c、.cpp等)或者资源文件(.xml、.png等)。所有的源文件都会被编译成为一个可执行的…

    C 2023年5月23日
    00
  • 一篇文章带你了解C语言:入门基础

    一篇文章带你了解C语言:入门基础 什么是C语言? C语言是一门高级程序设计语言,它的发明者是丹尼斯·里奇和肯·汤普逊。C语言广泛应用于操作系统、编译器、网络设备、嵌入式系统、游戏开发等领域。学会C语言对程序员来说具有重要的意义。 C语言的编译和执行过程 C语言的编译和执行过程分为四个阶段,分别是预处理、编译、汇编和链接。 预处理 在预处理阶段,编译器会读取文…

    C 2023年5月23日
    00
  • 邻接表无向图的Java语言实现完整源码

    如果要实现一个邻接表无向图的Java程序,需要进行以下几个步骤: 1. 定义节点类 首先定义一个节点类来存储图中的每个节点以及它们之间的关系(边): class Node { int label; // 节点编号 List<Node> edges = new LinkedList<>(); // 存储与该节点相连的边 Node(int…

    C 2023年5月22日
    00
  • 详解c++ atomic原子编程中的Memory Order

    当使用C++中的原子类型进行编程时,需要指定原子操作的内存顺序(Memory Order),以保证多线程下的正确性和一致性。 C++中原子操作的内存顺序一共有4种: memory_order_relaxed:最轻松的内存顺序,不会保证原子操作的顺序,也不保证操作的内存可见性。当我们要进行仅仅是读写共享内存而无需考虑同步问题的操作时,可以使用memory_or…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部