⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 management.cpp

📁 可以实现一些简单的学生管理工作
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100       //学生最大人数控制
// 结构体定义学生的所有属性,包括学生证号,姓名,3门学科成绩,总成绩,平均成绩
struct student
{
int no;
char name[15];
int score1;
int score2;
int score3;
int sum;
double avr;
}s[N];

// 函数声明
void mune();        //主菜单函数
void input();       //录入函数
void insert();      //插入函数
void del();         //删除函数
void delNo();       //按学生证号删除
void delName();     //按姓名删除  
void select();      //查找函数
void selectNo();    //按学生证号查找
void selectName();  //按姓名查找
void sort();        //冒泡排序函数
void display();     //制表格式函数
void total();       //分类合计函数
void save();        //保存函数
void load();        //读取函数

// 全局变量
int i,j;            //循环变量
int count=0;        //控制数组下标变量

// 主函数
void main ()
{
int in;        //选择功能的变量
char ch='y';   //选择是否继续时的变量,(y / n)
do
{
  mune();  
  scanf("%d",&in);
  if(in<0 || in>9)
  {
   printf("\a输入有误,请在0~9之间选择!");
   continue;
  }
  else if(in==0){
   printf("确定要退出程序吗?(y / n) ");
   scanf(" %c",&ch);
   printf("\n");
   if(ch=='Y' || ch=='y')
   {
    printf("谢谢您的使用,再见!");
    break;
   }
  }
  switch(in)
  {
   case 1:                                    //录入
    printf("\n-----------------------------    请输入学员信息    -----------------------------");
    input();
    break;
   case 2:                                    //插入
    insert();
    break;
   case 3:                                    //删除
    if(count!=0)
    {
     del();
    }
    else
    {
     printf("\a没有数据!\n");       //(如果学生人数为0,弹出此消息)
    }
    break;
   case 4:                                    //查找
    if(count!=0)
    {
     select();
    }
    else
    {
     printf("\a没有数据!\n");
    }
    break;
   case 5:                                    //制表
    if(count!=0)
    {
     display();
    }
    else
    {
     printf("\a没有数据!\n");
    }
    break;
   case 6:                                    //排序    
    if(count!=0)
    {
     sort();
     display();
    }
    else
    {
     printf("\a没有数据!\n");
    }
    break;
   case 7:                                    //合计    
    if(count!=0)
    {
     total();
    }
    else
    {
     printf("\a没有数据!\n");
    }
    break;
   case 8:                                    //保存
    save();
    break;
   case 9:                                    //读取
    load();
    break;
   default :
    break;  
   }  
}while(1);
}


// 主菜单函数
void mune()
{
    printf("                     *****************************************\n");
    printf("                     |         学生成绩系统主菜单界面        |\n");
    printf("                     |                                       |\n");
    printf("                     |    1.录入学生成绩    6.排序学生成绩   |\n");
    printf("                     |                                       |\n");
    printf("                     |    2.插入学生成绩    7.合计学生成绩   |\n");
    printf("                     |                                       |\n");
    printf("                     |    3.删除学生成绩    8.存储学生成绩   |\n");
       printf("                     |                                       |\n");
    printf("                     |    4.查找学生成绩    9.读取学生成绩   |\n");
       printf("                     |                                       |\n");
    printf("                     |    5.浏览学生成绩    0.安全退出系统   |\n");
    printf("                     |                                       |\n");
    printf("                     |----------->学生成绩管理程序<----------|\n");
    printf("                     *****************************************\n");
    printf("                               请在0~9之间选择 :");      
}

