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,并具体赋值输入的性别

     &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值