当前位置:   article > 正文

基于C++的学生信息管理系统_c++信息管理系统

c++信息管理系统

资源下载地址:https://download.csdn.net/download/sheziqiong/87642896
资源下载地址:https://download.csdn.net/download/sheziqiong/87642896

一、项目技术路线说明

学生信息管理系统所使用的编程语言是C++语言。C++语言具有面向对象的特点,给编写程序带来了极大地方便。学生信息管理系统程序设计通过抽象、封装、继承和多态使程序代码达到了很大限度的可重用和可扩展。而程序中的多种多样的类是此次程序设计的重要组成部分,利用这些类可以实现数据的封装,隐蔽。通过这些类的派生与继承,能够实现对问题的抽象描述。除此之外,此次程序设计所运用到的泛型程序设计思想、STL标准模板库、I/O流类库、文件操作以及异常处理是本程序设计的核心。

在程序设计中,数据的共享与保护显得尤为重要。设置常成员、常对象、常引用和常指针等对数据进行保护,增强程序代码的安全性可靠性。

在程序的组织上,采用多文件结构。将类的声明和定义在不同文件中实现,可以对不同文件进行单独编写、编译,最后再连接。同时利用类的封装性,在调试程序、修改代码时,只对某一个类的定义和实现进行修改,可以提高程序编写效率。

在程序中适当使用多态机制。声明抽象类,为整个类族提供了统一的对外接口。使用指向派生类的指针就可以对派生类的对象进行统一操作。

在程序中巧用泛型程序设计及STL标准模板库,可以提高程序编写效率。泛型程序设计是一种重标要的程序设计方法,在程序中合理利用泛型程序设计,提高了代码可重用性。STL准模板库是C++标准库的一部分,协调使用其中的容器,迭代器,函数对象以及算法,会使学生信息管理系统程序的编写更容易。

学生信息的管理实质就是数据的管理,数据的管理离不开文件操作和输入输出。因此,在程序中合理使用文件操作和输入输出,能给数据处理带来极大得方便。

数据处理会出现许多极端情况,在程序中增加异常处理,能提高程序的容错能力。

学生信息管理系统算法的实现主要依赖于对泛型程序设计思想、STL标准模板库、I/O流类库、文件操作以及异常处理的充分理解和恰当使用。利用STL标准模板库及文件操作设计了一个简单的数据库,极大得方便了数据的的存储和访问,也方便了学生信息的格式化输出。
项目需求分析

二、项目需求分析

2.1项目介绍

学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如信息的录入、浏览、排序、查询、统计、修改、删除,针对这些要求设计了学生信息管理系统。

2.2功能需求

2.2.1 管理员对系统的管理功能

管理员可以通过账号登入系统,系统主要对学生信息进行收集整理和存储。管理员在学生基本信息上可以进行添加、修改和删除数据。除此之外,管理员可以对系统进行升级和维护。

2.2.2 学生和教师对系统的查看、查询和信息录入等功能

(1) 学生登入系统后可以查看自己的相关信息:

学生个人信息:姓名、学号、性别、年龄、出生年月、籍贯、家庭住址、电话号码、邮箱、班级和政治面貌。

(2) 教师登入系统后可以查看和操作学生的相关信息

可以查看:姓名、学号、性别、年龄、出生年月、籍贯、家庭住址、电话号码、邮箱、班级和政治面貌等学生基本信息。

可以录入、浏览和查询学生信息,也可以对学生信息进行排序、统计、删除和修改等。

三、系统分析与设计

3.1本程序需解决的关键技术问题

3.1.1个人账号注册

学生信息管理系统应具有账户注册功能,账户由账号和密码组成,其中需要解决的关键技术问题有:

  1. 如何存储账号和密码,使得二次登陆时,可以通过验证账号和密码登入系统。
  2. 当注册账户和登陆账户时,如何实现隐藏输入密码,保证信息安全。
  3. 如何将固定账户与固定学生信息进行绑定,使得每次使用账户登入系统,学生信息都存在且可以直接进行操作。
  4. 一个账户应具有修改密码功能,如何实现密码修改,使得与账号绑定的学生信息不变。

3.1.2学生信息管理

学生信息管理系统主要实现对学生信息的存储和整理,其中需要解决的技术问题有:

  1. 学生信息管理系统可以对学生信息进行录入,格式化录入学生信息以及存储学生信息,便是主要问题。其中存储学生信息本质上是对数据的存储,如何设计数据结构,使得内存可以动态分配,数据动态存储。

  2. 学生信息管理系统可以对学生信息进行不同程度的排序,按不同排序标准对学生信息排序,是当下面临的问题。

  3. 学生信息管理系统可以对学生信息进行广度和深度查询,实现按不同查询标准对学生信息进行精准查询,是写程序所面临的问题之一。

  4. 学生信息管理系统提供了分类统计学生信息功能,如何运用分类统计的思想,实现对学生信息的分类统计。

  5. 学生信息管理系统还可以对学生信息进行修改和删除,如何实现对学生信息进行修改和删除。

  6. 如何在基于以上操作的情况下,当再次进入固定账户时,学生信息依然可以同步。

    3.2程序流程

    程序流程如图流程图 图3-2所示

在这里插入图片描述

​ 图3-2

3.3功能模块

