基于C++实现的学生信息管理系统

点击获取(源码+课程设计报告文档+截图)

摘要

学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到学生成绩管理,针对这些要求设计了学生信息管理系统。
随着社会的发展,计算机越来越深入到我们日常的工作学习及生活中、成为我们日常生活不可或缺的辅助工具。随着科学技术的不断提高,计算机科学日渐成熟、其强大的功能已成为人们深刻认识、它已为人们深刻认识。它已进入人类社会的各个领域并发挥着越来越重要的作用。现在由于学校规模进一步扩大,学生人数逐渐上升。在学校的学生信息管理中、虽然已经存在许多学生信息管理系统、但由于学校之间的管理差异很信息的不同。各个学棱的学生信息管理的要求不一致,这样我们需要根据具体学习的具体要求来开发学生信息管理系统以方便学生管理。本系统主要对学生各种信息进行处理。
本系统采用C语言编写。设计从实用性出发,设计开发出一个操作简单且符合实际需要的学生信息管理系统。本文设计出一个可以添加、修改、查询、删除、统计的学生信息管理系统,最后,通过测试分析,力求将学到的只是在学生信息管理系统的得到全面运用、并使系统在实际的操作中能按照设计的要求安全有效的正确运行。
学生信息管理系统是为了提高学校管理效率而设计的。它完全取代了原来一直用人工管理的工作方式,避免了由于管理人员的工作疏忽以及管理质量问题所造成的各种错误、为及时、准确、高效的完成学生信息管理提供了强有力的工具和管理手段。
关 键 词: 学生信息管理系统;C语言;顺序结构;链式结构

目录

1 概述

1.1 课程设计目的

强化训练C语言基本知识的巩固和综合运用;能高效的运用基本数据类型、基本控制结构、数组、指针、函数、结构体和共用体;能高效的进行C语言高级编程、链表、编辑、设置、编译、调试、执行等基本操作;能够结合实际问题来运用C语言进行的综合设计。
通过本次实验,为本学期所学知识有了个很好的总结,提供了一个既动手又动脑,上机实践的机会。通过分析和解决该实验,将书上课本的理论知识和实践实验有机地结合起来,锻炼分析、解决较复杂问题的能力,提高编写综合程序、上机实践能力的综合能力。

1.2 预备知识

C语言的基础预备知识数据类型分为复合数据类型,基本数据类型。
基本数据类型分为整数(整型int,长整型long int,短整型shor int),浮点型(单精度 float,双精度double),字符型(char)。
复合数据类型分为结构体,公用体,枚举:基本数据类型组合在一起。
使用“链表”连接方式,在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为0。

1.3 实训的内容和要求

实训内容编写一个学生信息管理系统,主要用来管理学生基本信息及成绩信息。要求可以显示主菜单、信息的输入、信息的修改、信息的输出、退出数据以及处理查询排序等一系列要求,具体要求为:
1、建立学生信息,每个学生的信息应包括:姓名、性别、学号与3门课程的成绩;
2、数据的输入:输入学生的各项信息;
3、数据的修改:根据输入的序号可以修改学生的信息;
4、数据的处理:对学生信息按照成绩排名、删除学生信息、添加学生信息;
5、数据的查找:通过学号与姓名对信息来进行查找;
6、退出:退出整个学生信息管理系统。

2 需求分析

2.1 系统目标

1、掌握各种数据存储结构与算法思想。
2、掌握各种常用查找,排序,汇总等算法的实现,以及增删改查等。
3、掌握各种学生表的设计,以及学生管理等模块操作。
4、以方便对学校信息数据的录入、修改、删除、查询等一系列功能。

2.2 功能分析

本系统完成的主要功能有:
1、从键盘录入学生个人信息并保存到文件中;
2、从文件中读取学生个人信息;
3、按学号对学生信息进行查找;
4、按姓名对学生信息进行查找;
5、按姓名对学生信息进行修改;
6、按姓名对学生信息进行删除;
7、计算各项成绩的平均成绩以及及格率;

2.3 开发环境

1.运行装有Windows 10操作系统的计算机
2.Visual C++ 6.0旗舰版

3 总体设计

3.1 系统功能模块图

系统功能模块图,如图3.1所示。

基于C++实现的学生信息管理系统_第1张图片

图3.1系统功能模块图

3.2系统总流程图

基于C++实现的学生信息管理系统_第2张图片

图3.2系统总流程图

3.3 功能详细分析

