| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5184 人关注过本帖, 1 人收藏
标题:关于数据结构中链表学习的实例--学生信息管理系统
只看楼主 加入收藏
希望5208
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-10-14
收藏(1)
 问题点数:0 回复次数:3 
关于数据结构中链表学习的实例--学生信息管理系统
程序代码:
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
typedef struct NODE{
char name[20];
int ID;
float score[3];
struct NODE *next;
} NODE;
int index=0;

//输入某个学生的成绩
NODE *Creat(int n){
NODE *phead,*p,*previous;
int i;
phead=(NODE*)malloc(sizeof(NODE));
previous=phead;
previous->next=NULL;
for(i=0;i<n;i++){
p=(NODE*)malloc(sizeof(NODE));
printf("please input name,ID\n");
scanf("%s%d",&p->name,&p->ID);
printf("请输入3门成绩:\n");
scanf("%f%f%f",&p->score[0],&p->score[1],&p->score[2]);
previous->next=p;
p->next=NULL;
previous=p;
index++;
}
return phead;
}
//打印所有学生的成绩
void Print(NODE*phead){
NODE *ptemp;
ptemp=phead;
ptemp=ptemp->next;
while(ptemp!=NULL){
printf("---the student information---\n");
printf("姓名:%s\n",ptemp->name);
printf("学号:%d\n",ptemp->ID);
printf("成绩:%f\t%f\t%f\t\n",ptemp->score[0],ptemp->score[1],ptemp->score[2]);
ptemp=ptemp->next;
}
}
//插入某个学生的成绩
NODE* Insert(NODE *phead){
NODE *ptemp,*p1;
ptemp=phead;
p1=(NODE*)malloc(sizeof(NODE));
printf("请输入姓名,学号:\n");
scanf("%s%d",&p1->name,&p1->ID);
printf("请输入语文,数学,英语成绩:\n");
scanf("%f%f%f",&p1->score[0],&p1->score[1],&p1->score[2]);
p1->next=ptemp->next;
ptemp->next=p1;
index++;
return phead;
}
//删除某个学生的成绩
NODE* Delete(NODE*phead ,int i){
NODE *ptemp,*previous;
ptemp=phead;
ptemp=ptemp->next;
previous=ptemp;
while(ptemp!=NULL&&(ptemp->ID!=i)){
previous=ptemp;
ptemp=ptemp->next;
}
if(ptemp)
{
previous->next=ptemp->next;
free(ptemp);
printf("删除成功!\n");
}
return phead;
}
//计算所有学生的成绩
float AverageAll(NODE*phead){
NODE *ptemp;
ptemp=phead;
ptemp=ptemp->next;
int i=0;
float b,m,sum=0.0;
while(ptemp!=NULL){
m=ptemp->score[0]+ptemp->score[1]+ptemp->score[2];
sum=sum+m;
ptemp=ptemp->next;
i++;
}
b=sum/(i);
return b;
}
//计算某个学生的成绩
float AverageSigle(NODE*phead,int i){
NODE *ptemp;
ptemp=phead;
ptemp=ptemp->next;
float m;
while(ptemp->ID!=i&&ptemp!=NULL)
ptemp=ptemp->next;
if(ptemp)
m=(ptemp->score[0]+ptemp->score[1]+ptemp->score[2])/3;
return m;
}
//查找某个学生的信息
void Lookfor(NODE *phead,int i){
NODE *ptemp;
ptemp=phead;
ptemp=ptemp->next;
while(ptemp!=NULL&&(ptemp->ID!=i))
ptemp=ptemp->next;
if(ptemp)
{
printf("*********学生信息************\n");
printf("学号:%d\t姓名:%s\n",ptemp->ID,ptemp->name);
printf("第一门成绩:%f第二门成绩:%f第三门成绩:%f\n",ptemp->score[0],ptemp->score[1],ptemp->score[2]);
}
}
//修改学生的信息
void Revise_information(NODE*phead,int i){
NODE *ptemp;
ptemp=phead;
ptemp=ptemp->next;
while(ptemp!=NULL&&(ptemp->ID!=i))
{
ptemp=ptemp->next;
}
if(ptemp){
printf("请输入修改的姓名:");
scanf("%s",&ptemp->name);
printf("请输入要修改的学号:");
scanf("%d",&ptemp->ID);
printf("请输入要修改的成绩显3门:");
scanf("%f%f%f",&ptemp->score[0],&ptemp->score[1],&ptemp->score[2]);
printf("修改成功!\n");
}
}
//按照递增的顺序排列
NODE* Ascendline(NODE*phead){
NODE*ptemp,*previous,*p1;
int i;
for(i=0;i<index;i++){
ptemp=phead;
p1=ptemp;
previous=ptemp=ptemp->next;
ptemp=ptemp->next;
while(ptemp!=NULL){
float m,n;
m=ptemp->score[0]+ptemp->score[1]+ptemp->score[2];
n=previous->score[0]+previous->score[1]+previous->score[2];
if(n>m)
{
p1->next=ptemp;
previous->next=ptemp->next;
ptemp->next=previous;
}
p1=previous;
previous=ptemp;
ptemp=ptemp->next;

}

}
return phead;
}
//按照递减的顺序排列
NODE* Descendline(NODE*phead){
NODE*ptemp,*previous,*p1;
int i;
for(i=0;i<index;i++){
ptemp=phead;
p1=ptemp;
previous=ptemp=ptemp->next;
ptemp=ptemp->next;
while(ptemp!=NULL){
float m,n;
m=ptemp->score[0]+ptemp->score[1]+ptemp->score[2];
n=previous->score[0]+previous->score[1]+previous->score[2];
if(n<m)
{
p1->next=ptemp;
previous->next=ptemp->next;
ptemp->next=previous;
}
p1=previous;
previous=ptemp;
ptemp=ptemp->next;
}
}
return phead;
}
void menu(){
printf("*************学生管理系统************************\n");
printf("1.输入n个学生的成绩\n");
printf("2.打印学生的成绩\n");
printf("3.插入某个学生的信息和成绩\n");
printf("4.删除某个学生的信息和成绩\n");
printf("5.查找某个学生的信息和成绩\n");
printf("6.计算所有学生的信息和成绩\n");
printf("7.计算某个学生的信息和成绩\n");
printf("8.修改某个学生的信息和成绩\n");
printf("9.按照成绩的递增进行排序\n");
printf("10.按照成绩的递减顺序排列\n");
}#include"head.h"
void main(){
int n,i;
NODE *phead;
menu();
scanf("%d",&n);
while(n){
switch(n){
case 1:printf("请问要输入几个学生的信息:\n");
       scanf("%d",&i);
       phead=Creat(i);
       break;
case 2:Print(phead);
       break;
case 3:phead=Insert(phead);
       break;
case 4:printf("请输入要删除学生的学号:");
       scanf("%d",&i);
       Delete(phead,i);
       break;
case 5:printf("请输入要查找学生的学号:");
       scanf("%d",&i);
       Lookfor(phead,i);break;
case 6:printf("所有学生的平均成绩是:%f\n",AverageAll(phead));break;
case 7:printf("请输入要查找学生的学号:");
       scanf("%d",&i);
       printf("学号为%d的成绩是:%f\n",i,AverageSigle(phead,i));break;
case 8:printf("请输入要修改学生的学号:\n");
       scanf("%d",&i);
       Revise_information(phead,i);break;
case 9:phead=Ascendline(phead);printf("排序完成!\n");
       Print(phead);
       break;
case 10:phead=Descendline(phead);printf("排序完成!\n");
       Print(phead);
       break;
default:printf("输入错误!\n");break;
}
menu();
scanf("%d",&n);
}
}

搜索更多相关主题的帖子: 结构 管理系统 
2012-10-15 21:00
hh373231690
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:138
注 册:2012-10-13
收藏
得分:0 
回复 楼主 希望5208
这是作甚
2012-10-15 23:17
liman123
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:79
专家分:178
注 册:2012-10-6
收藏
得分:0 
是代码有错?希望别人帮你改吗?
2012-10-16 12:40
希望5208
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-10-14
收藏
得分:0 
希望与学数据结构的同学交流,希望有人能够优化
2012-10-16 16:07
快速回复:关于数据结构中链表学习的实例--学生信息管理系统
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015544 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved