学生信息的读取与重排

有一个记录学生信息的文件,每一行记录一名学生的信息,格式入下 学号   姓名   性别   分数 1   分数 2   分数 3\n.

要求:( 1)读取文件的内容,串成一个链表。

(2)按照总分递减排序将结果保存到原文件.

右键编译项目名->调试->命令行参数里面添加要读取与修改的学生信息文本.

以结构体数组作为载体进行排序与传递

Func.h

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define SWAP(a,b){pStud temp;temp=a;a=b;b=temp;}

typedef struct stud{

int num;

int sex;

char name[20];

float score1;

float score2;

float score3;

struct stud* pnext;

}Stud,* pStud;

void scan_fp_list(pStud *,pStud *,FILE *);

float sum_score(pStud *);

void strc_new(pStud *,pStud *);

int compare(const void* ,const void *);

void str_cpy(pStud *,pStud *);

void a_quicksort(pStud *,int ,int );

int partition(pStud* ,int ,int );

List_txet.c

#include"func.h"

void scan_fp_list(pStud *pphead,pStud *pptail,FILE *fp)

{

pStud pnew=(pStud)malloc(sizeof(Stud));

memset(pnew,0,sizeof(Stud));

fscanf(fp,"%d%s%d%f%f%f",&pnew->num,pnew->name,&pnew->sex,&pnew->score1,&pnew->score2,&pnew->score3);

if(*pphead==NULL)

{

*pphead=pnew;

*pptail=pnew;

}else{

pnew->pnext=*pphead;

*pphead=pnew;

}

}

float sum_score(pStud *pphead)

{

return((*pphead)->score1+(*pphead)->score2+(*pphead)->score3);

}

void strc_new(pStud *pphead1,pStud *pptail1)

{

pStud pnew=(pStud)malloc(sizeof(Stud));

memset(pnew,0,sizeof(Stud));

if(*pphead1==NULL)

{

*pphead1=pnew;

*pptail1=pnew;

}else{

pnew->pnext=*pphead1;

*pphead1=pnew;

}

}

void str_cpy(pStud *a,pStud *phead1)

{

int i;

pStud pcur=*phead1;

for(i=4;i>=0;i--,pcur=pcur->pnext)

{

strcpy(pcur->name,a[i]->name);

pcur->num=a[i]->num;

pcur->score1=a[i]->score1;

pcur->score2=a[i]->score2;

pcur->score3=a[i]->score3;

pcur->sex=a[i]->sex;

}

}

int partition(pStud* a,int left,int right)

{

int i,k;

k=left;

for(i=left;i<right;i++)

{

if(sum_score(&a[i])<sum_score(&a[right]))

{

SWAP(a[i],a[k]);

k++;

}

}

SWAP(a[k],a[right]);

return k;

}

void a_quicksort(pStud *a,int left,int right)

{

int pivot;

if(left<right)

{

pivot=partition(a,left,right);

a_quicksort(a,left,pivot-1);

a_quicksort(a,pivot+1,right);

}

}

Main.c

#include"func.h"

int main(int argc,char *argv[])

{

FILE *fp,*fp1;

int i;

int num=5;

pStud phead=NULL,ptail=NULL;

pStud phead1=NULL,ptail1=NULL;

pStud pcur=NULL,pcur1=NULL;

pStud a[5];

fp=fopen(argv[1],"r+");

for(i=0;i<num;i++)

{

scan_fp_list(&phead,&ptail,fp);

}

fclose(fp);

for(i=0;i<5;i++,phead=phead->pnext)

{

a[i]=phead;

}

a_quicksort(a,0,4);

for(i=0;i<5;i++)

{

strc_new(&phead1,&ptail1);

}

str_cpy(a,&phead1);

fp1=fopen(argv[1],"w");

for(i=0;i<num;i++)

{

fprintf(fp1,"%d %s %d  %5.2f %5.2f %5.2f\n",phead1->num,phead1->name,phead1->sex,phead1->score1,phead1->score2,phead1->score3);

phead1=phead1->pnext;

}

fclose(fp1);

system("pause");

return 0;

}

时间: 2024-08-24 16:52:25

学生信息的读取与重排的相关文章

【转载】C语言综合实验1—学生信息管理系统