(1)菜单函数功能:通过菜单的建立用户与程序之间的交流,实现各程序功能的运用。
(2)读入学生信息函数功能:对信息进行存储。
(3)保存学生信息函数功能:将进行某些操作后的学生信息保存到指定文件中。
(4)添加学生信息函数功能:添加新的学生信息,并保存至文件中。
(5)显示学生信息函数功能:通过输入序号,将所有保存的学生信息显示出来,方便查找。
(6)查看平均成绩函数功能:将所有学生的各科成绩进行计算,得出每名学生的各科平均成绩。
(7)查看学生成绩函数功能:将所有保存的学生的各科成绩显示出。
(8)删除学生信息函数功能:通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息并不影响其他学生信息。
(9)修改学生信息函数功能:通过输入相应指令来选择要修改的该学号学生的信息内容,从而完成修改信息操作。
(10)清空学生信息函数功能:将学生信息管理系统全部清空。
(11)退出管理系统函数功能:退出信息管理系统,便于下一次的运用。

4 详细设计

4.1 定义主函数

(1)主函数main():先调用Studentmassage类的ShowMenu函数为用户提供选择,用户根据需要输入相应的序号调用Studentmassage类的相应函数。
(2)函数实现代码:

#include
#include
#include
#include
#include
using namespace std;

4.2 读入学生信息

(1)通过Studentmassage类的构造函数创建链表,由Student类的ReadFile()函数重载cin运算符读取文件信息;
(2)函数实现代码:

Studentmassage::Studentmassage()
{  head = new Student;
	head->Next = new Student;
	end = head->Next;
	in.open("sort.txt");
	if (!in)	cout << "这是一个新系统,无学生信息,请先输入。" << endl;
	else
	{
		while (!in.eof())
		{
			end->ReadFile(in);
			if (end->name[0] == '\0')	break;
			end->Next = new Student;
			end = end->Next;
		}
		in.close();
		cout << "\t\t 读取学生信息成功!" << endl;
	}
}

4.3保存学生信息

(1)Studentmassage类的Save()函数找到相应文件,将当前链表中的所有信息都存入文件中;
(2)函数实现代码:


```cpp
void Studentmassage::Save()
{
	out.open("sort.txt");
	for (Student *p = head->Next; p != end; p = p->Next)
	{
		out << p->name << "\t" << p->ID << "\t" << p->CPP << "\t" << p->MATH << "\t" << p->ENGLISH << "\t" << p->sum << p->rank << "\t" << endl;
		out.close();
	}
}

## 4.4添加学生信息

(1)通过Studentmassage类的AddItem()函数在链表结尾添加新的链表,调用Student类的Input()函数进行信息输入;
(2)函数实现代码:

```cpp
void Studentmassage::AddItem()
{
	end->Input();
	end->Next = new Student;
	end = end->Next;
	cout << "添加成功!" << endl;
	system("pause");
	//	cout << "请输入任意字符!继续......";
	//	getchar();
}

4.5显示信息(不含排名)

(1)通过Studentmassage类的Display1()函数调用Student类的Show1()函数显示最初始未经排名的信息;
(2)函数实现代码:

void Studentmassage::Display1()
{
	cout << "姓名: \t\t" << "性别: \t\t" << "学号: \t\t"
		<< "C++: \t" << "数学: \t" << "英语:\t"
		<< " 总成绩: \t" << "\n\n";
	for (Student*p = head->Next; p != end; p = p->Next)
		p->Show1();
	system("pause");
	//	cout << "输入任意字符!继续······";
	//	getchar();
}

4.6显示成绩(含排名)

(1)通过Studentmassage类的Display2()函数先调用同类的Sort()函数进行排序并添加排名信息,再调用Student类的Show2()函数进行信息输出;
(2)函数实现代码:

void Studentmassage::Display2()
{
	Sort();
	cout << "姓名: \t\t" << "性别: \t\t" << "学号: \t\t"
		<< " 总成绩: \t" << "排名: " << "\n\n";
	for (Student*p = head->Next; p != end; p = p->Next)
		p->Show2();
	system("pause");
	//	cout << "输入任意字符!继续······";
}

4.7查看平时成绩与及格率

(1)Studentmassage类的Average()函数中先创建一个Student类的指针p,用来遍历链表,算出各项成绩的总和并统计不及格人数,通过调用ListCount()函数获得链表个数即当前总人数;
(2)函数实现代码:

