基于vector与CFile的学生信息管理系统

之前课堂上学了vector后一直没有用过,就写了下练了练手

//student.h


class Student        //学生类声明
{
private:
char m_name[9];
char m_specialty[14];
int m_id;
float m_math;
float m_history;
float m_english;

public:
Student(){};
~Student(){};
void ShowAllInfo(); //显示全部信息
void ShowIndexInfo(); //按编号显示信息
void AddInfo(); //用于添加自带信息
void AddInfo(char name[9],char specialty[14],int id,float math,float history,float english);//添加信息至尾部
void DeleIndexInfo(); //按编号删除信息
void DeleAllInfo(); //删除全部信息
void SaveInfo(); //保存信息
void LoadInfo(); //载入信息
};

//student.cpp


#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <afx.h>
#include "student.h"
using namespace std;

vector <Student>student; //vector对象数组,存放信息数据

void Student::AddInfo(){
char name[9],specialty[14];
int id;
float math,history,english;
cout<<"请输入学生信息(姓名/班级/学号):"<<endl;
cin>>name>>specialty>>id;
strcpy(m_name,name);
strcpy(m_specialty,specialty);
m_id=id;
cout<<"请输入该生成绩(数学/历史/英语):"<<endl;
cin>>math>>history>>english;
m_math=math;m_history=history;m_english=english;
student.push_back(*this);
cout<<"信息添加完毕"<<endl;

}

void Student::AddInfo(char name[9],char specialty[14],int id,float math,float history,float english){
strcpy(m_name,name);
strcpy(m_specialty,specialty);
m_id=id;
m_math=math;m_history=history;m_english=english;
student.push_back(*this);
}

void Student::ShowAllInfo(){
if(student.empty())
cout<<"没有学生信息!"<<endl;
else
{
cout<<setiosflags(ios::left);
for(int i=0;i<student.size();i++)
{
cout<<i+1<<" "<<setw(9)<<student[i].m_name<<setw(8)<<student[i].m_specialty<<"\t"
<<setw(10)<<student[i].m_id<<"\t"<<student[i].m_math<<"\t"
<<student[i].m_history<<"\t"<<student[i].m_english<<endl;
}
}
}
void Student::DeleAllInfo(){
student.clear();
}
void Student::DeleIndexInfo(){
cout<<"请输入你要删除的学生编号:";
int pos;
cin>>pos;
student.erase(student.begin()+pos-1);
}
void Student::ShowIndexInfo(){
cout<<"请输入你要显示的学生编号:";
int pos;
cin>>pos;
cout<<setiosflags(ios::left);
cout<<pos<<" "<<setw(9)<<student[pos-1].m_name<<setw(8)<<student[pos-1].m_specialty<<"\t"
<<setw(10)<<student[pos-1].m_id<<"\t"<<student[pos-1].m_math<<"\t"
<<student[pos-1].m_history<<"\t"<<student[pos-1].m_english<<endl;
cout<<setiosflags(ios::right);
}
void Student::SaveInfo(){
CFile f;
f.Open("tmp",CFile::modeCreate | CFile::modeWrite|CFile::modeNoTruncate);
for (int i=0;i<student.size();i++)
{
strcpy(this->m_name,student[i].m_name);
strcpy(this->m_specialty,student[i].m_specialty);
this->m_id=student.at(i).m_id;
this->m_math=student.at(i).m_math;
this->m_history=student.at(i).m_history;
this->m_english=student.at(i).m_english;
f.Write(this,sizeof(Student));
}
f.Close();
}

