编写一个程序,实现以下功能:
(1)输入一系列的学生数据(包括学生的学号、姓名和成绩等基本信息),将学生信息写入二进制文件 student . dat 中。(2)从 student . dat 文件中读出这些数据并显示出来。
(3)在 student . dat 文件中按姓名进行查询,如输入“李”,则将所有姓“李”的学生的数据显示出来。
(4)可对指定学生的数据进行修改。
(5)可以删除指定的学生数据。

2022.4.4

#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
class Person//学生的类
{public:int id;int age;char name[20];
};
void addperson()//添加函数
{fstream file;Person p;char again;int i;file.open("student.dat",ios::app|ios::out|ios::binary);//以追加形式打开二进制文件 if(!file){cout<<"error";exit(0);}do{cout<<"请输入以下数据:"<<endl;cout<<"姓名:";cin>>p.name;cout<<"年龄:";cin>>p.age;cin.ignore();cout<<"学号:";cin>>p.id;cin.ignore();file.write((char *)&p,sizeof(p));cout<<"是否还要输入一个学生的数据(y or n):";cin>>again;cin.ignore();}while(again=='y');//循环输入添加学生信息 file.close();
}
void deleteperson()//删除函数
{fstream file,file1; file.open("student.dat",ios::binary|ios::in);//打开文件 file1.open("delete.dat",ios::binary|ios::out);//打开中间文件 if(!file){cout<<"error";exit(0);}if(!file1){cout<<"error";exit(0);}int t;Person p;cout<<"请输入要删除的学号:";cin>>t;while(!file.eof())//循环将除了要删除的学生之外的学生信息存入中间文件 {file.read((char *)&p,sizeof(p));if(file.fail())break;if(p.id==t)continue;file1.write((char *)&p,sizeof(p));}file.close();file1.close();file.open("student.dat",ios::out|ios::binary);//改变打开方式 file1.open("delete.dat",ios::in|ios::binary);while(!file1.eof())//将中间文件存入原文件 {file1.read((char *)&p,sizeof(p));if(file1.fail())break;file.write((char *)&p,sizeof(p));}file.close();file1.close();cout<<"删除成功!"<<endl;
}
void changeperson()//修改函数
{fstream file,file1;file.open("student.dat",ios::binary|ios::in);//打开文件和中间文件 file1.open("delete.dat",ios::binary|ios::out);if(!file){cout<<"error";exit(0);}if(!file1){cout<<"error";exit(0);}int t;Person p;cout<<"请输入要修改的学号:";cin>>t;while(!file.eof())//循环将原文件和修改的数据存入中间文件 {file.read((char *)&p,sizeof(p));if(file.fail())break;if(p.id==t){cout<<"请输入要修改的姓名:";cin>>p.name;cout<<"请输入要修改的年龄:";cin>>p.age;cout<<"请输入要修改的学号:";cin>>p.id;}file1.write((char *)&p,sizeof(p));}file.close();file1.close();file.open("student.dat",ios::out|ios::binary);file1.open("delete.dat",ios::in|ios::binary);while(!file1.eof())//将中间文件数据存入原文件 {file1.read((char *)&p,sizeof(p));if(file1.fail())break;file.write((char *)&p,sizeof(p));}cout<<"修改成功!"<<endl;file.close();file1.close();
}
void findperson()//查找函数
{   fstream file;file.open("student.dat",ios::binary|ios::in);//打开文件 file.clear();file.seekg(0L,ios::beg);//将指针指向开头 Person p;int t;cout<<"请输入学号:";cin>>t;while(!file.eof())//循环判断打印查找的信息 {file.read((char *)&p,sizeof(p));if(file.fail())break;file.seekg(0L,ios::cur);if(t==p.id){cout<<"查找成功!"<<endl;cout<<"姓名:"<<p.name<<endl;cout<<"年龄:"<<p.age<<endl;cout<<"学号:"<<p.id<<endl;break; }} file.close();}
void listperson()//列出所有函数
{   fstream file;file.open("student.dat",ios::binary|ios::in);//打开文件 if(!file){cout<<"error";exit(0);}Person p;while(!file.eof())//循环打印 {file.read((char *)&p,sizeof(p));if(file.fail())break;cout<<"姓名:"<<p.name<<endl;cout<<"年龄:"<<p.age<<endl;cout<<"学号:"<<p.id<<endl;}file.close();
}
void findsurname()//按姓氏查找
{fstream file;file.open("student.dat",ios::binary|ios::in);//打开文件 file.clear();file.seekg(0L,ios::beg);Person p;char t[10];cout<<"请输入姓氏:";cin>>t;while(!file.eof())//循环判断前两个字符是否相等来查找打印学生信息 {file.read((char *)&p,sizeof(p));if(file.fail())break;file.seekg(0L,ios::cur);if(t[0]==p.name[0]&&t[1]==p.name[1]){cout<<"查找成功!"<<endl;cout<<"姓名:"<<p.name<<endl;cout<<"年龄:"<<p.age<<endl;cout<<"学号:"<<p.id<<endl;}} file.close();
}
void menu()//菜单函数
{int ch;while(1)//显示功能 {cout<<"请选择:"<<endl;cout<<"1:添加"<<endl;cout<<"2.删除"<<endl;cout<<"3.修改"<<endl;cout<<"4.查找"<<endl;cout<<"5.列出"<<endl;cout<<"6.按姓名查找"<<endl; cout<<"7.退出系统"<<endl;cin>>ch; if((ch<=7) && (ch>=1)){switch(ch){case 1:addperson();break;case 2:deleteperson();break;case 3:changeperson();break;case 4:findperson();break;case 5:listperson();break;case 6:findsurname();break; case 7:exit(0);break;}}else{cout<<"输入错误";}}
}
int main()
{menu();
}

编写一个程序,实现以下功能:(1)输入一系列的学生数据(包括学生的学号、姓名和成绩等基本信息),将学生信息写入二进制文件 student . dat 中。。。。。。相关推荐

  1. Java黑皮书课后题第8章:**8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府。当接收到用户输入后,程序报告答案是否正确。假设50个州以及它们的首府保存在一个二维数组中,提示用户回答所

    **8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 **8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府. ...

  2. (C语言)有10个学生,每个学生的数据包括学号,姓名,3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课程成绩,平均分数)

    有10个学生,每个学生的数据包括学号,姓名,3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课程成绩,平均分数) #define _C ...

  3. java 删除某一个学生_java编写一个程序,实现功能(定义一个类学生表示学生1. 增加学生2显示 3. 修改 4. 删除5查找某...

    www.mh456.com防采集. 1.Student.java代码如下/** * 2016年5月211312日上午526111:03:22 *  * @author 3306 TODO 建立学生实体 ...

  4. 1. 编写一个程序,不断要求用户输入两个数,直到其中的一个为0。对于每两个数,程序将使用一个函数来计算它们的调和平均数,并将结果返回给main(),而后者将报告结果。调和平均数指的是倒数平均值的倒数.

    计算公式如下: 调和平均数=2.0*x*y/(x+y) #include <iostream> double tp(double x, double y); int main() {dou ...

  5. 【Java】编写Java程序,完成从键盘输入两个运算数据,计算两数之和并输出结果...

    public class MyTest {public static void main(String[] args) {int a=2;int b=6;int c=a+b;System.out.pr ...

  6. 圆柱底面周长面积c语言,编写一个程序,从键盘输入圆的半径r,圆柱的高h,分别计算出圆周长cl、圆面积cs和圆柱的体积cv,输出计算结果时要求保留小数点后4位...

    相关题目与解析 编写程序,从键盘输入圆柱底面半径和高,计算并输出圆柱的体积. 编程从键盘输入圆的半径r,计算并输出圆的周长和面积. 编写程序,从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩 ...

  7. c语言 单词长度统计,编写一个程序,打印输入中单词长度的直方图

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define inside 1 #define outside 0 /*编写一个程序,统计并打印输入单词不同长度的个数,并打印输入中单 ...

  8. c语言编写计算单词长度,编写一个程序,打印输入中单词长度的直方图

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define inside 1 #define outside 0 /*编写一个程序,统计并打印输入单词不同长度的个数,并打印输入中单 ...

  9. c语言,成绩输出直方图,编写一个程序,打印输入中单词长度的直方图

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define inside 1 #define outside 0 /*编写一个程序,统计并打印输入单词不同长度的个数,并打印输入中单 ...

最新文章

  1. bioskey的用法
  2. Linux下安装Jboss
  3. linux C语言 socket编程教程(附两个例子)(socket教程)
  4. 编程判断元素归类_如何使用jquery判断一个元素是否含有一个指定的类(class)...
  5. 美育在计算机教育中应用,在现代教育技术中绽放数学美育之花
  6. python 金融可视化_用 Python 进行金融数据可视化
  7. ECCV 2020 论文大盘点-遥感与航空影像处理识别篇
  8. [GO]无缓冲通道(unbuffered channel)
  9. bzoj 2743spoj DQUERY - D-query
  10. 【趣闻】清华大学大一的英文原版线性代数教材里居然出现了Python
  11. 利用遗传算法求解车辆路径问题
  12. 《创业维艰》:如何完成比难更难的事
  13. 【计算机网络】第六部分 应用层(25) 域名空间
  14. pythonindex是什么意思_python中index的用法是什么
  15. 10、spss做最优尺度分析
  16. 基于单片机的公交车报站系统
  17. 无聊的apache错误(.htaccess pcfg_openfile)
  18. map之containsKey方法
  19. 新造车,程序员的糖,工程师的泪
  20. REPT: Bridging Language Models and Machine Reading Comprehension via Retrieval-Based Pre-training 阅读

热门文章

  1. 爱普生L3515打印不出东西,打印后机器工作进纸后出来空白纸张
  2. Quick3D 学习文档
  3. 运算放大器型号特性小总结
  4. 整齐美观的资料文件收纳法
  5. AutoCAD二次开发三种添加插件按钮的方法之一
  6. Codefroces 750D:New Year and Fireworks(BFS)
  7. MySQL异常 #SQLException: sql injection violation, part alway true condition not allow
  8. boke | 前后端分离中使用JWT保持前端数据的持久化,并自动登录
  9. 复利计算2.0 3.0
  10. arduino连接LCD1602A