数据结构 学生信息管理系统

来源:互联网 发布:淘宝省钱机器人有诈吗 编辑:程序博客网 时间:2024/05/21 18:37

吴玉然

学生信息管理系统

main.cpp

#include "list.h"#include <iostream>#include <stdio.h>#include <cstdlib>#include<fstream>using namespace std;void xinjian(Listtype &L,Data data){    cout<<"新建学生信息输入"<<endl;    do    {                                                                   //循环添加结点数据        cout<<"Please enter the student id:";        cin>>data.num;        cout<<"Please enter the student name:";        cin>>data.name;        cout<<"Please enter the student age ( if the age entry is 0, you can end the entry ):";        cin>>data.age;        cout<<endl;        if(data.age)        {                                                             //若年龄不为0            if(!Adddata(&L,data))            {                cout<<"Failure!"<<endl;                break;            }        }        else            break;    }while(1);    cout<<"长度为:"<<GetLength(&L);    cout<<"添加成功!"<<endl;    system("pause");    return;}void Add(Listtype &L,int i,Data data){    cout<<"插入学生信息输入"<<endl;    cout<<"请输入要插入位置:"<<endl;    cin>>i;    cout<<"请输入学生学号:";    cin>>data.num;    cout<<"请输入学生姓名:";    cin>>data.name;    cout<<"请输入学生年龄:";    cin>>data.age;    cout<<"插入前长度为:"<<GetLength(&L);    Insertdata(&L,i,data);    cout<<"插入后长度为:"<<GetLength(&L);    cout<<"插入成功!"<<endl;    system("pause");    return;}void Delete(Listtype &L,int i,int j,Data data){    cout<<"删除从第i位置起的j个学生数据:"<<endl;    cout<<"请输入i的值:";    cin>>i;    cout<<endl;    cout<<"请输入j的值:";    cin>>j;    cout<<endl;    IjDelete(&L,i,j);    cout<<"删除成功!"<<endl;    system("pause");    return;}void Show(Listtype &L){    cout<<"以下为所有学生的信息:"<<endl;    Show(&L);    cout<<endl;    system("pause");    return;}void Save(Listtype &L,Data data)                                                                         //保存文件函数{    cout<<"保存已输入数据中......"<<endl;    Savefile(&L,data);    system("pause");    return;}void xiugai(Listtype &L,int i,int j,Data data)                                                                  //学生信息修改函数{    system("cls");        //清屏    int choice2;    do    {        cout<<"\n********************************************************************************\n"<<endl;        cout<<"                                   学生信息修改"<<endl;        cout<<"\n"<<endl;        cout<<"                            1.新建            2.增添"<<endl;        cout<<"                            3.删除            4.显示"<<endl;        cout<<"                            5.保存            0.返回"<<endl;        cout<<"\n"<<endl;        cout<<"\n"<<endl;        cout<<"\n********************************************************************************\n"<<endl;        cout<<"\n"<<endl;        cout<<"\n                        请输入您的选择(1 or 2 or 3 or 4 or 0):";        cin>>choice2;        switch(choice2)        {            case 1:xinjian(L,data);break;        //进入新建学生信息操作的函数            case 2:Add(L,i,data);break;           //进入增添学生信息操作的函数            case 3:Delete(L,i,j,data);break;     //进入删除学生信息操作的函数            case 4:Show(L);break;       //进入显示学生信息操作的函数            case 5:Save(L,data);break;          //进入保存文件的函数            case 0:cout<<endl<<"返回上一菜单!"<<endl;break;     //返回上一菜单,即初始菜单界面            default:cout<<"无此选项!请重试!"<<endl;break;    //若输入异常,显示异常操作,提示错误!        }    }while(choice2!=0);}void Icha(Listtype &L,int i,Data *&xian)                            //按位置查找函数{    cout<<"长度为:"<<GetLength(&L);    cout<<"请输入要查找的学生的位置:";    cin>>i;    xian=DataGet(&L,i);    cout<<"姓名:"<<xian->name<<endl;    cout<<"学号:"<<xian->num<<endl;    cout<<"年龄:"<<xian->age<<endl;    system("pause");    return;}void chaxun(Listtype &L,int i,Data data,Data *&xian)                                                                    //学生信息查询函数{    system("cls");    cout<<"\n********************************************************************************\n"<<endl;    cout<<"                                    学生信息查询"<<endl;    cout<<endl;    cout<<"                    1、按位置查询                    0、返回"<<endl;    cout<<endl;    cout<<"\n********************************************************************************\n"<<endl;    int choice3=0;    cout<<"                          请输入您的选择(1 or 2 or 3 or 0):";    cin>>choice3;    switch(choice3)    {        case 1:Icha(L,i,xian);break;                               //进入按位置查询的函数        case 0:cout<<endl<<"返回上一菜单!"<<endl;break;      //返回上一菜单,即初始菜单界面        default:cout<<"无此选项!请重试!"<<endl;break;        //若输入异常,显示异常操作,提示错误!    }}int main()                                                                //主函数{    int i=0;    int j=0;    Listtype L;    Data data;    Data *xian;    ChuShiHua(&L);    system("cls");   //清屏    int choice1;    do              //进入初始菜单界面    {        cout<<"\n*********************************************************************************"<<endl;        cout<<"\n****************************                *************************************"<<endl;        cout<<"                              *学生信息查询系统 \n"<<endl;        cout<<"\n"<<endl;        cout<<"\n"<<endl;         cout<<"\n**************************  1、学生信息管理  ***********************************"<<endl;         cout<<"\n**************************  2、学生信息查询  ***********************************"<<endl;        cout<<"\n***************************  0、退出系统      ***********************************"<<endl;        cout<<"\n"<<endl;        cout<<"\n*********************************************************************************"<<endl;        cout<<"\n                        请输入您的选择(1 or 2 or 0):";        cin>>choice1;        switch(choice1)        {            case 1:xiugai(L,i,j,data);break;                                    //进入学生信息修改菜单界面            case 2:chaxun(L,i,data,xian);break;                                 //进入学生信息查询菜单界面            case 0:cout<<"\n您已安全退出系统."<<endl;break;                     //退出系统,即结束此函数            default:cout<<"\n没有此选项.请重选."<<endl;break;                   //若输入异常,显示异常操作,提示错误!        }    }while(choice1!=0);    cout<<"\n------------------------------欢迎您下次再使用!---------------------------------"<<endl; return 0;    return 0;}

