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