姓名:葛惠文
学校:烟台大学
班级:计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
#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您已安全退出系统."<