程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言求助.<br/>要求編寫一個簡寫的學生成績管理系統。

C語言求助.<br/>要求編寫一個簡寫的學生成績管理系統。

編輯:C語言問答

C語言求助.
要求編寫一個簡寫的學生成績管理系統。

30

使用菜單功能進行操作.

實現輸入N個學生信息後.能求出每個學生的平均分。能求出每個學生的最高分。按學生成績平均分排序。現N個學生信息的輸出。

能給我C語言的編寫代碼 萬分感激...就只需要一個簡寫的小程序.

最佳回答:

已調試

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
{
 char name[60];
 char ID[7];
 int score;
};

int dq(struct student st[]);
void xianshi();
void bc(struct student st[]);
void add();
void select();
void zz();
void chazhao();
void xhcz();
void xmcz();
void del();
void xmsc();
void xhsc();
void tj();
void px();
void bjg();
void xg();
void xhxg();
void xmxg();
void bca();
void fh();
struct student st[300];  //這個數組用來保存所有的學生信息 和文件裡面的一致
int Number=0; //記錄總的學生人數  也就是數組/文件裡面的學生人數
int k=0;//表示輸入的信息是否存在
void main()
{
   int choose=0;
   FILE *fp=NULL;
   char yesorno;
 
   if((fp=fopen("C://student.dat","rb"))==NULL)
   {
    printf("\n=========>提示:文件不存在,是否要創建一個?(y/n)\n");
    scanf("%c",&yesorno);
    if(yesorno=='y'||yesorno=='Y')
    {
  
     //這裡僅為了建立文件
     fp=fopen("C://student.dat","wb");
     fclose(fp);
    }
    else
     exit(0);
   }
   else
   {
  Number=dq(st); //要是文件只能夠已經有數據 將數據初始化到數組中
   }
   system("cls");
   while(true)
   {
    xianshi();
    printf("\t\t====>請選擇:");
    scanf("%d",&choose);
    system("cls");
    switch(choose)
    {
        case  0: exit(0);
            //退出                    
   break;
  case  1: add();
        fh();//增加學生成績
            break;  
        case  2: select();
   fh();//查看學生成績
            break;        
  case  3: chazhao();
   fh();// 查找    
   break;
  case  4: del();      
   fh();//刪除
   break;
  case  5: tj();
   fh();//統計
            break;
        case  6: px();
   fh();//排序
            break;
        case  7: bjg();
   fh();//輸出不及格
            break;
        case  8: xg();
   fh();//修改
            break; 
  case  9:zz();
   fh();//作者
      break;
  case  10:bca();
   fh();//保存 
                 
               break;
  default:
   break;
  }
    fflush(stdin);
    getchar();
    system("cls");
 }
}
void bca()
{
 printf("\t=====程序在運行時已自動保存.....\n");
}
void fh()
{
 printf("\t===>按Enter鍵返回主菜單\n");
}
void xg() //修改學生信息
{
 int way=0;
 printf("請選擇修改查找方式\n");
 printf("1 按姓名查找修改\n");
 printf("2 按學號查找修改\n"); 
 scanf("%d",&way);
 switch(way)
 {
 case 1: xmxg();
  break;
 case 2: xhxg();
  break;
 default: printf("輸入有誤,結束!\n");
  break;
 }  
}


//按姓名修改
void xmxg()
{
 FILE *fp=NULL;
 char name[60];
 int i=0;
 int changeIndex=0;
 int index=0;
 printf("請輸入要修改的學生姓名:");
 scanf("%s",name);
 for (i=0;i<Number;i++)
 {
  if (strcmp(name,st[i].name)==0)
  {
   changeIndex=i;  //保存要修改的人的下標
   k=1;
   break;
  }
  
 }
 if(k==1)
 {
     printf("\t姓名\t學號\t成績\n");
     printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
     printf("請重新輸入該學生信息");
     printf("姓名:");
     scanf("%s",st[changeIndex].name);
     printf("學號:");
     scanf("%s",st[changeIndex].ID);
     printf("成績:");
      scanf("%d",&st[changeIndex].score);
  printf("\t=======>修改成功\n");
 }
 else if(k==0)
  printf("=>無此人\n\n\n");
 //信息修改後重新更新文件裡面的數據 以保持數據一致性
 fp=fopen("C://student.dat","wb");
 for (i=0;i<Number;i++)
 {
  fwrite(&st[i],sizeof(struct student),1,fp);
 }
 fclose(fp);
 k=0;
}


