学生学籍系统 按班级查找按学号查找

#include<iostream>
#include<fstream>
#include<iomanip>
#include<stdlib.h>
#include<Windows.h>
#include<conio.h>
using namespace std ;
#define HEADER1 "      --------------------------------学生成绩---------------------------- \n"
#define HEADER2 "     |   学号   |  班级  |   姓名   |   性别   |   年龄   |   系别   |  要求完成学分  |  已完成学分  | 入学日期 |\n"
#define HEADER3 "     |----------|----------|----------|----------|----------|----------|----------|----------|----------|\n"
int num; //学生总数
class Student             //定义学生类
{
public:
     char id[20];//学号      
     char group[20];//班级
     char name[20] ;//名字
     char sex[5] ;//性别
     int age ;//年龄
     char xibie[20] ;//系别
     char score[5];//学分(要求完成)
     char xuefen[5];//学分(已完成)
     char day[20];//入学日期
     Student *next ;
     void input() ;//输入函数
     void ReadFile(istream & in) ;//读取文件
     void show() ;//显示方法 
};
     
void Student::input()     //输入学生信息函数
{
    cout<<"\t\t学号:" ;
    cin>>id ;
    cout<<"\t\t班级: " ;
    cin>>group ;
    cout<<"\t\t姓名:" ;
    cin>>name ;
    cout<<"\t\t性别:" ;
    cin>>sex ;
    cout<<"\t\t年龄:" ;
    cin>>age ;
    cout<<"\t\t系别:" ;
    cin>>xibie ;
    cout<<"\t\t要求完成学分:";
    cin>>score ;
    cout<<"\t\t已完成学分:";
    cin>>xuefen ;
    cout<<"\t\t入学日期(格式:xxxx-xx-xx)";
    cin>>day ;
}
     
void Student::ReadFile(istream & in)        //读取文件
{
    in>>id>>group>>name>>sex>>age>>xibie >>score>>xuefen>>day;
}
    

void Student::show()          //输出学生信息
{
    cout<<"     |"<<setw(5)<<id<<"     |"<<setw(5)<<group
        <<"   |"<<setw(5)<<name<<"     |"<<setw(8)<<sex
        <<"  |"<<setw(6)<<age<<"    |"<<setw(6)<<xibie
        <<"    |"<<setw(5)<<score<<"|"<<setw(5)<<xuefen
        <<"|"<<setw(10)<<day<<"|"<<endl ;
    cout<<"     |----------|----------|----------|----------|----------|----------|----------|----------|----------|\n" ;
}

class StudentMassage      //定义学生信息类,包含各项处理功能
{
public:
    StudentMassage() ;
    ~StudentMassage() ;
    void ShowMenu() ;
    void Display() ;
    void AddItem() ;
    void Find() ;
    void save() ;
    void ModifyItem() ;
    void RemoveItem() ;
    void Swap(Student *p1 , Student *p2) ;
    void Sort() ;
    int ListCount() ;
    int Count() ;
private:
    Student *Head , *End ;
    ifstream in ;
    ofstream out ;
    Student *FindItem(char *id) ;//查找(按学号查询)    
    int FindId(char *group) ;//查找(按班级查询)
};

Student *StudentMassage::FindItem(char *id)//(查学号)
{
    Student *p ;
    for(p = Head ; p->next != End ; p = p->next)
        if(!strcmp(p->next->id ,id))
            return p ;
    return NULL ;
}

int StudentMassage::FindId(char *group)//(查班级)
{
    int t=0;
    Student *p ;
    for(p = Head ; p->next != End ; p = p->next)
        if(!strcmp(p->next->group ,group))
        {
            p->next->show() ;
            cout<<endl;
            t++ ;
        }
    return t ;
}

StudentMassage::StudentMassage()   //构造函数
{
    Head = new Student ;
    Head->next = new Student ;
    End = Head->next ;
    in.open("学生成绩.txt") ;
    if(!in)
        cout<<"\n\t\t这是一个新系统,目前无学生信息,请自行输入。"<<endl ;
    else
    {
        while(!in.eof())
        {
            End->ReadFile(in) ;
            if(End->name[0]=='\0')
                break ;
            End->next = new Student ;
            End = End->next ;
        }
        in.close() ;
        cout<<"\n\t\t读取学生信息成功!"<<endl ;
    }
}

StudentMassage::~StudentMassage()       //析构函数
{
    Student *temp ;
    save() ;
    for(temp ; Head->next != End ; )
    {
        temp = Head->next ;
        Head -> next = Head ->next->next ;
        delete temp ;
    }
    delete Head , End ;
}

void StudentMassage::ShowMenu()                      //显示菜单
{
    cout<<"\n\n\t\t\t\t 主菜单"<<endl<<endl<<endl ;
    cout<<"\t\t****************************************"<<endl<<endl ;
    cout<<"\t\t1、增加学生信息          2、显示学生信息"<<endl<<endl ;
    cout<<"\t\t3、删除学生信息          4、修改学生信息"<<endl<<endl ;
    cout<<"\t\t5、保存学生信息          6、查询学生信息"<<endl<<endl ;
    cout<<"\t\t0、系统安全退出                         "<<endl<<endl ;
    cout<<"\t\t****************************************"<<endl<<endl<<endl ;
    cout<<"\t\t请选择:" ;
}

void StudentMassage::Display()            //显示学生信息
{
    Student *p  ;
    cout<<endl<<HEADER1<<HEADER2<<HEADER3 ;
    for(p = Head->next ; p != End ; p = p->next)
        p->show() ;
    cout<<"\n\n输入任意字符,继续......" ;
    getch() ;
}