void Student::LoadInfo(){
CFile f;
if (f.Open("tmp",CFile::modeCreate | CFile::modeRead|CFile::modeNoTruncate))//文件存与读的打开方式要一样
{
f.SeekToEnd();
DWORD dwPosition=f.GetPosition();
f.SeekToBegin();
for (int i=0;i<student.size();i++)
{
f.Read(this,sizeof(Student));
strcpy(student.at(i).m_name,this->m_name);
strcpy(student[i].m_specialty,this->m_specialty);
student.at(i).m_id=this->m_id;
student.at(i).m_math=this->m_math;
student.at(i).m_history=this->m_history;
student.at(i).m_english=this->m_english;

}
DWORD dwpos=f.GetPosition();
while(dwpos<dwPosition)
{
f.Read(this,sizeof(Student));
student.push_back(*this);
dwpos=f.GetPosition();
}
}
else
{
cout<<"文件读取失败!"<<endl;
return;
}
f.Close();
}

//main.cpp


#include "student.h"
#include <iostream>
using namespace std;

void main()
{

Student obj;//用于调用Student的成员函数,与vector作用隔离

obj.AddInfo("张三","信息安全",56634541,86,79,87);
obj.AddInfo("呵呵呵","统计",242541,87,59,67);
obj.AddInfo("呃呃呃","国际经济贸易",5456434,66,99,96);
obj.AddInfo("李妈蛋","人力资源",242365,76,34,97);
obj.AddInfo("老外","人力资源",5646546,76,34,97);
while(1)
{
cout<<"\t ---------------------------------------"<<endl;
cout<<"\t| 1.显示全部信息 |"<<endl;
cout<<"\t| 2.按编号显示信息 |"<<endl;
cout<<"\t| 3.添加信息至尾部 |"<<endl;
cout<<"\t| 4.按编号删除信息 |"<<endl;
cout<<"\t| 5.删除全部信息 |"<<endl;
cout<<"\t| 6.保存信息 |"<<endl;
cout<<"\t| 7.载入信息 |"<<endl;
cout<<"\t| 8.退出 |"<<endl;
cout<<" \t---------------------------------------"<<endl;

cout<<"请输入你的选择:";
int n;
cin>>n;
switch (n)
{
case 1:
{
obj.ShowAllInfo();
break;
}
case 2:
{
obj.ShowIndexInfo();
break;
}
case 3:
{
obj.AddInfo();
break;
}
case 4:
{
obj.DeleIndexInfo();
break;
}
case 5:
{
obj.DeleAllInfo();
break;
}
case 6:
{
obj.SaveInfo();
break;
}
case 7:
obj.LoadInfo();
break;
case 8:
exit(0);
default:
cout<<"输入错误,请重新输入!"<<endl;
break;
}
}

}

编写过程中主要遇到的问题与总结:

1.string类型不熟悉的话,会导致很多显示的乱码,换用char数组后马上顺畅很多

2.char数组与char*的区别

3.CFile文件的读写,开方式应该保持基本一致,如保存时是 f.Open("tmp",CFile::modeCreate |
CFile::modeRead|CFile::modeNoTruncate)),

 则在读取时不能 f.Open("tmp",CFile::modeCreate | CFile::modeRead))

4.CFile是个很强大的读写接口,可以直接将一个类的数据信息保存到到硬盘中,也可以直接读取出来

时间: 2024-10-14 04:57:23

基于vector与CFile的学生信息管理系统的相关文章

基于数据库MySQL的简易学生信息管理系统

通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生信息: 4.可以删除学生信息: 5.可以通过学生姓名或学号显示学生所有信息: 还可以修改学生信息,添加学生表格属性等等,,,这些实现都基本类似上述的(这些不想写了,最简易的学生信息管理系统): 二:步骤 1.写一个sql脚本,包括创建数据库,使用数据库,创建学生信息表格,插入大部分学生信息. stu

学生信息管理系统v1.0

昨天一个教师朋友找到我,告诉我现在学期末他工作比较忙.需要统计处理很多学生信息,想让我帮他做一个管理系统.实现的功能就是把WPS表格转化成Word文档,将每一个学生的信息都能够分开,并且要根据名字找到对应的文档.(笔者注:原话如此) 和他又扯了好久,分析整理了一下思路,推测他大概就是想这样: 学校发出的成绩表格统计是这样的: -----------------------------程序运行后-------------------------------------> 每个文件的内容是: 大概就

