标签:style blog class code java color
之前课堂上学了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是个很强大的读写接口,可以直接将一个类的数据信息保存到到硬盘中,也可以直接读取出来
基于vector与CFile的学生信息管理系统,布布扣,bubuko.com
标签:style blog class code java color
原文地址:http://www.cnblogs.com/zoffy/p/3712294.html