错误清单2



我发现我在运用 char[] 处理字符串时经常出错,如:

1. 初始化的时候可以用menset(char*, int i, size) ,其中i=0即可。

2. 在对比两个字符串的时候,判断字符串是否相等的时候需要用 strcmp(const char*,const char*) ,而不能直接使用“==”。

#include<iostream>
#include<string>
using namespace std;
//编写简单学生班级管理程序
// 要求:
//1、数据成员:学号,姓名,性别,班级,专业
//2、函数成员:构造函数、析构函数、输入函数,输出(显示)函数
//3、学生人数不少于10人
//4、其他函数:查找、排序等。

class cstudent {
private:
	char name[20];
	char number[20];
	char sex[8];
	char classname[20];
	char major[30];
public:
	cstudent() 
	{
		memset(name, 0, 20); memset(number, 0, 20);
		memset(sex, 0, 8); memset(classname, 0, 20); memset(major, 0,30 );
	}
	cstudent(char n[], char num[], char s[], char cn[], char ma[])
	{
		memset(name, 0, 20); memset(number, 0, 20);
		memset(sex, 0, 8); memset(classname, 0, 20); memset(major, 0, 30);
		
		memcpy(name, n, strlen(n)); memcpy(number, num, strlen(num));
		memcpy(sex, s, strlen(s)); memcpy(classname, cn, strlen(cn)); memcpy(major, ma, strlen(ma));
	}
	cstudent(cstudent &st)
	{
		memset(name, 0, 20); memset(number,0, 20);
		memset(sex, 0,8); memset(classname,0,20); memset(major, 0,30);

		
		memcpy(name, st.name, strlen(st.name)); memcpy(number, st.number, strlen(st.number));
		memcpy(sex, st.sex, strlen(st.sex)); memcpy(classname, st.classname, strlen(st.classname)); memcpy(major, st.major, strlen(st.major));

	}

	~cstudent()
	{
		
	}
	void cpy(cstudent st)
	{
		memset(name, 0, 20); memset(number, 0, 20);
		memset(sex, 0, 8); memset(classname, 0, 20); memset(major, 0, 30);
		memcpy(name, st.name, strlen(st.name)); memcpy(number, st.number, strlen(st.number));
		memcpy(sex, st.sex, strlen(st.sex)); memcpy(classname, st.classname, strlen(st.classname)); memcpy(major, st.major, strlen(st.major));
		
	}
	void in()
	{
		cin >> name >> number >> sex >> classname >> major;
	}
	char* getname()
	{
		return name;
	}
	char* getnum()
	{
		return number;
	}
	char* getsex()
	{
		return sex;
	}
	char* getclasn()
	{
		return classname;
	}
	char* getmajor()
	{
		return major;
	}
	void show()
	{
		cout << "姓名: " << name << endl;
		cout << "学号: " << number << endl;
		cout << "性别: " << sex << endl;
		cout << "班级: " << classname << endl;
		cout << "专业: " << major << endl;
	}
	void shows()
	{
		cout << name << ends << number << ends << sex << ends << classname << ends << major << endl;
	}
};

class cclass {
private:
	int snum;
	cstudent student[20];
public:
	void create(int n)
	{
		snum = n;
		cout << "请按照 姓名  学号   性别   班级   专业 的顺序输入学生信息" << endl;
		for (int i = 0; i < snum; i++)
		{
			student[i].in();
		}

	}
	cclass(int num = 0, cstudent stu[] = NULL)
	{
		snum = num;
		for (int i = 0; i < num; i++)
		{
			student[i].cpy(stu[i]);
		}
	}
	~cclass()
	{
		//delete[] student;
	}
	void add(int n, cstudent stu[])
	{
		for (int i = 0; i < n; i++)
		{
			student[i + snum].cpy(stu[i]);
		}
		snum += n;
	}

	void find(char n[], int x)
	{

		for (int i = 0; i < snum; i++)
		{
			if (x == 1)
			{
				if (strcmp(student[i].getname(),n)==0)
					student[i].show();
			}
			if (x == 2)
			{
				if (strcmp(student[i].getnum(), n) == 0)
				{
					student[i].show();
				}	
			}
			if (x == 3)
			{
				if (strcmp(student[i].getsex(),n)==0)
					student[i].show();
			}
			if (x == 4)
			{
				if (strcmp(student[i].getclasn(),n)==0)
					student[i].show();
			}
			if (x == 5)
			{
				if (strcmp(student[i].getmajor(), n)==0)
					student[i].show();
			}
		}

	}
	void arrange(int x)
	{
		for (int i = 0; i < snum; i++)
		{
			for (int j = i; j < snum; j++)
			{
				if (x == 1)
				{
					const char* s1 = student[i].getname(), *s2 = student[j].getname();
					if (strcmp(s1, s2) > 0)
					{
						cstudent t(student[i]);
						student[i].cpy(student[j]);
						student[j].cpy(t);
					}
				}
				if (x == 2)
				{
					const char* s1 = student[i].getnum(), *s2 = student[j].getnum();
					if (strcmp(s1, s2) > 0)
					{
						cstudent t(student[i]);
						student[i].cpy(student[j]);
						student[j].cpy(t);
					}
				}
			}
		}
	};
	void show()
	{
		cout << "姓名  学号   性别   班级   专业" << endl;
		for (int i = 0; i < snum; i++)
		{
			student[i].shows();
		}
	}
};
int main()
{
	
	cout << "***************学生班级管理程序****************" << endl;
	cout << "添加学生" << endl;
	int n;
	cout << "请输入添加学生个数" << endl;
	cin >> n;
	cclass cla;
	cla.create(n);
	
	cout << "1.查找学生" << endl;
	cout << "2.排序" << endl;
	cout << "0.退出" << endl;

	

	int x = 0;
	cin >> x;
		if(x==1)
		{
			cout << "1.按照姓名查找" << endl;
			cout << "2.按照学号查找" << endl;
			cout << "3.按照性别查找" << endl;
			cout << "4.按照班级查找" << endl;
			cout << "5.按照专业查找" << endl;
			int a = 0;
			cin >> a;
			char search[20];
			cout << "请输入关键字" << endl;
			cin >> search;
			cla.find(search, a);
		}
		if(x==2)
		{
			cout << "1.按姓名排序" << endl;
			cout << "2.按学号排序" << endl;
			int a = 0;
			cin >> a;
			cla.arrange(a);
			cla.show();
		}
	
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值