当前位置:网站首页>C语言实现简单学生成绩管理系统的方法
C语言实现简单学生成绩管理系统的方法
2022-07-28 13:35:00 【亿速云】
C语言实现简单学生成绩管理系统的方法
这篇“C语言实现简单学生成绩管理系统的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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时,就可以进行其他的成绩操作,但不能再执行录用成绩的操作。所以当用户输入的命令无法执行时,应当给出提示。
代码
#include <stdio.h>#include <stdlib.h>//#include "hs.h"struct student{ int id; float yw; float sx; float wy; float pj;};void help(void);int type(struct student *p);void list(struct student *p,int n);void average(struct student *p,int n);void search (struct student *p);void sort(struct student *p,int n);int main(int argc, const char *argv[]){ char ch; struct student stu[32]; int n=0; while(1) { printf("请输入命令 = "); //getchar(); scanf("%c",&ch); putchar(10); if(ch=='T') { n=type(stu); } else if(ch=='L') { if(n==0) { printf("成绩表为空!请先使用T录入成绩!\n"); putchar(10); } else list(stu,n); } else if(ch=='A') { if(n==0) { printf("成绩表为空!请先使用T录入成绩!\n"); putchar(10); } else { average(stu,n); printf("平均分已计算,请使用命令L查看!\n"); putchar(10); } } else if(ch=='H') help(); else if(ch=='C') system("clear"); else if(ch=='S') { if(n==0) { printf("成绩表为空!请先使用T录入成绩!\n"); putchar(10); } else { search(stu); putchar(10); } } else if(ch=='P') { if(n==0) { printf("成绩表为空!请先使用T录入成绩!\n"); putchar(10); } else { sort(stu,n); putchar(10); } } else if(ch=='Q') { printf("Press any key to continue!\n"); return -1; } getchar(); } return 0;}int type(struct student *p){ int n=0; printf("请输入学生人数:"); scanf("%d",&n); printf("请输入学生三门课的成绩:\n"); printf("学号 语文 数学 外语\n"); for(int i=0;i<n;i++) { printf("%d ",i+1); struct student stu[i]; scanf("%f %f %f",&(p+i)->yw,&(p+i)->sx,&(p+i)->wy); } return n;}void list(struct student *p,int n){ printf("学生成绩如下:\n"); printf("学号 语文 数学 外语 平均分\n"); for(int i=0;i<n;i++) { printf("%d ",i+1); printf("%.1f %.1f %.1f %.1f",p->yw,p->sx,p->wy,p->pj); p++; putchar(10); }}void average(struct student *p,int n){ for(int i=0;i<n;i++) { (p->pj)=((p->yw)+(p->sx)+(p->wy))/3; p++; }}void help(void){ 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) 2022.3.15 By liq* \n"); printf("**********************************\n");}void search(struct student *p){ int s=0; printf("请输入要查询的学生号:"); scanf("%d",&s); printf("学号 语文 数学 外语 平均分\n"); printf("%d %.1f %.1f %.1f %.1f",s,(p+s-1)->yw,(p+s-1)->sx,(p+s-1)->wy,(p+s-1)->pj); putchar(10);}void sort(struct student *p,int n){ struct student temp; int i,j; for(i=0;i<n;i++) { for(j=0;j<n-i-1;j++) { if(p[j].pj<p[j+1].pj) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } } } printf("排序完成,请使用命令L查看!\n");}注意
如需要分文件编写。
只需要将上述代码的函数部分拿出来,新建两个个文件:fun.c、fun.h。其中fun.c文件用来存放上述代码的结构体声明以及函数部分(加上相应的头文件)。fun.h用来存放结构体声明以及函数声明(加上相应的头文件)。
在主函数中要加上对应的头文件:#include “fun.h”(双引号,不是<>)。
编译的时候需要将主函数以及新建的fun.c文件一起编译,运行还是同之前一样,用./a.out运行即可。
具体如下图所示:
1.新建两个文件(同名,不同后缀),编译并运行(需要多文件同时编译)。