http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html 实验题目:学生信息管理系统 实验要求:用户可以选择1-7可以分别进行学生信息的查看.添加.删除,修改,计算平均成绩,保存,退出系统操作. 提示:用一个结构体类型表示学生信息 typedef struct node /*定义结构体*/ { int num; //学号 char name[15];//姓名 char sex[9]; //性别 int age; //年龄 int e

学习练习 读取学生信息表并添加数据

1 <%@page import="java.sql.*"%> 2 <%@page import="java.sql.DriverManager"%> 3 <%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5 <!DOCTYPE html

学生信息管理系统修改

北京工业大学耿丹学院 c语言设计课程报告   课程设计名称:高级语言程序设计 专业班级:计算机科学与技术1 姓名:吴双 学号:150809201   2016年5月10日 一 对c语言指针链表的体会 ------------------------ 二 修改学生信息管理系统 ------------------------ 三 体会 ------------------------ 一 对c语言指针链表的体会 1.指针 简单来说,指针是一个存储计算机内存地址的变量. 用 int *ptr 这种形

学生信息管理系统

根据资料显示,那么,如果写一个字符串到一个文件中,是什么方式呢?显示到屏幕上是默认的输出文件,如果是硬盘中的一个文件,首先要打开一个文件,然后才能往里写,那么就要告诉程序这个文件在什么地方,按照什么样的方式打开(读.写.读和写.添加.覆盖等),然后打开后要给这个打开的文件一个符号(指针变量),表示后续的读和写都是针对这个文件的,而不是到屏幕的,这个指针变量以后就代表了文件自身了. 在学生信息管理系统中,需要同时保存一个学生的姓名,性别,年龄等信息,那么设置变量保存很多同学的这些信息就有点不太方便

【C项目】 文件,结构体,链表,排序, 学生信息管理系统

1.密码登录: 2.通过键盘输入学生信息,包括学生学号.姓名.成绩: 3.将输入的信息保存到指定文件中: 4.从文件中读取学生信息: 5.显示全部学生信息: 6.按学生总分进行降序排序: 7.删除学生信息: 8.查找学生信息,可以通过学号查找,也可以通过姓名查找: 9.统计学生信息,统计出最高分和学生人数: 10.退出系统: 源代码: [email protected]:~$ cat main.c  #include<stdio.h> #include<stdlib.h> #inc

创建一个数组,数组中保存一批量的学生信息,把该数组信息储存到磁盘上,并能解归档出来

/*2.创建一个数组,数组中保存一批量的学生信息,把该数组信息储存到磁盘上,并能解归档出来*/ #import <Foundation/Foundation.h>#define path @"/Users/qianfeng/Desktop/hehe/5.plist"int main(int argc, const char * argv[]) {    @autoreleasepool {                NSMutableArray *marray = [[

简易C++学生信息管理系统

许久之前,在vector读写那篇博客末尾.本人装13说要用C++完成简易的图书馆管理系统. But, = =期间遇到一个难以攻克的难题.在对vector<Struct>读写时,会出现地址冲突.虽然在stackOverFlow发布过问题,也查找过相关资料. 很不幸运,还是没能解决. = = 没办法,只是菜鸟. -------------------------------------------------------- 分割线 ---------------------------------

学生信息管理系统 1.0

学生信息管理系统V1.0 1.实现用户的注册与登录功能. 1.1:注册时检测用户名,如果有重复则需要重新输入,用户信息存入数据库. 1.2:登录时,有验证码验证. 2.实现用户查询学生表的基本信息. 3.用户可以更改.删除学生表信息. 4.系统可以正确显示系统时间. 5.系统正确显示用户权限(功能暂未实现). 因为很多东西还没有学到,只能用最基础的代码实现功能. 1)欢迎页面 1 <%@ page language="java" contentType="text/ht

学习学生信息管理系统

北京工业大学耿丹学院               C语言课程设计报告   课程设计名称:高级语言程序设计 专业班级:计算机科学与技术1 姓名:吴双 学号:150809201   2016年5月1日                 这次作业的目的是阅读并理解学生信息管理系统.   #include"stdio.h" #include"stdlib.h" #include"string.h" #include"conio.h" #