MiNi的“湘北高中”学生信息管理系统 (C++实现)

 
 

自己随便写的一个湘北高中学生信息管理系统,核心是利用fstream的文件读写操作。

先看一下运行结果:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述]在这里插入图片描述
数据的基本操作:增删查改功能都已经实现。 其实这个项目拓展性还是蛮高的,可以基于此再做一些UI方面的优化,包括一些拓展功能的实现和完善。下面给出源码:

Stuinfo.h

#ifndef STUINFO_H
#define STUINFO_H#include 
#include
#include 
#include 
#include
#include 
#include
using namespace std;const string PATH = "D:\\学生信息.txt";class UI{public:void Menu();bool Search();void Show();bool Add();void Modify();void Delete();private:vector<string> _stuinfo;};class Stu{public:char _name[5];char _sex[3];short _age;short _num;char _address[12];short _score;public:Stu();~Stu();
};#endif

Stuinfo.cpp


#include"Stuinfo.h"void UI::Menu(){cout<<"******************************************"<<endl;cout<<"*******欢迎进入MiNi湘北高中管理系统*******"<<endl;cout<<"******************************************"<<endl;cout<<"*******1.查询信息*******"<<endl;cout<<"*******2.添加信息*******"<<endl;cout<<"*******3.修改信息*******"<<endl;cout<<"*******4.删除信息*******"<<endl;cout<<endl;cout<<"请输入您的选择:->      ";}void UI::Show(){for(int i=0;i<_stuinfo.size();++i){cout<<_stuinfo[i]<<endl;}}
/
bool UI::Search(){mother fucker .... 记事本的换行读取格式问题_stuinfo.clear();ifstream in(PATH.c_str());if(!in.is_open()){return false;}string content;while(getline(in,content)){             _stuinfo.push_back(content);}Show();in.close();return true;}

bool UI::Add(){//数据添加的时候没有在新的一行去添加string content;cout<<" 请输入您需要添加的完整信息:  "<<endl;//需要清空输入流string str="\n";getline(cin,str);getline(cin,content);              std::ofstream file(PATH.c_str(),ios::binary | ios::in | ios::app);if(!file.is_open()){return false;}//string s1="\n";//file<file<<content<<endl;//file.write(content.c_str(),content.size());file.close();return true;}
//
void UI::Modify(){string name;string tmp;cout<<"请输入需要修改的学生名字:  "<<endl;cin>>name;size_t len=name.size();int i=0;for(;i<_stuinfo.size();++i){tmp=_stuinfo[i].substr(0,len);if( strcmp(tmp.c_str(),name.c_str())==0 ){break;}elsecontinue;}tmp=_stuinfo[i];cout<<"请输入您修改后的完整数据: "<<endl;string part;string str="\n";getline(cin,str);getline(cin,part);     _stuinfo[i]=part;//将_stuinfo中的 内容覆盖原文件std::ofstream file(PATH.c_str(),ios::binary | ios::in );  //没有选择追加模式string content;for(int i=0;i<_stuinfo.size();++i){content=_stuinfo[i];//file.write(content.c_str(),content.size());file<<content<<endl;}file.close();return ;
}void UI::Delete(){//删除指定数据项string name;string tmp;cout<<"请输入需要删除项的学生名字:  "<<endl;cin>>name;size_t len=name.size();int i=0;for(;i<_stuinfo.size();++i){tmp=_stuinfo[i].substr(0,len);if( strcmp(tmp.c_str(),name.c_str())==0 ){break;}elsecontinue;}_stuinfo[i]=" NULL   (Deleted)";std::ofstream file(PATH.c_str(),ios::binary | ios::in );  //没有选择追加模式string content;for(int i=0;i<_stuinfo.size();++i){content=_stuinfo[i];//file.write(content.c_str(),content.size());file<<content<<endl;}file.close();return ;}

main.cpp


#include "Stuinfo.h"int main(){UI u1;int input;do{u1.Menu();	cin>>input;switch(input){	 case 1: u1.Search(); break;                      //查   case 2: u1.Add();break;                          //添case 3: u1.Modify();break;                       //改case 4: u1.Delete();break;                       //删default:cout<<"请输入正确的选择: "<<endl;break;}cout<<endl<<endl;cout<<"温馨提示:输入非0值可以继续进行操作... ..."<<endl;cout<<"请重新输入您的选择:   ";cin>>input;
}while(input!=0);system("pause");return 0;
}

代码其实挺简单的。在这里提一些我写的时候出的一些错误:

  1. 在PATH指定路径的.txt文档一定要注意格式是否是windows下的编码格式。因为在不同的操作系统下,对于换行的定义是不一样的,格式会影响的执行结果。
    在这里插入图片描述
  2. 在使用fstream流的时候,注意一下打开方式:默认是覆盖原文件。ios::app是追加模式。
  3. cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数。
  4. 当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
str="\n";
getline(cin,str);

的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。

  1. 关于此项目的相关拓展,大家可以留意: Github地址


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部