2.hs.c存放结构体声明及对应的函数(这里面的函数还可以拆分成其他的文件,这里我就不拆分了)。
#include <stdio.h>#include <stdlib.h>struct student{ int id; float yw; float sx; float wy; float pj;};int type(struct student *p){ int n=0; printf("请输入学生人数:"); scanf("%d",&n); putchar(10); printf("请输入学生三门课的成绩:\n"); putchar(10); printf("学号 语文 数学 外语\n"); for(int i=0;i<n;i++) { printf("%d ",i+1); struct student stu[i]; scanf("%f %f %f",&(p+i)->yw,&(p+i)->sx,&(p+i)->wy); } putchar(10); return n;}void list(struct student *p,int n){ printf("学生成绩如下:\n"); printf("学号 语文 数学 外语 平均分\n"); for(int i=0;i<n;i++) { printf("%d ",i+1); printf("%.1f %.1f %.1f %.1f",p->yw,p->sx,p->wy,p->pj); p++; putchar(10); } putchar(10);}void average(struct student *p,int n){ for(int i=0;i<n;i++) { (p->pj)=((p->yw)+(p->sx)+(p->wy))/3; p++; }}void help(void){ 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) 2022.3.15 By liq* \n"); printf("**********************************\n");}void search(struct student *p){ int s=0; printf("请输入要查询的学生号:"); scanf("%d",&s); putchar(10); printf("学号 语文 数学 外语 平均分\n"); printf("%d %.1f %.1f %.1f %.1f",s,(p+s-1)->yw,(p+s-1)->sx,(p+s-1)->wy,(p+s-1)->pj); putchar(10);}void sort(struct student *p,int n){ struct student temp; int i,j; for(i=0;i<n;i++) { for(j=0;j<n-i-1;j++) { if(p[j].pj<p[j+1].pj) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } } } printf("排序完成,请使用命令L查看!\n");}3.hs.h存放结构体声明以及hs.c里面函数对应的函数声明。
#include <stdio.h>#include <stdlib.h>struct student{ int id; float yw; float sx; float wy; float pj;};int type(struct student *p);void list(struct student *p,int n);void average(struct student *p,int n);void help(void);void search(struct student *p);void sort(struct student *p,int n);4.main函数
#include <stdio.h>#include <stdlib.h>#include "hs.h"int main(int argc, const char *argv[]){ char ch; struct student stu[32]; int n=0; while(1) { printf("请输入命令 = "); scanf("%c",&ch); putchar(10); if(ch=='T') { n=type(stu); } else if(ch=='L') { if(n==0) { printf("成绩表为空!请先使用T录入成绩!\n"); putchar(10); } else list(stu,n); } else if(ch=='A') { if(n==0) { printf("成绩表为空!请先使用T录入成绩!\n"); putchar(10); } else { average(stu,n); printf("平均分已计算,请使用命令L查看!\n"); putchar(10); } } else if(ch=='H') help(); else if(ch=='C') system("clear"); else if(ch=='S') { if(n==0) { printf("成绩表为空!请先使用T录入成绩!\n"); putchar(10); } else { search(stu); putchar(10); } } else if(ch=='P') { if(n==0) { printf("成绩表为空!请先使用T录入成绩!\n"); putchar(10); } else { sort(stu,n); putchar(10); } } else if(ch=='Q') { printf("Press any key to continue!\n"); return -1; } getchar(); } return 0;}以上就是关于“C语言实现简单学生成绩管理系统的方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
边栏推荐
- Redis sentinel mechanism
- HCIP第十二天
- LeetCode 0143. 重排链表
- These three online PS tools should be tried
- 树莓派基础 | 总结记录树莓派学习过程中的一些操作
- 2022年熔化焊接与热切割考题及在线模拟考试
- 2022 high altitude installation, maintenance, removal of examination question bank and online simulated examination
- QQ robot configuration record based on nonebot2
- 2022低压电工考试题及答案
- Leetcode 105. construct binary tree from preorder and inorder traversal sequence & 106. construct binary tree from inorder and postorder traversal sequence
猜你喜欢
随机推荐
MVC model: calendar system
MiniTest--小程序自动化测试框架
Thoughts on the construction of some enterprise data platforms
Why is it reverse to convert from other formats to BMP
2022高处安装、维护、拆除考试题库及在线模拟考试
【Utils】CookieUtil
Node file operation
文献阅读(245)Roller
Super resolution reconstruction based on deep learning
FormData对象的使用, var formdata=new FormData()
【Utils】JsonUtil
JS instantiation method
Read how to deploy highly available k3s with external database
[utils] fastdfs tool class
Leetcode 105. construct binary tree from preorder and inorder traversal sequence & 106. construct binary tree from inorder and postorder traversal sequence
MySQL development skills - View
Development and definition of software testing
Collaborative office tools: Online whiteboard is in its infancy, and online design has become a red sea
八、picker用法 下拉框选择效果
Daily question - Scholarship



![[线程安全问题] 多线程到底可能会带来哪些风险?](/img/79/112ab7e586b0bceb296dfddb2728be.png)




