C++程序设计基础实践:学生信息管理系统

目录

1 系统介绍

2 系统设计

3 设计结果

4 源代码


近来有空闲,把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正,有更好的方法也期待您的分享~


实验要求

本课程要完成一个学生信息管理系统的设计与实现,可实现对于学生信息的录入、增加,修改和删除,以及学生信息浏览和特定条件的学生查询

1.学生信息的存储方式:文件存储

        可以文本文件方式存储(txt)或其他文件形式

        文本文件存储示例:

        201611701208,张三,男,19,广东省xxx,软件工程

        201611701209,张小明,男,18,浙江省xxx,软件工程

        201611701201,白小云,女,18,广东省xx,软件工程

        201611301107,赵晓飞,男,19,广东省xx,自动控制

2.学生记录数据录入、增加

        能逐条添加单个学生记录,要求保证学生记录的学号唯一性,并且学号值不允许为空值

        能判断对每个字段的输入值是否符合格式要求,比如学号是由12个数字字符组成,前四个字符是合常理的年份;性别只能输入男或者女;年龄是数字字符,范围介于一个合理的区间

        要求能接收缺少某个字段值的学生记录

3.数据查询

        能够通过给定条件查询学生的信息,给定的条件如学号、姓名、地址等

        查询要求能够支持同时指定多个条件的查询:例如查询“18岁的浙江省男生信息”

        能进行模糊查询,比如查询名字中包含“小”字的学生;

        能统计满足某个条件的学生人数;

        因为学生文件中的学生信息的排列顺序是按照添加的顺序排列的,因此需要结合数据结构知识,考虑如何提高查询效率。

4.数据删除

        可以删除指定条件的学生信息

        需要考虑删除后的文件应如何处理删除的信息

5.数据更新

        可以更新指定条件的学生信息

        需要考虑如何处理更新后的文件

6.支持学生信息结构的改变

        支持增加字段: 比如增加一个“身份证号”,相应的所有记录必须增加相应的值,应考虑如何处理文件比较合理。

        同理支持减少字段

7.其他需求

        可看性:界面符合一般人的审美观;

        易用性:操作便利,有符合使用习惯的流程控制过程,有很好的“进入”和“退出”机制;

        健壮性:能够应对处理非法输入和非法操作;

        性能:时间和空间复杂度要求;


1 系统介绍

1.1本系统总介绍

学生信息管理系统,是针对学校人事处的大量业务处理工作而开发的管理软件,是典型的管理信息系统。作为计算机应用的一部分,使用计算机对学生信息进行管理,具有着手工管理所无法比拟的优点。例如:检索迅速、查找方便、易修改、存储量大、数据处理快捷等。这些优点能够极大地提高学生信息管理的效率,也是学校实现科学化、正规化管理的重要条件。因此,开发这样一套管理软件是很有必要的事情。

1.2 需求分析

1.2.1学生信息的存储方式:文件存储

        可以文本文件方式存储(txt)和二进制文件形式存储。

1.2.2学生记录数据录入、增加

        (1)能逐条添加单个学生记录,保证学生记录的学号唯一性,并且学号值不允许为空值;

        (2)能判断对每个字段的输入值是否符合格式要求,比如学号是由12个数字字符组成,前四个字符是合常理的年份;性别只能输入男或者女;年龄是数字字符,范围介于一个合理的区间;

        (3)能接收缺少某个字段值的学生记录。

1.2.3数据查询

        (1)能够通过给定条件查询学生的信息,给定的条件如学号、姓名、性别等;

        (2)支持同时进行性别、年龄、籍贯多个条件的查询:例如查询“18岁的浙江省男生信息”;

        (3)能进行模糊查询,比如查询名字中包含“小”字的学生;

        (4)能统计满足某个条件的学生人数。

1.2.4数据删除

        (1)可以删除指定条件的学生信息;

        (2)删除后的文件只保留剩下学生的信息。

1.2.5数据更新

        (1)可以更新指定条件的学生信息;

        (2)更新后文件其他学生信息不变,指定更新的学生信息改变。

