引言

学习c++后一直想写个学生管理系统,趁假期花了一天终于肝出了完整代码,让我对c++的理解更深了一层;写代码时真正体会到了内存操作的困难(想学java),但是还是通过几个巧妙的方法解决了内存问题,并在n次debug后终于调试出了完整代码,接下来我来介绍一下整个系统;
整个系统面向的对象是学生,所以就先写了一个学生类,并赋予了基本属性:学号,姓名,班级职责,还有显示个人信息的一个行为,又把学生分为三部分,普通学生班干部班长,当然这三类都具有学生的特性,所以我们可以通过继承学生类来获得相同的属性和行为;
想好了对象就要想一下具体实现的功能,该系统分为七大功能,分别是:

0.退出管理程序
1.增加学生信息
2.显示学生信息
3.删除学生信息
4.修改学生信息
5.查找学生信息
6.清空所有数据

为了实现这些功能,设计了一个管理员类StudentManager,将这些行为封装在一起,然后依次实现就行了;
这时就需要考虑一些细节了,在增加学生信息时,我们该如何增加呢?我在StudentManager这个类中增添了一个属性,一个vector的容器来存放增加的学生,这时就有问题了,学生既然分成了三大类,我们并不知道每次到底增加的是哪一类学生,那么vector到底该定位存放哪种学生类型呢?
这时面向对象三大特性之一的多态的优势就显现了出来,因为普通学生班干部班长这三类已经继承了学生类,所以我们只需要将学生类写为抽象类即可(把显示个人信息函数showinfo写为纯虚函数),这样我们vector容器只需要记录学生类的指针,通过多态的特性就可以实现同时存放普通学生班干部班长这三类的指针了;

构思完成后就可以写代码了,在写的过程中也遇到过很多问题,说几个主要的
1,因为我想要将学生信息每次更新后都可以存放到文件中,所以我不仅仅需要写一个save保存函数,还需要一个文件初始化函数init_std,因为一旦这次的代码运行成功后,学生信息就会存放到文件中,但是下一次运行就会将这次的学生信息覆盖,于是我们只要在程序开始运行时文件存在的情况下调用这个init函数,将文件原本的信息先读取到并存放到vector中,就可以实现对上一次信息的保存;这里都是些空间分配的问题,都是小细节,就不提了(闹心)
2,这个代码中的几个地方我一直避免使用delete释放内存,因为一旦delete就会出现一个warning警告,因为数据存放到了堆区,我猜测是抽象类Student和继承它的子类析构函数的问题,所以我先在Student中加了一个纯虚析构函数,又分别在下面几个类中重写了析构函数,虽然解决了warning,但是代码一走到delete就无法正常运行了;但是在最后还要清空所有数据,这当然包括分配的内存空间,还有什么办法?我突然想到了vector容器有一个swap函数,这个函数功能是交换两个vector容器的内容,但是我们可以用它的特点压缩内存,当然这需要用一个巧妙的方法实现,感兴趣的可以了解一下,我是在clean中使用了该功能

vector<Student*>(*this -> m_StdArray).swap(*this -> m_StdArray);

完成了内存的释放;
3,其他的问题还有很多,但是现在看来都也没有什么大不了的,只要在写代码时能够细心点,一定要可以熟练度的使用指针,在代码中我通过vector来存放增加的学生,这个相当于一个二级指针数组,所以再空间分配和调用时多多少少出现了很多小问题,浪费了我很多时间,尤其是加上this指针后,我很多时候就是蒙圈状态,但是最后还是调试出来了

