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

#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();

}

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

全部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式面试中常见的编程题目

以下内容源于网络资料的学习整理,如有侵权,请告知删除。 目录 1、将字符串反转 2、数字翻转和回文判断 3、大小端问题 (1)判断大小端 (2)大小端转换 4、实现函数memcpy(), strcpy(), strcmp(), strc…

用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题

用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 提示找不到表,我去看了一下,丢失了很多个表; 问题: 直接拷贝data下的数据库数据进行备份…

回旋矩形C语言,C语言回旋函数解释下,该如何处理

当前位置:我的异常网 C语言 C语言回旋函数解释下,该如何处理C语言回旋函数解释下,该如何处理www.myexceptions.net 网友分享于:2013-06-08 浏览:30次C语言回旋函数解释下给定两个整数M,N,生成一个M*N的矩阵,矩阵中元…

JUnit4概述

JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。先简单解释一下什么是Annotation,这个单词一般是翻译成元数据。元数据是什么?元数据就是描述数据的数据。也就是说,这个东西在…

嵌入式面试中常见的问答题(线程进程、TCP等)

以下内容源于网络资料的学习整理,如有侵权,请告知删除。 一、线程、进程的区别联系 见https://blog.csdn.net/oqqHuTu12345678/article/details/72637318的表格 个人理解:进程相当于一个运行中的程序,线程相当于程序中的某些函数…

c语言读取文件到结构体数组,有关文件读写到结构体数组问题;

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼typedef struct IMG{char *name;int weight;int height;}IMG;这是我的结构体存的是 图片的名字 宽度 高度void readWeightHeight(void){FILE *fpbmp;//FILE *fpm;char filename[54];char *bmpname NULL;long Handle;int i 0;struc…

正则表达式30分钟入门教程(转)

分享到一键分享QQ空间新浪微博百度云收藏人人网腾讯微博百度相册开心网腾讯朋友百度贴吧豆瓣网搜狐微博百度新首页QQ好友和讯微博更多...百度分享首页 | 正则表达式30分钟入门教程 | 常用正则表达式| 正则表达式速查表 | 正则表达式测试工具 | 正则表达式 | 正则练习器在线版 正…

进程、线程简介

以下内容源于网络资源的学习整理,如有侵权,请告知删除。 参考博客 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html(通俗理解) https://blog.csdn.net/chen_geng/article/details/51613445(表格…

使用keil建立标准STM32工程模版(图文详细版!)

1. 模板工程的创建(超级详细版,使用的是keil 4.5版本) 1.1创建工程目录 良好的工程结构能让文件的管理更科学,让开发更容易更方便,希望大家养成良好的习惯,使用具有合理结构的工程目录,当你着手于较大的软件项目时&a…

android竖直和横向,如何在android中为纵向和横向模式定义不同的控件

定义,在这两种资源的文件出现在你的代码 并在onCreate()在所有视图中Activity可以检查方向绑定的意见,你的类的对象。示例。在这里我们有包含在这两个文件的ImageView的,并在画像文件有一个TextView和景观它包含Button代替TextViewmy_layout.…

正则表达式匹配多个字符串中的一个

正则表达式匹配多个字符串中的一个 当我们采集数据时&#xff0c;会用到正则匹配功能 (前缀)(?<content>[\s\S]*?)(后缀) 例如采集产品多图时&#xff0c;前缀与后缀部分一般情况下是不相同的&#xff0c;这就需要用到正则的“|” (href"|src")(?<conten…

与驱动有关的面试问题

以下内容源于网络资料的整理学习。 参考博客 嵌入式驱动那年的笔试面试-有干货_BeyondTheBoundary的博客-CSDN博客_芯动科技嵌入式笔试 嵌入式驱动工程师面试题集锦_shx516857593的博客-CSDN博客 嵌入式面试中可能问到的题目和答案整理&#xff08;内核驱动篇&#xff09;_…

爬虫那些事儿-- 简介

从事爬虫相关的工作已经两年多了。简要做下总结。 爬虫(Crawler)&#xff0c;有些也叫蜘蛛&#xff08;Spider&#xff09;&#xff0c;用来从互联网下载网页。是搜索引擎的重要组成。爬虫是搜索引擎的数据来源&#xff0c;是数据的入口。爬虫的基本思想是认为整个互联网类似于…

android模拟机新闻APP,DavidTGNewsProject

DavidTGNewsProject##【Android】最新主流新闻app功能实现。仿网易,搜狐等新闻客户端(原创作品&#xff0c;转载请说明出处)先给大家看一下效果图&#xff1a;这个项目总体来说虽然不是特别难&#xff0c;但是确实非常常用的功能。是业余时间自己写的一个小项目。以前我们写的时…

轻操作动作休闲单机游戏《狂斩三国2》评测

游戏类别&#xff1a;动作休闲单机游戏时隔一年&#xff0c;曾在国内和台湾手游市 场获得top1佳绩的《狂斩三国》再度归来&#xff01;其策略加动作的独特玩法在当时颠覆了玩家们对三国游戏的阵营认知。比传统策略更简单明快&#xff0c;比传统动作无脑砍更 具思考乐趣&#xf…

物联网简介

以下内容源于朱有鹏老师课程的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 本文档提供下载&#xff1a;提取码1111——物联网简介 1、什么是物联网 1.1.物联网的概念和发展历程 1.1.1、认识物联网 &#xff08;1&#xff09;百度百科中物联网定义 &#xff08;…

php计算代码运行时间与内存使用的一段代码

计算运行时间及内存使用&#xff0c;代码如下&#xff1a; <?php //开始计时 $HeaderTime microtime(true);//参数true表示返回浮点数值//代码//...printf(" total run: %.2f s<br>". "memory usage: %.2f M<br> ", microtime(true)-$Hea…

Mysql语句与应用

2019独角兽企业重金招聘Python工程师标准>>> 1。正则表达式 搜索多个关键词&#xff0c;“或”, 等同 %上海% | %内蒙古% SELECT * FROM analysis_result WHERE result REGEXP 上海|内蒙古 LIMIT 1; "且" SELECT * FROM analysis_result WHERE id 1 AND …

android gb2312 utf-8,不同编码页面之间用form传值出现乱码问题解决方案 utf-8 到 gb2312...

相信有人也曾遇到过这种问题&#xff0c;今天将这个问题稍作整理发布出来。由于编码的问题传值出现乱码&#xff0c;一看到这样的情况&#xff0c;我们首先想到的是线面的两种解决办法&#xff1a;方案一&#xff1a;在接收参数页面进行转码 (这是较为理想的解决办法)方案二&a…

颜色的数字化描述(RGB与YUV的简介)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;YUV和RGB的相互转换实验_Geek.Fan的博客-CSDN博客 &#xff08;2&#xff09; 工作中用到的一些基础知识 &#xff08;3&#xff09;YUV422 YUV420 Planar \ Se…