一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验时间
准备时间为第3周到第4周,具体集中实验时间为第4周第2次课。2个学时。
三..实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
要求如下:
1)用顺序表来实现。
2)用单链表来实现。
3)用双链表实现。
4)用静态链表实现。
5)用间接寻址实现。
分开写程序,可以一个方法分别写一博客文章上交作业。
2.实现两个集合的相等判定、并、交和差运算。要求:
1)自定义数据结构
2)自先存储结构,并设计算法。在VC中实现。
以上三题,第1题必须完成。第2和第3题可以作为选做题。
四.实验报告
1.源代码
#include<iostream>
#include<string>
#include<cstdio>
#include<iomanip>
using namespace std;
class Score
{
public:
float cpp; //C++成绩
float ls; //线代成绩
float gl; //电路成绩
float zcj; //总成绩
Score(){}
void set_score(); //录入可用
void show_score(); //查询可用
};
void Score::set_score()
{
cout<<"离散成绩:";
cin>>ls;
cout<<"管理学成绩:";
cin>>gl;
cout<<"c++成绩:";
cin>>cpp;
}
void Score::show_score()
{
cout<<"离散成绩:"<<ls<<endl;
cout<<"管理学成绩:"<<gl<<endl;
cout<<"c++成绩:"<<cpp<<endl;
zcj=ls+gl+cpp;
cout<<"总成绩:"<<zcj<<endl;
}
class Student
{
private:
char idnum[15]; //学生学号
char name[10]; //学生姓名
char zy[15]; //专业
public:
Score cj; //成绩对象为学生类成员
static int i;
Student(){ }
void set_stu();
void show_stu();
int input();
void show();
friend void show(class Student stu[],int n);
friend void search(class Student stu[],int n) ;
friend void change(class Student stu[],int n);
friend void deldata(class Student stu[],int n);
};
void Student::set_stu()
{
cout<<"学生学号:";
cin>>idnum;
cout<<"学生姓名:";
cin>>name;
cout<<"专业名称:";
cin>>zy;
cj.set_score();
}
void Student::show_stu()
{
cout<<"学生学号:"<<idnum<<endl;
cout<<"学生姓名:"<<name<<endl;
cout<<"专业名称:"<<zy<<endl;
cj.show_score();
cout<<endl;
}
int count=0;
Student stu[100];
int input(class Student stu[]) //录入
{
char sel;
int i=0;
do
{
stu[i].set_stu();
i++;
count++;
cout<<"是否要继续录入学生信息(Y/N):";
getchar(); //此处是读走缓冲区的换行符
sel=getchar();
}while(sel=='Y' || sel=='y' );
return i;
}
void show(class Student stu[],int n) //显示
{
int i;
for(i=0;i<n;i++)
{
if(stu[i].idnum==0)
{
break;
}
else
stu[i].show_stu();
}
cout<<"按回车键返回:"<<endl;
getchar();
}
void search(class Student stu[],int count) //查询
{
int i=0;
char u[15];
cout<<"请输入你要查询的学生的学号:";
cin>>u;
while((strcmp(u,stu[i].idnum)!=0)&&(i<count)) i++;
if (i>=count)
{
cout<<"未查询到你所需要的学生信息,请重新输入:";
search(stu,count);
}
else
{
stu[i].show_stu();
}
getchar();
cout<<"按回车键返回"<<endl;
getchar();
}
void change(class Student stu[],int n) //修改
{
int k=-1,i;
char want_chan[15];
cout<<"请输入要修改的同学的学号:";
cin>>want_chan;
for(i=0;i<n;i++)
{
if(strcmp(want_chan,stu[i].idnum)==0)
{k=1;
break;
}
}
if(k<0)
{
cout<<"未查询到你所需要的学生信息,请重新输入:";
change(stu,count);
}
else
{ stu[i].show_stu();
cout<<"请输入正确的学生信息: "<<endl;
stu[i].set_stu();
cout<<"请核对信息: "<<endl;
stu[i].show_stu();
cout<<"修改成功!"<<endl;
getchar();
}
cout<<"按任意键继续!";
getchar();
}
void deldata(class Student stu[],int n) //删除
{
int k=-1,i,j;
char want_del[15];
cout<<"请输入要修改的同学的学号:";
cin>>want_del;
for(i=0;i<n;i++)
{
if(strcmp(want_del,stu[i].idnum)==0)
{k=1;
break;
}
}
if(k<0)
{
cout<<"未查询到你所需要的学生信息,请重新输入:";
change(stu,count);
}
else
{ stu[i].show_stu();
for(j=i;j<n-1;j++)
{
strcpy(stu[i].idnum,stu[i+1].idnum);
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i].zy,stu[i+1].zy);
stu[i].cj.ls=stu[i+1].cj.ls;
stu[i].cj.gl=stu[i+1].cj.gl;
stu[i].cj.cpp=stu[i+1].cj.cpp;
}count--;
cout<<"删除成功!"<<endl;
getchar();
}
}
int main()
{
int select;
while(1)
{
system("cls");
cout<<"\t ******************欢迎使用******************"<<endl;
cout<<"\t **************学生成绩管理系统**************"<<endl;
cout<<"\t *------------------------------------------*"<<endl;
cout<<"\t * 1--录入学生信息 *"<<endl;
cout<<"\t * 2--显示学生信息 *"<<endl;
cout<<"\t * 3--查询学生信息 *"<<endl;
cout<<"\t * 4--修改学生信息 *"<<endl;
cout<<"\t * 5--删除学生信息 *"<<endl;
cout<<"\t * 0--退出 *"<<endl;
cout<<"\t *------------------------------------------*"<<endl;
cout<<"\t 你要输入的编号是(0--6):"<<endl;
cin>>select;
if (select==0) break;
switch(select){
case 1: input(stu);
break;
case 2: show(stu,count);
system("pause");
break;
case 3: search(stu,count) ;
system("pause");
break;
case 4: change(stu,count) ;
system("pause");
break;
case 5: deldata(stu,count);
system("pause");
break;
default:printf("没有此选项,请重新选择!\n");
}
}
return 0;
}
2.测试
1)录入
2)显示
3)查询学号为2的学生信息
4)修改学号为2的学生信息
5)删除学号为6的学生信息
选择2查看是否删除成功
3.心得体会
这一次实验让我对顺序表有一个整体性的运用与理解,让我更好地把代码写完整。在实验期间也出现了很多bug,让我也更好地知道哪里写得不规范、哪里逻辑不行,之后加以改进。