实验二 顺序表

一.实验目的

     巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。

 

二.实验时间

   准备时间为第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,让我也更好地知道哪里写得不规范、哪里逻辑不行,之后加以改进。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值