stl 学生管理系统

从单链表到双链表,然后再用模版,昨天让我看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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值