C++结构体案例1
1、案例描述
学校有3个老师,每名老师带5个学生
需求如下:设计学生和老师结构体,其中在老师结构体中有老师姓名和一个学生数组,学生的成员有姓名、考试分数,通过创建数组存放三个老师,通过函数给每个老师以及学生赋值,并且打印出来结果。
2、自己写的垃圾代码
#include<iostream>
#include<string>
using namespace std;
//结构体案例
struct student
{
string name;
int score;
};
struct teacher
{
string name;
student stu[5];
};
void print1(const teacher *teach,int len1,int len2) {
for (int i = 0; i < len1; i++)
{
for (int j = 0; j <len2; j++)
{
cout << "老师名字:" << teach[i].name << "\t学生:" << teach[i].stu[j].name << "\t分数:" << teach[i].stu[j].score << endl;
}
}
}
int main() {
teacher teach[3];
student stu[5];
//第一个老师以及他的学生和分数
teach[0].name = "大王";
teach[0].stu[0].name = "小庄";
teach[0].stu[0].score = 90;
teach[0].stu[1].name = "小虎";
teach[0].stu[1].score = 70;
teach[0].stu[2].name = "小明";
teach[0].stu[2].score = 80;
teach[0].stu[3].name = "小爱";
teach[0].stu[3].score = 90;
teach[0].stu[4].name = "小西";
teach[0].stu[4].score = 100;
//第二个老师以及他的学生和分数
teach[1].name = "小路";
teach[1].stu[0].name = "小二";
teach[1].stu[0].score = 90;
teach[1].stu[1].name = "小三";
teach[1].stu[1].score = 70;
teach[1].stu[2].name = "小四";
teach[1].stu[2].score = 80;
teach[1].stu[3].name = "小五";
teach[1].stu[3].score = 90;
teach[1].stu[4].name = "小东";
teach[1].stu[4].score = 100;
//第三个老师及学生分数
teach[2].name = "小张";
teach[2].stu[0].name = "小庄";
teach[2].stu[0].score = 90;
teach[2].stu[1].name = "小虎";
teach[2].stu[1].score = 70;
teach[2].stu[2].name = "小明";
teach[2].stu[2].score = 80;
teach[2].stu[3].name = "小爱";
teach[2].stu[3].score = 90;
teach[2].stu[4].name = "小西";
teach[2].stu[4].score = 100;
int len1 = sizeof(teach) / sizeof(teach[0]);
int len2 = sizeof(stu) / sizeof(stu[0]);
print1(teach, len1,len2);
system("pause");
return 0;
}
老师名字:大王 学生:小庄 分数:90
老师名字:大王 学生:小虎 分数:70
老师名字:大王 学生:小明 分数:80
老师名字:大王 学生:小爱 分数:90
老师名字:大王 学生:小西 分数:100
老师名字:小路 学生:小二 分数:90
老师名字:小路 学生:小三 分数:70
老师名字:小路 学生:小四 分数:80
老师名字:小路 学生:小五 分数:90
老师名字:小路 学生:小东 分数:100
老师名字:小张 学生:小庄 分数:90
老师名字:小张 学生:小虎 分数:70
老师名字:小张 学生:小明 分数:80
老师名字:小张 学生:小爱 分数:90
老师名字:小张 学生:小西 分数:100
请按任意键继续. . .
代码写的比较垃圾,重复语句较多
3、看完视频后写的代码
#include<iostream>
#include<ctime>
#include<string>
using namespace std;
struct Student
{
string Sname;
int score;
};
struct Teacher
{
string Tname;
struct Student Stu[5];
};
void InfoCin(Teacher Tarray[], int len) {
//输入老师的姓名
string numstring = "ABCDE";
for (int i = 0; i <len; i++)
{
Tarray[i].Tname = "Teacher_";
Tarray[i].Tname += numstring[i];
//输入学生的信息
for (int j = 0; j < 5; j++)
{
Tarray[i].Stu[j].Sname = "Stu_";
Tarray[i].Stu[j].Sname += numstring[j];
int random = rand() % 61 + 40;
Tarray[i].Stu[j].score = random;
}
}
}
void InfoCout(Teacher Tarray[],int len) {
for (int i = 0; i < len; i++)
{
//打印老师
cout << "老师名字: " << Tarray[i].Tname<<endl;
for (int j = 0; j < 5; j++)
{
cout << "\t学生姓名: " << Tarray[i].Stu[j].Sname << "\t考试分数: "
<< Tarray[i].Stu[j].score << endl;
}
}
}
int main() {
srand((unsigned int)time(NULL));
Teacher Tarray[3];
int len = sizeof(Tarray) / sizeof(Tarray[0]);
InfoCin(Tarray,len);
InfoCout(Tarray, len);
system("pause");
return 0;
}
老师名字: Teacher_A
学生姓名: Stu_A 考试分数: 89
学生姓名: Stu_B 考试分数: 50
学生姓名: Stu_C 考试分数: 65
学生姓名: Stu_D 考试分数: 70
学生姓名: Stu_E 考试分数: 44
老师名字: Teacher_B
学生姓名: Stu_A 考试分数: 70
学生姓名: Stu_B 考试分数: 74
学生姓名: Stu_C 考试分数: 77
学生姓名: Stu_D 考试分数: 85
学生姓名: Stu_E 考试分数: 75
老师名字: Teacher_C
学生姓名: Stu_A 考试分数: 98
学生姓名: Stu_B 考试分数: 97
学生姓名: Stu_C 考试分数: 41
学生姓名: Stu_D 考试分数: 57
学生姓名: Stu_E 考试分数: 79
请按任意键继续. . .
重新写后的代码是真的漂亮!
4、案例二
姓名,年龄,性别
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"月英",19,"女"}
对上面四组数据按年龄进行冒泡排序
#include<iostream>
#include<string>
using namespace std;
struct Hero
{
string name;
int age;
string sex;
};
void BubbleSort(Hero heroarr[],int len) {
for (int i = 0; i < len-1; i++)
{
for (int j = 0; j < len-i-1; j++)
{
if (heroarr[j].age>heroarr[j+1].age)
{
struct Hero temp = heroarr[j];
heroarr[j] = heroarr[j + 1];
heroarr[j + 1] = temp;
}
}
}
}
void InfoCin(Hero heroarr[], int len) {
for (int i = 0; i < len; i++)
{
cout << "英雄姓名:" << heroarr[i].name << "\t英雄年龄:" <<
heroarr[i].age << "\t英雄性别:" << heroarr[i].sex << endl;
}
}
int main() {
Hero heroarr[5] = {
{"刘备",23,"男"},
{"关羽",22,"男"},
{"张飞",20,"男"},
{"赵云",21,"男"},
{"月英",19,"女"}
};
int len = sizeof(heroarr) / sizeof(heroarr[0]);
cout << "排序前打印" << endl;
InfoCin(heroarr, len);
cout << "排序后打印" << endl;
//按照年龄冒泡排序
BubbleSort(heroarr, len);
InfoCin(heroarr, len);
system("pause");
return 0;
}
排序前打印
英雄姓名:刘备 英雄年龄:23 英雄性别:男
英雄姓名:关羽 英雄年龄:22 英雄性别:男
英雄姓名:张飞 英雄年龄:20 英雄性别:男
英雄姓名:赵云 英雄年龄:21 英雄性别:男
英雄姓名:月英 英雄年龄:19 英雄性别:女
排序后打印
英雄姓名:月英 英雄年龄:19 英雄性别:女
英雄姓名:张飞 英雄年龄:20 英雄性别:男
英雄姓名:赵云 英雄年龄:21 英雄性别:男
英雄姓名:关羽 英雄年龄:22 英雄性别:男
英雄姓名:刘备 英雄年龄:23 英雄性别:男
请按任意键继续. . .