制作学生管理系统
在系统中能够实现 录入学生信息、帮助菜单、列出学生信息、计算总成绩平均值、根据总成绩平均值完成排序、根据学号查询学生信息、清屏、退出等功能。
系统运行:列出系统帮助菜单(即命令菜单),提示输入命令。
( 开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命 令 T 录入学生成绩。”)
录入成绩:输入命令 T,录入成绩,界面提示输入学生人数。
列出成绩表:输入命令 L,输出成绩表。
计算平均分:输入命令 A,计算平均分,用命令L查看。
按平均分排序:输入命令 P,完成排序,使用命令L查看。
查询学生成绩:根据学号查询该学生信息。
清屏:输入指令C,清屏。
帮助菜单:输入指令H,调出帮助菜单。
退出系统:输入指令Q,退出系统。
主函数
#include <stdio.h>
#include <stdlib.h>
struct student
{
int id; //学号
float b; //语文
float c; //数学
float d; //外语
float e; //平均成绩
}stu[32];
//函数声明
int Type(struct student *p);
void List(struct student *p, int n);
void Average(struct student *p, int n);
void Sort(struct student *p, int n);
void Search(struct student *p, int n);
void Help();
int main(int argc, char const *argv[])
{
Help ();
char ch;
int n = 0; //学生人数
//struct student stu[32];
while (1)
{
printf("请输入命令=");
scanf("%c", &ch);
//getchar();
if (ch == 'T')
n = Type(stu);
else if (ch == 'L')
{
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生系统n");
else
List(stu, n);
}
else if (ch == 'A')
{
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生系统n");
else
Average(stu, n);
}
else if (ch == 'P')
{
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生系统n");
else
Sort(stu, n);
}
else if (ch == 'S')
{
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生系统n");
else
Search(stu, n);
}
else if (ch == 'C')
system("clear");
else if (ch == 'H')
Help();
else if (ch == 'Q')
break;
getchar();
}
return 0;
}
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> 2023.02.03 By xushaowei *n");
printf("*********************************************n");
}
int Type(struct student *p) //输入成绩
{
int i, n = 0;
printf("请输入学生人数n");
scanf("%d", &n);
printf("请输入%d个学生3门课的成绩n", n);
printf("学号 语文 数学 外语n");
for (i = 0; i < n; i++)
{
printf(" %d ", i + 1);
(p + i)->id = i + 1;
scanf("%f %f %f", &(p + i)->b, &(p + i)->c, &(p + i)->d);
}
return n;
}
(2)运行结果
输入3 提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1 。
输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2 。
输入2号学生的3门课成绩,用空格间隔,回车结束。提示学号:3 。
输入3号学生的3门课成绩,用空格间隔,回车结束。Type子函数调用结束,返回。提示输入命令。
void List(struct student *p, int n) //列出成绩
{
printf("学生成绩如下n");
printf("学号 语文 数学 外语 平均分n");
for (int i = 0; i < n; i++)
{
printf("%d %.1f %.1f %.1f %.1f", (p + i)->id, (p + i)->b, (p + i)->c, (p + i)->d, (p + i)->e);
putchar(10);
}
putchar(10);
}
(2)运行结果
输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
(1)代码如下
void Average(struct student *p, int n) //计算成绩平均值
{
int i;
for (i = 0; i < n; i++)
{
(p + i)->e = ((p + i)->b + (p + i)->c + (p + i)->d) / 3;
}
printf("平均成绩已计算请使用命令 L 查看n");
}
(2)运行结果
输入命令 A,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令。
输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
(1)代码如下
void Sort(struct student *p, int n) //将学生成绩按高低排序 冒泡排序
{
struct student t; //中间交换结构体变量
int i, j;
for (i = 0; i < n; i++) //冒泡排序
{
for (j = 0; j < n - i - 1; j++)
{
if ((p + j)->e < (p + j + 1)->e)
{
t = p[j];
p[j] = p[j + 1];
p[j + 1] = t;
}
}
}
printf("完成排序,请使用命令L查看n");
}
(2)运行结果
输入命令 P,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令。
输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
(1)代码如下
void Search(struct student *p, int n) //根据学号查询学生信息
{
int a = 0;
printf("请输入要查询的学号n");
scanf("%d", &a);
printf("学号 语文 数学 外语 平均分n");
for (int i = 0; i < n; i++)
{
if ((p + i)->id == a)
{
printf("%d %.1f %.1f %.1f %.1f", (p + i)->id, (p + i)->b, (p + i)->c, (p + i)->d, (p + i)->e);
}
}
putchar(10);
}
(2)运行结果
输入命令 S,提示“输入要查询的学生学号”。
输入2找到2号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令。
(1)代码如下
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> 2023.02.03 By xsw *n");
printf("*********************************************n");
}
(2)运行结果
输入命令H,调用Help子函数,调用结束返回。提示输入命令。
7.清屏功能
由于系统库自带清屏功能,直接调用#include <stdlib.h>库即可
(1)代码在main中
else if (ch == 'C')
system("clear");
(2)运行结果
输入命令C,执行清屏函数语句system(“clear”);清除屏幕的所有内容。提示输入命令。
8退出系统
(1)代码如下
else if (ch == 'Q')
break;
(2)运行结果
输入命令Q,则退出系统
六、源代码
#include <stdio.h>
#include <stdlib.h>
struct student
{
int id; //学号
float b; //语文
float c; //数学
float d; //外语
float e; //平均成绩
}stu[32];
int Type(struct student *p);
void List(struct student *p, int n);
void Average(struct student *p, int n);
void Sort(struct student *p, int n);
void Search(struct student *p, int n);
void Help();
int main(int argc, char const *argv[])
{
Help ();
char ch;
int n = 0; //学生人数
//struct student stu[32];
while (1)
{
printf("请输入命令=");
scanf("%c", &ch);
//getchar();
if (ch == 'T')
n = Type(stu);
else if (ch == 'L')
{
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生系统n");
else
List(stu, n);
}
else if (ch == 'A')
{
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生系统n");
else
Average(stu, n);
}
else if (ch == 'P')
{
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生系统n");
else
Sort(stu, n);
}
else if (ch == 'S')
{
if (n == 0)
printf("成绩列表为空!请先使用命令T录入学生系统n");
else
Search(stu, n);
}
else if (ch == 'C')
system("clear");
else if (ch == 'H')
Help();
else if (ch == 'Q')
break;
getchar();
}
return 0;
}
int Type(struct student *p) //输入成绩
{
int i, n = 0;
printf("请输入学生人数n");
scanf("%d", &n);
printf("请输入%d个学生3门课的成绩n", n);
printf("学号 语文 数学 外语n");
for (i = 0; i < n; i++)
{
printf(" %d ", i + 1);
(p + i)->id = i + 1;
scanf("%f %f %f", &(p + i)->b, &(p + i)->c, &(p + i)->d);
}
return n;
}
void List(struct student *p, int n) //列出成绩
{
printf("学生成绩如下n");
printf("学号 语文 数学 外语 平均分n");
for (int i = 0; i < n; i++)
{
printf("%d %.1f %.1f %.1f %.1f", (p + i)->id, (p + i)->b, (p + i)->c, (p + i)->d, (p + i)->e);
putchar(10);
}
putchar(10);
}
void Average(struct student *p, int n) //计算成绩平均值
{
int i;
for (i = 0; i < n; i++)
{
(p + i)->e = ((p + i)->b + (p + i)->c + (p + i)->d) / 3;
}
printf("平均成绩已计算请使用命令 L 查看n");
}
void Sort(struct student *p, int n) //将学生成绩按高低排序 冒泡排序
{
struct student t; //中间交换结构体变量
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if ((p + j)->e < (p + j + 1)->e)
{
t = p[j];
p[j] = p[j + 1];
p[j + 1] = t;
}
}
}
printf("完成排序,请使用命令L查看n");
}
void Search(struct student *p, int n) //根据学号查询学生信息
{
int a = 0;
printf("请输入要查询的学号n");
scanf("%d", &a);
printf("学号 语文 数学 外语 平均分n");
for (int i = 0; i < n; i++)
{
if ((p + i)->id == a)
{
printf("%d %.1f %.1f %.1f %.1f", (p + i)->id, (p + i)->b, (p + i)->c, (p + i)->d, (p + i)->e);
}
}
putchar(10);
}
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> 2023.02.03 By xsw *n");
printf("*********************************************n");
}
七、总结
在制作学生管理系统时,学生人数n贯穿始终,通过n的值判断当前命令的子函数是否能够调用执行。输出数组元素时,要将学号单独处理,输出为整数(即保留0位小数)。同理,在计算成绩时也要将第1列的学号撇开,只计算第2列之后的。成绩保留1位小数。各项功能的实现一定要在心中有一个大概的流程,然后再使用C语言进行编译,要理解各种函数的作用和意义,这样帮助我们更好的制作出想要的系统。
原文地址:https://blog.csdn.net/m0_65821435/article/details/128982049
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_32748.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!