用C语言编写的学生管理系统

经过前几天的认真学习,我想以各位大佬的学习能力来说,完全可以来编写学生管理系统这个项目了。接下来我给大家介绍一下该系统的主要功能。

1系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令。

2)开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”

同理,当输入其他的成绩处理命令时也作相应的处理。

3)输入命令 T,调用Type子函数录入成绩。

界面提示输入学生人数

输入3 ¿ 提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1

输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2

输入2号学生的3门课成绩,用空格间隔,回车结束。提示学号:3

输入3号学生的3门课成绩,用空格间隔,回车结束。Type子函数调用结束,返回。提示输入命令

4)输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

5)输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

6)输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令

输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令

7)输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。

输入2 ¿ 找到2号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令

8输入命令C ¿ 执行清屏函数语句system("clear");

清除屏幕的所有内容。提示输入命令

9输入命令H ¿ 调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令

10输入命令Q ¿ 则退出系统。

注意:

1)输出数组元素时,要将学号单独处理,输出为整数(即保留0位小数)。同理,在计算成绩时也要将第1列的学号撇开,只计算第2列之后的。成绩保留1位小数。

2)学生人数n贯穿始终,通过n的值判断当前命令的子函数是否能够调用执行。例如:当n=0时,说明还没有录入成绩。而一旦输入命令T,也即调用Type子函数录入了成绩,则n的值就不再是0。当n=0时,就可以进行其他的成绩操作,但不能再执行录用成绩的操作。所以当用户输入的命令无法执行时,应当给出提示。

当然如果可以用makefile分文件来编写那将更好了。

文章末尾附上我自己编写的代码,仅供大家参考,如果您有更好的想法可以评论区评论也可以私信我。谢谢!

#include <stdio.h>
#include<stdlib.h>
//首先定义结构体,后续编写会方便很多
struct student
{
  int num;
  int Chinese;
  int Math;
  int English;
  float ave;
} STU[100];
//菜单页面的编写
void help()
{
  printf("*******************************************************\n");
  printf("      *       学生成绩管理系统---帮助菜单           *      \n");
  printf("*******************************************************\n");
  printf("      *       H = 显示帮助菜单                      *      \n");
  printf("      *       T = 成绩录入                          *      \n");
  printf("      *       A = 计算学生平均成绩                  *      \n");
  printf("      *       L = 列出成绩表                        *      \n");
  printf("      *       P = 按平均成绩由高到低排序            *      \n");
  printf("      *       S = 按学号查询学生成绩                *      \n");
  printf("      *       C = 清屏                              *      \n");
  printf("      *       Q = 退出系统                          *      \n");
  printf("*******************************************************\n");
  printf("      *      Copyright  <C>  2024.08.07 晁路鹏      *      \n");
  printf("*******************************************************\n");
  printf("请输入命令=");
};
//输入命令 T,调用Type子函数录入成绩。
void Type(struct student *p, int *n)
{
  printf("请输入学生人数:");
  scanf("%d",n);
  printf("请输入%d名学生的三门课成绩:\n", *n);
  printf("学号  语文  数学  外语\n");
  for (int i = 0; i < *n; i++)
  {
    p[i].num = i + 1;
    printf("%d", p[i].num);
    scanf("%d %d %d", &p[i].Chinese, &p[i].Math, &p[i].English);
  }
  printf("请输入命令=");
};
//输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
void List(struct student *p, int n)
{
  if (n == 0)
  {
    printf("成绩表为空!请先使用命令T录入学生成绩。\n");
    printf("请输入命令=");
  }
  else
  {
    printf("学生成绩如下:\n");
    printf("学号  语文  数学  外语  平均分\n");
    for (int i = 0; i < n; i++)
    {
      printf(" %d     %d     %d    %d   %.1f\n", p[i].num, p[i].Chinese, p[i].Math, p[i].English, p[i].ave);
    }
    printf("请输入命令=");
  }
};
//输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令。
void Average(struct student *p, int n)
{
  if (n == 0)
  {
    printf("成绩表为空!请先使用命令T录入学生成绩。\n");
    printf("请输入命令=");
  }
  else
  {
    for (int i = 0; i < n; i++)
    {
      p[i].ave = (p[i].Chinese + p[i].Math + p[i].English) / 3;
    }
    printf("平均分已计算。请使用命令L查看。\n");
    printf("请输入命令=");
  }
};
//输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令。
void Sort(struct student *p, int n)
{
  struct student t;
  if (n == 0)
  {
    printf("成绩表为空!请先使用命令T录入学生成绩。\n");
    printf("请输入命令=");
  }else if (p[0].ave==0)
  {
    printf("没有计算平均分,请先使用命令A。\n");
    printf("请输入命令=");
  }
  else
  {
    for (int i = 0; i < n - 1; i++)
    {
      for (int j = 0; j < n - i - 1; j++)
      {
        if (p[j].ave < p[j + 1].ave)
        {
          t = p[j];
          p[j] = p[j+1];
          p[j+1] = t;
        }
      }
    }
  printf("完成排序。请使用命令L查看。\n");
  printf("请输入命令=");
  }
};
//输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。
void Search(struct student *p, int n)
{
    if (n == 0)
  {
    printf("成绩表为空!请先使用命令T录入学生成绩。\n");
    printf("请输入命令=");
  }
  else
  {
    int a;
    printf("请输入要查询的学生学号:");
    scanf("%d",&a);
    for (int i = 0; i < n; i++)
    {
      if (a==p[i].num)
    {
      printf("学号  语文  数学  外语  平均分\n");
      printf("  %d    %d    %d    %d    %.1f\n",p[i].num,p[i].Chinese,p[i].Math,p[i].English,p[i].ave);
    }
    }
    printf("请输入命令=");
  }
};


int main(int argc, char const *argv[])
{
  help();
  int n=0;
  char a;
  while (1)
  {
  scanf("%c",&a);
  switch (a)
  {
  case 'H':
  help();
  break;
  case 'L':
  List(STU, n);
  break; 
  case 'T':
  Type(STU, &n);
  break; 
  case 'A':
  Average(STU, n);
  break;
  case 'P':
  Sort(STU,n);
  break;
  case 'S':
  Search(STU,n);
  break;
  case 'C':
  system("clear");
  printf("请输入命令=");
  break;
  case 'Q':
  exit(1);
  break;
  default:
  printf("error\n");
  printf("请重新输入=");
  break;
  }
  getchar();
}
return 0;
}

同时附上上篇笔记最后练习题的答案

#!/bin/bash

if [ -d aa ]    #如果当前目录下有aa目录就删除然后创建
then
    rm -r aa 
fi

mkdir aa

num=0
filelist=`ls`    #将当前目录下所有文件赋值给filelist变量
for file in $filelist  #for file in *  #用file遍历当前目录下所有文件
do
    if [ -f $file ]        #如果是普通文件就复制到aa目录下
    then
        cp $file ./aa        
        ((num++))            #计算文件个数
    fi
done
echo $num

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值