实验十 文件读写 学生成绩管理(二进制文件读写)
【问题描述】
在以下问题中,定义学生的结构体student,录入学生信息,并存入到二进制文件grade.bin中,要求存入的是按照总成绩从大到小的顺序存储,数据可以分多次录入,每次录入前,都将显示文件中已有的数据,其具体形式如下:
No: 3
Name: Hong
Sex: F
Age: 9
Scores: 123.000000 531241.000000

No: 2
Name: Zhang
Sex: F
Age: 98
Scores: 123.000000 434.000000

No: 1
Name: Wang
Sex: M
Age: 32
Scores: 12.000000 54.000000

Input continue(y/n)?
在提示Input continue(y/n)?下输入’y’,则可以继续输入,否则将退出。继续输入的内容将与现有的数据进行重新按总分从大到小的顺序排列后重新写入文件grade.bin中。

【输入形式】
Input continue(y/n)?y
No: 15
Name: LiuYing
Sex(M/F): M
Age: 25
Chinese score: 100
Computer score: 85
Input continue(y/n)?y
No: 16
Name: WangLiLi
Sex(M/F): F
Age: 23
Chinese score: 95.5
Computer score: 68.8
Input continue(y/n)?n
【输出形式】文件

调试时的测试文件grade.bin:下载链接为文件所在链接,请将这个文件下载到与源代码相同的文件夹下。

我也不知到链接为什么点不开,这道题里面涉及到fopen,fwrite,fread建议自行在csdn学习用法,by2020届信息院通信 毕

