前言

学生信息管理系统——相信我们大家都是比较熟悉的了,作为一个初入计算机专业的学生,这估计是我们在课程设计中都做过的一个小项目。不过你我那时可能一样,因为经验不足和图于玩乐,开发过程中水了不少地方,哈哈一开;近日临近学期末 ,因为一些原因,需要来重新做一下它,鉴于以前的不足,所以本次开发参照着软件工程开发流程走,算是对软件开发流程再一次巩固。

先看一下效果图:

  1. 主界面图
  2. 管理员登录
  3. 学生登录
  4. 成绩查询

项目需求

首先第一个考虑的便是项目需求,对于咱学生来讲,项目可行性就不用研究了,这肯定是可行的,砸门就经拿需求干就是了。废话不多讲,先能得到大致功能需求模块,例如针对本项目经过一番分析可以得到如下需求模块图:

1 考虑学生登录,可以将其细分如下一些需求:

2 管理员登录
对于管理员登录,它管理的东西就比较多了。就其中的课程管理,大致对应着的其实就是增、删、查、改课程


对于教室管理、学生管理、班级管理 需求是类似的
分析一下学生选课管理、学生成绩管理,也不难得到下面的功能需求图:

一个简单E-R图帮助了解需求

系统设计

前面需求阶段都还比较顺风顺水, 到设计阶段就遇到了阻碍。参照前面的E-R图,比较容易得到这么几个类:
Student类 Teacher类 Course类 Admin类 Grade班级类
难点在于类之间的交互
废话不多讲,以学生选课为例,下面是我设计**<1>Student类和Course类实现交互:**

Course类

 #include "common.h"struct Course{ string course_id_;  //课程idstring course_name_;//课程名int times_;         //学时int credit_;        //学分Course(const string& ci="C00", const string& cn="", int times=0, int c=0, int s=0):course_id_( ci),course_name_( cn),times_(times),credit_(c) { }bool operator<(const Course& rhs) const{ if(course_id_ < rhs.course_id_) return true;else return false;}};//管理课程类class ManageCourse{ typedef set<Course>::iterator Ite;private:set<Course>  contain_;  //存储课程set容器public:int addCourse(const string& , const string& , int, int) ;int changeCourse(const string&) ;int eraseCourse(const string&) ;Ite findCourse(const string& c_id) {return contain_.find(Course(c_id));}void showCourse();         //显示系统中所有课程信息};

Student类

class Student{typedef map<Course, int>::iterator Ite;private:string usn_;string name_;string profession_; //专业string email_;string birth_;      //出生日期string sex_;            //性别string password_;ManageCourse* pMC_;       //ManageCourse进行交互,从系统选得课程 map<Course, int> con_score_;//存储课程及其对应分数的map容器public:Student(ManageCourse* pmc, ....): .....{}   //简写了//个人信息操作void showProfile(); //显示学生个人信息int changePWD();//选课管理void manageCourse(const string& admin_id);int addCourse(const string& c_id) ;    //添加课程至con_score_容器int cancleCourse(const string& c_id) ;void showCourseScore() ; //显示学生所有课程与分数    ...};

可以看出Student类中有一个操纵Course的句柄,由它来负责和ManageCourse课程类交互,进而实现从系统选课的操作;再者在Student类中存有一个存放课程和对应分数的map容器,这样利用pMC_句柄在系统找到的课程便可以放入map容器进行管理

<2> Admin类与Course类进行交互
同上,Admin类需要实现对系统的课程进行管理就十分简单了,只需要在类中添加ManageCourse* 类型数据成员,用作操作管理课程的句柄。

 class Admin{private:int admin_id_;string admin_name_;string admin_pass_;ManageCourse* pMC_;  //管理课程句柄public :Admin(ManageCourse* pMC, ...)::...,pMC_(pMC) { }~Admin( ) {  ...}        ManageStudent* getStuHandle( )  { return pMS_;}                  //manage course member function                                  void manageCourse();                                            //handle student choose coursevoid handleChooseCourse( );void addCourseForStu();void cancleCourseForStu();};

不过这里有一个十分值得注意的问题:pMC_属性必须和Student类中pMC_属性指向同一个ManageCourse对象。因为它们需要统一进行交互

也就是说pMC_属性是在构造admin 对象时,外面用参数传进来。

对于教师管理、班级管理、学生管理可以基于同样的思路进行处理。只需要在Admin类中添加相应的句柄。

数据保存

所有数据保存在mysql中。在程序启动时从数据库中加载到维护的数据结构中,所有操作完成后再将数据保存到mysql中。
之所以如此,可以减少程序与mysql交互的次数,提高执行的效率


编码实现

至此,已有大体的思路,可以开始编码实现。代码已上传github,若您感兴趣可以参考https://github.com/tp16b/project/tree/master/manageSys/src

注意事项:

  • 执行环境是Linux,若执行代码请clone整个工程
  • 程序用到mysql保存,执行前请确保安装好mysql
  • c++连接mysql需要用到libmysqlclient-dev库

软件开发的一个案例:学生信息管理系统相关推荐

  1. 如何用Python做一个简易学生信息管理系统

    一.系统简介 实现一个学生信息的管理系统:主要功能有: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 显示学生信息 退出当前系统 二.步骤分析 显示功能界面 用户输入功能序号 对不同序号的功 ...

  2. 学生信息管理系统用php,PHP案例:学生信息管理系统

    -- Database: test -- 表的结构 message CREATE TABLE `message` ( `id` tinyint(1) NOT NULL PRIMARY KEY AUTO ...

  3. java编程编一个小系统_如何编写一个java学生信息管理系统?

    首先说说我的经验吧.做一个信息系统,你得有界面吧,那界面怎么做呢?你得会基础的前端三剑客吧,这样,当你开始做页面后,你会发现,我去,这么麻烦?于是你开始找捷径,你百度后发现,哎,这个vue框架好像不错 ...

  4. py222基于python+django的高校学生信息管理系统

    开发语言:Python 编号:py222基于python+django的高校学生信息管理系统#毕业设计 python框架:django 软件版本:python3.7/python3.8 数据库:mys ...

  5. python制作学生管理系统_Python——面向对象,简易学生信息管理系统

    一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...

  6. C#学生信息管理系统

    项目视频课:https://edu.csdn.net/course/detail/27107 题目:学生信息管理系统 语言和环境 语言:C#,WinForms 环境:Visual Studio 201 ...

  7. JAVAfx +MySql实现学生信息管理系统

    文章目录 目录 一.功能介绍 ER图 系统结构图 登录界面 学生登录 管理员登录 学生信息管理 学生成绩管理 二.局部功能实现 1.View类 登录界面 单选框添加监听事件 注册界面 提示框界面 学生 ...

  8. Java学生信息管理系统——管理员登录模块(简单易上手)

    前言 这一篇是用来记录我编写学生信息管理系统时实现登录操作的过程,这是学生信息管理系统的第一个模块,之后我还会陆续将其它模块分享出来. 其它章节 ------------------------> ...

  9. 用python制作一个学生信息管理软件_python实现简单学生信息管理系统

    python简单的学生信息管理系统-文件版,供大家参考,具体内容如下 功能如下 主函数部分 增加学生信息 修改学生信息 删除学生信息 查询学生 显示所有学生的信息 将数据录入文件 读取文件数据 学习文 ...

最新文章

  1. 收藏!15000个Python开源项目中精选Top30!
  2. oracle10g提权,Oracle 10g提权测试
  3. python编程入门指南怎么样-python编程从入门到实践这本书怎么样
  4. 数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码
  5. python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...
  6. 架构设计 | 分布式体系下,服务分层监控策略
  7. [Leetcode] Populating next right pointer in each node ii 填充每个节点的右指针
  8. 关于redis的pipline和lua脚本
  9. 高动态范围图像是什么
  10. Vue实战(六)通用Table组件
  11. 建议考前多熟记的知识点(1)-(3)《系统集成项目管理工程师软考辅导》
  12. 消息队列kafka知识总结
  13. DPDK性能优化技术汇总
  14. caffe matlab 崩溃,终于搞定caffe了(window官方版win7+VS2013)
  15. oracle 并行之二: parallel dml
  16. tflearn的VocabularyProcessor用法:建立中文词汇表和把文本转为词ID序列
  17. ndarray数组的操作和运算
  18. setTimeout 的黑魔法
  19. Eclipse中导入外部jar包——添加lib
  20. 计算机毕业设计 Java web物流配送管理系统

热门文章

  1. 2019年南方电网和国家电网考纲对比(通信类)
  2. http://www.cnitblog.com/ffan/archive/2007/07/20/30291.html
  3. 防近视产品区分LED防蓝光原理
  4. 数据结构——八大排序
  5. Node.js v17 来了,看看都有哪些新功能?
  6. Linux命令`ll`的结果解析
  7. linux与windows双系统启动引导
  8. c语言在机电中的作用,控制工程在机械电子工程中的应用
  9. 有道云笔记-windows10部分系统无法安装、闪退、崩溃现象处理办法
  10. 战线拉长,抖快搅局,这届双十一有何看头?