List.cpp

#include "List.h"#include <iostream>#include <cstdlib>#include <string>#include<fstream>using namespace std;/**************************************************************************功能描述:本函数是给顺序表进行初始化赋值,主要是给顺序表的长度           Length赋初值为0输入参数:Listtype类型的指针变量L输出参数:无返回值:无其他说明:无***************************************************************************/void ChuShiHua(Listtype*L)                    //顺序表的初始化函数{    L->Length=0;}/**************************************************************************功能描述:本函数可以的到顺序表的长度,即返回Length的值输入参数:Listtype类型的指针变量L输出参数:无返回值:Length值其他说明:无***************************************************************************/int GetLength(Listtype*L)                   //计算顺序表的长度{    return(L->Length);}/**************************************************************************功能描述:本函数是按照位置查找已经录入的学生信息,若输入的i值不           在有效内,输出错误信息;输入正确则返回要查询的地址输入参数:Listtype类型的指针变量L,int类型的变量i输出参数:错误信息返回值:0或者查询的地址其他说明:无***************************************************************************/Data *DataGet(Listtype*L,int i)                        //按照位置查找学生位置{    if(i<1||i>MAXLEN)    {        cout<<"位置输入错误!"<<endl;        return 0;    }    else    {        return &(L->listData[i]);    }}/**************************************************************************功能描述:本函数是按照名字查询录入的学生信息,输入要查找的姓名,           若找到与之匹配的,便返回其地址输入参数:Listtype类型的指针变量L,string类型的变量name输出参数:无返回值:0或者要查找的地址其他说明:无***************************************************************************/Data *NameGet(Listtype *L,string name)                 //按照姓名查找学生位置{    int n;    for(n=1;n<=L->Length;n++)    {        cout<<n;        if(L->listData[n].name==name)        {            return &(L->listData[n]);            break;        }        else            return 0;    }}/**************************************************************************功能描述:本函数是按照学号查询录入的学生信息,输入要查找的学号,           若找到与之匹配的,便返回其地址输入参数:Listtype类型的指针变量L,string类型的变量num输出参数:无返回值:0或者要查找的地址其他说明:无***************************************************************************/Data *NumGet(Listtype *L,string num)                 //按照学号查找学生位置{    int n;    for(n=1;n<=L->Length;n++)    {        cout<<n;        if(L->listData[n].num==num)        {            return &(L->listData[n]);            break;        }        else            return 0;    }}/**************************************************************************功能描述:本函数是在已经录入的学生信息里插入一条新的学生信息,判断           若顺序表满则不能继续存储,输入的i不在有效范围输出错误信息,           输入正确则插入成功输入参数:Listtype类型的指针变量L,int类型的变量i,Data类型的变量data输出参数:错误信息返回值:0或者1其他说明:无***************************************************************************/int Insertdata(Listtype*L,int i,Data data)                    //插入学生信息{    int j;    if(L->Length>=MAXLEN)    {        cout<<"储存已满,不能添加!"<<endl;        return 1;    }    if(i<1||i>MAXLEN)    {        cout<<"插入序号错误!"<<endl;        return 1;    }    else    {        for(j=L->Length;j>=i;j--)            L->listData[j+1]=L->listData[j];        L->listData[i]=data;        L->Length++;        return 0;    }}/**************************************************************************功能描述:本函数是删除指定位置的学生的信息,输入的i不在有效范围输出           错误信息,输入正确则删除成功。输入参数:Listtype类型的指针变量L,int类型的变量i输出参数:错误信息返回值:0或者1其他说明:无***************************************************************************/int Deletedata(Listtype*L,int i)                     //删除学生信息{    int j;    if(i<1||i>MAXLEN)    {        cout<<"输入删除节点错误!"<<endl;        return 1;    }    else    {        for(j=i;j<L->Length;j++)            L->listData[j]=L->listData[j+1];        L->Length--;        return 0;    }}/**************************************************************************功能描述:本函数是删除指定位置的学生的信息,输入的i,k不在有效范围输出           错误信息,输入正确则删除成功。输入参数:Listtype类型的指针变量L,int类型的变量i,int类型的变量k输出参数:无返回值:0或者1其他说明:无***************************************************************************/int IjDelete(Listtype*L,int i,int k)                             //删除顺序表中从第i个学生起的j个学生{    if(i<1||k<0||i+k>L->Length+1)        return 1;    else    {        int j;        int count;        for(count=1;count<=k;count++)        {            for(j=i;j<i+k;j++)            {                L->listData[j]=L->listData[j+1];            }            L->Length--;        }        return 0;    }}/**************************************************************************功能描述:本函数显示出所有的录入的学生的信息,按照制定格式输出到           电脑屏幕上输入参数:Listtype类型的指针变量L输出参数:无返回值:无其他说明:无***************************************************************************/void Show(Listtype*L)                             //显示所有的学生信息{    int i;    for(i=1;i<=L->Length;i++)    {        cout<<"学号:"<<L->listData[i].num;    cout<<"姓名:"<<L->listData[i].name;    cout<<"年龄:"<<L->listData[i].age;        cout<<endl;    }}/**************************************************************************功能描述:本函数能够连续添加学生信息,判断若线性表到达最大值,           输出提示信息输入参数:Listtype类型的指针变量L,Data类型的变量data输出参数:提示信息返回值:0或者1其他说明:无***************************************************************************/int Adddata(Listtype*L,Data data)                      //新建学生信息{    if(L->Length>MAXLEN)    {        cout<<"存储已满,不能再添加学生!"<<endl;        return 0;    }    else    {        L->listData[++L->Length]=data;        return 1;    }}/**************************************************************************功能描述:本函数能把所有的录入信息保存进入文件中,如果打开失败输出           错误信息,打开成功按照指定格式保存入文件输入参数:Listtype类型的指针变量L输出参数:无返回值:无其他说明:无***************************************************************************/void Savefile(Listtype *L,Data data)                     //保存文件{    ofstream out("学生.txt",ios::out);    if(!out)    {        cout<<"打开失败!"<<endl;        return;    }    cout<<"打开成功!"<<endl;    for(int i=1;i<=L->Length;i++)    {        out<<"以下为所有学生信息:"<<endl;        out<<"学生姓名:"<<L->listData[i].name<<" "<<"学生学号:"<<L->listData[i].num<<" "<<"学生年龄:"<<L->listData[i].age<<" "        <<endl;    }    cout<<"写入成功!"<<endl;    out.close();}
List.h

#ifndef LIST_H#define LIST_H#include <string>using namespace std;#define MAXLEN 100                      //定义顺序表的最大长度struct Data{                                       //定义顺序表结点类型    string num;                         //节点关键字    string name;    int age;};struct Listtype{                                       //定义顺序表结构    Data listData[MAXLEN+1];            //结构体中嵌套结构体    int Length;};void ChuShiHua(Listtype*L);                            //顺序表的初始化函数int GetLength(Listtype*L);                             //计算顺序表的长度Data *DataGet(Listtype*L,int i);                       //按照位置查找节点Data *NameGet(Listtype*L,string name);                 //按照姓名查找节点Data *NumGet(Listtype*L,string num);                   //按照学号查找节点int Insertdata(Listtype*L,int i,Data data);            //插入节点int Deletedata(Listtype*L,int i);                      //删除节点int IjDelete(Listtype*L,int i,int k);                  //删除顺序表中从第i个学生起的k个学生void Show(Listtype*L);                                 //显示所有的节点int Adddata(Listtype*L,Data data);                     //追加节点void Savefile(Listtype *L,Data data);                  //保存文件#endif // LIST_H



原创粉丝点击