软件开发的一个案例:学生信息管理系统
前言
学生信息管理系统——相信我们大家都是比较熟悉的了,作为一个初入计算机专业的学生,这估计是我们在课程设计中都做过的一个小项目。不过你我那时可能一样,因为经验不足和图于玩乐,开发过程中水了不少地方,哈哈一开;近日临近学期末 ,因为一些原因,需要来重新做一下它,鉴于以前的不足,所以本次开发参照着软件工程开发流程走,算是对软件开发流程再一次巩固。
先看一下效果图:
- 主界面图
- 管理员登录
- 学生登录
- 成绩查询
项目需求
首先第一个考虑的便是项目需求,对于咱学生来讲,项目可行性就不用研究了,这肯定是可行的,砸门就经拿需求干就是了。废话不多讲,先能得到大致功能需求模块,例如针对本项目经过一番分析可以得到如下需求模块图:
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库
软件开发的一个案例:学生信息管理系统相关推荐
- 如何用Python做一个简易学生信息管理系统
一.系统简介 实现一个学生信息的管理系统:主要功能有: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 显示学生信息 退出当前系统 二.步骤分析 显示功能界面 用户输入功能序号 对不同序号的功 ...
- 学生信息管理系统用php,PHP案例:学生信息管理系统
-- Database: test -- 表的结构 message CREATE TABLE `message` ( `id` tinyint(1) NOT NULL PRIMARY KEY AUTO ...
- java编程编一个小系统_如何编写一个java学生信息管理系统?
首先说说我的经验吧.做一个信息系统,你得有界面吧,那界面怎么做呢?你得会基础的前端三剑客吧,这样,当你开始做页面后,你会发现,我去,这么麻烦?于是你开始找捷径,你百度后发现,哎,这个vue框架好像不错 ...
- py222基于python+django的高校学生信息管理系统
开发语言:Python 编号:py222基于python+django的高校学生信息管理系统#毕业设计 python框架:django 软件版本:python3.7/python3.8 数据库:mys ...
- python制作学生管理系统_Python——面向对象,简易学生信息管理系统
一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...
- C#学生信息管理系统
项目视频课:https://edu.csdn.net/course/detail/27107 题目:学生信息管理系统 语言和环境 语言:C#,WinForms 环境:Visual Studio 201 ...
- JAVAfx +MySql实现学生信息管理系统
文章目录 目录 一.功能介绍 ER图 系统结构图 登录界面 学生登录 管理员登录 学生信息管理 学生成绩管理 二.局部功能实现 1.View类 登录界面 单选框添加监听事件 注册界面 提示框界面 学生 ...
- Java学生信息管理系统——管理员登录模块(简单易上手)
前言 这一篇是用来记录我编写学生信息管理系统时实现登录操作的过程,这是学生信息管理系统的第一个模块,之后我还会陆续将其它模块分享出来. 其它章节 ------------------------> ...
- 用python制作一个学生信息管理软件_python实现简单学生信息管理系统
python简单的学生信息管理系统-文件版,供大家参考,具体内容如下 功能如下 主函数部分 增加学生信息 修改学生信息 删除学生信息 查询学生 显示所有学生的信息 将数据录入文件 读取文件数据 学习文 ...
最新文章
- 收藏!15000个Python开源项目中精选Top30!
- oracle10g提权,Oracle 10g提权测试
- python编程入门指南怎么样-python编程从入门到实践这本书怎么样
- 数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码
- python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...
- 架构设计 | 分布式体系下,服务分层监控策略
- [Leetcode] Populating next right pointer in each node ii 填充每个节点的右指针
- 关于redis的pipline和lua脚本
- 高动态范围图像是什么
- Vue实战(六)通用Table组件
- 建议考前多熟记的知识点(1)-(3)《系统集成项目管理工程师软考辅导》
- 消息队列kafka知识总结
- DPDK性能优化技术汇总
- caffe matlab 崩溃,终于搞定caffe了(window官方版win7+VS2013)
- oracle 并行之二: parallel dml
- tflearn的VocabularyProcessor用法:建立中文词汇表和把文本转为词ID序列
- ndarray数组的操作和运算
- setTimeout 的黑魔法
- Eclipse中导入外部jar包——添加lib
- 计算机毕业设计 Java web物流配送管理系统
热门文章
- 2019年南方电网和国家电网考纲对比(通信类)
- http://www.cnitblog.com/ffan/archive/2007/07/20/30291.html
- 防近视产品区分LED防蓝光原理
- 数据结构——八大排序
- Node.js v17 来了,看看都有哪些新功能?
- Linux命令`ll`的结果解析
- linux与windows双系统启动引导
- c语言在机电中的作用,控制工程在机械电子工程中的应用
- 有道云笔记-windows10部分系统无法安装、闪退、崩溃现象处理办法
- 战线拉长,抖快搅局,这届双十一有何看头?