数据文件-题目:学生顺序表的处理

问题描述

题目:学生顺序表的处理

在一个数据文件中存放若干学生数据记录,每条记录都有如下数据项:学号,姓名,性别,成绩。
编一个程序,采用 顺序存储结构 存储这批数据,并对该数据进行排序。要求:数组前部为男同学,后部为女同学,并且男女同学都按成绩递减排序,分别计算男生合格率、女生合格率、全班的成绩平均分,并把排序后的学生数据记录及计算结果存入另一个数据文件中。

解决方案

 #include "stdio.h"
#include <malloc.h>
#include <stdlib.h>
#include <string>

struct Student
{
 int num;
 char name[20];
 int  sex;//0女,1男
 int score;
}stu;

struct list
{
 struct Student student;
 struct list *next;
};

struct list *CreatFemale(struct list *head,struct Student stu)//女生信息
{
 struct list *p;
 struct list *p1,*p2;
 p = head;
 p1 = (struct list *)malloc(sizeof(struct list));
 p1->student = stu;
 if (head == NULL)
 {
  head = p1;
  p1->next = NULL;
 }

 else
 {
  while (p->next != NULL && stu.score >= p->student.score)
  {
   p2 = p;
   p = p->next;
  }

  if (stu.score < p->student.score)
  {
   if (p == head)
   {
    head = p1;
    p1->next = p;

   }

   else
   {
    p2->next = p1;
    p1->next = p;
   }
  }

   else
   {
    p->next = p1;
    p1->next = NULL;
   }

}

 return head;
}

struct list *CreatMale(struct list *head,struct Student stu)//男生信息
{
 struct list *p;
 struct list *ptr;
 struct list *q;
 struct list *p1,*p2;
 q = head;
 ptr = head;
 p1 = (struct list *)malloc(sizeof(struct list));
 p1->student = stu;
 while (q->next != NULL && q->student.sex == 0)
 {
  ptr = q;
  q = q->next;
 }
 p = q;
 if (head == NULL)
 {
  head = p1;
  p1->next = NULL;
 }

else
 {
  while (p->next != NULL && stu.score >= p->student.score)
  {
   p2 = p;
   p = p->next;

  }

  if (stu.score < p->student.score && p->student.sex == 1)
  {

      if (p == q )
   {
    p = p1;
    ptr->next = p1;
    p1->next = q;
   }
   else
   {
    p2->next = p1;
    p1->next = p;
   }
  }

  else
  {
   p->next = p1;
   p1->next = NULL;
  }

}

 return head;
}

void Print(struct list *head)//输出到文件
{
 FILE *fp;
 char Sex[10];
 fp = fopen("data1.txt","w");
 if (fp == NULL)
 {
  printf("can't open the file!n");
  exit(0);
 }
 struct list *p;
 struct list *q;
 p = head;

 while (p != NULL)
 {
  if (p->student.sex == 0)
  {
   strcpy(Sex,"女");

  }

  else
  {
   strcpy(Sex,"男");
  }
  fprintf(fp,"%d %s %s %dn",p->student.num,p->student.name,Sex,p->student.score);
  q = p->next;
  free(p);
  p = q;
 }

 fclose(fp);
}

main()
{
 struct list *head;
 FILE *fp;
 head = NULL;
 fp = fopen("data.txt","r");
 if (fp == NULL)
 {
  printf("can't open the file!n");
  exit(0);
 }

 while (!feof(fp))
 {
  fscanf(fp,"%d%s%*c%d%d",&stu.num,stu.name,&stu.sex,&stu.score);
  if (stu.sex == 0)
  {
   head = CreatFemale(head,stu);//女
  }
 }

 fseek(fp,0L,0);
 while (!feof(fp))
 {
  fscanf(fp,"%d%s%*c%d%d",&stu.num,stu.name,&stu.sex,&stu.score);
  if (stu.sex == 1)
  {
   head = CreatMale(head,stu);//男的
  }
 }

 fclose(fp);

 Print(head);
}

解决方案二:

http://www.docin.com/p-752391650.html

解决方案三:

1、链表的增删插改
2、文件读写

时间: 2024-09-20 05:30:55

数据文件-题目:学生顺序表的处理的相关文章

数据文件-学生顺序表的处理,看清楚是 顺序表,只求代码和相关注释,明日要上交,急~~~