1.2.6其他需求

        (1)可看性:界面符合一般人的审美观;

        (2)易用性:操作便利,有符合使用习惯的流程控制过程,有很好的“管理员进入”和“退出”机制;

        (3)健壮性:能够应对处理非法输入和非法操作;

1.3学生管理系统的功能结构图

图1  学生管理系统的功能结构图

1.4系统技术平台、标准相应介绍

Visual Studio 2022主要用于软件开发和应用程序的创建、测试和部署。该版本是Visual Studio 2019的后继版本,带来了一系列改进和新功能,包括:改进了性能,Visual Studio 2022在启动时间和代码编译速度方面都进行了优化,大大提高了开发效率;改进了调试功能,Visual Studio 2022提供了更好的调试工具,包括改进的性能问题分析器和调试查看器等等。

2 系统设计

2.1学生信息的存储方式:文件存储

 2.1.1 具体设计过程

        (1)采用二进制方式对文件进行写操作

        ①用 FILE* 定义一个文件指针 fp;

        ②调用 fopen() 函数,使用给定的模式 mode 打开 filename 所指向的文件,若无法打开,则输出"cannot open file",返回,若打开成功,首先调用 fwrite() 函数将学生人数写入文件,然后使用for循环将学生信息写入,进行出错处理。

        ③使用fclose() 函数关闭文件指针。

        (2)采用txt方式对文件进行写操作

        ①调用 ofstream() 文件打开txt文件。

        ②使用for循环用“ << ”将学生信息写入txt文件。

        ③使用 .close() 关闭文件。

        (3)采用二进制方式对文件进行读操作

        ①用 FILE* 定义一个文件指针 fp;

        ②调用 fopen() 函数,使用给定的模式 mode 打开 filename 所指向的文件,若无法打开,则输出"cannot open file",返回,若打开成功,首先调用 fread() 函数读取学生人数,然后使用for循环将学生信息写入,进行出错处理。

        ③使用fclose() 函数关闭文件指针。

 2.1.2 存储结构

        学生信息既以二进制方式读写又以文本形式存储在文件夹中。

 2.1.3 功能算法描述

        (1)文件读写

图2  文件操作

        头文件:#include <fstream>

        文件写操作,内存写入存储设备 :ofstream

        文件读操作,存储设备读区到内存中:ifstream

        读写操作,对打开的文件可进行读写操作:fstream

        (2)定义文件指针

FILE*

        (3)打开文件

FILE *fopen(const char *filename, const char *mode) 

        使用给定的模式 mode 打开 filename 所指向的文件。

        (4)二进制写文件

        函数 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 把 ptr 所指向的数组中的数据写入到给定流 stream 中。

        (5)二进制读文件

        函数 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中。

 2.1.4 程序流程图

图3  文件读写程序流程图

2.2学生记录数据录入、增加

 2.2.1 具体设计过程

        (1)输入学生姓名

cin >> s[student_number++].name;

        (2)输入学生学号

        ①输入

strcmp(s[student_number].num, s[i].num) == 0
cin >> s[student_number].num;

        ②定义字符串aa,将const char*类型的s[student_number].num 转为字符串

 string aa(s[student_number].num);

        ③定义临时变量 string temp(aa, 0, 4);

        ④for遍历链表,使用 strcmp() 函数判断该学号是否存在,保证记录唯一性

        ⑤使用 函数 strlen() 和 atoi(temp.c_str())截取用户输入学号的前四位,判断学号是否由12个数字字符组成,且前四个字符是否是合常理的年份

        (3)输入用户性别

          ①输入

cin >> s[student_number].sex;

          ②将const char* 类型的s[student_number].sex赋值给 char*类型的 c,并具体赋值输入的性别

   &

