根据给定的信息,我们可以了解到这段代码是关于一个学生成绩管理系统的设计与实现,该系统采用顺序表作为数据存储结构,并提供了对学生信息进行查询、插入、删除、修改等基本功能。 ### 1. 数据结构的选择 这里选择了顺序表作为数据结构的基础。顺序表是一种将元素按顺序存放在一段连续内存中的线性表,它通过下标访问元素,具有查找速度快(O(1))的优点。但是,由于需要移动元素以保持连续性,在进行插入和删除操作时效率较低(平均时间复杂度为O(n))。在本例中,考虑到学生成绩管理系统的查询需求较为频繁,而对插入和删除的需求相对较少,选择顺序表是比较合适的。 ### 2. 学生信息结构体定义 代码中定义了一个`Stu`结构体来表示学生信息,包括学生的编号、姓名和成绩三个字段。每个学生的信息都存储在一个`Stu`类型的数组`Student`中,数组的大小为`M`(常量定义为50),用以限制存储的学生数量上限。 ### 3. 文件读写功能 - **文件读取**:通过函数`Fileread()`从指定路径(d:\\student.txt)读取学生信息并填充到`Student`数组中。如果文件不存在或无法打开,则会输出错误信息并终止程序。 - **文件写入**:通过函数`Filewrite()`将`Student`数组中的学生信息写回到文件中,确保数据的一致性和持久化。 ### 4. 查询功能 - **按学号查询**:`Seek(int a1)`函数接受一个整型参数作为学号,遍历`Student`数组寻找匹配的学号,并输出该学生的信息。 - **按姓名查询**:`Seek(string name1)`函数接受一个字符串参数作为姓名,遍历`Student`数组寻找匹配的姓名,并输出该学生的信息。 ### 5. 修改功能 - **按学号修改成绩**:`Modification(int a1)`函数首先查询学号对应的学生成绩,然后要求用户输入新的成绩值并更新该学生的成绩。 - **按姓名修改成绩**:`Modification(string name1)`函数同样先查询匹配姓名的学生成绩,再要求用户输入新的成绩值并更新成绩。 ### 6. 浏览全部学生信息 `Browse()`函数用于显示所有已存储的学生信息。它遍历整个`Student`数组并打印出每个学生的学号、姓名和成绩。 ### 7. 插入新学生信息 `Insert()`函数允许用户输入新学生的学号、姓名和成绩,并将其添加到`Student`数组的末尾,同时更新数组的长度。 ### 8. 删除学生信息 `Delete()`函数首先提示用户输入要删除的学生学号,然后遍历`Student`数组找到对应学号的学生,通过覆盖的方式删除该学生信息,并更新数组的长度。 ### 总结 此学生成绩管理系统实现了基本的数据管理功能,包括读取和写入文件、查询、插入、删除和修改学生信息。尽管代码中还存在一些可以优化的地方(例如,删除操作可以更加高效地实现),但整体上已经能够满足基本的需求。对于进一步的功能扩展或性能优化,可以考虑使用更高级的数据结构如链表或者引入数据库技术。
a) 学生成绩的查询(按学号、姓名)
b) 浏览
c) 修改
d) 添加
e) 删除
要求:原始数据存放在.txt文件中,系统运行过程中,将文件中的内容存放到顺序表中,系统运行运行结束后,将顺序表中的内容重新写回到文件,以保留对数据修改的结果。
【法一:顺序表】
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const int M=50;//M表示对象数组的大小
int n=0;
struct Stu//构建结构体
{
public:
int number;
string name;
float score;
};
Stu Student [M];//创建结构体数组
void Fileread()//文件的读入
{
ifstream fileout;
fileout.open("d:\\student.txt",ios::in);
if(!fileout)
cerr<<"无法打开文件!"<<endl;
exit(1);
}
int n1=0;
for(;!fileout.eof();n1++)
{
fileout>>Student[n1].number>>Student[n1].name>>Student[n1].score;
}
n=n1;
fileout.close();
}
void Seek(int a1)//按学号查找
{
int number=a1;
for(int n1=0;n1<n;n1++)
{
if(Student[n1].number==number)
cout<<Student[n1].number<<" "<<Student[n1].name<<" "<<Student[n1].score<<endl;
}
}
void Seek(string name1)//按姓名查找
{
string name=name1;
for(int n1=0;n1<n;n1++)
{
if(Student[n1].name==name)
cout<<Student[n1].number<<" "<<Student[n1].name<<" "<<Student[n1].score<<endl;
剩余5页未读,继续阅读
- 小米小2012-11-07不好用啊,,,
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 柯尼卡美能达Bizhub C364e打印机驱动下载
- CMake 入门实战的源代码
- c7383c5d0009dfc59e9edf595bb0bcd0.zip
- 柯尼卡美能达Bizhub C266打印机驱动下载
- java游戏之我当皇帝那些年.zip开发资料
- 基于Matlab的汉明码(Hamming Code)纠错传输以及交织编码(Interleaved coding)仿真.zip
- 中国省级新质生产力发展指数数据(任宇新版本)2010-2023年.txt
- 基于Matlab的2Q-FSK移频键控通信系统仿真.zip
- 使用C++实现的常见算法
- travel-web-springboot【程序员VIP专用】.zip