一个练手的小链表学生成绩管理系统

// ConsoleApplication5.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#include<iostream>
#include<string.h>
using namespace std;
class Stu {
public:
	char *m_name;
	int m_ID;
	float m_score;
	int m_rank;
	~Stu() {
		delete[] m_name;
	}
	Stu()
	{
		m_name = new char[5];
		strcpy_s(m_name, 5, "null");
		m_ID = 0;
		m_score = 0;
		m_rank = 0;

	}
	Stu(const char *name, int ID, float score, int rank) :m_ID(ID), m_score(score), m_rank(rank)//此处需考虑name是否为空指针,如果为空指针,可抛出异常,我就不写了 太麻烦 
	{
		m_name = new char[strlen(name) + 1];
		strcpy_s(m_name, strlen(name) + 1, name);
	}
	Stu(const Stu& stu)
	{
		m_name = new char[strlen(stu.m_name) + 1];
		strcpy_s(m_name, strlen(stu.m_name) + 1, stu.m_name);
		m_ID = stu.m_ID;
		m_score = stu.m_score;
		m_rank = stu.m_rank;
	}
	Stu& operator=(const Stu& stu)
	{
		if (this == &stu)
		{
			return *this;
		}
		m_name = new char[strlen(stu.m_name) + 1];
		strcpy_s(m_name, strlen(stu.m_name) + 1, stu.m_name);
		m_ID = stu.m_ID;
		m_score = stu.m_score;
		m_rank = stu.m_rank;
		return *this;
	}
};
struct node {
	int data;
	Stu *stu;
	node *next;
	node(const char *name,int ID,float score,int rank) {
		stu = new Stu(name, ID, score, rank);
		next = NULL;
	}
};
class list {
private:
	node * m_list;
	int count;
public:
	list() {
		m_list = NULL;
		count = 0;
	}
	void creatList(int n);
	void output();
	void sort();
	void add();
	bool del(int m);
};
void list::creatList(int n)
{
	const char *s = "null";
	node *temp = new node(s,0,0,0);
	node *temp1 = temp;
	for (int i = 0;i<n;i++)
	{
		cout << "请输入第" << i + 1 << "个学生的信息\n";
		char name[100];
		cout << "请输入姓名\n";
		cin >> name;
		int ID;
		cout << "请输入学号\n";
		cin >> ID;
		float score;
		cout << "请输入分数\n";
		cin >> score;
		cout << "请输入排名\n";
		int rank;
		cin >> rank;
		node *m = new node(name,ID,score,rank);
		temp->next = m;
		temp = temp->next;
	}
	temp->next = NULL;
	m_list = temp1->next;
	delete temp1;
	count = n;

}
void list::output()
{
	node *temp = m_list;
	cout << "**********************************************************************\n";
	cout << "姓名" << "\t" << "学号" << "\t" << "成绩" << "\t" << "排名" << endl;
	while (temp != NULL)
	{
		cout << temp->stu->m_name << "\t"<<temp->stu->m_ID<<"\t"<<temp->stu->m_score<<"\t"<<temp->stu->m_rank<<endl;
		temp = temp->next;
	}
	cout << endl;
	cout << "**********************************************************************\n";
}
void list::sort()
{
	node *s1 = m_list;
	while (s1->next != NULL)
	{
		node *s2 = s1->next;
		while (s2 != NULL)
		{
			if (s2->stu->m_score>s1->stu->m_score)
			{
				Stu *temp = s2->stu;
				s2->stu = s1->stu;
				s1->stu = temp;
			}
			s2 = s2->next;
		}
		s1 = s1->next;
	}
	node *s2 = m_list;
	int i = 1;
	while (s2 != NULL)
	{
		s2->stu->m_rank = i;
		s2 = s2->next;
		i++;
	}
	cout << "已排名" << endl;
}
void list::add()
{
	node *s = m_list;
	while (s->next != NULL)
	{
		s = s->next;
	}
	char name[100];
	cout << "请输入姓名\n";
	cin >> name;
	int ID;
	cout << "请输入学号\n";
	cin >> ID;
	float score;
	cout << "请输入分数\n";
	cin >> score;
	cout << "请输入排名\n";
	int rank;
	cin >> rank;
	node *temp = new node(name, ID, score, rank);
	s->next = temp;
	count++;
}
bool list::del(int ID)
{
	if (m_list->stu->m_ID == ID)
	{
		node *temp = m_list->next;
		delete  m_list;
		m_list = temp;
		cout << "删除" << m_list->stu->m_ID << endl;
		count--;
		return true;
	}
	else {
		node *temp1 = m_list;
		while (temp1->next != NULL)
		{
			if (temp1->next->stu->m_ID == ID)
			{
				node *temp2 = temp1->next->next;
				delete temp1->next;
				temp1->next = temp2;
			}
		}
		count--;
		return true;
	}
	cout << "无此学号" << endl;
	return false;
}
int main()
{
	list l;
	l.creatList(4);
	l.output();
	int m = 9999;
	while (m != 0)
	{
		cout << "******************************" << endl;
		cout << "1.显示列表" << endl;
		cout << "2.排名" << endl;
		cout << "3.删除" << endl;
		cout << "4.插入" << endl;
		cout << "******************************" << endl;
		cout << "请选择功能\n";
		cin >> m;
		switch (m)
		{
		case 1: 
		{
			l.output();
			break;
		}
		case 2:
		{
			l.sort();
			l.output();
			break;
		}
		case 3:
		{
			int num;
			cout << "请输入要删除学生的学号\n";
			cin >> num;
			if (l.del(num))
			{
				cout << "删除成功\n";
			}
			else
			{
				cout << "删除失败\n";
			}
			break;
		}
		case 4:
		{
			l.add();
			cout << "添加成功" << endl;
			l.output();
			break;
		}
		default:
			break;
		}
	}
	return 0;
}

一个练手的小链表学生成绩管理系统
一个练手的小链表学生成绩管理系统
一个练手的小链表学生成绩管理系统
一个练手的小链表学生成绩管理系统