// 录入函数
void input()
{
char ch;
for(i=count;i<N;i++)
{  
  printf("\n学生证号: ");
  scanf("%d",&s[i].no);
  printf("\n姓名: ");
  scanf("%s",&s[i].name);
  printf("\n微机原理(成绩): ");
  scanf("%d",&s[i].score1);
  if(s[i].score1>100 || s[i].score1<0){
   printf("输入有误,请重新输入!\n");
   printf("\n微机原理(成绩): ");
   scanf("%d",&s[i].score1);
  }
  printf("通信原理(成绩): ");
  scanf("%d",&s[i].score2);
  if(s[i].score2>100 || s[i].score2<0){
   printf("输入有误,请重新输入!\n");
   printf("\n通信原理(成绩): ");
      scanf("%d",&s[i].score2);
  }
  printf("数据结构(成绩): ");
  scanf("%d",&s[i].score3);
  if(s[i].score3>100 || s[i].score3<0){
   printf("输入有误,请重新输入!\n");
   printf("\n数据结构(成绩): ");
   scanf("%d",&s[i].score3);
  }
  s[i].sum=s[i].score1+s[i].score2+s[i].score3;
  s[i].avr=s[i].sum/3.0;
  printf("\n总成绩:%d",s[i].sum);
  printf("\n平均成绩:%lf",s[i].avr);
  printf("\n\n");
  count++;
  printf("是否继续输入?(y / n)  ");
  scanf(" %c",&ch);
  printf("\n");
  if(ch!='Y' && ch!='y')
  {
   break;
  }
}

}

// 插入函数
void insert()
{
printf("\n------------------------    请输入要插入的学员信息    ------------------------");
struct student temp;
input();
for(i=0;i<count;i++)
{
  if(s[i].avr<temp.avr)
   break;
}
for(j=count;j>=i;j--)
{
  s[j+1]=s[j];
}
s[i]=temp;
}

// 删除函数,含子菜单:按学生证号删除,按姓名删除
void del()
{
int in;  
do
{
  printf("                            ************************\n");
  printf("                            |    1.按学生证号删除  |\n");
  printf("                            |                      |\n");
  printf("                            |    2.学生按姓名删除  |\n");
  printf("                            |                      |\n");
  printf("                            |    3.返回上一级菜单  |\n");
  printf("                            ************************\n");
  printf("                               请在1~3之间选择: ");
  scanf("%d",&in);
  if(in<1 || in>3)
  {
   printf("\a输入有误,请重新输入!\n");
   continue;
  }
  else
  {
   break;
  }
}while(1);
switch(in)
{
  case 1:
   delNo();
   break;
  case 2:
   delName();
   break;
  case 3:
   break;
}
}

// 删除函数,按学生证号删除
void delNo()
{
  printf("\n--------------------    请输入要删除的学员的学生证号   ------------------------");
  int dno;
  char ch;
  printf("\n输入: ");
     scanf("%d",&dno);
     for(i=0;i<count;i++)
     {
   if(dno==s[i].no){
   printf("\n学号\t姓名\t微机\t通信\t数构\t总分\t平均\n\n");
      printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
   printf("\n确定要删除吗?(Y / N)");
   scanf(" %c",&ch);
   printf("\n");
   if(ch=='y' || ch=='Y'){
    for(j=i;j<count-1;j++)
    {
     s[j]=s[j+1];
    }
    printf("删除成功\n");
    count--;
    break;
   }
   }
      }
}

// 删除函数,按学生姓名删除
void delName()
{
  printf("\n--------------------    请输入要删除的学员的姓名   ------------------------");
  char name[15];
  char ch;
  printf("\n输入: ");
     scanf("%s",&name);
     for(i=0;i<count;i++)
     {
   if((strcmp(name,s[i].name))==0){
   printf("\n学号\t姓名\t微机\t通信\t数构\t总分\t平均\n\n");
      printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
   printf("\n确定要删除吗?(Y / N)");
   scanf(" %c",&ch);
   printf("\n");
   if(ch=='y' || ch=='Y'){
    for(j=i;j<count-1;j++)
    {
     s[j]=s[j+1];
    }
    printf("删除成功\n");
    count--;
    break;
   }
   }
      }
}
// 查找函数,含子程序:按学生证号查找,按姓名查找
void  select()
{
int in;  
do
{
  printf("                            ************************\n");
  printf("                            |    1.按学生证号查找  |\n");
  printf("                            |                      |\n");
  printf("                            |    2.按学生姓名查找  |\n");
  printf("                            |                      |\n");
  printf("                            |    3.返回上一级菜单  |\n");
  printf("                            ************************\n");
  printf("                               请在1~3之间选择: ");
  scanf("%d",&in);
  if(in<1 || in>3)
  {
   printf("\a输入有误,请重新输入!\n");
   continue;
  }
  else
  {
   break;
  }
}while(1);
switch(in)
{
  case 1:
   selectNo();
   break;
  case 2:
   selectName();
   break;
  case 3:
   break;
}
}

