C++结构体案例记录

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    英雄性别:男
请按任意键继续. . .

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章