void xhxg()//按學號修改
{
 FILE *fp=NULL;
 char id[60];
 int i=0;
 int changeIndex=0;
 int index=0;
 printf("請輸入要修改的學生學號:");
 scanf("%s",id);
 for (i=0;i<Number;i++)
 {
  if (strcmp(id,st[i].ID)==0)
  {
   changeIndex=i;  //保存要修改的人的下標
   k=1;
   break;
  }
  
 }
 if(k==1)
 {
     printf("\t姓名\t學號\t成績\n");
     printf("\t%s\t%s\t%d\n\n",st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score);
     printf("請重新輸入該學生信息");
     printf("姓名:");
     scanf("%s",st[changeIndex].name);
     printf("學號:");
     scanf("%s",st[changeIndex].ID);
     printf("成績:");
     scanf("%d",&st[changeIndex].score);
  printf("\t=======>修改成功\n");
 }
 else if(k==0)
  printf("=>無此人\n\n\n");

 
 //信息修改後重新更新文件裡面的數據 以保持數據一致性
 fp=fopen("C://student.dat","wb");
 for (i=0;i<Number;i++)
 {
  fwrite(&st[i],sizeof(struct student),1,fp);
 }
 fclose(fp);
 k=0;
 
}

void bjg() //輸出不及格人數
{
 int i=0;
 printf("以下是不及格:\n");
 printf("\t姓名\t學號\t成績\n");
 for (i=0;i<Number;i++)
 {
  if (st[i].score<60)
  {
   printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
  }
 }
}


void px()//排序
{
    struct student temp;
 int wantNUmber=0;
 int i=0;
 int j=0;
    for(i=0;i<Number-1;i++)
 {
  for(j=0;j<Number-i-1;j++)
  {
   if(st[j].score<st[j+1].score)
   {
    temp=st[j];
    st[j]=st[j+1];
    st[j+1]=temp;
   }
  } 
 }
    printf("你想輸出前幾名的成績:");
    scanf("%d",&wantNUmber);
 if (wantNUmber>Number)
 {
  wantNUmber=Number;
 }

    printf("\t姓名\t學號\t成績\n");
    for(i=0;i<wantNUmber;i++)
    {
        printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score); 
    }  
}


void tj()//統計
{
 int i=0;
 double sum=0.0;
 for(i=0;i<Number;i++)
 {
        sum+=st[i].score;
 }
 printf("全班總分為:%f\n",sum);
 printf("平均分為:%f\n",sum/Number);   
}


void del()//刪除
{
 int n=0;
 printf("1  按姓名刪除\n");
 printf("2  按學號刪除\n");
 scanf("%d",&n);
 switch(n)
 {
 case 1: xmsc();
  break;
 case 2: xhsc();
  break;
 }
}


void xmsc()//按姓名刪除
{
 FILE *fp=NULL;
 char name[60];
 int i=0;
 int j=0;
 printf("請輸入要刪除的學生姓名:");
 scanf("%s",name);
 for(i=0;i<Number;i++)
 {
  if (strcmp(name,st[i].name)==0) //如果查找到就刪除
  {
   for (j=i;j<Number-1;j++)
   {
    st[j]=st[j+1];
   }
   Number--;
   printf("刪除成功;\n");
   k=1;
  }
 }
 if(k==0)
  printf("=>無此人!!!\n\n\n");

 //將剩余數據寫入文件  重新一寫的方式打開文件 把以前的數據擦除了
 fp=fopen("C://student.dat","wb");
 for (i=0;i<Number;i++)
 {
  fwrite(&st[i],sizeof(struct student),1,fp);
 }
 fclose(fp);
 k=0;
 
}


void xhsc()//按學號刪除
{
 FILE *fp=NULL;
 char id[60];
 int i=0;
 int j=0;
 printf("請輸入要刪除的學生學號:");
 scanf("%s",id);
 for(i=0;i<Number;i++)
 {
  if (strcmp(id,st[i].ID)==0) //如果查找到就刪除
  {
   for (j=i;j<Number-1;j++)
   {
    st[j]=st[j+1];
   }
   Number--;
   printf("刪除成功;\n");
   k=1;
  }
 }
 if(k==0)
  printf("=>無此人!!!\n\n\n");
 //將剩余數據寫入文件  重新一寫的方式打開文件 把以前的數據擦除了
 fp=fopen("C://student.dat","wb");
 for (i=0;i<Number;i++)
 {
  fwrite(&st[i],sizeof(struct student),1,fp);
 }
 fclose(fp);
 k=0;
}


