实验二(顺序表)

数据结构》实验二:

                线性表综合实验

一.实验目的

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

 

二.实验时间

   准备时间为第3周到第4周,具体集中实验时间为第4周第2次课。2个学时。

 

三..实验内容

1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。

要求如下:

1)用顺序表来实现。

2)用单链表来实现。

3)用双链表实现。

4)用静态链表实现。

5)用间接寻址实现。

分开写程序,可以一个方法分别写一博客文章上交作业。

 

2.实现两个集合的相等判定、并、交和差运算。要求:

  1)自定义数据结构

  2)自先存储结构,并设计算法。在VC中实现。

以上三题,第1题必须完成。第2和第3题可以作为选做题。

四.实验报告

1.在博客中先写上实习目的和内容,画出主要操作运算算法图,然后分别上传程序代码。插入调试关键结果截图。

 

2.单独写一个博文,比较总结线性表的几种主要存储结果。

五.实验思路

本项目以顺序表为原型修改而成的学生成绩管理系统。创建三个文件,分别为头文件StuSeqList.h、源文件StuSeqList.cpp和StuSeqList_Main.cpp。头文件包含一个学生信息的结构体和一个StuSeqList类,包含学生成绩录入、删除、修改、查询等功能操作函数的声明以及存放学生信息的数组,和顺序表的长度。两个源文件分别包含头文件函数的定义、功能选择操作菜单语句。

六.源代码

#ifndef StuSeqList_H  // 避免重复包含StuSeqList.h头文件
#define StuSeqList_H
#include<string> 
using namespace std;

const int MaxSize = 100;//最多录入条学生信息

struct StuInfo
{
	string Name;
	string No;
	float Chinese;
	float English;
	float Math;
	
};
class StuSeqList
{
public:
	StuSeqList(){length=0;} //无参构造函数,创建一个空表
    ~StuSeqList(){}  //析构函数
	void Insert();  //录入一条或多条学生信息
	void Delete();  //删除学号为No的学生信息记录,返回学生学号
	void Get(); //按学号查找学生信息,获取学生信息记录
	void Modify();//修改学号为No的学生记录
	int Length(){return length;};//获取学生记录数量
	void PrintList();  //按序号依次输出学生信息记录
private:
	StuInfo Stu[MaxSize];  //存放学生信息记录的数组
	int length;
};

#endif
#include <iostream>
#include<iomanip>
#include "StuSeqList.h"
using namespace std;