学生管理系统(C++)相关推荐

  1. 用python设计学生管理系统_python+tkinter实现学生管理系统

    本文实例为大家分享了python+tkinter实现学生管理系统的具体代码,供大家参考,具体内容如下 from tkinter import * from tkinter.messagebox imp ...

  2. python删除字典中性别为男_python初学者,用python3实现基本的学生管理系统代码实例...

    本篇文章主要分享python学生管理系统的使用,文章非常详细地介绍了通过示例代码实现的学生管理系统,该系统对每个人的研究或工作都有一定的参考学习价值,希望你能在其中有所收获. 这个是用python实现 ...

  3. 学生管理系统(C语言版)

    学生管理系统 这个是大一学习C语言的时候做的一个小项目,代码部分基本都是自己一人完成,没用到什么高大上的技术,在图形化方面用了EasyX(一个C++的图形库),其他都是C语言的基础内容. 项目介绍 项 ...

  4. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)

    本文上接用JDBC写一个学生管理系统(添加.删除.修改.查询学生信息) 这次主要是对上一文中的查询方法做一下调整,用创建内部类的方法来实现学生信息的查询. 我们先要定义一个接口IRowMapper: ...

  5. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)

    首先需要用Navicat Premium创建一个student表 用Java连接好MySQL数据库(需要copy一个mysql-connector-java-5.1.44-bin.jar包,该包可在网 ...

  6. python大作业 学生管理系统 以Excel(xls)格式导入文件

    简单的说一下每个板块的作用 这个load函数,是导入进来文件的数据 def load():data=xlrd.open_workbook('data.xls')table=data.sheets()[ ...

  7. JAVA入门到精通-第73讲-学生管理系统5-dao.sqlhelper

    -Model2模式 如果数据模型会很多,怎么办? 处理业务逻辑的:Model层 后台又分为:处理业务逻辑和对数据库的操作DAO-data access object -决定,再抽象一层出来:数据模型: ...

  8. java管理系统用怎么框架做_java 使用servlet做学生管理系统(无框架)

    使用工具: JavaJDK1.8 32位 Tomcat 8.5.33 32位 IDEA MySQL5.6 使用Jar包: c3p0-0.9.1.2.jar commons-dbutils-1.4.ja ...

  9. 基于BootStrap,FortAweSome,Ajax的学生管理系统

    一. 基于BootStrap,FortAweSome,Ajax的学生管理系统代码部分 1.students.html <1>html页面文件 <!DOCTYPE html> & ...

  10. 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...

最新文章

  1. 你的4nm安卓旗舰芯片来了!骁龙8 Gen 1:支持8K HDR,功耗降30%,雷军:小米12首发...
  2. python基础之if、while、for语句
  3. 【技术分享】CSS 实现渐变色背景
  4. LiveVideoStackCon上海2019音视频技术大会 7折早鸟票最后3天
  5. 和各路巨佬の随机挑战3总结
  6. Hadoop-HBASE案例分析-Hadoop学习笔记二
  7. 【项目合作】基于Kinect人体模型重建与三围测量
  8. Asp.net禁用页面缓存的方法总结
  9. 赠书 | 集成学习方法及应用,破解AI实践难题
  10. dwr(Direct Web Remoting)的使用
  11. Oracle 警告:Weblogic 服务器中含有多个可遭远程利用的严重漏洞
  12. 485.最大连续1的个数
  13. mat后缀名_mat 文件 打开软件
  14. 【20届考研终章--落幕】北京邮电大学软件学院--学硕
  15. visio导出图片模糊的解决方案
  16. 使用python批量压缩图片分辨率到指定大小,替换之前的压缩Image.ANTIALIAS
  17. windows7旗舰版下载出现蓝屏代码50怎么办?
  18. IDM下载哔哩哔哩视频MP4格式
  19. 搭档之家|独立面对人生的态度
  20. 2014福布斯中国富豪榜(名单)

热门文章

  1. 我们计划招收300名电力人,免费学习CAD。
  2. 100%由清洁能源供电的数据中心什么样?苹果丹麦维堡数据中心投入使用
  3. 开发商微信选房后不退认筹金_认筹金贸然转定金退不回 购房人认栽?
  4. DL:神经网络算法简介之Affine 层的简介、使用方法、代码实现之详细攻略
  5. DL之Attention:Attention注意力机制的简介、应用领域之详细攻略
  6. NLP之TM:基于gensim库调用20newsgr学习doc-topic分布并保存为train-svm-lda.txt、test-svm-lda.txt
  7. 互联网大厂高频重点面试题
  8. 关于Jdk7与Jdk8对Collections进行分组的区别
  9. message from server: Host 'XXXX' is not allowed to connect to this MySQL server
  10. DataSet导出Excel,比以往的方法导出的Excel外观更加好看