# 学生信息管理系统
## 一、 简介
学生信息管理系统(SIMS:Student information management system)用于学生信息的管理,要求完成的主要的功能包括学生信息分输入,按学生的不同信息排序整理,根据学号修改学生信息,根据学号删除学生信息,查询学生信息,按照学院等分项统计学生人数等工作。要求使用学习过的 C/C++ 程序设计的知识完成学生信息管理系统的设计与实现。
## 二、 运行环境
学生信息管理系统在 Visual Studio code 平台下开发,操作系统:macOS 10.14.6。
硬件环境:
处理器:Intel(R) Core(TM) i5 CPU @ 1.40GHz
内存:8.00GB
系统类型:64 位操作系统
## 三、 实验课题分析
### 3.1 学生信息管理系统的主要功能
学生信息管理系统(SIMS)主要功能为:学生信息分输入,按学生的不同信息排序整理,根据学号修改学生信息,根据学号删除学生信息,查询学生信息,按照学院等分项统计学生人数等工作。详细的系统功能结构为图 1 所示。
![](https://www.writebug.com/myres/static/uploads/2021/10/26/a8f4a5fb46466253cde706236aeca436.writebug)
图 1 系统结构图
系统各模块的功能具体描述为:
1、输入功能
选择输入学生信息功能,首先选择输入学生人数,在相继输入学生的名字,性别,学号,学院,系,班级,寝室,籍贯,联系电话。
2、排序功能
将文件里的学生信息读入链表中,然后按照学号,学院,宿舍从小到达排序。
3、修改功能
输入学生的学号,可以根据学生的学号来修改其名字,性别,学号,学院,系,班级,寝室,籍贯,联系电话信息。
4、删除功能
输入学生学号,删除此学号学生的信息。
5、查询功能
输入学号、姓名,学院,系,班级,宿舍等分项,查找学生的信息。
输入学院,系,班级,籍贯统计此项下学生的人数。
### 3.2 系统分析及设计
系统涉及对象有两个类:学生类和链表类,学生类包含 9 个私有数据分别为名字,性别,学号,学院,系,班级,寝室,籍贯,联系电话,以及包含一个 next 的指针。以及一些成员函数。
链表类有一个头节点和尾节点,每个节点存放一个学生信息,以及一个指向学生的指针,链表的主要结构如下,通过链表将整个文件中的学生信息串联起来,在执行各个功能时能遍历链表查找信息。
![](https://www.writebug.com/myres/static/uploads/2021/10/26/bcfee6c72be2cd68c9a0df614d08fe7b.writebug)
图 2 链表的结构图
用文本文件进行数据的保存,需要保存的数据主要包括实现所有的文本操作相关的功能。
### 3.3 系统的实现
(1)类的编写
系统工程名为:SIMS。包含了 student 类(所有学生类),list 类(链表类)list 类中包含着两个 student 的指针,first 和 last 分别指向文件中的第一个学生和最后一个学生,在学生类中包含着一个 next 指针,用来指向下一个学生的地址,通过这种方法把学生的信息串联起来,实现相应的功能只需要遍历链表即可。
具体类结构声明如下:
```c#
class student{
private:
string name;//姓名
string sex;//性别
int num;//学号
string xueyuan;//学院
string xi;//系
int cla;//班级
int dor;//寝室
string jiguan;//籍贯
int phone;//联系电话
public:
student *next;
student(string a1,string b1,int c1,string d1,string e1,int f1,int g1,string h1,int i1);
student(student &a);//复制构造函数
~student(); //析构函数
string getname()const;
void setname(string &a);//姓名的得到和修改
string getsex()const;
void setsex(string &a);//性别的得到和修改
int getnum()const;
void setnum(int &a);//学号的得到和修改
string getxueyuan()const;
void setxueyuan(string &a);//学院的得到和修改
string getxi()const;
void setxi(string &a);//系的得到和修改
int getcla()const;
void setcla(int &a);//班级的得到和修改
int getdor()const;
void setdor(int &a);//寝室的得到和修改
string getjiguan()const;
void setjiguan(string &a);//籍贯的得到和修改
int getphone()const;
void setphone(int &a);//联系电话的得到和修改
void display();//显示学生信息
void displaytofile1();
void displaytofile2();//将学生信息同步到文件中
};
# endif
```
(2)链表的使用
系统实现采用文件的输入输出流对文本数据进行读取与写入,但是由于学生信息是一个数据的集合,于是对数据的存储组织使用了单向链表。
因为学生信息管理系统在输入,排序、修改、删除、查询的时候都需要处理大量的数据,所以使用链表十分必要。将链表把所有学生串联起来,具体的结构声明如下:
```c#
class list{
student *first,*last;
int listsize;
public:
list():first(0),last(0),listsize(0){}
void add(student &a);//将一个学生类加入链表
void sortbynum();//根据学号排序
void sortbyxueyuan();//根据学院排序
void sortbydor();//根据寝室排序
void changebynum1(int num,int choose,int change);//根据学号修改信息int型
void changebynum2(int num,int choose,string change);//根据学号修改信息string型
void deletebynum(int num);//根据学号删除信息
void findbynum1(int num);//根据学号查询学生信息
void findbynum2(int num,int k);
void findbyxueyuan(string xueyuan);//根据学院查询学生信息
void findbyxueyuan2(string xueyuan,int k);
void findbyname(string xingming);根据姓名查询学生信息
void findbyxi(string xi);//根据系查询学生信息
void findbybanji(int banji);根据班级查询学生信息
void findbysushe(int sushe);//根据宿舍查询学生信息
void findbysushe2(int sushe,int k);
void statisticbyxueyuan(string xueyuan1);//统计学院人数
void statisticbyxi(string xi1);//统计系人数
void statisticbybanji(int cla1);//统计班级人数
void statisticbyjiguan(string jiguan1);//统计籍贯人数
void listdisplay();//链表打印
void listtofile();//链表打印到文件
};
```
在运用时,令当前学生的 next 结点指向新的学生结点,即结点的指针 next 保存新的学生结点的地址(如下图 3 所示),以此类推,所有学生信息就通过链表的形式串联起来了。
![](https://www.writebug.com/myres/static/uploads/2021/10/26/df60a0b9a87cb99d3255b20822cc67d0.writebug)
```
图3 学生链表的建立
```
学生信息管理系统的信息的管理就具体表现为链表的操作。学生信息的查找、修改、添加和删除与链表的查找、修改、添加、删除对应。
学生信息的输入:
在学生信息的输入,首先会出现输入几个学生,然后输入各个学生的信息见图 4:
![](https://www.writebug.com/myres/static/uploads/2021/10/26/e76255007757d158207512617055b288.writebug)
```
图4 学生信息输入界面
```
```c#
cin>>a>>b>>c>>d>>e>>f>>g>>h>>i;
student stu(a,b,c,d,e,f,g,h,i);
m.add(stu);
```
以上代码将新输入的学生加入到链表的结尾
```c
ofstream outfile;
outfile.open("学生信息.txt",ios::app);
outfile<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<" "<<f<<" "<<g<<" "<<h<<" "<<i<<endl;
outfile.close();
```
通过以上代码把新输入的学生加入到文本文件里的末尾。
排序功能
排序共分成三部分为按学号,学院,宿舍排序界面为
![](https://www.writebug.com/myres/static/uploads/2021/10/26/539341f91d15cf74b4b69bebe8555fcf.writebug)
通过 m.sortbynum();实现功能,具体代码为:
```c
void list::sortbynum()//排序
{
int a[1000];
student *stu=first;
for(int i=0;i<listsize;i++)
{
a[i]=stu->getnum();
stu=stu->next;
}
sort(a,a+listsize);
for(int i=0;i<listsize;i++)
{
findbynum2(a[i],i);
}
}
```
首先定义一个数组来装学生的学号,运用库函数 sort 进行从小到大排序,然后在遍历链�
计算机毕设论文
- 粉丝: 1w+
- 资源: 394
最新资源
- 基于Simulink的考虑局部遮阴的光伏PSO-MPPT控制模型.rar
- 基于Simulink的最大功率点追踪MPPT功能的单相单级脉宽调制(PWM)光伏逆变器,并且支持并网运行.rar
- 基于TCN-GRU的自行车租赁数量预测研究Matlab代码.rar
- 基于TCN-GRU-Attention的自行车租赁数量预测研究Matlab代码.rar
- 基于WoodandBerry1和非耦合控制WoodandBerry2来实现控制木材和浆果蒸馏柱控制Simulink仿真.rar
- 基于变分多谐波对偶模式追踪从噪声信号中提取重复瞬态分量的方法附Matlab代码.rar
- 基于Python的智能门禁打卡系统设计与开发-含详细代码及解释
- 数电课件,数字电路与逻辑
- A Neural Probabilistic Language Model.pdf
- 基于Java的学生信息管理系统实现
- OpenCV人脸检测和识别
- 管理工具PKIManager-1.1.3.6-全算法版本-信创
- ACM程序设计经典题目与解决方案(C语言实现)
- 详细的Visual Studio安装教程及注意事项
- 手机侧面轮廓尺寸检测机3D图纸和工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- GitHub教程:账号注册、项目创建与协同开发详解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