学生成绩管理系统 该系统可用于管理某高校的本科生、研究生2类人员信息,人员信息包括:编号、姓名、性别、出生日期、专业、班级、类别(区分2类人员标记)等,具体功能包括: ① 专业管理:包括专业基本信息的添加、修改、删除、查询功能。学生必须归属于某个专业。 班级管理:包括班级基本信息的添加、修改、删除、查询功能。学生必须归属于某个班级。 ② 添加功能:分本科生和研究生两类人员,实现下列添加功能。 A.本科生:能够添加学生信息,如果高数成绩、英语成绩、C语言成绩都输入,则系统自动计算总成绩。 B.研究生:能够添加学生信息,如果课程综合成绩、论文成绩都输入,则系统自动计算总成绩。 修改功能:分本科生和研究生两类人员,实现下列修改功能。 A.本科生:根据学号来修改任意学生的除学号外的信息。如果高数成绩、英语成绩、c语言成绩都存在,则系统自动计算总成绩。 B.研究生:根据学号来修改任意学生的除学号外的信息。如果课程综合成绩、论文成绩都存在,则系统自动计算总成绩 ③ 删除功能:分本科生和研究生两类人员,能够根据学号删除一个学生。 ④ 排名功能:分本科生和研究生两类人员,实现下列排名功能。 说明:排名包括班级排名和年级排名,排名规则按体育竞赛规则处理,若出现两个并列第1名,下个名次为第3名,依此类推。 A:班级排名:分本科生和研究生两类学生,计算每个学生总成绩在班级中的名次。 B:年级排名:分本科生和研究生两类学生,计算每个学生总成绩在本专业、本年级中的名次。 ⑤ 查询功能:分本科生和研究生两类人员,实现下列查询功能。 1) 能够按班级显示本班全部学生信息。 2) 能够根据学号或者姓名查询学生信息。 3) 能够在某个班级中查询某门课成绩不及格学生信息。 ⑥ 排序功能:分本科生和研究生两类人员,实现下列排序功能。 1) 所有学生信息按学号从低到高排序并显示。 2) 某个班学生信息按总成绩从高到低排序并显示。 ⑦ 统计功能:分本科生和研究生两类人员,实现下列统计与显示功能。 1) 统计某班级某课程的平均成绩、最高成绩、最低成绩。如果学生该门课没有成绩,统计平均成绩时忽略该生。 2) 统计某班级某课程超过课程平均成绩的学生名单及人数。 3) 统计某班级某课程不及格学生名单及人数。 统计某班级某课程不同等级的学生人数。等级标准:优—大于等于90;良—大于等于80且小于90;中:大于等于70且小于80;及格:大于等于60且小于70;不及格:小于60。
修正了已发现的所有错误.欢迎大家下载试用.. 一、项目名称:学校学生信息管理系统。 二、项目目标:实现对学校学生的信息管理——信息的建立和维护、信息的检索。 三、主要功能: 1.信息的输入:建立学生档案文件。 2.信息维护: 添加:增加新学生; 修改:学生信息的改变; 删除:学生减少。 3.信息处理 按要求检索学生信息; 按要求统计信息。 四、界面系统 1.系统管理员进入 (请输入密码) 2.一级菜单 (1 信息维护 2 信息检索 3 信息统计 4 退出) 3. 二级菜单 信息维护 (1 建立学生成绩文件 2 添加学生记录 3 删除学生记录 4 修改学生记录 5 返回上级菜单) 信息检索 (1 按班级查找 2 返回上级菜单) 信息统计 (1 成绩统计 2 返回上级菜单) 五、主要功能说明: 1.用口令(密码)形式验证管理员身份(可输入三次),合法者可进入,否则程序结束。 2.有关功能说明 1)建立学生成绩表(模块a) 建立新的学生成绩文件; 建立若干学生记录,包括姓名、学号、班级、课程编号、成绩。 2)添加学生记录(模块b) 在已存在的学生成绩文件中添加新记录。 3)删除学生记录(模块c) 在学生成绩文件中删除有三门课程不及格的学生记录; 删除前,逐条显示符合删除条件的学生姓名、成绩,确认后再删除。 4)修改学生信息(模块d) 输入学生学号,在学生成绩文件中找出该学生记录; 在屏幕上逐条显示该学生的各条记录; 每显示一条,询问是否修改,如果“Y”,输入修改后数据, 将文件原记录删除,保存新的记录; 5)按姓名和班级查找(模块e) 输入姓名显示相应信息。 6)信息统计(模块f) 同时按照班级和课程统计每门课程、每个班级的平均成绩,最高分、最低分; 在屏幕上先依次显示各门课程,对应的各个班级的统计数据。 7)退出信息管理系统,返回操作系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值