Winform之学生信息管理系统登陆窗体

好吧,对这块的知识学习早已期待已久,感觉学习的进度还是慢了,最近一直在学习Winform,不得不说一些登陆窗体的设计,这几天算是小有收获,自己也看了许多这方面的知识,知道了要想做学生信息管理系统是一个漫长的过程,但是从今天起就来慢慢地进行学生信息管理系统的构建,此外还用到数据库的知识,打算着自己开始学数据库的知识,今天就来看看学生信息管理系统登录窗口的设计.下面图片的是样例: 这方面的知识还是基于C#语言和.NET Framework平台的.自己所用的还是熟悉的开发环境VS2012,感觉VS20

大一C语言结课设计之《学生信息管理系统》

第一次写这么长的程序,代码仅供參考,有问题请留言. /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #include <vector> using std::sort; using std::vector; /*==存储单元节点=

学生信息管理系统,Ubuntu下Codeblocks+wxWidgets编程

题目链接:https://oj.leetcode.com/problems/set-matrix-zeroes/ Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 一个个找肯定会超时,我们可以分别用一个行向量和一个列向量进行维护.这样O(m*n) 能出来 class Solution { public: void setZeroes(vector<vector

学生信息管理系统JAVASE版--1.1.1

现在终于可以写出实用一点的程序了.虽然这个程序的功能非常之简陋,而且还有BUG.不过最起码已经可以使用了. 功能预览和下一步的目标 程序主界面 查询功能: 目前只做了一个表的增.删.改.查.下一步应该就是把功能完善,比如加入错误处理,比如加入成绩部分.完成一个班级内的学生信息管理的功能,应该具有学生的基本信息查询,成绩管理这两个功能 不过有一个问题就是,在表格更新这一部分,每更新一次,就要创建一个tabliModel对象,感觉可以改进.再有就是MVC模式,其实也就接触设计模式.还有就是整成那种可

S2SH框架学生信息管理系统之毕业论文

大家好,马上毕业了,最近在忙着我的毕业设计.十天的日夜兼程,终于做完了,剩下的又是一个伤感的6月——毕业季,我的大学就要随着一顿散伙饭拜拜了. 好了,不多说了.这次给大家分享我的毕业设计,基于S2SH开发的学生信息管理系统,主要实现系级,专业,班级,学生,老师,课程,分数简单的CRUD以及 角色和权限的设计与分配. 分享出来,给大家做毕业设计一个参照,希望高手多多指点.项目的论文files.cnblogs.com/files/yx-my-life/S2SH%E6%A1%86%E6%9E%B6%E

JAVA学生信息管理系统

每天记录学习,每天会有好心情.*^_^* 今日思考,完成一个基于JAVA的学生信息管理系统项目,需要实现哪些功能?此类项目常见描述如下:学生信息管理系统可对学生学籍注册.档案管理.学籍异动.升级.毕业.成长记录实现全程信息化管理.采用当前非常流行的B/S体系结构,以JSP作为开发技术,主要依赖SSM技术框架,mysql数据库.SSM(MYECLIPSE)框架及其适合基于JAVA的学生信息管理系统,使用MVC的思想可以极大程度减少重复工作量.和SSM(MYECLIPSE)框架最配的开发工具是MYE

手把手搭建Java学生信息管理系统【附源码】

基于JavaWeb的学生信息管理系统的设计与实现 一.系统简介 本课程演示的是一套基于JavaWeb实现的学生信息管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群. 详细介绍了学生信息管理系统的实现,包括:1.项目介绍2.环境搭建3.系统功能4.技术实现5.项目运行6.功能演示 以通俗易懂的方式,手把手的带你从零开始运行本套学生信息管理系统,该项目附带全部源码可作为毕设使用. 二.技术实现 ?1. 后台框架:Servlet.JSP.JDBC.DbUtils ?2