void StuSeqList::Insert()
{  
	system("cls");
	int a;//要录入学生的数量
	
if(length>=MaxSize)throw"学生成绩表已满";
cout<<"请输入要录入的学生记录数量:"<<endl;
cin>>a;
if(a+length>=MaxSize)throw"添加人数超出限制";

for(int j=0;j<a;j++)
{
	cout<<"请输入第"<<j+1<<"个学生的学号:"<<endl;
	cin>>Stu[j].No;
	cout<<"请输入第"<<j+1<<"个学生的姓名:"<<endl;
	cin>>Stu[j].Name;
	cout<<"请输入第"<<j+1<<"个学生的语文成绩:"<<endl;
	cin>>Stu[j].Chinese;
	cout<<"请输入第"<<j+1<<"个学生的英语成绩:"<<endl;
	cin>>Stu[j].English;
	cout<<"请输入第"<<j+1<<"个学生的数学成绩:"<<endl;
	cin>>Stu[j].Math;
	length++;
}
  cout<<"学生成绩录入成功"<<endl;
}  
void StuSeqList::Delete()
{
	
	 int m;
	 string b;
 if(length==0)throw"下溢";
cout<<"请输入要删除记录学生的学号:"<<endl;
cin>>b;
for(int i=0;i<length;i++)
	if (Stu[i].No==b) m=i;
     for(int j=m;j<length-1;j++)
	    Stu[j]=Stu[j+1];//此处j已经是元素所在的数组下标
    length--;
    cout<<"该学生记录已删除"<<endl;
}
void StuSeqList::Get()
{
	string c;
cout<<"请输入要查询记录学生的学号:"<<endl;
cin>>c;
for(int i=0;i<length;i++)
{
	if (Stu[i].No==c) 
	{
		cout<<"学号"<<setw(20)<<"姓名"<<setw(15)<<"语文成绩"<<setw(15)<<"英语成绩"<<setw(15)<<"数学成绩"<<endl;
			cout<<Stu[i].No<<setw(14)<<Stu[i].Name<<setw(7)<<Stu[i].Chinese<<setw(15)<<Stu[i].English<<setw(17)<<Stu[i].Math<<endl;
		
   }//下标为i的元素其序号为i+1
	else cout<<"查找失败"<<endl;//退出循环,说明查找失败
}
}
void StuSeqList::PrintList()
{
	cout<<"学号"<<setw(20)<<"姓名"<<setw(15)<<"语文成绩"<<setw(15)<<"英语成绩"<<setw(15)<<"数学成绩"<<endl;
for(int i=0;i<length;i++)
	{
cout<<Stu[i].No<<setw(14)<<Stu[i].Name<<setw(7)<<Stu[i].Chinese<<setw(15)<<Stu[i].English<<setw(17)<<Stu[i].Math<<endl;
}
}
void StuSeqList::Modify()
{
	int n;
	string d;
cout<<"请输入要修改同学的学号"<<endl;
cin>>d;
for(int i=0;i<length;i++)
		if (Stu[i].No==d) n=i;
cout<<"请输入该学生的学号:"<<endl;
cin>>Stu[n].No;
cout<<"请输入该学生的姓名:"<<endl;
cin>>Stu[n].Name;
cout<<"请输入该学生的语文成绩:"<<endl;
cin>>Stu[n].Chinese;
cout<<"请输入该学生的英语成绩:"<<endl;
cin>>Stu[n].English;
cout<<"请输入该学生的数学成绩:"<<endl;
cin>>Stu[n].Math;
}

#include<iostream>
#include"StuSeqList.h"
using namespace std;


void main()
{
	StuSeqList M;
	
int x;
	do
{

	
cout<<"★☆★☆★☆★欢迎进入学生成绩管理系统☆★☆★☆★☆★☆★☆★"<<endl;
cout<<"请输入你要选择的功能序号:"<<endl;
cout<<"☆★☆★☆1.录入学生成绩信息……2.删除学生成绩信息☆★☆★☆★ "<<endl;
cout<<"☆★☆★☆3.查询学生成绩信息……4.显示学生成绩信息☆★☆★☆★ "<<endl;
cout<<"☆★☆★☆5.修改学生成绩信息……6.统计学生成绩信息☆★☆★☆★ "<<endl;
cout<<"☆★☆★☆7.退出                                  ☆★☆★☆★ "<<endl;
cin>>x;


switch(x){
case 1:
	 try
	 {
		 M.Insert();
	 }
	 catch(string *s)
	 {
		 cout<<s<<endl;
	 }
	break;
case 2:
	
	 try
	 {
		M.Delete();
	 }
	 catch(string *s)
	 {
		 cout<<s<<endl;
	 }
	break;
case 3:
	M.Get();
	break;
case 4:
	M.PrintList();
	break;
case 5:
	M.Modify();
	break;
case 6:
	cout<<"该成绩表已录入"<<M.Length()<<"个学生记录"<<endl;
	break;
	

}
}while(x!=7);
}
七、运行结果截图





八.实验心得

首先,这个实验的框架不难想象。由于本人编写代码技术拙劣,实验花了较长的时间。刚开始,结构体里的学号和姓名两个数据我是用char型数组表示,无奈问题多多。其一,在修改、删除等功能进行匹配的时候有障碍;其二,在输出的时候只能输出第一个字符,为了方便只试了数值和字母,不确定能否输出文字。然后想到用string型表示,问题解决。此外,在文件导入也出现了问题。因为在StuSeqList_Main.cpp里导入StuSeqList.cpp文件导致整个程序无法进行。此项目只适用于一次性操作,只能一次录入数据,第二次录入就会出错。在一次录入数据前提下,其他功能可以多次实现不出错。各位大神如有更好的建议,请在评论区回复,吾必不胜感激!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值