void StudentMassage::AddItem()      //添加学生信息
{
    End->input() ;
    End->next = new Student ;
    End = End->next ;
    cout<<"\n\t\t添加成功!"<<endl ;
    cout<<"\n输入任意字符,继续......" ;
    getch() ;
}

void StudentMassage::Find()    //查找函数
{
    char id[20] , group[20] ;
    int x ;
    Student *p = NULL ;
    cout<<"\n\t\t****************************************\n" ;
    cout<<"\t\t\t  1、按学生学号查询"<<endl ;
    cout<<"\t\t\t  2、按学生班级查询"<<endl ;
    cout<<"\n\t\t****************************************\n\n\t\t请选择:" ;
    cin>>x ;
    switch(x)
    {
    case 1:                     //按学号查询        
        cout<<"\n\t\t请输入要查询的学生的学号:" ;
        cin>>id ;
        if(p = FindItem(id))
        {
            cout<<endl<<HEADER1<<HEADER2<<HEADER3 ;
            p->next->show() ;
            cout<<"\n请输入任意字符,继续......" ;
            getch() ;
        }
        else
        {
            cout<<"\t\t没有找到该学号的学生!"<<endl<<endl ;
            cout<<"请输入任意字符,继续......" ;
            getch() ;
        }
        break ;
    case 2:                      //按班级查询
        cout<<"\n\t\t请输入要查询的学生的班级:" ;
        cin>>group;    
        if (!FindId(group))
        {
            cout<<"\n\t\t没有找到该班级的学生!"<<endl<<endl ;
            cout<<"请输入任意字符,继续......" ;
            getch() ;            
        }
        StudentMassage::ShowMenu() ;
        cout<<"\n请输入任意字符,继续......" ;
        getch() ;
        break ;
    }
}

void StudentMassage::ModifyItem()     //修改学生信息(指定学号)
{
    char name[20] ;
    Student *p = NULL ;
    cout<<"\n\t\t请输入要修改的学生的学号:" ;
    cin>>name ;
    if(p = FindItem(name))
    {
        cout<<"\n\t\t已找到该学生,请输入新的信息!"<<endl ;
        p->next->input() ;
        cout<<"\n\t\t修改成功!"<<endl ;
        Display() ;
    }
    else
    {
        cout<<"\n\t\t没有找到!"<<endl ;
        cout<<"\n输入任意字符!继续......." ;
        getch() ;
    }
}

void StudentMassage::RemoveItem()      //删除学生信息
{
    char name[20] ;
    Student *p = NULL , *temp = NULL ;
    cout<<"\n\t\t请输入要删除的学生的学号:" ;
    cin>>name ;
    if(p = FindItem(name))
    {
        temp = p->next ;
        p->next = p->next->next ;
        delete temp ;
        cout<<"\n\t\t删除成功!"<<endl ;
        Display() ;
    }
    else
    {
        cout<<"\t\t没有找到!"<<endl ;
        cout<<"输入任意字符!继续......" ;
        getch() ;
    }
}

int StudentMassage::ListCount()   //返回记录的学生总数
{
    Student *p ;
    int n = 0 ;
    if(!Head)
        return 0 ;
    for(p = Head->next ; p != End ; p = p->next)
        n ++ ;
    num = n;
    return num ;
}

int StudentMassage::Count()         //成绩统计
{
    Student *p ;
    int x ,count = 0 ;
    if(!Head)
    {
        cout<<"\n\t\t没有资料可以统计!"<<endl ;
        return 0 ;
    }
}

void StudentMassage::Swap(Student *p1 , Student *p2)       //交p1,p2学生信息
{
    Student *temp = new Student ;
    strcpy(temp->name , p1->name) ;
    strcpy(temp->id , p1->id) ;
    strcpy(p1->name , p2->name) ;
    strcpy(p1->id , p2->id) ;
    strcpy(p2->name , temp->name) ;
    strcpy(p2->id , temp->id) ;
}

void StudentMassage::save()                    //存入文件(学生成绩.txt)
{
    out.open("学生成绩.txt");
    for(Student *p=Head->next;p!=End;p=p->next)
        out<<p->id<<"\t"<<p->group<<"\t"<<p->name<<"\t"
        <<p->sex<<"\t"<<p->age<<"\t"<<p->xibie<<"\t"
        <<p->score<<"\t"<<p->xuefen<<"\t"<<p->day<<"\t"<<'\n';
    out.close();
    cout<<"\n\t\t学生成绩文件保存成功!"<<endl ;
    cout<<"\n输入任意字符,继续......" ;
    getch() ;
}

int main( )
{
    int x ;
    bool quit = false ;
    cout<<"\n\n\n\n\n\n\n\n" ;
    cout<<"\t\t********************************************"<<endl ;
    cout<<"\t\t         欢迎使用学生信息管理系统!"<<endl ;
    cout<<"\t\t********************************************"<<endl ;
    StudentMassage Grade ;
    Sleep(1000) ;
    while(!quit)
    {
        system("cls") ;
        Grade.ShowMenu() ;
        cin>>x ;
        switch(x)
        {
        case 0:quit = true ; break ;
        case 1:Grade.AddItem() ; break ;
        case 2:Grade.Display() ; break ;
        case 3:Grade.RemoveItem(); break ;
        case 4:Grade.ModifyItem(); break ;
        case 5:Grade.save() ; break ;
        case 6:Grade.Find() ; break ;
        }
    }
    return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nycSerendipity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值