从单链表到双链表,然后再用模版,昨天让我看Vector,以前从来没听说过Vector 昨天看了2眼 竟然在电脑面前睡着了- - 囧~~~~~ 昨天大致了解了下Vector是类似数组一样的东西,让我一下抛弃链表转到数组 想想就头晕~~~ 不过今天通过我的聪明的小脑袋研究下 感觉这个东西还是满简单的~~~~ STL 都提供算法了 自己用用 改改就好了 还是很有成就感的~~~~~~
接下来看看我的成果
#include <iomanip>
#include <tchar.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <process.h>
#include <algorithm>
#include <stdio.h>
#include <vector>
using namespace std;
typedef vector<Student*> STUVECTOR;
class Student
{
public:
char name[10];
char id[10];
float Ynum;
float Snum;
float Enum;
float number;
Student()
{
strcpy_s(name,"000");
strcpy_s(id,"000");
Ynum=0;
Snum=0;
Enum=0;
number=0;
}
void Input(Student *p)
{
cout<<" 请输入姓名:";cin>>p->name;
cout<<" 请输入学号:";cin>>p->id;
cout<<" 请输入语文成绩:";cin>>p->Ynum;
cout<<" 请输入数学成绩:";cin>>p->Snum;
cout<<" 请输入英语成绩:";cin>>p->Enum;
p->number=p->Ynum+p->Snum+p->Enum;
}
};
class kakaVec :
public vector<Student*>
{
public:
kakaVec(void);
void addRecord(Student* rec);
void displayRecord();
void queryRecord();
void deleteRecord();
void loadRecord();
void storeRecord();
public:
~kakaVec(void);
};
void kakaVec::addRecord(Student* rec)
{
STUVECTOR::iterator it=this->begin();
while (it!=this->end())
{
if (!strcmp(rec->id,(*it)->id))
{
cout<<" 该学号的学生已经存在";
_getch();
return ;
}
it++;
}
this->push_back(rec);
}
void kakaVec::displayRecord()
{
for (STUVECTOR::iterator it=this->begin();it!=this->end();it++)
{
cout<<setw(6)<<(*it)->name<<setw(8)<<(*it)->id<<setw(8)
<<(*it)->Ynum<<setw(8)<<(*it)->Snum<<setw(8)<<(*it)->Enum
<<setw(7)<<(*it)->number<<endl;
}
}
void kakaVec::queryRecord()
{
cout<<" 请输入要查找的学生学号:";
string idd;
cin>>idd;
STUVECTOR::iterator it=this->begin();
STUVECTOR::iterator it2; //保存找到后的同学的指针
while(it!=this->end())
{
if ((*it)->id == idd)
{
it2=it;
cout<<setw(6)<<"姓名"<<setw(8)<<" 学号"
<<setw(8)<<"语文"<<setw(8)<<"数学"
<<setw(8)<<"英语"<<setw(13)<<"总分!!!"<<endl;
cout<<setw(6)<<(*it)->name<<setw(8)<<(*it)->id<<setw(8)
<<(*it)->Ynum<<setw(8)<<(*it)->Snum<<setw(8)<<(*it)->Enum
<<setw(7)<<(*it)->number<<endl;
return ;
}
it++;
}
cout<<" 没有找到该学号的学生";
}
void kakaVec::deleteRecord()
{
cout<<" 请输入要删除的学生学号:";
string idd;
cin>>idd;
STUVECTOR::iterator it=this->begin();
while(it!=this->end())
{
if ((*it)->id == idd)
{
this->erase(it);
cout<<" 删除成功";
return ;
}
it++;
}
cout<<" 没有找到该学号的学生";
}
void kakaVec::loadRecord()
{
ifstream finput;
finput.open("Student.txt");
Student *p1;
p1=new Student;
if (!(finput>>p1->name>>p1->id>>p1->Ynum>>p1->Snum>>p1->Enum>>p1->number))//第一行读空
{
delete(p1);
finput.close();
return ;
}
push_back(p1);
p1=new Student;
while(finput>>p1->name>>p1->id
>>p1->Ynum>>p1->Snum>>p1->Enum>>p1->number)
{
push_back(p1);
p1=new Student;
}
delete(p1);
finput.close();
}
void kakaVec::storeRecord()
{
ofstream foutput;
foutput.open("Student.txt");
STUVECTOR::iterator it=this->begin();
while (it!=this->end())
{
foutput<<(*it)->name<<" "<<(*it)->id
<<" "<<(*it)->Ynum<<" "<<(*it)->Snum
<<" "<<(*it)->Enum<<" "<<(*it)->number<<endl;
it++;
}
foutput.close();
}
int _tmain(int argc, _TCHAR* argv[])
{
Student *p;
kakaVec myVec;
char choice;
string y;
myVec.loadRecord();
while (1)
{
system("cls");
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃**************** ☆ 学 生 成 绩 管 理 系 统 ☆ *******************┃";
cout<<"┃********** ★★★★★ ★★★★★★★ ★★★★★ ************┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃****************★ ☆ 1.增加学生成绩 ☆ ★****************┃";
cout<<"┃****************★ ☆ 2.显示学生成绩 ☆ ★****************┃";
cout<<"┃****************★ ☆ 3.查找学生成绩 ☆ ★****************┃";
cout<<"┃****************★ ☆ 4.删除学生成绩 ☆ ★****************┃";
cout<<"┃****************★ ☆ 5.清空所有数据 ☆ ★****************┃";
cout<<"┃****************★ ☆ 6.退出并且保存 ☆ ★****************┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
cout<<" 请输入您的选择(1--6):";cout<<endl;
choice=_getch();
if (choice=='6')
{
myVec.storeRecord();
exit(0);
}
switch (choice)
{
case '1':
p=new Student;
p->Input(p);
myVec.addRecord(p);
break;
case '2':
if (myVec.empty())
{
cout<<" 当前数据库为空";
_getch();
break;
}
cout<<setw(6)<<"姓名"<<setw(8)<<" 学号"
<<setw(8)<<"语文"<<setw(8)<<"数学"
<<setw(8)<<"英语"<<setw(13)<<"总分!!!"<<endl;
myVec.displayRecord();
_getch();
break;
case '3':
myVec.queryRecord();
_getch();
break;
case '4':
myVec.deleteRecord();
_getch();
break;
case '5':
cout<<" 确定要清空所有数据吗?(Y/N)";cin>>y;
if (y=="Y"||y=="y")
{
myVec.clear();
cout<<" 数据被清空";
_getch();
break;
}
break;
}
}
return 0;
}