当前位置:编程学习 > C/C++ >>

c语言课程设计

制作一个学生成绩管理系统
题目描述:
菜单为:
1.排序(按学号)
2.插入(输入一个学生的信息将它插入链表中,假定链表 按学号有序)
3.查找(输入一个学生学号,输出其各科成绩)
4.删除(从链表中按输入的学号删除该学生)
5.统计(若按1,则输入学生的学号统计该生的总分数及平均分;若按2,则输入课程求该门课程的总平均分)
6.存盘(将建立起来的链表以文件的形式存盘)
7.读入(将原来已经存盘的文件读入内存,进行管理)
答案:你好,这是我以前写的一个代码,跟你的类似修改一下就行了:
 

#include<stdio.h>
#include<stdlib.h>
#define N  10
#define K   5

struct students
{
 int num;
 char name[20];
 int sub[K];
};
void main()
{
 void print();
 void max(struct students stu[N]);
 void min(struct students stu[N]);
 void average(struct students stu[N]);
 void sequence(struct students stu[N]);
 void find(struct students stu[N]);
 void abc(struct students stu[N]);
 struct students stu[N];
 int i;
 FILE *fp;
 print();
 if((fp=fopen("grade","r"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 for(i=0;i<N;i++)
 fread(&stu[i],sizeof(struct students),1,fp);
 max(stu);
 min(stu);
 average(stu);
 sequence(stu);
 find(stu);
 abc(stu);
 fclose(fp);
}
void print()
{
 struct students stu[N];
 int i,j,yn=0;//1:存在
 printf("数据是否已存在?:");
 scanf("%d",&yn);
 if (yn==1) return;
 FILE *fp;
 for(i=0;i<N;i++)
 {
  printf("请输入第%d个学生的基本情况:\n",i+1);
  printf("num:");
  scanf("%d",&stu[i].num);
  j=0;
  while(j<i)
  {
   if(stu[i].num==stu[j].num)
   {
    printf("该学号已存在,请重新输入!\n");
    break;
   }
   j++;
  }
  if(j!=i)
  {
   i--;
   continue;
  }
  printf("name:");
  scanf("%s",stu[i].name);
  printf("请输入%d科成绩:\n",K);
  for(j=0;j<K;j++)
  {
   printf("请输入第%d科成绩:",j+1);
   scanf("%d",&stu[i].sub[j]);
  }
 }
 if((fp=fopen("grade","w"))==NULL)
 {
  printf("无法打开文件\n");
  exit(0);
 }
 fwrite(stu,sizeof(struct students),N,fp);
 fclose(fp);
}
void max(struct students stu[N])
{
 int i,m,j,t;
 for(i=0;i<K;i++)
 {
  m=stu[0].sub[i];
  t=0;
  for(j=1;j<N;j++)
  if(m<stu[j].sub[i])
  {
   m=stu[j].sub[i];
   t=j;
  }
  printf("第%d科成绩最高分为%d是%s\n",i+1,m,stu[t].name);
 }
}
void min(struct students stu[N])
{
 int i,m,j,t;
 for(i=0;i<K;i++)
 {
  m=stu[0].sub[i];
  t=0;
  for(j=1;j<N;j++)
  if(m>stu[j].sub[i])
  {
   m=stu[j].sub[i];
   t=j;
  }
  printf("第%d科成绩最低分为%d是%s\n",i+1,m,stu[t].name);
 }
}
void average(struct students stu[N])
{
 int i,j;
 int s[K];
 for(i=0;i<K;i++)
 {  
  s[i]=0;
  for(j=0;j<N;j++)
  s[i]+=stu[j].sub[i];
  s[i]=s[i]/N;
  printf("第%d科成绩平均分为%d\n",i+1,s[i]);
 }
}
void sequence(struct students stu[N])
{
 int i,j,t,a;
 printf("输入科目代号(-1为结束):");
 scanf("%d",&a);
 while (a!=-1)
 {
  for(i=0;i<N;i++)
  for(j=0;j<N-1;j++)
  if(stu[j].sub[a-1]<stu[j+1].sub[a-1])
  {
   t=stu[j].sub[a-1];
   stu[j].sub[a-1]=stu[j+1].sub[a-1];
   stu[j+1].sub[a-1]=t;
  }
  if(a<=K)
  {
   printf("第%d科成绩从大到小的排序如下:\n",a);
   for(i=0;i<N;i++)
   printf("%10s   %d\n",stu[i].name,stu[i].sub[a-1]);
  }
  else
   printf("该科目代号不存在!\n");
  printf("请再输入科目代号(-1为结束):");
  scanf("%d",&a);
 }
}
void find(struct students stu[N])
{
 int i,j,b;
 printf("输入要查询的学号(-1为结束):");
 scanf("%d",&b);
 while (b!=-1)
 {
  for(i=0;i<N;i++)
  if(b==stu[i].num )
  {
   printf("%s:",stu[i].name );
   for(j=0;j<K;j++)
    printf("%4d",stu[i].sub[j]);
   printf("\n");
   break;
  }
  if(i==N) 
   printf("该学号不存在\n");
  printf("请输入下一个要查询的学号(-1为结束):");
  scanf("%d",&b);
 }
}
void abc(struct students stu[N])
{
 int i,j,c;
 int g[K][5]={{0}};
 for(i=0;i<K;i++)
 {
  for(j=0;j<N;j++)
  {
   c=stu[j].sub[i]/10;
   switch(c)
   {
   case 10:g[i][0]++;break;
   case 9:g[i][0]++;break;
   case 8:g[i][1]++;break;
   case 7:g[i][2]++;break;
   case 6:g[i][3]++;break;
   default:g[i][4]++;
   }
  }
  printf("第%d科中各分数段的人数如下:\n",i+1);
  for(j=0;j<4;j++)
   printf("%d~%d的人数为%4d\n",(10-j-1)*10,(10-j)*10,g[i][j]);
  printf("0~60的人数为%4d\n",g[i][4]);
 }
}

上一个:编程C语言C++
下一个:C语言程序问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,