2017大二上学期数据结构课程设计

姓名:葛惠文

学校:烟台大学

班级:计166-2

指导老师:贺利坚

课程设计题目:学生信息管理系统

代码实现:

.h文件:

#ifndef LIST_H
#define LIST_H
#include 
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

.cpp文件:

#include "List.h"
#include 
#include 
#include 
#include

using namespace std;
/**************************************************************************
功能描述:本函数是给顺序表进行初始化赋值,主要是给顺序表的长度
           Length赋初值为0
输入参数:Listtype类型的指针变量L
输出参数:无
返回值:无
其他说明:无
***************************************************************************/
void ChuShiHua(Listtype*L)                    //顺序表的初始化函数
{
    L->Length=0;                              //给Length赋初值为0
}
/**************************************************************************
功能描述:本函数可以的到顺序表的长度,即返回Length的值
输入参数:Listtype类型的指针变量L
输出参数:无
返回值:Length值
其他说明:无
***************************************************************************/
int GetLength(Listtype*L)                     //计算顺序表的长度
{
    return(L->Length);                        //返回顺序表长度Length
}
/**************************************************************************
功能描述:本函数是按照位置查找已经录入的学生信息,若输入的i值不
           在有效内,输出错误信息;输入正确则返回要查询的地址
输入参数:Listtype类型的指针变量L,int类型的变量i
输出参数:错误信息
返回值:0或者查询的地址
其他说明:无
***************************************************************************/
Data *DataGet(Listtype*L,int i)                        //按照位置查找节点
{
    if(i<1||i>MAXLEN)                                  //判断输入的i是否在有效范围内
    {
        cout<<"节点选取错误!"<listData[i]);                       //返回要查找的listData的地址
    }
}
/**************************************************************************
功能描述:本函数是按照名字查询录入的学生信息,输入要查找的姓名,
           若找到与之匹配的,便返回其地址
输入参数:Listtype类型的指针变量L,string类型的变量name
输出参数:无
返回值:0或者要查找的地址
其他说明:无
***************************************************************************/
Data *NameGet(Listtype *L,string name)                 //按照姓名查找节点
{
    int n;
    for(n=1;n<=L->Length;n++)
    {
        if(L->listData[n].name==name)
        {
            return &(L->listData[n]);                   //返回要查找的listData的地址
            break;
        }
        else
            return 0;
    }
}
/**************************************************************************
功能描述:本函数是按照学号查询录入的学生信息,输入要查找的学号,
           若找到与之匹配的,便返回其地址
输入参数:Listtype类型的指针变量L,string类型的变量num
输出参数:无
返回值:0或者要查找的地址
其他说明:无
***************************************************************************/
Data *NumGet(Listtype *L,string num)                 //按照学号查找节点
{
    int n;
    for(n=1;n<=L->Length;n++)
    {
        if(L->listData[n].num==num)
        {
            return &(L->listData[n]);                     //返回要查找的listData的地址
            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<<"顺序表已满,不能插入节点!"<MAXLEN)                                         //判断输入的i是否在有效范围内
    {
        cout<<"插入序号错误!"<Length;j>=i;j--)
            L->listData[j+1]=L->listData[j];                   //用前面的数据覆盖后面的数据,为插入的数据挪出空间
        L->listData[i]=data;
        L->Length++;                                           //插入数据,Length加一
        return 0;
    }
}
/**************************************************************************
功能描述:本函数是删除指定位置的学生的信息,输入的i不在有效范围输出
           错误信息,输入正确则删除成功。
输入参数:Listtype类型的指针变量L,int类型的变量i
输出参数:错误信息
返回值:0或者1
其他说明:无
***************************************************************************/
int Deletedata(Listtype*L,int i)                                //删除节点
{
    int j;
    if(i<1||i>MAXLEN)
    {
        cout<<"输入删除节点错误!"<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++)                            //用i和k记录位置和个数
        {
            for(j=i;jlistData[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<<"学号:"<listData[i].num<listData[i].name<listData[i].age<Length>MAXLEN)
    {
        cout<<"顺序表已满,不能再添加节点!"<listData[++L->Length]=data;                          //++L->Length先増一,后作为数据被使用,所以存储是从顺序表的第二个开始
        return 1;
    }
}
/**************************************************************************
功能描述:本函数能把所有的录入信息保存进入文件中,如果打开失败输出
           错误信息,打开成功按照指定格式保存入文件
输入参数:Listtype类型的指针变量L
输出参数:无
返回值:无
其他说明:无
***************************************************************************/
void Savefile(Listtype *L,Data data)                            //保存文件
{
    ofstream out("学生.txt",ios::out);
    if(!out)                                                    //判断打开文件是否成功
    {
        cout<<"打开失败!"<Length;i++)
    {
        out<<"以下为所有学生信息:"<listData[i].name<<" "
        <<"学生学号:"<listData[i].num<<" "
        <<"学生年龄:"<listData[i].age<<" "
        <


主函数main.cpp:

#include "list.h"
#include 
#include 
#include 
#include

using namespace std;

void xinjian(Listtype &L,Data data)                                     //调用
{
    cout<<"新建学生信息输入"<>data.num;
        cout<<"请输入学生姓名:";
        cin>>data.name;
        cout<<"请输入学生年龄(若年龄输入为0即可结束输入):";
        cin>>data.age;
        cout<>i;
    cout<<"请输入学生学号:";
    cin>>data.num;
    cout<<"请输入学生姓名:";
    cin>>data.name;
    cout<<"请输入学生年龄:";
    cin>>data.age;
    Insertdata(&L,i,data);                                                          //调用插入函数
    cout<<"插入成功!"<>i;
    cout<>j;
    cout<>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<>i;
    xian=DataGet(&L,i);                                             //调用DataGet函数,返回要查找的Listdata的地址
    cout<<"姓名:"<name<num<age<>choice3;
    switch(choice3)
    {
        case 1:Icha(L,i,xian);break;                               //进入按位置查询的函数
        case 0:cout<>choice1;
        switch(choice1)
        {
            case 1:xiugai(L,i,j,data);break;    //进入学生信息修改菜单界面
            case 2:chaxun(L,i,data,xian);break;    //进入学生信息查询菜单界面
            case 0:cout<<"\n您已安全退出系统."<


你可能感兴趣的:(2017大二上学期数据结构课程设计)