深度学吃 2021-06-23 23:05 采纳率: 50%
浏览 167
已采纳

学生成绩管理系统,要求用C++

题目:学生成绩管理系统

一、基本要求

1)能进行数据的添加、删除、修改、查询、排序;

2)完全使用类实现。

3) 重载输入“>>”操作符,使得可以通过cin直接读入类的对象值。

4) 编写main函数,测试系统的各种功能。二、系统基本类系统基本类4个:Score类,subject类,Student类,Class类。存储学生的个人信息,考试科目,成绩,班级信息。三、功能拓展文件操作:

1)初始数据从文件导入,能够实现文件的显示;

2)数据保存至文件中;

3)对文件记录进行增、删、改、查;

4)多个文件组成一个文件。派生:为Student类派生研究生类GStudent,为研究生填加课题类Project类。扩展功能中可包含书上的知识点内容,如文件流、STL标准模板库虚函数、派生、函数重载、运算符重载、静态数据成员和成员函数等。

  • 写回答

1条回答 默认 最新

  • 关注

    6参考下https://blog.csdn.net/yanxiaolx/article/details/53393437

    代码如下:{如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮}。

    #define  _CRT_SECURE_NO_WARNINGS
     
    #include<iostream>
    using namespace std;
    #include<string.h>
    #include<fstream>
     
    class student
    {
    private:
    	student* next;
    public:
    	char stu_num[15];                  //学号
    	char stu_name[30];                //姓名
    	float stu_score;                      //成绩
     
    	void afterInsert(student *p);//在该节点后插入一个节点
    	void afterDelete();//在该节点后删除一个节点
    	
    	student *getNext()//获得下一个节点的指针
    	{ 
    		return next; 
    	}
     
    	/***********查询学生信息************/
    	void getMage();
     
    	/******学生信息修改******/
    	void changeMage(int n, char *ptr);
    	void changegrade(float p);
     
    	/******构造*****/
    	student(char *num, char *name, float score);
    	student();
    };
     
    void student::changegrade(float p)
    {
    	stu_score = p;
    }
     
    student::student()           //构造
    {
    	strcpy(stu_num, "\0");
    	strcpy(stu_name, "\0");
    	stu_score = 0;
    	next = '\0';
    }
     
    student::student(char *num, char *name, float score)
    {
    	strcpy(stu_num, num);
    	strcpy(stu_name, name);
    	stu_score = score;
    	next = '\0';
    }
     
    void student::afterInsert(student *p)//插入节点
    {
    	p->next = next;
    	next = p;
    }
     
    void student::afterDelete()        //删除节点
    {
    	student *p = next;
    	next = p->next;
    	delete p;
    }
     
    void student::getMage()             //获得信息
    {
    	cout << "学号:" << stu_num << "      姓名:" << stu_name;
    	cout << "      c++成绩:" << stu_score << endl;
    }
     
    void student::changeMage(int n, char *ptr)
    {
    	switch (n)
    	{
    	case 1: strcpy(stu_num, ptr); 
    		break;
    	case 2: strcpy(stu_name, ptr);
    	}
    }
     
    //建立链表函数
    void  construct_list(student *tail)
    {
    	student *p = new student;
    	char very[20];
    	float achieve;
    	cout << "请输入学号:" << endl;
    	cin >> very;
    	p->changeMage(1, very);
    	cout << "请输入姓名:" << endl;
    	cin >> very;
    	p->changeMage(2, very);
    	cout << "请输入c++成绩:" << endl;
    	cin >> achieve;
    	p->changegrade(achieve);
    	system("cls");
    	cout << "信息输入完毕" << endl;
     
    	for (; tail->getNext() != '\0';)
    	{
    		tail = tail->getNext();
    	}
     
    	tail->afterInsert(p);
    }
     
    /*********查询信息*********/
    student *findmege(student *head)
    {
    loop:
    	cout << "1--按姓名查询           2--按学号查询              q--返回上一级菜单" << endl;
    	char p[5], ptr[20];
    	student *mid = head;
    	cin >> p;
     
    	if (p[0] != '1'&&p[0] != '2'&&p[0] != 'q' || strlen(p)>1)
    	{
    		system("cls");
    		cout << "对不起,你的输入有误,请重新输入!" << endl;
    		goto loop;
    	}
     
    	switch (p[0])
    	{
    	case '1':
    	{
    		system("cls");
    		cout << "请输入要查找的姓名:" << endl;
    		cin >> ptr;
     
    		for (; strcmp(ptr, mid->stu_name) != 0; mid = mid->getNext())
    		{
    			if (mid->getNext() == '\0')
    			{
    				cout << "对不起,你要查找的人不存在,请确认你的输入是否正确!" << endl;
    				goto loop;
    			}
    		}
    		return mid;
    	}
    	case '2':
    	{
    		system("cls");
    		cout << "请输入您要查找的学号:" << endl;
    		cin >> ptr;
    		for (; strcmp(ptr, mid->stu_num) != 0; mid = mid->getNext())
    		{
    			if (mid->getNext() == '\0')
    			{
    				cout << "对不起,您要查找的内容不存在,请确认您的输入是否正确!" << endl;
    				goto loop;
    			}
    		}
    		return mid;
    	}
    	case 'q': 
    	{
    		return '\0';
    	}
    	default:
    	{
    		system("cls");
    		cout << "对不起,您的输入有误,请重新输入!" << endl;
    		goto loop;
    	}
    	}
    }
     
    /******************删除链表 节点***********************/
    void delete_list(student *head)
    {
    	student *p = '\0';
    	char selet[4];
    	system("cls");
    	cout << "在删除前,系统会根据您的提示找到您要删除的学生信息!" << endl;
    	p = findmege(head);
    	if (p != '\0')
    	{
    		cout << "确认要删除吗(yes/任意键返回)" << endl;
    		cin >> selet;
     
    		if (strcmp(selet, "yes") == 0)
    		{
    			for (; head->getNext() != p; head = head->getNext());
    			head->afterDelete();
    			system("cls");
    			cout << "该信息删除成功!" << endl;
    		}
    	}
    }
     
    /*******************修改节点信息********************/
    void change_info(student *head)
    {
    	system("cls");
    	cout << "在您修改前,系统会根据您提供的信息找的您要修改的信息:" << endl;
    	student *p = '\0';
     
    	float achieve;
    	p = findmege(head);
    	if (p != '\0')
    	{
    		cout << "请输入c++成绩:" << endl;
    		cin >> achieve;
    		p->changegrade(achieve);
    		system("cls");
    		cout << "修改成功!" << endl;
    	}
     
    }
     
    /**************输出学生成绩信息**************/
    void output(student *head)
    {
    	system("cls");
    	cout << "1-查看指定学生信息;2-查看所有学生信息;3-分段输出学生信息" << endl;
    	char ch;
    	int n = 0;
    	head = head->getNext();
    	cin >> ch;
    	switch (ch)
    	{
    	case '1': 
    		head = findmege(head);
    		if (head == '\0')
    		{
    			break;
    		}
    		head->getMage();
    		break;
    	case '2': 
    	while (head)
    	{
    		head->getMage();
    		head = head->getNext();
    	}
    	break;
    	case '3': 
    		cout << "a-60分以下;b-60~70分之间;c-70~80分之间;d-80~90分之间;e-90~100分之间:" << endl;
    		cin >> ch;
    		switch (ch)
    		{
    		case 'a':
    		while (head)
    		{
    			if (head->stu_score <= 60)
    			{
    				head->getMage();
    				n++;
    			}
    			head = head->getNext();
    		}
    		 break;
    		case 'b': 
    		while (head)
    		{
    			if (head->stu_score>60 && head->stu_score <= 70) 
    			{ 
    				head->getMage();
    				n++; 
    			}
    			head = head->getNext();
    		}
    		break;
    		case 'c': 
    		while (head)
    		{
    			if (head->stu_score>70 && head->stu_score <= 80)
    			{ 
    				head->getMage(); 
    				n++; 
    			}
    			head = head->getNext();
    		}
    		break;
    		case 'd': 
    		while (head)
    		{
    			if (head->stu_score>80 && head->stu_score <= 90)
    			{
    				head->getMage();
    				n++;
    			}
    			head = head->getNext();
    		}
    		break;
    		case 'e': 
    		while (head)
    		{
    			if (head->stu_score>90 && head->stu_score <= 100)
    			{ 
    				head->getMage();
    				n++;
    			}
    			head = head->getNext();
    		}
    		}
    		if (n == 0)
    		{
    			cout << "该分段内没有您要找的学生信息" << endl;
    		}
    	}
    }
     
    /*****************主菜单************************/
    void mainmenu(student *head)
    {
    	char selet[10];
    	int n = 1;
    	ofstream outfile;
    	ifstream infile;
    	student *p, *ptr;
    	student *test = head, *mid;
    	cout << "*************************欢迎进入学生信息管理系统*************************" << endl;
    	do {
    		cout << "**************************************************************************" << endl;
    		cout << "1.插入信息;   2.删除信息;  3.修改信息; 4.查看信息; 5.保存  " << endl;
    		cout << "按'q'键退出      " << endl;
    		cout << "**************************************************************************" << endl;
    		cin >> selet;
    		if (((selet[0]<'1' || selet[0]>'6') && selet[0] != 'q') || strlen(selet)>1)
    		{
    			system("cls");
    			cout << "您的输入有误,请重新输入!" << endl;
    			break;
    		}
    		switch (selet[0])
    		{
     
    		case '1':
    			construct_list(head);
    			break; 
    		case '2': 
    			delete_list(head); 
    			break;
    		case '3': 
    			change_info(head);
    			break;
    		case '4': 
    			output(head);
    			break;
    		case '5':  
    			outfile.open("students.txt", ios::out | ios::app);
    			for (p = head->getNext(); p != '\0'; p = p->getNext())
    			{
    				outfile << p->stu_name << ' ';
    				outfile << p->stu_num << ' ';
    				outfile << p->stu_score << ' ';
    				outfile << endl;
    			}
    			outfile.close();
    			system("cls");
    			cout << "保存成功!" << endl;
    			break;
    		case 'q': 
    			break;
    		}
    	} while (selet[0] != 'q');
    }
     
    void main()
    {
    	student head;
    	mainmenu(&head);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题