学生信息管理系统-结构体编写
对学生基本信息,包括学号、姓名、至少三门课成绩。
① 学生基本信息录入;
② 学生基本信息的输出;
③ 按学号查询学生信息;
④ 按学号修改某学生信息并输出;
⑤ 求每个人平均成绩;
⑥ 求每门课程平均成绩;
⑦ 删除某学生信息;
⑧ 添加某学生信息;
⑨ 输出个人平均分大于80分的同学信息;
根据总成绩或平均成绩综合排名
源代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 35 //35个学生
#define M 3 //3门课程
typedef struct student //定义结构体student
{
longstudentID;
charstudentName[10];
charstudentSex;
float score[M];
float sum;
float aver;
}STUDENT;
STUDENT stu[N]; //定义结构体的数组
int n,m;
void inputscore(STUDENT stu[]); //输入学生信息
void ReadfromFile(STUDENT stu[],int *n,int *m); //从文件中读取学生的信息到结构体数组stu中
void savescore(STUDENT stu[]);//保存学生成绩
void avergescore(STUDENT stu[]);//求平均分
void sum(STUDENT stu[]);//求总分
void lookscore(STUDENT stu[]);//按平均分高低排序输出
void searchscore(STUDENT stu[]);//通过输入学号查找学生成绩
void statistic(STUDENT stu[]);//输出班级及格率、>80分的学生名单
void add(STUDENT stu[]);//添加学生成绩
void modify(STUDENT stu[]);//通过学号修改学生成绩
void deletescore(STUDENT stu[]);//删除指定学生成绩
void menu();//主选择菜单
void main()
{
short intflag=0;
STUDENTstu[N];
menu();
do
{
flag=1;
//scanf("%d",&h);
switch(getchar())
{
case '0': //从文件中读取成绩
ReadfromFile(stu,&n,&m);
break;
case '1': //输入成绩
inputscore(stu);
break;
case'2': //查看成绩
lookscore(stu);
break;
case'3': //按学号查找成绩
searchscore(stu);
break;
case'4': //统计成绩
statistic(stu);
break;
case'5': //按学号修改成绩
modify(stu);
break;
case'6': //按学号添加成绩
add(stu);
break;
case'7': //删除成绩
deletescore(stu);
break;
case'8': //保存成绩
savescore(stu);
break;
case'9': //退出程序
return ;
default:
printf("操作数无效,按任意键返回主菜单\n");
}
printf("按任意键继续\n");
getchar();//等待用户输入任意字符
getchar();
system("CLS");//清屏
menu();
}while(flag==1);
}
//主选择菜单
void menu()
{
printf(" ╭═══════════════════════════════╮\n");
printf("║学生成绩管理程序 ║\n");
printf("║ ║\n");
printf("║<0>从文件中读取成绩 ║\n");
printf("║<1>输入成绩 ║\n");
printf("║<2>查看成绩 ║\n");
printf("║<3>按学号查找 ║\n");
printf("║<4>统计成绩 ║\n");
printf("║<5>按学号修改成绩 ║\n");
printf("║<6>按学号添加成绩 ║\n");
printf("║<7>按学号删除成绩 ║\n");
printf("║<8>保存成绩 ║\n");
printf("║<9>退出 ║\n");
printf("╰════════════════════════════════╯\n\n");
printf("请输入您的选择:");
}
//1号功能:输入各个同学的学生信息
void inputscore(STUDENT stu[])
{
system("CLS");
int i,j;
system("cls");//清屏
printf("请输入学生总数:");
scanf("%d",&n);
system("cls");
printf(" ╭══════════════════════════════════╮\n");
printf("║提示:输入学号时请输入由9位数字组成的学号!,如201401*** ║\n");
printf("╰═══════════════════════════════════╯\n\n");//因二维表上下需对正故有此要求//
for(i=0;i<n;i++)
{
printf("请输入学生%d的学号 姓名:\n",i+1);
scanf(" %ld%s",&stu[i].studentID,stu[i].studentName);
getchar();
printf("请输入性别:");
scanf("%c",&stu[i].studentSex);
getchar();
printf("请输入学生成绩:\n");
printf("汇编\t数电\tC语言\n");
for(j=0;j<M;j++)
scanf("%f",&stu[i].score[j]);
}
printf("成功输入!\n");
}
//计算各个同学总分
void sum(STUDENT stu[])
{
int i,j;
for(i=0;i<n;i++)
{
stu[i].sum=0;
for(j=0;j<M;j++)
{
stu[i].sum+=stu[i].score[j];
}
}
}
//计算各个同学平均分
void avergescore(STUDENT stu[])
{
int i;
for(i=0;i<n;i++)
{
stu[i].aver=0;
stu[i].aver=stu[i].sum/M;
}
}
//2号:查看学生成绩及根据平均分对学生进行排序
void lookscore(STUDENT stu[])
{
system("CLS");
int i,j,k;
STUDENT t;
sum(stu);
avergescore(stu);
system("cls");
for(i=0;i<n-1;i++)
{
for(k=i,j=i+1;j<n;j++)
if(stu[j].aver>stu[k].aver)
k=j;
if(k!=j)
{
t=stu[k];
stu[k]=stu[i];
stu[i]=t;
}
}
printf("╭══════════════════════════════════════╮\n");
printf("名次\t学号\t\t姓名\t性别\t汇编\t数电\tC语言\t总分\t平均分\n");
for(i=0;i<n;i++)
{
printf("%d\t%ld\t%s\t%3c\t",i+1,stu[i].studentID,stu[i].studentName,stu[i].studentSex);
for(j=0;j<M;j++)
printf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].sum);
printf("%4.2f\n",stu[i].aver);
}
printf("╰══════════════════════════════════════╯\n\n");
}
//3号功能:通过学号查找学生成绩
void searchscore(STUDENT stu[])
{
system("CLS");
long a;
int i,j;
//system("cls");
printf("请输入需查询的学生学号:");
scanf("%ld",&a);
printf("╭═════════════════════════════════════╮\n");
for(i=0;i<n;i++)
{
if(a==stu[i].studentID)
{
printf("名次\t学号\t\t姓名\t性别\t汇编\t数电\tC语言\t总分\t平均分\n");
printf("%d\t%9ld\t%s\t%3c\t",i+1,stu[i].studentID,stu[i].studentName,stu[i].studentSex);
for(j=0;j<M;j++)
{
printf("%4.2f\t",stu[i].score[j]);
}
printf("%4.2f\t",stu[i].sum);
printf("%4.2f\n",stu[i].aver);
printf("╰═════════════════════════════════════╯\n\n");
break;
}
}
if(i==n)
{
printf("未找到该学生信息!\n");
printf("╰═════════════════════════════════════╯\n\n");
}
}
//4号功能:统计学生成绩信息,平均分及大于80分的同学
void statistic(STUDENT stu[])
{
STUDENT*p=stu; //*p指向STUDENT结构体数组stu的第一个元素stu[0]
int i,j;
floatcount=0.0,sum=0.0;
system("cls");
for(i=0;i<n;i++)
{
sum+=(p+i)->aver;
}
printf("该班级平均分为%4.2f\n",sum/n); //平均分计算
for(i=0;i<n;i++)
{
if((p+i)->aver>=60)
count++;
}
printf("该班级及格率为%4.2f%%\n",count/n*100); //及格率计算
j=0;
for(i=0;i<n;i++)
{ if((p+i)->aver>=80)
j++;
}
printf("该班级平均成绩大于80的同学有%d个!\n",j); //大于80分的同学
printf("平均成绩大于80的同学名单\n");
for(i=0;i<n;i++)
{
if(stu[i].aver>80)
printf("%s\n",stu[i].studentName);
}
}
//5号功能:按学号修改某学生成绩并输出
void modify(STUDENT stu[])
{
long a;
int i,j;
system("cls");
printf("请输入需要修改成绩的学生学号:");
scanf("%ld",&a);
for(i=0;i<n;i++)
{
if(a==stu[i].studentID)
{
printf("╭═════════════════════════════════════╮\n");
printf("名次\t学号\t\t姓名\t性别\t汇编\t数电\tC语言\t总分\t平均分\n");
printf("%d\t%9ld\t%s\t%3c\t",i+1,stu[i].studentID,stu[i].studentName,stu[i].studentSex);
for(j=0;j<M;j++)
printf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].sum);
printf("%4.2f\n",stu[i].aver);
printf("╰═════════════════════════════════════╯\n\n");
printf("请重新输入该学生的学号 姓名:\n");
scanf("%ld%s",&stu[i].studentID,stu[i].studentName);
getchar();
printf("请输入性别:");
scanf("%c",&stu[i].studentSex);
getchar();
printf("请重新输入学生成绩:\n");
printf("汇编\t数电\tC语言\n");
for(j=0;j<M;j++)
scanf("%f",&stu[i].score[j]);//找到该学生成绩后进行修改,跳出for循环
printf("修改成功!\n");
break;
}
}
if(i==n)
printf("请确认该学生是否为本班学生!\n");
}
//6号功能:添加学生成绩
void add(STUDENT stu[])
{
int a,i,j;
system("cls");
printf("请输入新增加的学生人数:");
scanf("%d",&a);
n=n+a;
for(i=n-a;i<n;i++)
{
printf("请输入学生%d的学号 姓名:\n",i+1);
scanf("%ld %s",&stu[i].studentID,stu[i].studentName);
getchar();
printf("请输入性别:");
scanf("%c",&stu[i].studentSex);
getchar();
printf("请输入学生成绩: \n");
printf("汇编\t数电\tC语言 \n");
for(j=0;j<M;j++)
scanf("%f",&stu[i].score[j]);
printf("添加成功!\n");
}
}
//7号功能:删除学生成绩
void deletescore(STUDENT stu[])
{
int i,j,c;
long a;
system("cls");
printf("请输入学生学号:");
scanf("%ld",&a);
for(i=0;i<n;i++)
{
if(a==stu[i].studentID)
{
printf("╭════════════════════════════════════╮\n");
printf("名次\t学号\t\t姓名\t性别\t汇编\t数电\tC语言\t总分\t平均分\n");
printf("%d\t%9ld\t%s\t%3c\t",i+1,stu[i].studentID,stu[i].studentName,stu[i].studentSex);
for(j=0;j<M;j++)
printf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].sum);
printf("%4.2f\n",stu[i].aver);
printf("╰════════════════════════════════════=╯\n\n");
c=i;
break;
}
}
if(i==n)
printf("未找到该学生信息!\n");
printf("是否删除该学生成绩?(y/n)\n");
scanf("%s",&m);
if(m=='y')
{
for(i=c;i<n-1;i++)
stu[i]=stu[i+1]; //结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置
n=n-1; //删除该学生信息后学生总数减一
printf("删除成绩成功!\n");
}
else
printf("删除成绩失败!\n");
}
//8号功能:保存学生成绩
void savescore(STUDENT stu[])
{
FILE *fp;
int m=3;
inti,j,flag=1;
char a;
system("cls");
puts("是否保存学生成绩?(y/n)");
scanf("%s",&a);
if(a=='y')
{
if((fp=fopen("StudentInformation1.txt","w"))==NULL) //以写的方式打开文本文件
{
printf("文件打开失败!\n");
exit(0);
}
fprintf(fp,"%4d%4d\n",n,m);
for(i=0;i<n;i++)
{
fprintf(fp,"%9ld%10s%3c",stu[i].studentID,
stu[i].studentName,
stu[i].studentSex);
for(j=0;j<m;j++)
{
fprintf(fp,"%4.2f",stu[i].score[j]);
}
fprintf(fp,"%4.2f",stu[i].sum);
fprintf(fp,"%4.2f\n",stu[i].aver);
}
fclose(fp);
}
}
//0号功能:从文件中读取学生的信息到结构体数组stu中
void ReadfromFile(STUDENT stu[],int *n,int *m)
{
FILE *fp;
*m=3;
int i,j;
if((fp=fopen("StudentInformation1.txt","r"))==NULL)// 以读方式打开文件
{
printf("Failureto open StudentInformation1.txt!\n");
exit(0);
}
fscanf(fp,"%d%d",n,m);//从文件中读取学生人数和课程门数
for(i=0;i<=*n;i++) //学生人数保存在n指向的储存单元
{
fscanf(fp,"%9ld",&stu[i].studentID);
fscanf(fp,"%10s",stu[i].studentName);
fscanf(fp,"%c",&stu[i].studentSex);
for(j=0;j<*m;j++) //课程数保存在m指向的储存单元
{
fscanf(fp,"%f",&(stu[i].score[j]));
}
fscanf(fp,"%f",&stu[i].sum);
fscanf(fp,"%f",&stu[i].aver);
}
fclose(fp);
}
学生信息管理系统-结构体编写相关推荐
- 【C语言结构体题】定义用于存储学生信息的结构体数组,输入学生的准考证号、姓名和成绩信息,计算总分,并按总分由高到低输出。
在此基础上,增加下列功能函数 1.学生信息查询功能,根据学生的准考证号查询学生成绩信息 2.学生信息插入功能,在结构体数组的指定位置插入学生信息 3.学生信息删除功能,根据准考证号来删除满足条件的学生 ...
- 软件工程 学生信息管理系统 结构化的需求分析
文章目录 前言 1.实验目的 2.实验要求 3.需求分析 3.1用户需求 3.2功能需求分析 3.3非功能性需求 3.3.1数据精准度需求 3.3.2界面需求 3.3.3 响应时间需求 3.3.4 可 ...
- c语言存放学生信息的结构体类型,定义一个学生结构体类型
满意答案 zergling333 推荐于 2018.02.25 采纳率:56% 等级:12 已帮助:6763人 定义一个结构体类型: struct student {int num; char ...
- C语言编写学生信息管理系统
#include<stdio.h> #include<ctype.h> #include<stdlib.h> #include<string.h> #i ...
- C语言涉及数组的大作业,c语言大作业_基于数组的学生信息管理系统.doc
. . word完美格式 <C语言程序设计实训1>报告 设 计 题 目: 基于数组的学生信息管理系统 学 院 名 称: 科学技术学院 专 业: 软件工程 班 级: 108班 姓 名: 大神 ...
- 学生信息管理系统简易版(文件读写操作)
功能模块 具体功能如下: 添加学生信息 修改学生信息(按学号) 排序(分别按总分升序.降序.以及按姓名升序) 查找学生(按学号) 删除学生 查看所有学生信息 数据结构体设计 本表设计一个学生信息的结构 ...
- 学生管理系统软件实现与测试,学生信息管理系统实现
<学生信息管理系统实现>由会员分享,可在线阅读,更多相关<学生信息管理系统实现(29页珍藏版)>请在人人文库网上搜索. 1.武汉理工大学VC课程设计学 号: 课 程 设 计课程 ...
- 显示学生信息的C语言,学生信息管理系统C语言.doc
学生信息管理系统C语言 学生信息管理系统 摘要 由于学校规模进一步扩大,学生人数逐年上升,学生信息的管理也变得越来越复杂,切实有效的把学生信息管理系统引入学校教务管理中,对于促进学校管理制度和提高学校 ...
- 学生信息管理系统-数据结构课程设计
大一的时候自己写过一个关于学生成绩管理的程序 当时写了500多行 虽然功能多 但是 排错做的很不好 占的篇幅也多 一直不满意 这个寒假 本打算写 结果一直没动笔 昨天早上觉得没时间了 就搜集 百家 ...
- 基于SSM搭建的学生信息管理系统项目源码+学习视频
基于SSM搭建的学生信息管理系统 目录 基于SSM搭建的学生信息管理系统 1.为什么要编写学生信息管理系统 1.1编写项目的起因: 2.编写学生信息管理系统的过程 2.1项目成果的展示: 登录界面: ...
最新文章
- 2022-2028年中国成人艺术培训行业市场前瞻与投资战略规划分析报告
- [14] 薪酬迅速翻倍的13条跳槽原则
- ci持续集成工程师前景_持续集成CI---失败原因
- Servlet业务逻辑封装的试探
- 开启报名 | 青源 Salon 第 1 期:强化学习专场,报告,海报,激辩,这是年轻人的会场
- git 统计单个开发的代码量
- uliweb新教程--多人博客系统开发
- Docker 被禁,K8S 救火!
- “懒惰”Linux 管理员的 10 个关键技巧
- triu--上三角矩阵的抽取
- Python函数式编程简介(一)高阶函数
- 盘点十个最伟大的公式,1+1=2仅排到了第七
- matlab amd补丁,Matlab升级 AMD锐龙性能恢复满血:轻松提升60%
- 用CSS3来代替JS实现交互
- 【Cinemachine智能相机教程】VirtualCamera(三):Aim属性
- a:10 GET http://localhost:8080/static/js/xxx.js net::ERR_ABORTED 404
- 一个正在被API驱动的互联网时代
- mysql2 connector_2.升级mysql-connector 5到8遇到的问题
- Photoshop插件-证件照-2寸裁剪-2寸排版-脚本开发-PS插件
- 如何精简ttf字库文件
热门文章
- 北京妙计旅行 后台开发实习一面二面
- 超简单! 一个标签搞定跑马灯,纯css制作跑马灯效果
- java计算机毕业设计高校防疫物资管理系统MyBatis+系统+LW文档+源码+调试部署
- putty怎么连到linux服务器,PuTTY 从 Windows 连接到 亚马逊服务器Linux 实例
- java速算24,java枚举速算24正解集合
- 【洛谷】P1428:小鱼比可爱
- 【Unity】U3D ARPG游戏制作实例(一)EasyTouch5完整示例
- 电容式 指纹识别 android 智能硬件
- ardupilot-3.6.9 stabilize模式下(增稳模式)油门输入输出整理
- 基于ssm的网上问卷调查系统的实现与设计