学生信息管理系统功能模块分为:

  1. 账户注册:用户在学生信息管理系统上注册一个属于自己的账号,用此账号管理学生信息。
  2. 信息录入:允许用户录入学生信息,并对学生信息分类保存到磁盘文件中。当用户再次登入系统时,磁盘文件信息会自动被读取到内存中,起到同步作用。
  3. 信息浏览:可对学生信息进行浏览。
  4. 信息排序:允许用户按学号、出生日期对学生进行排序。
  5. 查询信息:用户可以按学号、姓名、性别、出生日期和籍贯进行信息查询。
  6. 统计信息:允许用户按性别、出生日期、籍贯、班级和政治面貌进行统计学生情况,并计算出所占比例,输出统计表。
  7. 删除信息:允许用户输入学号,删除学号对应的所有信息。
  8. 修改信息:用户可以按学号,修改学号对应的学生信息。
  1. 修改密码:当用户输入正确的账号和密码时,才能修改本账号的密码。修改密码会有确定密码进行验证,防止用户手误输错。

    3.4类的设计

    依据2.2功能需求分析以及3.1需要解决的关键技术问题进行类的设计。

3.4.1 账户类设计

用户可以在学生信息管理系统上注册一个属于自己的账号,用此账号管理学生信息。

首先,可以设计一个账户类Account来表示账户,类内含账号和密码两个主要数据成员。通常,我们在注册账号时,设置密码会有两个环节,一个是设置密码,另一个是输入确认密码,确认密码有效防止了用户手误输错。因此,可以用一个数组code[2]存储密码,数组元素code[1]表示确认密码。

为了保证用户账号密码安全,可以设计一个函数hide Password来隐藏输入密码,用*号代替密码,同时支持退格重新输入。

当用户在进入系统和修改密码时,需要验证账号信息,才能进行相关操作,这样可以有效保证账户信息安全。为此设计函数verify Information来验证账号信息。函数需要返回一个布尔值,返回值为真表示用户之前在系统上注册过此账号,返回值为假表示用户当前注册了次账号同时进行登录或账号不存在。函数返回值为后续操作反馈一个信息,这个信息用来通知程序,将与账号相关的学生信息从磁盘文件中读入到内存中来。

当用户对所设置的账号和密码有疑问时,可以通过重新设置账号和密码解决疑问。为此,设计一个函数Change Password来修改账号和密码。

以上对账号和密码的存储,是基于对文件的操作来实现的。设计函数save_account将内存中数据保存到文件中,函数input_account将数据从文件读入到内存中来。无论是保存数据到文件,还是从文件读数据到内存中,都涉及到查找文件,设计一个查找函数find_filename来实现文件查找功能。

3.4.2 学生类设计

对学生群体进行属性和行为抽象可以得到Student类,Student类对姓名、性别和籍贯等数据进行封装形成新的数据类型。 类内包含姓名、学号、性别、政治面貌、籍贯、家庭住址、电话号码、电子邮箱、出生日期、年龄以及班级11个数据成员。类内有获取学生相关信息和设置学生相关信息的函数成员。同时,重载流插入运算符和流提取运算符为Student类的友元函数。这样,就可以对整个类对象进行输入输出操作,为后续程序输出提供便捷,增加程序可读性。

3.4.3 管理类设计

对学生信息的基本操作由管理类Manage来表示。类内数据成员包括多重映射,向量,以及两个一维数组。

一般情况下,对于学生信息的查询、删除以及修改等操作都是基于学号,学号和学生信息一一对应,可以用多重映射来表示这种关系。多重映射的键类型为string,值的类型为Student。这样,就可以存储多个学生的学生信息,根据学号来处理学生信息。多重映射可以实现动态内存分配,这样可以实现运行时多个学生的信息的存储。向量容器可以充当一维数组使用,不同的向量元素都用来存储不同的统计数据种类。向量的内置类型为多重映射,多重映射的键的类型为string,值为int;键用来表示统计学生信息时的标准(例如:按籍贯统计,按出生日期统计等),值表示这一标准下的学生数量。向量和多重映射的配合使用,极大方便了学生信息的统计。

设计record函数录入学生信息;函数browse可浏览学生信息,但是,我们不仅在浏览学生信息时需要用到browse,在输出学生信息统计结果时也要用到browse,两函数处理数据的算法相同,处理的数据类型不尽相同,可以使用函数模板browse来解决这一问题,不仅提高了代码可读性,而且提高了代码的可重用性。

对于学生信息排序,可以用函数sorts来实现,函数核心使用了标准模板库的排序函数sort,问题是sort函数仅支持vector、string以及deque的排序,而由红黑树实现的set、map、multimap等容器[2],元素本身有序(即映射按键值递增),故不支持sort排序, 而我们采用multimap来存储学生信息,想要按学号降序排序,按出生日期排序便很难实现。由于sort支持对vector的排序,所以可以使用vector和pair的混合使用来解决这一问题。pair作为vector的内置数据类型,它的第一个数据的类型为string,第二个数据类型为Student。不难发现,pair的数据类型和multimap的键值数据类型相同。在排序时,可以将multimap中的数据转存到pair中,然后使用排序函数sort对vector排序。

当标准模板库中的sort函数的内置类型为自定义类型或容器时,其函数对象便要由使用者提供。为此我们需要设计两个函数对象CmpByValueDate和CmpByKeyNumber来决定sort递增或递减[2]。

设计函数find实现查询功能;函数deletes实现信息删除;函数change实现修改信息的功能;函数save可以保存信息到磁盘文件;函数input可以从文件读取信息到内存中。

本类还设计了辅助函数chart输出统计表;函数edit编辑学生信息;函数sort_data按出生日期排序;函数sort_number按学号进行排序。

3.4.4 菜单类、时间类和控制台类设计

对于菜单的设计,用Menu类表示。Time类表示启动界面和显示当前时间。Console类表示对控制台的颜色、尺寸、光标等控制。

图3-4通过UML图形表示了设计的类及其相互关系。

在这里插入图片描述

​ 图 3-4
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

资源下载地址:https://download.csdn.net/download/sheziqiong/87642896
资源下载地址:https://download.csdn.net/download/sheziqiong/87642896

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/182069
推荐阅读
相关标签
  

闽ICP备14008679号