/**
* 项目名称:学生信息管理系统(C++ 容器vector)
* 项目功能:学生信息的增删改查(按姓名|学号)、二进制导入导出数据、程序正常退出时才更新本地db文件
* 当前版本:2024.03.29.01
* 完成时间:2024年03月29日
* 初始作者:Tianwx tianwx2106@163.com
* 最后修改:Tianwx
*/
#include "stuinfo.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define DatabaseFile "stuinfo.db"
StudentInfo::StudentInfo()
{
m_StuInfoVct.clear();
importDataFromFile();
}
StudentInfo::~StudentInfo()
{
exportDataToFile();
m_StuInfoVct.clear();
}
int StudentInfo::printMenu()
{
int chioce;
printf("\n\n*******************************\n");
printf("*\t1、显示所有学生信息\n");
printf("*\t2、添加学生信息\n");
printf("*\t3、删除学生信息\n");
printf("*\t4、更新学生信息\n");
printf("*\t5、查找学生信息\n");
printf("*\t6、清空所有学生信息\n");
printf("*\t7、退出学生信息系统\n");
printf("*******************************\n");
printf("请输入你的选择:");
scanf("%d", &chioce);
if (chioce < PrtAllInfo || chioce > Quit)
{
printf("请输入正确的选项\n");
printMenu();
}
doChoose(chioce);
}
void StudentInfo::doChoose(int n)
{
switch(n)
{
case PrtAllInfo: printAllInfo(); break;
case AddStuInfo: addInfo(); break;
case DelStuInfo: delInfo(); break;
case UpdStuInfo: updInfo(); break;
case FindStuInfo: findInfo(); break;
case ClearStuInfo: clearInfo(); break;
case Quit: quitSysterm(); break;
default: break;
}
}
void StudentInfo::printAllInfo()
{
for (int i=0; i<m_StuInfoVct.size(); i++)
{
printf("%d\t%s\t%s\t%d\t%d\t%s\n",
m_StuInfoVct[i].no,
m_StuInfoVct[i].name,
m_StuInfoVct[i].sex,
m_StuInfoVct[i].age,
m_StuInfoVct[i].phone,
m_StuInfoVct[i].addr );
}
printf("共展示 %d 名学生的个人信息\n", m_StuInfoVct.size());
}
void StudentInfo::addInfo()
{
info_t info;
memset(&info, 0, sizeof(info_t));
INPUT:
printf("请输入学号:");
scanf("%d", &info.no);
for (int i=0; i<m_StuInfoVct.size(); i++)
{
if (m_StuInfoVct[i].no == info.no)
{
printf("该学号已存在,请重新输入!\n");
goto INPUT;
}
}
printf("请输入学生姓名:");
scanf("%s", info.name);
printf("请输入学生性别:");
scanf("%s", info.sex);
printf("请输入学生年龄:");
scanf("%d", &info.age);
printf("请输入学生联系方式:");
scanf("%d", &info.phone);
printf("请输入学生家庭地址:");
scanf("\n%[^\n]", info.addr);
m_StuInfoVct.push_back(info);
printf("学生信息添加完成:\n");
printf("%d\t%s\t%s\t%d\t%d\t%s\n",
m_StuInfoVct[m_StuInfoVct.size()-1].no,
m_StuInfoVct[m_StuInfoVct.size()-1].name,
m_StuInfoVct[m_StuInfoVct.size()-1].sex,
m_StuInfoVct[m_StuInfoVct.size()-1].age,
m_StuInfoVct[m_StuInfoVct.size()-1].phone,
m_StuInfoVct[m_StuInfoVct.size()-1].addr );
}
void StudentInfo::delInfo()
{
int i, chioce, no, index;
printf("1、根据学号删除学生信息\n");
printf("2、根据姓名删除学生信息\n");
printf("请选择删除方式:");
scanf("%d", &chioce);
if (chioce != 1 && chioce != 2)
{
printf("输入有误,请重新输入\n");
delInfo();
}
// 按学号删除学生信息
if (chioce == 1)
{
printf("请输入要删除的学号:");
scanf("%d", &no);
printf("查询结果如下:\n");
for (i=0,index=-1; i<m_StuInfoVct.size(); i++)
{
if (no == m_StuInfoVct[i].no)
{
index = i;
printf("%d\t%s\t%s\t%d\t%d\t%s\n",
m_StuInfoVct[index].no,
m_StuInfoVct[index].name,
m_StuInfoVct[index].sex,
m_StuInfoVct[index].age,
m_StuInfoVct[index].phone,
m_StuInfoVct[index].addr );
break;
}
}
if (index == -1)
{
printf("未查找到学号 %d\n", no);
return;
}
printf("确定删除?(yes or no):");
char s[5] = {0};
scanf("%s", s);
if (!strcmp(s, "yes"))
{
m_StuInfoVct.erase(m_StuInfoVct.begin() + index);
printf("已删除\n");
}
return;
}
// 按姓名删除学生信息
char iName[64] = {0};
char sNo[128] = {0};
vector<int> idxVct;
printf("请输入学生姓名:");
scanf("%s", iName);
printf("查询结果如下:\n");
for (i=0,no=1,index=-1; i<m_StuInfoVct.size(); i++)
{
if (strcmp(iName, m_StuInfoVct[i].name) != 0)
continue;
index = i;
idxVct.push_back(index);
printf("%d、\t%d\t%s\t%s\t%d\t%d\t%s\n",
no++,
m_StuInfoVct[index].no,
m_StuInfoVct[index].name,
m_StuInfoVct[index].sex,
m_StuInfoVct[index].age,
m_StuInfoVct[index].phone,
m_StuInfoVct[index].addr );
}
if (index == -1)
{
printf("未查找到姓名 %s\n", iName);
return;
}
printf("请输入要删除信息的序号(使用空格分隔):");
scanf("\n%[^\n]", sNo);
for (int i=0,sum=0,del=0; i<=strlen(sNo); i++)
{
if ((isspace(sNo[i]) || !sNo[i]) && sum > 0)
{
if (sum >= no)
{
printf("输入参数 %d 有误,跳过!\n", sum);
sum = 0;
continue;
}
index = idxVct[sum-1] - del;
if (strcmp(m_StuInfoVct[index].name, iName) == 0)
{
printf("删除\t%d\t%s\t%s\t%d\t%d\t%s\n",
m_StuInfoVct[index].no,
m_StuInfoVct[index].name,
m_StuInfoVct[index].sex,
m_StuInfoVct[index].age,
m_StuInfoVct[index].phone,
m_StuInfoVct[index].addr );
m_StuInfoVct.erase(m_StuInfoVct.begin() + index);
del += 1;
}
sum = 0;
continue;
}
if (isdigit(sNo[i]))
sum = sum*10 + sNo[i] - '0';
}
}
void StudentInfo::updInfo()
{
int i, chioce, no, index;
printf("1、根据学号更新学生信息\n");
printf("2、根据姓名更新学生信息\n");
printf("请选择更新方式:");
scanf("%d", &chioce);
if (chioce != 1 && chioce != 2)
{
printf("输入有误,请重新输入\n");
updInfo();
}
// 按学号更新学生信息
if (chioce == 1)
{
printf("请输入要更新的学号:");
scanf("%d", &no);
printf("查询结果如下:\n");
for (i=0,index=-1; i<m_StuInfoVct.size(); i++)
{
if (no == m_StuInfoVct[i].no)
{
index = i;
printf("%d\t%s\t%s\t%d\t%d\t%s\n",
m_StuInfoVct[index].no,
m_StuInfoVct[index].name,
m_StuInfoVct[index].sex,
m_StuInfoVct[index].age,
m_StuInfoVct[index].phone,
m_StuInfoVct[index].addr );
break;
}
}
if (index == -1)
{
printf("未查找到学号 %d\n", no);
return;
}
printf("确定更新?(yes or no):");
char s[16] = {0};
scanf("%s", s);
if (!strcmp(s, "yes"))
{
info_t info;
memset(&info, 0, sizeof(info_t));
info.no = m_StuInfoVct[index].no;
printf("请输入学生姓名:");
scanf("%s", info.name);
printf("请输入学生性别:");
scanf("%s", info.sex);
printf("请输入学生年龄:");
scanf("%d", &info.age);
printf("请输入学生联系方式:");
scanf("%d", &info.phone);
printf("请输入学生家庭地址:");
scanf("\n%[^\n]", info.addr);
printf("新信息如下:\n");
printf("%d\t%s\t%s\t%d\t%d\t%s\n",
info.no, info.name, info.sex, info.age, info.phone, info.addr );
printf("确定更新?(yes or no):");
memset(s, 0, sizeof(s));
scanf("%s", s);
if (!strcmp(s, "yes"))
{
m_StuInfoVct[index] = info;
printf("更新完成\n");
}
}
return;
}
// 按姓名更新学生信息
char iName[64] = {0};
int iNo;
vector<int> idxVct;
printf("请输入学生姓名:");
scanf("%s", iName);
printf("查询结果如下:\n");
for (i=0,no=1,index=-1; i<m_StuInfoVct.size(); i++)
{
if (strcmp(iName, m_StuInfoV
(免费 可直接下载)学生信息管理系统-C++ 容器版本
《C++实现的学生信息管理系统详解》 在信息技术领域,数据管理是至关重要的,尤其是在教育行业中,学生信息管理系统扮演着核心角色。本系统采用C++编程语言,利用其强大的容器类库,尤其是vector容器,实现了高效的数据存储和操作。本文将深入探讨这个系统的设计原理和实现细节。 C++中的vector容器是标准模板库(STL)的一部分,它提供了一个动态数组的功能。与传统的数组相比,vector可以自动调整大小,方便地进行元素的插入和删除。在学生信息管理系统中,vector被用来存储学生的基本信息,如姓名、学号、成绩等,使得数据的存取更加灵活和便捷。通过vector的push_back()方法可以添加新学生的信息,而erase()方法则可以删除特定学生的信息,实现了对信息流的动态管理。 为了保障数据的安全性和隐私性,该系统采用了二进制数据导出/导入功能。二进制文件存储数据相比于文本文件更节省空间,且速度更快。通过将学生信息序列化为二进制格式,可以避免敏感数据以明文形式存在于文件中,增强了数据的安全性。在系统中,可以使用fstream库进行二进制文件的读写操作,如open()函数打开文件,write()和read()函数进行数据的写入和读取。这种设计使得数据的备份和恢复变得更加简单,同时也保护了学生的个人信息不被非法访问。 值得注意的是,该系统还处于持续完善阶段,这意味着开发者正积极倾听用户的反馈和需求,以优化系统的功能和用户体验。用户可以通过私信等方式与开发者沟通,提出改进意见或增加新功能的需求。这表明了开发者对用户满意度的重视,也预示着系统未来可能增加更多的实用特性,如搜索功能、排序功能、报表生成等。 "学生信息管理系统-C++ 容器版本"充分利用了C++的容器优势,结合二进制数据处理技术,提供了一种安全、高效的数据管理解决方案。无论是对于学习C++编程的初学者,还是需要管理大量学生信息的教育机构,这一系统都具有很高的参考价值。随着其不断更新和完善,我们有理由期待一个更加强大、易用的学生信息管理系统。
- 1
- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- 粉丝: 1674
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 混合储能系统容量优化方案:利用粒子群算法优化风光互补发电储能系统,采用超级电容与蓄电池组合方案,实现最佳容量配置 ,混合储能系统容量优化matlab 采用粒子群算法编制风光互补发电储能系统的容量优化程
- 基于协同过滤算法的微信小程序文章推荐系统-后端系统+Java、微信+微信文章推荐、文章管理
- 基于Matlab编程的两阶段鲁棒优化模型:CCG算法求解四场景概率置信区间约束优化程序,两阶段鲁棒优化模型 多场景 采用matlab编程两阶段鲁棒优化程序,考虑四个场景,模型采用列与约束生成(CCG)
- python实现简单神经网络识别数字
- 基于MATLAB和YALMIP求解器的配电网故障重构二阶锥编程研究:以33节点模型为例探究连通性与辐射性的保证及约束条件下的优化策略,配电网故障重构matlab 二阶锥 编程方法:matlab+yal
- 激励型负荷需求响应模型matlab+yalmip实现时序负荷转移与响应策略优化,目标函数详见图解,激励型负荷需求响应模型matlab 编程语言:matlab+yalmip 基本内容:采用激励型需求响应
- 基于协同过滤算法的微信小程序文章推荐系统-微信小程序+Java、微信+微信文章推荐、文章管理
- 基于Springboot的物业管理系统
- 储能技术参与二次调频的策略研究:SOC影响下的风储、风火水储联合调频与ACE响应分析,simulink 储能二次调频,风储调频,风火水储联合二次调频,储能出力受SOC影响,跟随系统ACE变化 对比
- 资源搬运:detection-Resnet50-Final.pth Aug 10, 2022
- "单相PWM整流器PI双闭环控制仿真研究:输出电压外环与网侧电流内环的Matlab Simulink与PLECS模型应用",单相PWM整流器仿真,采用PI双闭环控制 输出电压外环,网侧电流内环 mat
- 基于协同过滤算法的微信小程序文章推荐系统的设计与实现-答辩PPT+Java、微信+微信文章推荐、文章管理
- Screenshot_2025-01-23-10-09-13-826_net.csdn.csdnplus.jpg
- 《系统架构设计师考试》易混淆知识点解析:深入讲解IT领域的核心概念及其应用场景
- 基于STM32单片机的PID温控系统算法:线性加热、多段温区与高精度编程温控器应用于高端化工设备,pid温控系统算法,线性加热、多段温区、开编程温控器 stm32单片机开发,几千万人民币级别化工前处
- 基于FPGA的并行FIR滤波器设计:从MATLAB仿真到FPGA实现及ModelSim验证,基于fpga的并行fir滤波器设计,matlab仿真如下,之后进行fpga实现,并且通过modelsim仿真