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

吴玉然

学生信息管理系统

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



  • 17
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值