void chazhao()//查找學生
{
 int n=0;
 printf("1  按姓名查找\n");
 printf("2  按學號查找\n");
 scanf("%d",&n);
 switch(n)
 {
 case 1: xmcz();
  break;
 case 2: xhcz();
  break;
 default: printf("輸入有誤,結束!\n");
  break;
 }  
}


void xhcz()//按學號查找
{
 char id[7];
 int i=0;
 printf("請輸入要查找學生學號:");
 scanf("%s",id);
 system("cls");
 
 for (i=0;i<Number;i++)
 {
  if (strcmp(id,st[i].ID)==0)
  {
   printf("\t姓名\t學號\t成績\n");
   printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
   k=1;
  }

 }
 if(k==0)
      printf("=>對不起沒有查找出這個人!!!\n\n\n");
 k=0;

}


void xmcz()//按姓名查找
{   
 char name[7];
 int i=0;
 printf("請輸入要查找學生姓名:");
 scanf("%s",name);
 system("cls");
 
 for (i=0;i<Number;i++)
 {
  if (strcmp(name,st[i].name)==0)
  {
   printf("\t姓名\t學號\t成績\n");
   printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
   k=1;
  }
  
 }
 if(k==0)
      printf("=>對不起沒有查找出這個人!!!\n\n\n");
 k=0;
}


void zz()
{
 printf("\t**********************************************************\n\n");
 printf("\t^^^^^^^^^^     武漢工程大學郵電與信息工程學院   ^^^^^^^^^^\n\n");
 printf("\t^^^^^^^^^           07網絡與安全管理2班          ^^^^^^^^^\n\n");
 printf("\t^^^^^^^^                 易樊制作                 ^^^^^^^^\n\n");
 printf("\t^^^^^^^^^          禁止CTRL+C    謝謝合作        ^^^^^^^^^\n\n");
    printf("\t^^^^^^^^^^                                    QQ:895115828\n\n");       
 printf("\t**********************************************************\n\n");
}


void select()//查看學生
{
 int i=0;
 printf("以下是全部學生成績\n");
 printf("\t姓名\t學號\t成績\n");
 for(i=0;i<Number;i++)
 {
  printf("\t%s\t%s\t%d\n",st[i].name,st[i].ID,st[i].score);
 }
}


void add()//增加學生
{
 int numberTemp=0;
 int i=0;
 struct student temp; //臨時保存信息
 printf("請輸入要增加學生成績個數:");
 scanf("%d",&numberTemp);
 for(i=0;i<numberTemp;i++)
 {
  printf("輸入第%d個同學信息\n",i+1);
  printf("姓名:");
  scanf("%s",temp.name);
  printf("學號:");
  scanf("%s",temp.ID);
  printf("成績:");
  scanf("%d",&temp.score);
  st[Number++]=temp; //將剛添加的寫入到數組
  bc(&temp); //將剛添加的寫入到文件

 }
 printf("添加成功\n");
}


void bc(struct student *st)
{
 FILE *fp=NULL;
 fp=fopen("C://student.dat","ab+");
 fwrite(st,sizeof(struct student),1,fp);
 fclose(fp);
}


int dq(struct student st[])
{
 FILE *fp=NULL;
 int i=0;
 fp=fopen("C://student.dat","rb");
 while(fread(&st[i],sizeof(struct student),1,fp))
  i++;
 fclose(fp);
 return i;
}


void xianshi()
{
 printf("\t*****************************************************************\n");
 printf("\t*                                                               *\n");
 printf("\t*                     學生成績管理系統                          *\n");
 printf("\t*                                                               *\n");
 printf("\t*       [1]    增加學生成績            [2]    查看全部學生成績  *\n");
 printf("\t*       [3]    查找學生成績            [4]    刪除學生成績      *\n");
 printf("\t*       [5]    統計(總成績和平均分)  [6]    輸出前N名學生成績 *\n");
 printf("\t*       [7]    輸出不及格人數          [8]    修改學生信息      *\n");
 printf("\t*       [9]    關於作者                [10]   保存數據          *\n");
 printf("\t*       [0]    退出系統                                         *\n");
 printf("\t*****************************************************************\n");
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved