想创建一个本身有数据的学生成绩表,可以进行增删查改操作
下面是修改后的代码
#include<iostream>
#include<string>
#include<iomanip>
#include<windows.h>
using namespace std;
const int MaxSize=25;
typedef struct A{
string Name;
int Num;
string sex;
float EnglishScore;
}StudentList;
StudentList student[MaxSize];
//重载输入运算符以输入struct类型数据
istream & operator >>(istream & in,StudentList & A)
{
cout<<"请输入姓名:";
in>>A.Name;
cout<<"请输入学号:";
in>>A.Num;
cout<<endl;
cout<<"请输入性别:";
in>>A.sex;
cout<<endl;
cout<<"请输入英语成绩:";
cin>>A.EnglishScore;
return in;
}
//重载输出运算符以输出struct类型数据
ostream & operator<<(ostream & out,StudentList & B)
{
out<<B.Name<<B.Num<<B.sex<<B.EnglishScore<<endl;
return out;
}
typedef StudentList EType;
//数据表的定义
typedef struct B{
EType *elem;//内存空间大小
int Last;//表长
}SeqList;
int main()
{
int length;
int Option=0;
SeqList L;
L.Last=0;
cout<<"请输入线性表长度:";
cin>>length;
system("CLS");//执行命令"清屏操作"
//各类函数定义
void InitWriteRecord();
void CreateList(SeqList *L,int length);
void PrintList(SeqList *L,int length);
void SequenceList(SeqList *L,int length);
void DeleteList(SeqList *L,int length);
void InsertList(SeqList *L,int length);
void ChangeList(SeqList *L,int length);
void SearchList(SeqList *L,int length);
InitWriteRecord();
while(1)
{
cout<<"----------1.增加顺序表."<<endl;
cout<<"----------2.输出顺序表元素."<<endl;
cout<<"----------3.顺序表元素排序."<<endl;
cout<<"----------4.向顺序表中插入某个元素."<<endl;
cout<<"----------5.删除顺序表单个元素."<<endl;
cout<<"----------6.修改顺序表单个元素."<<endl;
cout<<"----------7.查询顺序表单个元素."<<endl;
cout<<endl<<"请输入你的选择:";
cin>>Option;
switch(Option)
{
case 1:CreateList(&L,length);break;
case 2:PrintList(&L,length);break;
case 3:SequenceList(&L,length);break;
case 4:InsertList(&L,length);break;
case 5:DeleteList(&L,length);break;
case 6:ChangeList(&L,length);break;
case 7:SearchList(&L,length);break;
default:cout<<"输入错误!";break;
}
cout<<endl;
}
return 0;
}
void InitWriteRecord()
{
string name[10]={"彭亮","王明","李智","刘丹","肖象"};
int num[5]={1,2,3,4,5};
string sex[5]={"男","男","男","女","女"};
float EnglishScore[5]={78,92,66,77,100};
for(int i=0;i<5;i++)
{
student[i].Name=name[i];
student[i].Num=num[i];
student[i].sex=sex[i];
student[i].EnglishScore=EnglishScore[i];
}
}
//建立顺序表(在原始表中添加学生信息)
void CreateList(SeqList *L,int length)
{
int i;
for(i=1;i<=length;i++)
{
cout<<"请输入要增加的第"<<i<<"个学生的信息:";
cin>>L->elem[i+4];
L->Last=length;
if(length>=MaxSize)
{
cout<<endl<<"表满!"<<endl;
}
}
for(i=0;i<length;i++)
{
cout<<L->elem[i]<<" ";
}
}
//输出表
void PrintList(SeqList *L,int length)
{
int i;
cout<<"姓名"<<"---------"<<"学号"<<"---------"<<"性别"<<"---------"<<"英语成绩"<<endl;
for(i=0;i<L->Last;i++)
{
cout<<L->elem[i].Name<<"---------"<<L->elem[i].Num<<"---------"<<L->elem[i].sex<<"---------"<<L->elem[i].EnglishScore<<endl;
}
cout<<endl;
}
//对数据按学号元素排序(冒泡排序法)
void SequenceList(SeqList *L,int length)
{
StudentList Temp;
for(int i=0;i<length-1;i++)
{
for(int j=0;j<length-1;j++)
{
if(L->elem[j].Num>L->elem[j+1].Num)
{
Temp=L->elem[j];
(L->elem[j])=(L->elem[j+1]);
L->elem[j+1]=Temp;
}
}
}
cout<<endl;
}
//删除表的某个元素
void DeleteList(SeqList *L,int length)
{
int DeData=0;
cout<<"要删除第几个元素:";
cin>>DeData;
for(int i=DeData;i<L->Last;i++)
{
L->elem[i-1]=L->elem[i];//向前移一位
}
L->Last--;
for(int k=0;k<L->Last;k++)
{
cout<<L->elem[k]<<" ";
}
cout<<endl;
}
//往表中插入元素
void InsertList(SeqList *L,int length)
{
StudentList InsertData;
int i=0;
int InDataLocation=0;
cout<<"请输入要插入的元素:";
cin>>InDataLocation;
cout<<endl;
if(InDataLocation>L->Last+1)
{
cout<<"插入位置超过表的最大长度,请重新输入!"<<endl<<endl;
InsertList(L,length);
}
else
{
for(int i=L->Last;i>=InDataLocation-1;i--)
L->elem[i+1]=L->elem[i];//往后移一位
}
L->elem[InDataLocation-1]=InsertData;
L->Last++;
cout<<"插入后的表为:";
PrintList(L,length);
cout<<endl;
}
//修改顺序表某个元素
void ChangeList(SeqList *L,int length)
{
int ChangeNum;
cout<<"请输入要修改成绩的学生的学号:";
cin>>ChangeNum;
for(int i=0;i<L->Last;i++)
{
if(L->elem[i].Num==ChangeNum)
{
cout<<"你将英语成绩改成:";
cin>>L->elem[i].EnglishScore;
cout<<endl<<"修改成功!"<<endl;
}
}
}
//查询学生信息
void SearchList(SeqList *L,int length)
{
string SearchName;
cout<<"请输入要查询的学生姓名:";
cin>>SearchName;
for(int i=0;i<L->Last;i++)
{
if(L->elem[i].Name==SearchName)
{
cout<<"姓名"<<"---------"<<"学号"<<"---------"<<"性别"<<"---------"<<"英语成绩"<<endl;
cout<<L->elem[i].Name<<"---------"<<L->elem[i].Num<<"--------"<<L->elem[i].sex<<"---------"<<L->elem[i].EnglishScore<<endl;
}
}
}
现在的报错:
第一 你截图没显示出代码行数
第二 你截图这么多代码,而不是源码,是想考验大家代码眼力吗?
有关这个报错,我觉得应该是你结构体内部有string类型的name,但是你对string类型的操作是不对的,比如你strcy我觉得有点问题
可能没找对,但是你至少让我知道哪一行出错,或者直接贴出代码调试一下。。。
void InitWriteRecord()
{
string name[10] = { "彭亮","王明","李智","刘丹","肖象" };
int num[5] = { 1,2,3,4,5 };
string sex[5] = { "男","男","男","女","女" }; //字符串要用双引号。汉字并不是单字符。
float EnglishScore[5] = { 78,92,66,77,100 };
for (int i = 0; i < 5; i++)
{
student[i].Name = name[i]; //c++ string 有重写=,里面就是复制的,直接使用即可。下面一样。还有就是,感觉char数组就可以了,string有点小题大做,而且性别根本没有必要用汉字,用0和1就能表示了。只是输出的时候加个判断而已,不过你个人喜好啰,问题不大。
student[i].Num = num[i];
student[i].sex = sex[i];
student[i].EnglishScore = EnglishScore[i];
}
}
//还有就是 你下面还有错的。