学生信息管理系统——相信我们大家都是比较熟悉的了,作为一个初入计算机专业的学生,这估计是我们在课程设计中都做过的一个小项目。不过你我那时可能一样,因为经验不足和图于玩乐,开发过程中水了不少地方,哈哈一开;近日临近学期末,因为一些原因,需要来重新做一下它,鉴于以前的不足,所以本次开发参照着软件工程开发流程走,算是对软件开发流程再一次巩固。
前面需求阶段都还比较顺风顺水,到设计阶段就遇到了阻碍。参照前面的E-R图,比较容易得到这么几个类:Student类Teacher类Course类Admin类Grade班级类难点在于类之间的交互废话不多讲,以学生选课为例,下面是我设计<1>Student类和Course类实现交互:
Course类
#include"common.h"structCourse{stringcourse_id_;//课程idstringcourse_name_;//课程名inttimes_;//学时intcredit_;//学分Course(conststring&ci="C00",conststring&cn="",inttimes=0,intc=0,ints=0):course_id_(ci),course_name_(cn),times_(times),credit_(c){}booloperator<(constCourse&rhs)const{if(course_id_
classStudent{typedefmap
<2>Admin类与Course类进行交互同上,Admin类需要实现对系统的课程进行管理就十分简单了,只需要在类中添加ManageCourse*类型数据成员,用作操作管理课程的句柄。
classAdmin{private:intadmin_id_;stringadmin_name_;stringadmin_pass_;ManageCourse*pMC_;//管理课程句柄public:Admin(ManageCourse*pMC,...)::...,pMC_(pMC){}~Admin(){...}ManageStudent*getStuHandle(){returnpMS_;}//managecoursememberfunctionvoidmanageCourse();//handlestudentchoosecoursevoidhandleChooseCourse();voidaddCourseForStu();voidcancleCourseForStu();};不过这里有一个十分值得注意的问题:pMC_属性必须和Student类中pMC_属性指向同一个ManageCourse对象。因为它们需要统一进行交互也就是说pMC_属性是在构造admin对象时,外面用参数传进来。
对于教师管理、班级管理、学生管理可以基于同样的思路进行处理。只需要在Admin类中添加相应的句柄。
所有数据保存在mysql中。在程序启动时从数据库中加载到维护的数据结构中,所有操作完成后再将数据保存到mysql中。之所以如此,可以减少程序与mysql交互的次数,提高执行的效率