运行程序显示如下菜单:
按菜单提示输入相应数字完成规定的操作并显示输出处理结果
.
源程序代码及实验结果记录:
源代码:
#include<iostream>
#include<windows.h>
#include<string.h>
using namespace std;
#define MAXSIZE 30
#define OVERFLOW -1
#define ERROR 0
#define OK 1
typedef struct //学生信息定义
{
char name[10]; //学生姓名
char num[20]; //学生学号
float score; //学生成绩
}Student;
typedef struct
{
Student *elem; //存储空间的基地址
int length; //学生成绩管理系统当前学生人数
}SqList;
int InitList(SqList &L)
{//创建线性表
L.elem=new Student[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间
if(!L.elem) exit(OVERFLOW); //存储分配失败退出
L.length=0; //空表长度为0
return OK;
}
int ListInsert(SqList &L,int i,Student &e)
{//在顺序表L中第i个位置插入新的元素e,i值的合法范围是1<=i<=L.length+1
if((i<1)||(i>L.length+1)) return ERROR;//i值不合法
if(L.length==MAXSIZE) return ERROR; //当前存储空间已满
for(int j=L.length-1;j>=i-1;i--)
{
L.elem[j+1]=L.elem[j]; //插入位置之后的元素后移
}
L.elem[i-1]=e; //将新元素e放入第i个位置
++L.length; //表长加1
return OK;
}
int ListDelete(SqList &L,int i)
{//在顺序表L中删除第i个元素,i值的合法范围是1<=i<=L.length
if((i<1)||(i>L.length)) return ERROR; //i值不合法
for(int j=i;j<=L.length-1;j++)
{
L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移
}
--L.length; //表长减1
return OK;
}
int ListLength(SqList L)
{//返回顺序表L中数据元素的个数
return L.length;
}
int LocateName(SqList L,Student &e)
{//在顺序表L中按姓名查找
for(int i=0;i<L.length;i++)
{
if(!strcmp(L.elem[i].name,e.name))
{
e=L.elem[i];
return OK; //查找成功
}
}
return ERROR; //查找失败,返回0
}
int LocateNum(SqList L,Student &e)
{//在顺序表L中按学号查找
for(int i=0;i<L.length;i++)
{
if(!strcmp(L.elem[i].num,e.num))
{
e=L.elem[i];
return OK; //查找成功
}
}
return ERROR; //查找失败,返回0
}
int GetElem(SqList L,int i,Student &e)
{//顺序表的取值
if((i<1)||(i>L.length)) return ERROR; //i值不合理
else
{
e=L.elem[i-1]; //取出第i个元素,存放在e中
return OK;
}
}
int SortScore(SqList L)
{//成绩排序
for(int i=0;i<L.length-1;i++)
{
for(int j=0;j<L.length-i-1;j++)
{
if(L.elem[j+1].score>L.elem[j].score)
{
Student temp=L.elem[j+1];
L.elem[j+1]=L.elem[j];
L.elem[j]=temp;
}
}
}
return OK;
}
int main()
{
SqList L;
Student student;
bool flag=true;
do
{
cout<<"\n~~~~~~~~学生成绩管理系统~~~~~~~~\n";
cout<<"\t1---创建线性表\n";
cout<<"\t2---插入新同学信息\n";
cout<<"\t3---删除\n";
cout<<"\t4---总人数\n";
cout<<"\t5---按学号查找\n";
cout<<"\t6---按姓名查找\n";
cout<<"\t7---成绩排序\n";
cout<<"\t8---显示所有学生信息\n";
cout<<"\t9---退出\n";
cout<<"\t请输入所要执行程序前对应序号:";
int index;
cin>>index;
system("cls");
switch(index)
{
case 1:
if(InitList(L)) cout<<"\n创建成功!\n";
break;
case 2:
int insert;
cout<<"请输入您所要插入的位置:";
cin>>insert;
cout<<"请输入您所要插入同学的姓名:";
cin>>student.name;
cout<<"请输入您所要插入同学的学号:";
cin>>student.num;
cout<<"请输入您所要插入同学的成绩:";
cin>>student.score;
if(ListInsert(L,insert,student)) cout<<"\n插入成功!\n";
else cout<<"\n插入失败,请重新输入正确的插入位置!\n";
break;
case 3:
int del;
cout<<"请输入您所要删除的位置:";
cin>>del;
if(ListDelete(L,del)) cout<<"\n删除成功!\n";
else cout<<"\n删除失败,请重新输入正确的删除位置!\n";
break;
case 4:
cout<<"\n总人数为"<<ListLength(L)<<endl;
break;
case 5:
cout<<"请输入您所要查找的学生学号:";
cin>>student.num;
if(LocateNum(L,student))
{
cout<<"\n查找成功!\n";
cout<<"学生姓名:"<<student.name<<endl;
cout<<"学生学号:"<<student.num<<endl;
cout<<"学生分数:"<<student.score<<endl;
}
else cout<<"\n系统中无记录\n";
break;
case 6:
cout<<"请输入您所要查找的学生姓名:";
cin>>student.name;
if(LocateName(L,student))
{
cout<<"\n查找成功!\n";
cout<<"学生姓名:"<<student.name<<endl;
cout<<"学生学号:"<<student.num<<endl;
cout<<"学生分数:"<<student.score<<endl;
}
else cout<<"\n系统中无记录\n";
break;
case 7:
if(SortScore(L)) cout<<"\n成绩排序为:\n";
cout<<"序号\t\t姓名\t\t学号\t\t成绩\n";
for(int i=1;i<=L.length;i++)
{
GetElem(L,i,student);
cout<<i<<'\t'<<'\t'<<student.name<<'\t'<<'\t'<<student.num<<'\t'<<student.score<<endl;
}
break;
case 8:
cout<<"\n所有学生信息\n";
cout<<"序号\t\t"<<"姓名\t\t"<<"学号\t\t"<<"成绩"<<endl;
for(int i=1;i<=L.length;i++)
{
GetElem(L,i,student);
cout<<i<<'\t'<<'\t'<<student.name<<'\t'<<'\t'<<student.num<<'\t'<<student.score<<endl;
}
break;
case 9:
flag=false;
cout<<"\n谢谢使用!\n";
break;
default:cout<<"\n请输入正确的序号!\n";
}
}while(flag);
}
C语言只需要改下头文件和输入输出就可以了