| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1016 人关注过本帖
标题:简单学生管理系统
只看楼主 加入收藏
贪恋东
Rank: 1
等 级:新手上路
帖 子:19
专家分:2
注 册:2010-9-24
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:6 
简单学生管理系统
/* Note:Your choice is C IDE */
#include "stdio.h"
#define N 2


 struct student  /*定义一个结构体数组用来存放学生的相关信息:
                  姓名、学号、数学及英语成绩、2门课的平均成绩*/
 {
     char name[20];
     int num;
     float math;
     float eng;
    float aver_p; //每个人2门课的平均成绩
   
 };

void main()
{
 int i,j;
 float temp,max;
 float aver_am=0; //所有人数学平均成绩
 float aver_ae=0; //所有人英语平均成绩
 float aver_aa=0; //所有人2门课的平均成绩

 struct student stu[N];
 
 puts("请输入学生的相关数据:(姓名、学号、数学成绩、英语成绩)\n");
 
 for(i=0;i<N;i++)
 {
  scanf("%s%d%.2f%.2f\n",stu[i].name,&stu[i].num,&stu[i].math,&stu[i].eng);
  stu[i].aver_p=(stu[i].math+stu[i].eng)/2;
  aver_am+=stu[i].math; //先求出总成绩,在格式输出时除以N就得到平均成绩了
  aver_ae+=stu[i].eng;
  aver_aa+=(stu[i].math+stu[i].eng);
 }
 printf("所有学生的数学平均成绩为:%.2f \n",aver_am/N);
 printf("所有学生的英语平均成绩为:%.2f \n",aver_ae/N);
 printf("所有学生2门课的平均成绩为:%.2f \n",aver_aa/N);
 
 printf("*******************成 绩 单*******************\n");
 printf("学生姓名   学号    数学成绩   英语成绩   平均成绩 \n");  
 for(i=0;i<N;i++)   
 {     
 printf("   %s    %d    %.2f    %.2f    %.2f\n",stu[i].name,stu[i].num,stu[i].math,stu[i].eng,stu[i].aver_p);
 }   
     

for(i=0;i<N;i++)   //对每人的平均成绩冒泡排序,由大到小
    for(j=0;j<N-i;j++)            
     if(stu[i].aver_p<stu[i+1].aver_p)
     {
         temp=stu[i].aver_p;   
        stu[i].aver_p=stu[i+1].aver_p;
        stu[i+1].aver_p=temp;
     }         
        
  printf("平均分排序为:");
    for(i=0;i<N;i++)
     printf("%.2f ",stu[i].aver_p); //由大到小顺序输出

//求数学最高成绩,并输出对应的学生姓名
        for(i=0;i<N;i++) //对所有人数学成绩排序,输出最大
                 
         if(stu[i].math<stu[i+1].math)
           {
             max=stu[i].math;
            stu[i].math=stu[i+1].math;
            stu[i+1].math=max;
           }
        
        printf("数学最高分是:%.2f \n",stu[0].math);
        printf("学生姓名是:%s \n",stu[0].name);

//求英语最高成绩,并输出对应的学生姓名        
        for(i=0;i<N;i++)
        
         if(stu[i].eng<stu[i+1].eng)
           {
             max=stu[i].eng;
            stu[i].eng=stu[i+1].eng;
            stu[i+1].eng=max;
           }
        
        printf("英语最高分是:%.2f \n",stu[0].eng);
        printf("学生姓名是:%s \n",stu[0].name);

//求平均最高成绩,并输出对应的学生姓名        
        for(i=0;i<N;i++)
        
         if(stu[i].aver_p<stu[i+1].aver_p)
           {
               max=stu[i].aver_p;
            stu[i].aver_p=stu[i+1].aver_p;
            stu[i+1].aver_p=max;         
           }
        
        printf("平均分最高的是:%.2f ",stu[0].aver_p);
        printf("学生姓名是:%s ",stu[0].name);                     
}   
 
运行能成功,但输入数据后,结果不正确。请教高手。
原题是要求输入N个学生的信息 姓名、学号、数学成绩、英语成绩 然后输出这些信息,并将平均成绩排序,分别输出数学、英语和平均成绩的最高分及对应的学生
搜索更多相关主题的帖子: 系统 学生 管理 
2010-10-26 22:33
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:10 
#include<stdio.h>
#include<string.h>
#define MAXSIZE 100

typedef  struct
{
   char key[15];
   char  name[20];
   int age;

}DATA;
 
typedef   struct
{
     DATA  ListData[MAXSIZE+1];
       int Listlen;
}SeqListType;
void SeqListInit(SeqListType *SL)
{
    SL->Listlen=0;
}
void SeqListAll(SeqListType *SL)
{
int i;
for(i=1;i<=SL->Listlen;i++)
printf("%s%s%d\n",SL->ListData[i].key,SL->ListData[i].name,SL->ListData[i].age);

}



int SeqListAdd(SeqListType *SL,DATA data)
{
if(SL->Listlen>=MAXSIZE)
{
    printf("顺序表已满,不能再输入数据了!");
        return 0;
}
SL->ListData[++SL->Listlen]=data;
return 1;
}




DATA *SeqListFindByNum(SeqListType *SL,int i)
{
   
    if(i<1||i>=MAXSIZE)
    {       printf("要查找的序号错误,无法查找!");
            return NULL;
    }
   return &(SL->ListData[i]);
}