void Studentmassage::Average()
{
	scpp=0.0,smath=0.0,seng=0.0,ssum=0.0;
	int c=0,m=0,e=0;
	Student *p;
	for (p=head->Next;p->Next !=end;p= p->Next)
	{
		scpp += p->CPP;smath += p->MATH;seng += p->ENGLISH;ssum += p->sum;
		if (p->CPP < 60) c++;
		if (p->MATH < 60) m++;
		if (p->ENGLISH < 60) e++;
	}
	scpp += p->CPP; smath += p->MATH; seng += p->ENGLISH; ssum += p->sum;
	int num = Studentmassage::ListCount();
	double avcpp = scpp / num;
	double avmath = smath / num;
	double aveng = seng / num;
	double avsum = ssum / num;			//总分平均成绩
	double procpp = (num - c) / num;	//c++及格率
	double promath = (num - m) / num;			//数学及格率
	double proeng = (num - e) / num;			//英语及格率
//	cout << scpp << "\t" << smath << "\t" << seng << "\t" << ssum << "\n";
	cout << "\n\t\t*********************************\n";
	cout << "\t\t※ 0.输出各项平均成绩\n";
	cout << "\t\t※ 1.输出c++平均成绩 \n\t\t※ 2.输出数学平均成绩 \n";
	cout << "\t\t※ 3.输出英语平均成绩 \n\t\t※ 4.输出总平均成绩 \n";
	cout << "\t\t※ 5.输出各科及格率";
	cout << "\n\t\t*********************************\n\t\t请输入相应序号进行选择: ";
	int x; cin >> x;
	switch (x)
	{
	case 0: {
		cout << "\t\tc++平均成绩\t" << "数学平均成绩\t" << "英语平均成绩\t" << "总平均成绩\t\n";
		cout << "\t\t" << avcpp << "\t\t" << avmath << "\t\t" << aveng << "\t\t" << avsum << endl; break;
	}
	case 1:cout << "\t\tc++平均成绩 : " << avcpp << endl; break;
	case 2:cout << "\t\t数学平均成绩 : " << avmath << endl; break;
	case 3:cout << "\t\t英语平均成绩 : " << aveng << endl; break;
	case 4:cout << "\t\t总平均成绩 : " << avsum << endl; break;
	case 5: {
		cout << "\t\tc++及格率\t" << "数学及格率\t" << "英语及格率\t" << endl;
		cout << "\t\t" << procpp * 100 << "%" << "\t\t" << promath * 100 << "%"
			<< "\t\t" << proeng * 100 << "%" << "\t\t" << endl; break;
	}
	}
	system("pause");
}

4.8查找学生信息

(1)通过FindItem()和FindID()函数判断是否有相对应名字或学号的学生;
(2)函数实现代码:

void Studentmassage::Find()
{
	char name[10], ID[20];
	int x;
	Student *p = NULL;
	cout << "\n\t\t*********************************\n";
	cout << "\t\t※ 1.按学生的姓名查找 \n\t\t※ 2.按学生学号查找 ";
	cout << "\n\t\t*********************************\n 请选择: ";
	cin >> x;
	switch (x)
	{
	case 1:
	{
		cout << "\t\t 请输入要查找学生姓名:  ";
		cin >> name;
		if (p = FindItem(name))
		{
			p->Next->Show1();
			system("pause");
		}
		else
		{
			cout << "\t\t 没有找到相匹配的学生!  " << "\n\n";
			system("pause");
			//			cout << "请输入任意字符!继续······";
			//			getchar();
		}
	} break;
	case 2:
	{
		cout << "\t\t 请输入要查找的学生的学号: "; cin >> ID;
		if (p = FindID(ID))
		{
			p->Next->Show1();
			system("pause");
			//			cout << " 输入任意字符!继续…… ";
			//			getchar();
		}
		else
		{
			cout << "\t\t 没有找到相匹配的学生! " << '\n' << endl;
			system("pause");
			//			cout << " 输入任意字符!继续…… ";
			//			getchar();
		}
	} break;
	}
}

4.9删除学生信息

(1)Studentmassage类的RemoveItem()函数通过调用FindItem()函数查找是否有相对应的名字,有则删除该段链表并输出“删除成功!”,没有则输出“没有找到!”。
(2)函数实现代码:

void Studentmassage::RemoveItem()
{
	char name[20];
	Student *p = NULL, *temp = NULL;
	cout << "\t\t 请输入要删除学生的姓名 :" << endl; cin >> name;
	if (p = FindItem(name))
	{
		temp = p->Next;
		p->Next = p->Next->Next;
		delete temp;
		cout << "\t\t 删除成功!" << endl;
		system("pause");
		//		cout << "输入任意字符!继续······";
		//		getchar();
	}
	else
	{
		cout << "\t\t 没有找到!" << endl;
		system("pause");
		//		cout << "输入任意字符!继续······";
		//		getchar();
	}
}

4.10修改学生信息

(1)Studentmassage类ModifyItem()函数通过FindItem()函数查找是否有相对应的名字,有则按提示步骤操作,没有则输出“没有找到”;
(2)函数实现代码:

void Studentmassage::ModifyItem()
{
	char name[10];
	Student *p = NULL;
	cout << "\t\t 请输入需要修改人的姓名 :"; cin >> name;
	if (p = FindItem(name))
	{
		cout << "\t\t 已找到该学生信息,请按步骤输入新的信息!" << endl;
		p->Next->Input();
		cout << "修改成功! " << endl;
		system("pause");
		//		cout << "请输入任意字符!继续······";
		//		getchar();
	}
	else
	{
		cout << "\t\t 没有找到!" << endl;
		system("pause");
		//		cout << "请输入任意字符!继续······";
		//		getchar();
	}
}

4.11清空学生信息

(1)调用Studentmassage类的析构函数,将链表从头至尾挨个删除即可;
(2)函数实现代码:

Studentmassage::~Studentmassage()
{
	Save();
	Student *temp;
	//	cout << head->Next->CPP << "\n";
	for (; head->Next != end;)
	{
		temp = head->Next;
		//		cout << temp->CPP << "\t";
		head->Next = head->Next->Next;
		delete temp;
	}
	//	cout << endl << head->CPP;
	delete head, end;
	system("pause");
}

5 程序运行

5.1菜单界面

(1)菜单界面,所有功能界面
(2)实现截图如图5.1
基于C++实现的学生信息管理系统_第3张图片
图5.1

5.2添加信息

(1)添加一位学生信息
(2)实现截图如图5.2
基于C++实现的学生信息管理系统_第4张图片

图5.2

5.3显示成绩

(1)显示所有学生的3门成绩
(2)实现截图如图5.3
基于C++实现的学生信息管理系统_第5张图片

图5.3

5.4查看排名

(1)对所有学生进行成绩排名
(2)实现截图,排名前如图5.4.1
基于C++实现的学生信息管理系统_第6张图片

图5.4.1
排名后如图5.4.2:
基于C++实现的学生信息管理系统_第7张图片

图5.4.2

5.5查看平均成绩

(1)对所有学生的平均成绩进行显示
(2)实现截图如图5.5
基于C++实现的学生信息管理系统_第8张图片

图5.5

5.6查找信息

(1)分别按照姓名、学号对信息进行查找
(2)实现截图
全部信息如图5.6.1
基于C++实现的学生信息管理系统_第9张图片

图5.6.1
按姓名查找如图5.6.2
基于C++实现的学生信息管理系统_第10张图片

图5.6.2
按学号查找如图5.6.3
基于C++实现的学生信息管理系统_第11张图片

图5.6.3

5.7删除信息

(1)对学生信息进行删除
(2)实现截图
找到的情况如图5.7.1
在这里插入图片描述

图5.7.1
未找到的情况如图5.7.2
在这里插入图片描述

图5.7.2

5.8修改信息

(1)对学生信息进行修改
(2)实现截图
未找到的情况如图5.8.1
在这里插入图片描述

图5.8.1
找到的情况如图5.8.2
基于C++实现的学生信息管理系统_第12张图片

图5.8.2

5.9清空信息

(1)对程序中的所有信息进行清除
(2)实现截图如图5.9
在这里插入图片描述

图5.9

心得体会

参考文献

[1] 温海.C语言精彩编程百例.北京:中国水利水电出版社,2004
[2] 姜灵芝.C语言课程设计案例精编.北京:清华大学出版社,2008
[3] 张仁杰 王风茂.C语言程序设计实训教程.北京:中国电力出版社,2006
[4] 李红 徐鹏.C语言教程与试题解析.北京:北京希望电子出版社,2003
[5] 丁汀.C语言程序设计实用教程.北京:机械工业出版社,2007
[6] 李红 王强.C语言程序设计实例教程.北京:机械工业出版社,2010
点击获取(源码+课程设计报告文档+截图)

你可能感兴趣的:(C++,c++,链表,数据结构)