学生成绩管理系统
用C语言编写学生成绩管理系统,要求该系统可对学生进行添加和删除操作,可对3门成绩中各门成绩进行录入、修改、排序和、筛选和求平均分操作,并将数据保存为文件。学生具备学号、姓名、性别和住址属性。
#include<stdio.h>
struct student{
int sno;
char name[50];
char gender[10];
char address[100];
double courses[100];
}st[500];
void input(int *num){
printf("--------请先进行学生成绩录入--------\n");
int n,i,j;
printf("请输入学生个数:\n");
scanf("%d",&n);
*num = n;
for(i = 0;i<n;i++){
st[i].sno = i+1;
printf("请输入第%d个学生的姓名:\n",i+1);
scanf("%s",st[i].name);
printf("请输入第%d个学生的性别:\n",i+1);
scanf("%s",st[i].gender);
printf("请输入第%d个学生的住址:\n",i+1);
scanf("%s",st[i].address);
for(j = 0;j<3;j++){
printf("请输入第%d名学生的第%d门课程的成绩:\n",i+1,j+1);
scanf("%lf",&st[i].courses[j]);
}
}
}
void alter(int num){
int sno,course;
double score;
printf("请输入要修改成绩的学生学号(次序号):\n");
while(1){
scanf("%d",&sno);
if(sno > num || sno <= 0){
printf("输入学号有误!请重新输入!\n");
}
else{
break;
}
}
printf("请输入要修改的学科编号(次序号):\n");
while(1){
scanf("%d",&course);
if(course > 3 || course <= 0){
printf("输入学科编号有误!请重新输入!\n");
}
else{
break;
}
}
printf("请输入目标修改成绩:\n");
scanf("%lf",&score);
st[sno-1].courses[course-1] = score;
if(st[sno-1].courses[course-1] == score){
printf("修改成功!\n");
}
else{
printf("修改失败!\n");
}
}
void bubble_sort(int num,double score[500]){
int i,j;
double t;
for(i = 0;i< num-1;i++){
for(j = 0;j<num-1-i;j++){
if(score[i] < score[i+1]){
t = score[i];
score[i] = score[i+1];
score[i+1] = t;
}
}
}
}
void sort(int num){
int i,course;
double score[500];
printf("请输入要排序的学科编号(次序号):\n");
scanf("%d",&course);
for(i = 0;i< num;i++){
score[i] = st[i].courses[course-1];
}
bubble_sort(num,score);
printf("排序结果为:(从大到小):\n");
for(i = 0;i< num;i++){
printf("第%d名:%.2lf\n",i+1,score[i]);
}
printf("排序成功!");
}
void average(int num){
int i,course;
double sum1=0,avg;
double score[500];
printf("请输入要求平均成绩的学科编号(次序号):\n");
while(1){
scanf("%d",&course);
if(course > 3 || course <= 0){
printf("输入学科编号有误!请重新输入!\n");
}
else{
break;
}
}
for(i = 0;i< num;i++){
sum1 += st[i].courses[course - 1];
}
avg = sum1/num*1.0;
printf("该科目平均成绩为:%.2lf\n",avg);
printf("操作成功!\n");
}
void filter(int num){
int i,course;
double up,low,score[500];
printf("请输入要筛选的学科编号(次序号):\n");
while(1){
scanf("%d",&course);
if(course > 3 || course <= 0){
printf("输入学科编号有误!请重新输入!\n");
}
else{
break;
}
}
printf("请输入成绩上限:\n");
scanf("%lf",&up);
printf("请输入成绩下限:\n");
scanf("%lf",&low);
for(i = 0;i< num;i++){
score[i] = st[i].courses[course-1];
}
bubble_sort(num,score);
printf("筛选结果为:\n");
for(i = 0;i<num;i++){
if(score[i] >= low && score[i]<= up){
printf("成绩:%.2lf\n",score[i]);
}
}
printf("筛选完毕!");
}
void add(int *num){
int i,j,addnum,tnum;
double score=0;
tnum = *num;
printf("请输入添加学生的个数:\n");
scanf("%d",&addnum);
for(i = 0;i< addnum;i++){
tnum++;
st[tnum-1].sno = tnum;
printf("请输入添加学生姓名:\n");
scanf("%s",&st[tnum-1].name);
printf("请输入添加学生性别:\n");
scanf("%s",&st[tnum-1].gender);
printf("请输入添加学生地址:\n");
scanf("%s",&st[tnum-1].address);
*num = tnum;
for(j = 0;j<3;j++){
printf("请输入学生的第%d门课程的成绩:\n",j+1);
scanf("%lf",&score);
st[tnum-1].courses[j] = score;
}
if(st[tnum-1].courses[2] == score){
printf("添加成功!\n");
}
else{
printf("添加失败!\n");
}
}
}
void delete(int *num){
int i,j,sno,dnum;
dnum = *num;
printf("请输入删除学生的学号(次序号):\n");
while(1){
scanf("%d",&sno);
if(sno > dnum || sno <= 0){
printf("输入学号有误!请重新输入!\n");
}
else{
break;
}
}
for(i = sno-1;i<dnum-1;i++){
st[i].sno = st[i+1].sno;
strcpy(st[i+1].gender,st[i].gender);
strcpy(st[i+1].name,st[i].name);
strcpy(st[i+1].address,st[i].address);
for(j = 0;j<3;j++){
st[i].courses[j] = st[i+1].courses[j];
}
}
dnum--;
*num = dnum;
printf("删除成功!\n");
}
void show(int num){
int i,j;
printf("共有%d名学生,信息如下:\n",num);
for(i = 0;i< num;i++){
printf("------------------------------------\n");
printf("第%d名学生\n",i+1);
printf("学号:%d\n",st[i].sno);
printf("姓名:%s\n",st[i].name);
printf("性别: %s\n",st[i].gender);
printf("地址:%s\n",st[i].address);
for(j = 0;j<3;j++){
printf("第%d门成绩为:%lf\n",j+1,st[i].courses[j]);
}
}
}
void save(int num){
FILE *fp;
int i,j;
fp=fopen("data.txt","w");
if(fp==NULL)
{
printf("File cannot open! " );
}
fprintf(fp,"共有%d名学生,信息如下:\n",num);
for(i = 0;i< num;i++){
fprintf(fp,"------------------------------------\n");
fprintf(fp,"第%d名学生\n",i+1);
fprintf(fp,"学号:%d\n",st[i].sno);
fprintf(fp,"姓名:%s\n",st[i].name);
fprintf(fp,"性别: %s\n",st[i].gender);
fprintf(fp,"地址:%s\n",st[i].address);
for(j = 0;j<3;j++){
fprintf(fp,"第%d门成绩为:%lf\n",j+1,st[i].courses[j]);
}
}
fclose(fp);
printf("写入成功!\n");
}
int main(){
int num,numb,flag = 0;
printf("---------------******---------------\n");
printf("------欢迎使用学生成绩管理系统------\n");
input(&num);
while(1){
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");
scanf("%d",&numb);
switch (numb){
case 0:
show(num);
break;
case 1:
add(&num);
break;
case 2:
delete(&num);
break;
case 3:
alter(num);
break;
case 4:
sort(num);
break;
case 5:
filter(num);
break;
case 6:
average(num);
break;
case 7:
save(num);
break;
case 8:
flag = 1;
break;
}
if(flag){
printf("欢迎下次使用!\n");
break;
}
}
return 0;
}