// 查找函数,按学生证号查找学员信息
void selectNo()
{ printf("\n--------------------    请输入要查找的学员的学生证号    --------------------");
int no;
printf("\n输入:");
scanf("%d",&no);
for(i=0;i<count;i++)  
{
  if(s[i].no==no)
  {
   printf("\n学号\t姓名\t微机\t通信\t数构\t总分\t平均\n\n");
      printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
   printf("\n");
  }
}
}

// 查找函数,按姓名查找学员信息
void selectName()
{
printf("\n--------------------    请输入要查找的学员的姓名    --------------------");
char name[15];
printf("\n输入:");
scanf("%s",&name);
for(i=0;i<count;i++)  
{
  if((strcmp(name,s[i].name))==0)
  {
   printf("\n学号\t姓名\t微机\t通信\t数构\t总分\t平均\n\n");
      printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
   printf("\n");
  }
}
}

// 排序函数,按平均成绩从高到低排序
void sort()
{
struct student t;
for(i=0;i<count;i++)
{
  for(j=0;j<count-i-1;j++)
  {
   if(s[j].avr<s[j+1].avr)
   {
    t=s[j];
    s[j]=s[j+1];
    s[j+1]=t;
   }
  }
    }
}

// 制表函数,将所有学员成绩以表格形式输出
void display()
{
printf("------------------------------------------------------");
printf("\n学号\t姓名\t微机\t通信\t数构\t总分\t平均\n\n");
for(i=0;i<count;i++)
{
  printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
}
printf("------------------------------------------------------\n");
}

// 合计函数,将3门学科的个人成绩,总分,平均分输出
void total()
{
int tot1=0,tot2=0,tot3=0;
double avr1=0,avr2=0,avr3=0;
printf("\n\t\t微机原理\t通信原理\t数据结构\n\n");
for(i=0;i<count;i++){
  tot1+=s[i].score1;
  tot2+=s[i].score2;
  tot3+=s[i].score3;
  avr1=tot1/count;
  avr2=tot2/count;
  avr3=tot3/count;
  printf("\t\t  %d\t\t  %d\t\t  %d\n",s[i].score1,s[i].score2,s[i].score3);
}
printf("\n");
printf("合计:\t\t  %d\t\t  %d\t\t  %d\n",tot1,tot2,tot3);
printf("平均分:\t\t %.01f\t\t %.01f\t\t %.01f\n",avr1,avr2,avr3);
printf("\n");
}

// 保存函数,将数据保存到student.txt文件下
void save()
{
FILE *fp;
fp=fopen("student.txt","a+");
if(fwrite(&s,sizeof(struct student),1,fp)!=1){
  printf("文件保存失败!\n");
}
else{
  fwrite(&s,sizeof(struct student),count,fp);
  printf("数据成功保存到程序下的student.txt文件中!\n");
}
fclose(fp);
}

// 读取函数,提取student.txt文件中的数据
void load()
{
FILE *fp;
int counter=0;
char ch;
struct student stu[N];


fp=fopen("student.txt","r+");
if(fp==NULL)
{
  printf("\a文件打开失败!\n");
}
else
{
  i=0;
  while(!feof(fp))
  {
   fread(&stu,sizeof(struct student),1,fp);
   i++;
   counter++;
  }
  counter--;  //在读取循环过程中counter多加了一次,所以在循环结束后自身减1

  //  读取完毕后打印出来

  for(i=0;i<counter;i++)
  {
   printf("\n学号\t姓名\t微机\t通信\t数构\t总分\t平均\n\n");
      printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",stu[i].no,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].avr);
  }
  printf("是否提取到当前数据中 (Y / N)");
  scanf(" %c",&ch);
  printf("\n");
  if(ch=='Y' || ch=='y')
  {
   for(i=count;i<counter;i++)
   {
    s[count]=stu[i];
    count++;
   }
   printf("提取成功!\n");
  }
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -