#include

#include

#include

#include

#include

#include

void pause();

typedef struct STUDENT

{

char studentNumber[20]; //学生学号

char studentName[20]; //学生姓名

char className[20]; //班级名称

float chinese; //语文绩

float maths; //数学成绩

float english; //外语成绩

float total;

float average; //平均值

struct STUDENT *next; //指向下个数据

struct STUDENT *last; //指向上个

}STUDENT;

static STUDENT *first=NULL; //链表头

static STUDENT *end=NULL;

STUDENT *Malloc(void)

{

STUDENT *p;

p=(STUDENT*)malloc(sizeof(STUDENT));

if(p==NULL)

return NULL;

memset(p->studentNumber,' ',20);

memset(p->studentName,' ',20);

memset(p->className,' ',20);

p->chinese=0。

0;

p->maths=0。0;

p->english=0。0;

p->total=0。0;

p->average=0。0;

p->next=NULL;

p->last=NULL;

return p;

}

void Insert(STUDENT *t) //链表插入

{

STUDENT *p;

if (first==NULL)

first=t;

else

{ p=first;

while (p->next)

p=p->next;

p->next=t;

t->last=p;

end=t;

}

}

void loaddatabase() //加载数据

{

FILE *fp;

STUDENT *p;

fp=fopen("student。

txt","r");

if(!fp)

{

printf("打开文件出错

");

pause();

return;

}

p=Malloc();

//first=p;

while(fscanf(fp,"%s%s%s%f%f%f%f%f",

p->studentNumber,p->studentName,p->className,

&(p->chinese),&(p->maths),&(p->english),&(p->total),&(p->average))>0)

{

Insert(p);

p=Malloc();

}

fclose(fp);

printf(" 欢迎使用学生成绩管理系统

");

printf("

数据加载成功

");

system("pause");

system("cls");

}

void savedata() //保存数据

{

FILE *fp;

STUDENT *p;

if (first==NULL )

{

printf("没有学生记录

");

pause();

//return;

}

fp=fopen("student。

txt","w ");

if(!fp)

{

printf("打开文件出错

");

pause();

return;

}

p=first;

while(p)

{

fprintf(fp,"%s %s %s %f %f %f %f %f

",p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

p=p->next;

}

fclose(fp);

printf("数据保存成功

");

}

void add() //添加记录

{

STUDENT *p;

STUDENT *newstudent=Malloc();

printf("请输入学号:");

scanf("%s",newstudent->studentNumber);

printf("请输入姓名:");

scanf("%s",newstudent->studentName);

printf("请输入班级名称:");

scanf("%s",newstudent->className);

printf("请输入语文成绩:");

scanf("%f",&newstudent->chinese);

printf("请输入数学成绩:");

scanf("%f",&newstudent->maths);

printf("请输入外语成绩:");

scanf("%f",&newstudent->english);

newstudent->total=newstudent->chinese newstudent->maths newstudent->english;

newstudent->average=(newstudent->total)/3;

Insert(newstudent);

}

void pause()

{

system("pause");

system("cls");

}

void printall() //打印全部记录

{

STUDENT *p;

p=first;

printf("

");

printf("学号姓名班级语文数学外语总分平均分

");

while (p)

{

printf("%s%s%s%3。

1f%3。1f%3。1f%3。1f%3。1f

",p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

p=p->next;

}

printf("

");

}

void findbyname() //按姓名查询

{ int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("请输入学生姓名:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentName,buf)==0)

{ printf("%s %s %s %3。

1f %3。1f %3。1f %3。1f %3。1f

",

p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

i ;

break;

}

p=p->next;

}

if (i==0)

printf("sorry,没找到改学生记录

");

}

void findbynumber() //按学号查询

{

int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("请输入学生学号:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentNumber,buf)==0)

{ printf("%s %s %s %3。

1f %3。1f %3。1f %3。1f %3。1f

",

p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

i ;

}

p=p->next;

}

if (i==0)

printf("sorry,没找到改学生记录

");

}

void findbyclass() //按班级名查询

{ int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("请输入班级名:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->className,buf)==0)

{ printf("%s %s %s %3。

1f %3。1f %3。1f %3。1f %3。1f

",

p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

i ;

}

p=p->next;

}

if (i==0)

printf("sorry,没找到改学生记录

");

}

int collect(){ //统计分数

int totalstudentnum=0;

double totalch=0。

0,totalmh=0。0,totalen=0。0;

double totalscore=0。0;

STUDENT *p;

p=first;

while (p)

{

totalscore=totalscore p->total;

totalch=totalch p->chinese;

totalmh=totalmh p->maths;

totalen=totalen p->english;

totalstudentnum ;

p=p->next;

}

printf("人数:%d 整体总分:%。

1f 整体平均分:%。1f

",

totalstudentnum,totalscore,(totalscore/totalstudentnum));

printf("语文:%。

1f 数学:%。1f 外语:%。1f

",totalch,totalmh,totalen);

printf("语文平均分:%。1f 数学平均分:%。1f 外语平均分:%。1f

",

(totalch/totalstudentnum),(totalmh/totalstudentnum),(totalen/totalstudentnum));

}

int delbyname()

{ int i=0;

STUDENT *p,*pnext,*pbuf,*plast;

char buf[20];

p=first;

printf("请输入需删除人员的姓名:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentName,buf)==0)

{

i ;

if (first==p)

{

pbuf=first;

if (first->next==NULL) end=NULL;

first=first->next;

if (first) first->last=NULL;

free(pbuf);

printf("删除成功

");

return 0;

}

plast->next=p->next;

if (p->next=NULL) end=p->last;

free(p);

printf("删除成功

");

}

plast=p;

p=p->next;

}

if (i==0)

printf("sorry,没找到该学生记录

");

}

int delbynumber()

{ int i=0;

STUDENT *p,*pnext,*pbuf,*plast;

char buf[20];

p=first;

printf("请输入需删除人员的学号:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentNumber,buf)==0)

{

i ;

if (first==p)

{

pbuf=first;

if (first->next==NULL) end=NULL;

first=first->next;

//first->last=NULL;

if (first) first->last=NULL;

free(pbuf);

printf("删除成功

");

return 0;

}

plast->next=p->next;

if (p->next=NULL) end=p->last;

free(p);

printf("删除成功

");

}

plast=p;

p=p->next;

}

if (i==0)

printf("sorry,没找到该学生记录

");

}

void changebynumber()

{

int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("请输入需修改人员的学号:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentNumber,buf)==0)

{

printf("请输入学号:");

scanf("%s",p->studentNumber);

printf("请输入姓名:");

scanf("%s",p->studentName);

printf("请输入班级名称:");

scanf("%s",p->className);

printf("请输入语文成绩:");

scanf("%f",&p->chinese);

printf("请输入数学成绩:");

scanf("%f",&p->maths);

printf("请输入外语成绩:");

scanf("%f",&p->english);

p->total=p->chinese p->maths p->english;

p->average=(p->total)/3;

printf("修改成功");

i ;

return;

}

p=p->next;

}

if (i==0)

printf("sorry,没找到改学生记录

");

}

void changebyname()

{

int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("请输入需修改人员的姓名:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentName,buf)==0)

{

printf("请输入学号:");

scanf("%s",p->studentNumber);

printf("请输入姓名:");

scanf("%s",p->studentName);

printf("请输入班级名称:");

scanf("%s",p->className);

printf("请输入语文成绩:");

scanf("%f",&p->chinese);

printf("请输入数学成绩:");

scanf("%f",&p->maths);

printf("请输入外语成绩:");

scanf("%f",&p->english);

p->total=p->chinese p->maths p->english;

p->average=(p->total)/3;

printf("修改成功

");

i ;

return;

}

p=p->next;

}

if (i==0)

printf("sorry,没找到改学生记录

");

}

void sortbychinese() //排序

{

STUDENT *p,*p1,*p2,*plast=NULL,*pnext=NULL;

for(p1=end->last;p1;p1=p1->last)

{

// printf("外层 %f

",p1->chinese);

// printall();

// if (p1->next==NULL) p1=p1->last;

for(p2=first,p=first->next;p2!=p1->next;p=p->next,p2=p2->next) //p指向P2后面一个数据

{

// printf("调整之前p=%f p2=%f

",p->chinese,p2->chinese);

if ((p->chinese)-(p2->chinese)>0)

{

//printf("1

");

plast=p2->last; //保存前节点

pnext=p->next; //保存后节点

if (plast) plast->next=p; //前节点接后面

else

{ first=p;

p->last=NULL;}

if (pnext) pnext->last=p2; //后节点接前面

else

{end=p2;

p2->next=NULL;

}

if (p1==p) p1=p2; //外层指针校正

else if (p1==p2)

p1=p;

// printf("2

");

p->next=p2; //节点交换

p2->last=p;

p2->next=pnext;

// printf("3

");

p->last=plast;

// printf("4

");

// else

//p->last=NULL;

p2=p;

p=p2->next;

//if (p==NULL) break;

//printf("3

");

//if (p->last==first) break;

// printall();

//printf ("5

");

// printf("调整之后p=%f p2=%f

",p->chinese,p2->chinese);

}

}

}

//printall();

}

void sortbymaths() //排序

{

STUDENT *p,*p1,*p2,*plast=NULL,*pnext=NULL;

for(p1=end->last;p1;p1=p1->last)

{

// if (p1->next==NULL) p1=p1->last;

for(p2=first,p=first->next;p2!=p1->next && p;p=p->next,p2=p2->next) //p指向P2后面一个数据

{

if ((p->maths)-(p2->maths)>0)

{

//printf("1

");

plast=p2->last; //保存前节点

pnext=p->next; //保存后节点

if (plast) plast->next=p; //前节点接后面

else

{ first=p;

p->last=NULL;}

if (pnext) pnext->last=p2; //后节点接前面

else

{end=p2;

p2->next=NULL;

}

if (p1==p) p1=p2; //外层指针校正

else if (p1==p2)

p1=p;

// printf("2

");

p->next=p2; //节点交换

p2->last=p;

p2->next=pnext;

// printf("3

");

p->last=plast;

// printf("4

");

// else

//p->last=NULL;

p2=p;

p=p2->next;

//if (p==NULL) break;

//printf("3

");

//if (p->last==first) break;

// printall();

// printf ("5

");

}

}

}

//printall();

}

void sortbyenglish() //排序

{

STUDENT *p,*p1,*p2,*plast=NULL,*pnext=NULL;

for(p1=end->last;p1;p1=p1->last)

{

// if (p1->next==NULL) p1=p1->last;

for(p2=first,p=first->next;p2!=p1->next && p;p=p->next,p2=p2->next) //p指向P2后面一个数据

{

if ((p->english)-(p2->english)>0)

{

//printf("1

");

plast=p2->last; //保存前节点

pnext=p->next; //保存后节点

if (plast) plast->next=p; //前节点接后面

else

{ first=p;

p->last=NULL;}

if (pnext) pnext->last=p2; //后节点接前面

else

{end=p2;

p2->next=NULL;

}

if (p1==p) p1=p2; //外层指针校正

else if (p1==p2)

p1=p;

// printf("2

");

p->next=p2; //节点交换

p2->last=p;

p2->next=pnext;

// printf("3

");

p->last=plast;

// printf("4

");

// else

//p->last=NULL;

p2=p;

p=p2->next;

//if (p==NULL) break;

//printf("3

");

//if (p->last==first) break;

// printall();

// printf ("5

");

}

}

}

}

void sortbytotal() //排序

{

STUDENT *p,*p1,*p2,*plast=NULL,*pnext=NULL;

for(p1=end->last;p1;p1=p1->last)

{

// if (p1->next==NULL) p1=p1->last;

for(p2=first,p=first->next;p2!=p1->next && p;p=p->next,p2=p2->next) //p指向P2后面一个数据

{

if ((p->total)-(p2->total)>0)

{

// printf("1

");

plast=p2->last; //保存前节点

pnext=p->next; //保存后节点

if (plast) plast->next=p; //前节点接后面

else

{ first=p;

p->last=NULL;}

if (pnext) pnext->last=p2; //后节点接前面

else

{end=p2;

p2->next=NULL;

}

if (p1==p) p1=p2; //外层指针校正

else if (p1==p2)

p1=p;

// printf("2

");

p->next=p2; //节点交换

p2->last=p;

p2->next=pnext;

// printf("3

");

p->last=plast;

// printf("4

");

// else

//p->last=NULL;

p2=p;

p=p2->next;

//if (p==NULL) break;

//printf("3

");

//if (p->last==first) break;

//printall();

// printf ("5

");

}

}

}

}

void exit_free()

{

STUDENT *p,*p1;

p=first;

while (p)

{

p1=p;

free(p1);

p=p->next;

}

}

void ver()

{

system("cls");

printf("

");

printf(" 学生成绩管理系统 v1。

0");

printf("

");

printf("作者 风中的纸屑

");

}

int menu(void)

{

int choose;

//system("cls");

printf("

");

printf(" 1: 显示所有学生的信息 |");

printf(" 2: 按姓名查询 |

");

printf(" 3: 按学号查询 |");

printf(" 4: 按班级查询 |

");

printf(" 5: 通过姓名删除学生 | ");

printf(" 6:按学号删除学生 |

");

printf(" 7: 按学号修改学生成绩 |");

printf(" 8: 按姓名修改学生成绩 |

");

printf(" 9: 添加 |");

printf(" 10: 语文排序 |

");

printf(" 11: 数学排序 |");

printf(" 12: 外语排序 |

");

printf(" 13: 总分排序 |");

printf(" 14:汇总 |

");

printf(" 15:保存所有学生信息 |");

printf(" 16:清屏 |

");

printf(" 17: 版本 |");

printf(" 18: 退出 |

");

printf("

");

printf(" ");

printf(" 请输入对应数字:");

scanf("%d",&choose);/*取得用户的选择*/

switch(choose)

{

case 1:

system("cls");

printall();/*显示所有学生的信息*/

printf("

");

collect();

break;

case 2:

findbyname();

break;

case 3:

findbynumber();/*根据用户输入的学号显示该学生的信息*/

break;

case 4:

findbyclass();

break;

case 5:

printall();

delbyname();

break;

case 6:

printall();

delbynumber();

break;

case 7:

printall();

changebynumber();/*根据用户输入的学号修改学生成绩*/

break;

case 8:

printall();

changebyname();/*保存数据*/

break;

case 9:

add();

break;

case 10:

system("cls");

sortbychinese();

printall();

break;

case 11:

system("cls");

sortbymaths();

printall();

break;

case 12:

system("cls");

sortbyenglish();

printall();

break;

case 13:

system("cls");

sortbytotal();

//sortbytotal();

printall();

break;

case 14:

collect();

break;

case 15:

savedata();

break;

case 16:

system("cls");

break;

case 17:

system("cls");

ver();

break;

case 18:

exit_free();

exit(1);

break;

default: system("cls"); break;

}

}

int main()

{

loaddatabase();

while (1)

menu();

}

这是我以前写得,基本符合楼主要求,贴上来了。

全部

c语言建立一个链表,每个结点包括姓名和成绩,求C语言几道题的答案~~拜托了~~...相关推荐

  1. 建立一个按年龄排序的有序链表,每个结点包括学号、姓名、性别、年龄。建立一个新的结点,通过年龄将此结点插入到链表中去,使之仍然有序

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容12]建立一个按年龄排序的有序链表,每个结点包括学号.姓名 ...

  2. 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。(自己编程)

    建立一个链表,每个结点包括:学号.姓名.性别.年龄.输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去.最近接触到了链表的编程学习,遇到这样的比较基础的编程,程序表现大致分为几个步骤 ...

  3. 单表带换密码C语言程序,帮忙写个C语言程序!题目在下面!关于链表的。还没学,题目:“建立一个链表,逐个输入字符,每一个字符存放在一个链。...

    帮忙写个C语言程序!题目在下面!关于链表的.还没学,题目:"建立一个链表,逐个输入字符,每一个字符存放在一个链. Posted By : Admin 2016-05-16 21:16 网友问 ...

  4. 使用html 语言建立一个简单的网页,如何用记事本建立简单的网页(1).doc

    第九章 网页制作 实验一 用记事本建立简单的HTML文件 [实验目的] 学会用HTML语言建立一个简单的网页. [实验内容] 建立一个网页,布局自定,包括自我介绍.图片.自己的电子信箱地址等,要求在标 ...

  5. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  6. c语言建立动态链表ppt,C语言链表讲解.ppt

    第十一章 链表;例:跳马.依下图将每一步跳马之后的位置(x,y)放到一个"结点"里,再用"链子穿起来",形成一条链,相邻两结点间用一个指针将两者连到一起.;依上 ...

  7. r语言svr模型_使用R语言建立一个决策树回归模型

    决策树是一种简单但使用广泛的分类算法,根据目标变量的类型,决策树分为分类决策树(目标变量为因子型)与回归决策树(目标变量为连续数值型).在这里,我们使用R建议一个回归决策树模型. 决策树简单介绍 对于 ...

  8. c读取txt文件内容并建立一个链表_C++链表实现学生信息管理系统

    可以增删查改,使用链表存储,支持排序以及文件存储及数据读取,基本可以应付期末大作业(狗头) 界面为 源代码为一个main.cpp和三个头文件,具体为 main.cpp #include <ios ...

  9. C语言构建一个链表以及操作链表

    #include <stdio.h> #include <malloc.h> #include <stdlib.h>struct Node{int data;str ...

最新文章

  1. iframe批量异步上传图片
  2. 判断变量是否为数组的几种方法
  3. mysql 取左_MySQL select语句从字符串左侧获取5个字符
  4. 性能测试中脚本怎么写_脚本在流程中的性能影响
  5. JavaFX技巧30:带有DropShadow的ScrollPane
  6. python字典遍历的几种方法(转)
  7. VGG Loss的Pytorch实现
  8. 伪标记是一种简单的半监督学习方法
  9. iOS贝塞尔曲线(UIBezierPath)的基本使用方法
  10. 量化指标公式源码_通达信低吸量化指标公式,通达信高抛低吸主图指标源码
  11. 兄弟7895dw粉盒清零_兄弟打印机2260D粉盒怎么清零?
  12. 广义线性模型和广义加法模型_广义线性模型代码
  13. HTML5期末大作业:商城网站设计——仿天猫商城(9页) HTML+CSS大作业: 网页制作作业_疫情防控网页设计...
  14. android 设置打印级别
  15. 极客日报:贾跃亭回应是否有回国打算:那必须的;顺丰将拿出 2 亿元给快递员加薪;OpenAI 宣布解散机器人团队
  16. Vue3:自定义指令directive
  17. 【自动化__持续集成】___java___构造方法
  18. 华为荣耀android进入,华为荣耀 进入工程模式的方法
  19. VS2019生成Steup文件在其他处理器运行
  20. java插入数据库字段过长,【mybatis插入过长数据发生错误_mybatis】 | IT修真院·坑乎...

热门文章

  1. 在线预览word,excel文档
  2. 位、字,字节与KB的关系?
  3. 揭秘一线互联网企业 前端JavaScript高级面试
  4. 七种常见的核酸序列蛋白编码能力预测工具 | ncRNAs | lncRNA
  5. 计算机二级考试Access教程
  6. 12.13记录//QQDemo示例程序源代码
  7. 脱机下载至校验成功的脚本
  8. 旅游服务商Bikego完成A轮融资,共建创投、马蜂窝投资
  9. new Date()时间
  10. MOSS点滴(2):自定义Application Page