#include  <iostream>
using  namespace  std;/*定义结构体student用于表示学生的基本信息,采用链表结构
*/
struct  student
{int  no;                                                                                                                                          //  学号char  name[20], sex;                                                                                              //  姓名以及性别,  请思考如果将name[20]修改为*name,结果将会怎样,还适合本题的处理方式吗?int  age;                                                                                                                                      //  年龄float  chinese, computer;                                                                                  //  表示两门课程的成绩student* next;bool  operator<(const  student& another)  const            //  重载运算符  <  (小于),用于结构体对象之间的比较,在LinkSort中比较链表的两个节点大小{return       (chinese + computer) < (another.chinese + another.computer);}
};
student* ReadFile(FILE* fp, student* head, int& n);            //  从二进制文件(文件指针为fp)中将所有数据读入,存储于以head为头指针的链表中
void  display(student* head);                                                                                    //  用于显示链表的内容
void  WriteFile(FILE* fp, student* head);                                                //  将以head为头指针的链表中的数据写入二进制文件(文件指针为fp)
student* input(student* head, int& n);                                                      //  输入新的数据,将新数据连接到链表末尾
student* LinkSort(student* head, const  int& n);                        //  实现对链表的排序,按总成绩从大到小排列,冒泡排序
void  swapNode(student* s, student* q);                                              //  实现对链表节点的数据交换,用于排序,  在函数LinkSort中调用int  main()
{int  n = 0;                                                                                                                                                        //  定义变量n,用于存储学生人数student* head = NULL;                                                                                                          //  链表头指针FILE* fp;fp = fopen("grade.bin",  "rb+");  //  打开二进制文件,用于读写以及添加记录  head = ReadFile(fp, head, n);display(head);fclose(fp);head = input(head, n);head = LinkSort(head, n);fp = fopen("grade.bin", "wb");WriteFile(fp, head);fclose(fp);return  0;
}student* ReadFile(FILE* fp, student* head, int& n)              //本函数将调用fread函数读数据块,这个函数非常有用
{student* q = head;if (head)while (q->next)  q = q->next;while (1){student* p = new  student;             //  用于存储读入的数据块if (!fread( p,sizeof(*p), 1,fp));//   //  从文件fp中读入大小为sizeof(student)的数据块,保存于内存缓冲区p之中,  fread将返回读入的字节数,如果为0,则结束读文件{delete  p;break;}p->next = NULL;if (!head)head = p;elseq->next = p;q = p;n++;}return  head;
}
void  WriteFile(FILE* fp, student* head)                            //本函数将调用fwrite函数写数据块,这个函数非常有用
{while (head){fwrite(head, sizeof(head),1, fp);                          //  将缓冲区head中的内容(数据块)写入文件中,head = head->next;}
}void  display(student* head)
{student* p = head;while (p){                                                                        //  输出链表节点内容cout << "No: " << p->no << endl;cout << "Name: " << p->name << endl;cout << "Sex: " << p->sex<< endl;cout << "Age: " << p->age << endl;cout << "Scores: ";printf("%0.6f", p->chinese);cout << " ";printf("%0.6f", p->computer);cout << endl;p = p->next;}
}student* input(student* head, int& n)
{student* q = head;if (head)while (q->next)  q = q->next;while (1){printf("Input  continue(y/n)?");if (getchar() != 'y')break;student* p = new  student;printf("No:  ");scanf("%d", &p->no);getchar();printf("Name:  ");gets(p->name);printf("Sex(M/F):  ");p->sex = getchar();printf("Age:  ");scanf("%d", &p->age);printf("Chinese  score:  ");scanf("%f", &p->chinese);printf("Computer  score:  ");scanf("%f", &p->computer);p->next = NULL;getchar();if (!head)head = p;elseq->next = p;q = p;n++;}return  head;
}student* LinkSort(student* head, const  int& n)
{student* p;for (int i = 1; i <= n - 1; i++){p = head;for (int j = 1; j <= n - i; j++){if (*p < *p->next){swapNode(p, p->next);                                                        //  交换节点值}p = p->next;}}return  head;
}void  swapNode(student* s, student* q)
{student* snext = s->next, * qnext = q->next, tmp;tmp = *s;*s = *q;*q = tmp;s->next = snext;q->next = qnext;
}

实验十 学生成绩管理(二进制文件读写)byHNU信息院2020小毕相关推荐

  1. c语言结构体编辑学生成绩管理,C语言基于结构体的学生信息管理系统实现

    宋福英 摘  要: 中国高校为保证学生信息安全,各分院的学生信息都在一个相对封闭的闭环内共享.中国高校在校生人数逐年递增,给高校的信息管理带来不小压力.C语言兼具高级语言和汇编语言的特点,简洁.紧凑. ...

  2. python输入姓名专业班级_Python — 学生成绩管理

    Python - 学生成绩管理 摘要 本次实验要求使用python语言,读取现有的班级花名册,写入SQlite数据库,逐个显示每一个学生的学号姓名,输入其python.英语等课程的成绩,写入SQLit ...

  3. C语言实验报告计算成绩,c语言实验报告--学生成绩管理系统.doc

    c语言实验报告--学生成绩管理系统.doc XX大学CSUC语言程序设计实践报告题目学生成绩管理系统学生姓名剽悍的小白兔指导教师TZ学院信息科学与工程学院专业班级电气信息类XXXX班完成时间20XX年 ...

  4. python学生成绩管理程序设计总框图_学生成绩管理程序设计报告

    1 1 引 言 1.1 编写目的 课程设计提供了一个既动手又动脑,独立实践的机会,将课本上的理论 知识和实际有机的结合起来, 锻炼分析解决实际问题的能力. 提高适应实际, 实践编程的能力. 数据结构课 ...

  5. c语言学生成绩管理论文,学生成绩管理系统毕业论文c语言.doc

    111111111学院 毕 业 论 文 题 目 学生成绩管理系统 姓 名 1 1 1 所在系别 计 算 机 系 专业班级 计算机应用技术计算机111班 学 号 1111111111 指导教师 1 1 ...

  6. 一个简单的学生成绩管理软件(ODBC开发)

    一个简单的学生成绩管理软件(ODBC开发) 下载本文所附源代码 程序运行效果截图: 前面我写过一篇<一个完善的ODBC数据库程序>,大家可能看到过,有鼓励,也有批评,但是所有这一切只有一个 ...

  7. 学生成绩管理 php,php学生成绩管理系统(模板)

    资源描述: 计算机与通信学院 2013年春季学期 题 目学生成绩管理系统 专业班级软件工程基地班 姓 名陶婷婷 学 号 目录 一.系统分析与设计1 1.1摘要1 1.2需求分析1 1.3系统功能分析2 ...

  8. JAVA课程设计个人博客 学生成绩管理 201521123014 黄绍桦

    JAVA课程设计个人博客 学生成绩管理 201521123014 黄绍桦 1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2 ...

  9. 用php实现成绩管理系统,PHP成绩管理系统 PHP简单操作 学生成绩管理 成绩管理源码 三张表...

    系统品牌: 其他系统 开发语言: PHP 数据库: Mysql 是否授权: 否 源文件: 无加密 移动端: 无 规格: 整站源码 服务器类型: 独立主机 服务器系统: Windows 安装环境: ap ...

最新文章

  1. matlab中decnbr,LMI 求解时调用decnbr()函数得到的决策变量的个数为小数是为什么
  2. java 嵌入qtwebkit_实现js与Qt程序的交互(使用QtWebkit)
  3. poj 3261 Milk Patterns 后缀数组 最长重复子串
  4. 如何实现A星寻路算法 Cocos2d-x 3 0 beta2
  5. python 什么是序列_从零起步学Python——什么是序列?
  6. jdk1.8 HashMap ConcurrentHashMap
  7. 好看的文章排版样式(转)
  8. Kubernetes 小白学习笔记(12)--搭建一个kubernetes集群-安装dashboard和heapster并验证集群安装结果
  9. 【笔记】西门子1200PLC和V90伺服电机连接
  10. 联想服务器风扇智能调节,联想怎么调风扇转速
  11. Tcl 语言 ——变量篇
  12. 22000字深入研究消费电子光学传感器行业
  13. vue项目+高德地图
  14. package titlesec error: nested titles
  15. c++ placement new
  16. ITSS-信息技术服务运行维护标准符合性认证
  17. 移动UI 设计有哪些色彩级别
  18. 导出百度网盘共享文件库目录清单的脚本
  19. BXL文件怎样转换为AD LIB文件
  20. 海地PVC/COC认证

热门文章

  1. 坐标系统的详解-gis
  2. Word2Vec笔记
  3. 苹果手机语音备忘录在哪_苹果手机删除的备忘录怎样找回?方法简单,3秒学会!赶紧来看...
  4. 【C语言】全面解析指针,指针知识点整理
  5. Struts原理与实践
  6. matlab f检验 f值,如何用matlab进行F检验
  7. “云上进化——2022全球AI生物制药大赛”来袭,30万奖池等你来战!
  8. python爬虫 豆瓣电影
  9. Blinn-Phong反射模型
  10. GBase 8s HAC高可用方案