问题描述 学生顺序表的处理,看清楚是 顺序表,只求代码和相关注释,明日要上交,急~~~ 在一个数据文件中存放若干学生数据记录,每条记录都有如下数据项:学号,姓名,性别,成绩. 编一个程序,采用 顺序存储结构 存储这批数据,并对该数据进行排序.要求:数组前部为男同学,后部为女同学,并且男女同学都按成绩递减排序,分别计算男生合格率.女生合格率.全班的成绩平均分,并把排序后的学生数据记录及计算结果存入另一个数据文件中. 解决方案 这个很多语言很多方法都可以实现 简单点的用html做前台 php从数据库

数据-学生顺序表的处理。。。看清楚是顺序表!!!

问题描述 学生顺序表的处理...看清楚是顺序表!!! 课题内容: 在一个数据文件中存放若干学生数据记录,每条记录都有如下数据项:学号,姓名,性别,成绩. 编一个程序,采用 顺序存储结构 存储这批数据,并对该数据进行排序.要求:数组前部为男同学,后部为女同学,并且男女同学都按成绩递减排序,分别计算男生合格率.女生合格率.全班的成绩平均分,并把排序后的学生数据记录及计算结果存入另一个数据文件中. 先用一个Seqlist.cpp定义学生成绩信息顺序表的类型和基本运算函数 #include #inclu

oracle 12c R1 在线迁移数据文件、在线迁移表分区或者子分区例子

在线重定义数据文件: 在oracle 12c R1之前的版本中,如果在线移动数据文件需要将表空间或者数据文件离线,然后操作系统mv,recover后online数据文件或者表空间,在oracle 12c R1后可以直接在线重定义数据文件,这个过程用户可以进行查询.DML以及DDL的任务,另外数据文件也可以直接在存储设备间迁移,比如ASM到文件系统的相互迁移. SQL> select name from v$datafile; NAME ------------------------------

Oracle的表空间与数据文件简介

一.概念 表空间:是一个或多个数据文件的逻辑集合 表空间逻辑存储对象:永久段-->如表与索引 临时段-->如临时表数据与排序段 回滚段-->用于事物回滚或闪回内存的撤销数据 表空间分类:系统表空间(system.sysaux),非系统表空间 一个表空间至少包含一个数据文件,一个数据文件只能属于一个表空间. 不可或缺的几个表空间: SYSTEM --->字典表空间,不能被损坏 UNDO    --->dml,dql把数据快照到此,数据提交即消失(用于恢复) SYSAUX    

Oracle的数据库、表空间及数据文件简介

数据文件是数据库的物理存储单位,而表空间TableSpace则是数据库的逻辑组成部分.数据库的数据是存储在表空间中的,而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间.一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行. 数据库,表空间,数据文件是紧密关联的,但它们有着重要的区别: 数据库和表空间 一个Oracle数据库由一个或多个叫做表空间的逻辑存储单元组成,表空间存储了所有数据库的数据. 表空间和数据文件 在Or

Oracle 表空间与数据文件

--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念     表空间:是一个或多个数据文件的逻辑集合     表空间逻辑存储对象:永久段-->如表与索引                         临时段-->如临时表数据与排序段                      回滚段-->用于事物回滚或闪回内存的撤销数据     表空间分类:系统表空间(sys

[20160329]表空间与数据文件.txt

[20160329]表空间与数据文件.txt --昨天跟别人聊天,提到招聘DBA,一些dba这些基本的概念不清楚. --表空间可以是一个逻辑的概念,包含多个数据文件.而一个数据文件仅仅属于一个表空间. --表空间offline,一般不需要recover 恢复.除非加入immediate 参数. --而数据文件offline,一定需要恢复,才能online.如果是非归档模式必须在后面加入drop参数(自己曾经对于这存在混乱). --不要误解后面这个drop不是删除的意思,我以前理解就存在错误. -

数据文件、表空间offline用法及区别

对数据库的脱机包括数据文件的脱机和对表空间的脱机,表空间脱机实际就是表空间对应的所有数据文件脱机. 1.         数据文件OFFLINE 数据文件添加到表空间之后不能够被删除的,没有语法支持这么做,如果想不使用该数据文件,唯一是将数据文件设置为OFFLINE状态.执行以下步骤将数据文件设置为OFFLINE状态: 1)         如果是归档模式可以执行如下SQL设置数据文件的状态为OFFLINE: ALTER DATABASE DATAFILE 'XXXX.DBF' OFFLINE;

创建表空间、用户、扩容、移动数据文件

1.创建新的表空间: 2.创建用户: 3.通过修改文件大小与增加文件的方式扩容表空间: 4.人为移动数据文件,检验创建表的效果: 1.创建新的表空间: SQL> create tablespace test_data   2  logging   3  datafile '/opt/oracle/oradata/bisal/test_data_01.dbf'   4  size 10M   5  autoextend on   6  next 10m maxsize 2000m   7  ext