int SeqListFindBycont(SeqListType *SL,char *key)
{
 int i;
 for(i=1;i<SL->Listlen;i++)
     if(strcmp(SL->ListData[i].key,key)==0)
         return i;
     return 0;
}
void main()
{
    printf(" \t\t简 单 的 学 生 信 息 管 理 系 统\n\\n 程序:     本小程序功能是简单的进行学生信息的输入与查寻。\n  时间:2010.10.30.15:44\n\t");
   
    int i;
char key[15];
SeqListType SL;
DATA data ,*data1;
 SeqListInit(&SL);
do{
   printf("请输入学生的信息(学号,姓名,年龄):");
   fflush(stdin);
   scanf("%s%s%d\n",&data.key,&data.name,&data.age);
   if(data.age)
   {
       if(!SeqListAdd(&SL,data))
           break;
           
   }else break;

}while(1);


printf("\n顺序表中结点顺序为: \n");
SeqListAll(&SL);
fflush(stdin);

printf("请输入要查找的结点的序号: \n");
scanf("%d",&i);
data1=SeqListFindByNum(&SL,i);
if(data1)
printf("第%d个结点的学生信息为:  %s%s%d\n",i,data1->key,data1->name,data1->age);
fflush(stdin);

printf("请输入要查找的结点的关键字: \n");
scanf("%s",&key);
i=SeqListFindBycont(&SL,key);
data1=SeqListFindByNum(&SL,i);
if(data1)
printf("第%d个结点的学生信息为: %s%s%d\n",i,data1->key,data1->name,data1->age);
}

这是我自己写的,你可以借鉴一下.

经验积累中............
2010-10-30 23:36
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:0 
真的很简单
2010-10-31 09:19
浩凡儿
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:101
专家分:394
注 册:2010-10-30
收藏
得分:10 
#include<stdio.h>
#include<string.h>
#include<malloc.h>
 typedef struct
 {
 char name[20];
 char key[15];
 char Class[10];
 int age;

 }DATA;
 typedef struct node
 {
 
 DATA data;
 struct node *next;
 }ChainListType;

 ChainListType *ChainListAddFirst(ChainListType *head,DATA data)
 {
 ChainListType *node;
if(!(node=(ChainListType *)malloc(sizeof(ChainListType))))
{
printf("为保存数据申请内存失败! \n");
return NULL;
}
node->data=data;
node->next=head;
head=node;
return head;
 }

 ChainListType *ChainListFind(ChainListType *head,char *findkey)
 {
 ChainListType *h;
 h=head;
 while(h)
 {
 if(strcmp(h->data.name,findkey)==0)
     return h;
 h=h->next;
 }
 return NULL;
 }


 int ChainListDelete(ChainListType *head,char *key)
 {
   ChainListType *node,*h;
   node=h=head;
   while(h)
   {
       if(strcmp(h->data.name,key)==0)
       {
       node->next=h->next;
       free(h);
      return 1;
       }else {
       node=h;
       h=h->next;
       }
   }
 return 0;
 }

 //显示所有学生信息。
  void ChainListAll(ChainListType *head)
  {
      int i=1;
  ChainListType *h=head;
  DATA data;
  while(h)
  {
  data=h->data;
  printf("第%d个同学的信息为:姓名:%s学号:%s班级:%s年龄:%d\n",i++,data.name,data.key,data.Class,data.age);
  h=h->next;
  }

  }
 

  //添加学生的信息.
   
   ChainListType *Input(ChainListType *head)
   {
       DATA data ;
   printf ("请输入添加学生的信息:");
   printf("请输入姓名:\t");
   scanf("%s",data.name);
   printf("请输入学号: \t");
   scanf("%S",data.key);
   printf("请输入班级: \t");
   scanf("%S",data.Class);
   printf("请输入年龄:\t");
   scanf("%d",&data.age);
   
   return ChainListAddFirst(head,data);
   }


   //查找学生的信息.
     
    void Find(ChainListType *head)
    {
    DATA data;
    char name[20];
    ChainListType *h;
    printf("请输入要查找的学生的姓名:\n");
        scanf("%s",name);
         h=ChainListFind(head,name) ;
             if(h)
             {
             data=h->data;
             printf("要查找的学生的信息为:姓名:%s\t学号:%s\t班级:%s\t年龄:%d\t",data.name,data.key,data.Class,data.age);
             }
    }

    //删除学生信息。


    void Delete(ChainListType *head)
    {
    ChainListType *h=head;
    char name[20];
    printf("请输入要删除的学生的姓名:\n");
    scanf("%s",name);
    ChainListDelete(head,name);

   
    }

    int main()
    {
     ChainListType *head=NULL;
     char select;
     do
     {
     printf("\n*******************************\n");
     printf("a.添加学生的信息。\n") ;
     printf("b.显示学生的所有信息。\n");
     printf("c.查找学生的信息。\n");
     printf("d.删除学生的信息。\n");
     printf("*********************************\n");

     select=getchar();
     switch(select)
     {
     case'a':
              head=Input(head);
         break;
     case'b':
              ChainListAll(head);
         break;
     case'c':
         Find(head);
         break;
     case'd':
              Delete(head);
         break;
     case'e':
              break;
     
     }
     
     }while (select!='e');
     return 0;
    }俺的个人杰作呀呵呵不过也只是DOS界面的可看下呀只要链表学好了这个自然就会了呵呵
2010-10-31 11:35
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:0 
无聊致死
2010-10-31 11:46
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:0 
链表  好麻烦的说  学c必须要学那个吗?

粗心是大敌
2010-10-31 18:19
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 6楼 zzgzzg00
那得看你的内存 给不给的起

我就是真命天子,顺我者生,逆我者死!
2010-10-31 18:21
快速回复:简单学生管理系统
数据加载中...
 
   



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

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