当前位置: 代码迷 >> 综合 >> C语言编写的学生成绩管理系统
  详细解决方案

C语言编写的学生成绩管理系统

热度:52   发布时间:2024-02-06 12:01:06.0

题目来源:C语言程序设计实验与习题指导(第三版)颜晖 张泳 主编 P129

题目部分摘录: 

 基本功能:
(1)能够新增学生信息,并计算总分和平均分 (2)能够根据学号修改和删除某学生信息:
(3)能够显示所有学生的成绩信息;(4)能够分别按总分和学号进行排序;
(5)能够根据学号查询该学生的基本信息;(6)学生成绩数据最终保存在文件中,能够对文件读、写学生数据。

(由于在下写完程序才发现居然还要求了计算平均分功能,所以就没在程序里体现出来,聪明的大家自己完成就好了) 

  另外,考虑到如果要原模原样的按照原题目里一条指令一个功能,那么一开始使用程序就要输入“读取文件“的命令,程序输入完,又要输入“保存文件”的命令,这样过于繁琐。因此,在程序里对于“Write to a File”和“Read from File”的实现无需再输入“W”和“R”了

  程序的数据全部保存在了同目录下的名为“123.txt”,文件下,记得先创建。编译环境是devcpp。

以下为源代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
FILE*fp;int base=0;
struct student{int number;char name[10];int english,chinese,math,programme,sum;	
}s[10];
//输出菜单供选择 
void menu(){printf("\tManagement for Student's scores\n");printf("\t1.Append record\n");printf("\t2.List record\n");printf("\t3.Delete record\n");printf("\t4.Modify record\n");printf("\t5.Search record\n");printf("\t6.Sort in descending order by sum\n");printf("\t7.Sort in ascending order by sun\n");printf("\t8.Sort in descending order by num\n");printf("\t9.Sort in ascending order by num\n");printf("\tW.Write to a file\n");printf("\tR.Read from a File\n");printf("\tO.Exit\n");printf("\tPlease input your choice:\n");return;
}
//实现“Read from a File” 
void read(){char garbage[100];if((fp=fopen("123.txt","r"))==NULL){printf("Can not open file!\n");exit(1);}fscanf(fp,"%[^\n]\n",garbage);while(!feof(fp)){fscanf(fp,"%d%s%d%d%d%d%d\n",&s[base].number,s[base].name,&s[base].english,&s[base].chinese,&s[base].math,&s[base].programme,&s[base].sum);	base++;} fclose(fp);return;
}
//实现“Write to a File” 
void save(){int i=0;if((fp=fopen("123.txt","w"))==NULL){printf("Can not open file\n");exit(1);}fprintf(fp,"学号\t姓名\t英语成绩\t语文成绩\t数学成绩\t编程成绩\t总成绩\n");for(i=0;i<=base-1;i++)fprintf(fp,"%d\t%s\t%d\t%d\t%d\t%d\t%d\n",s[i].number,s[i].name,s[i].english,s[i].chinese,s[i].math,s[i].programme,s[i].sum);fclose(fp);return;
}
//实现“Append record”
void append(){int i;printf("Please input the number:");scanf("%d",&s[base].number);//确保学号的唯一性 for(i=0;i<base;i++){if(s[i].number==s[base].number){printf("This number has occupied!\n");return;}}printf("Please input the name:");scanf("%s",s[base].name);printf("Please input the English grade:");scanf("%d",&s[base].english);s[base].sum+=s[base].english;printf("Please input the Chinese grade:");scanf("%d",&s[base].chinese);s[base].sum+=s[base].chinese; printf("Please input the Math grade:");scanf("%d",&s[base].math);s[base].sum+=s[base].math;printf("Please input the Programme grade:");scanf("%d",&s[base].programme);s[base].sum+=s[base].programme;base++;return;
} 
//实现“List record”
void list(){printf("学号\t姓名\t英语成绩\t语文成绩\t数学成绩\t编程成绩\t总成绩\n");for(int i=0;i<base;i++)printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\n",s[i].number,s[i].name,s[i].english,s[i].chinese,s[i].math,s[i].programme,s[i].sum);return;
}
//实现“Delete record”
void del(){int del_number,i,sign=0;printf("Please input the number that you want to delete:");scanf("%d",&del_number);for(i=0;i<=base;i++)if(s[i].number==del_number){for(i;i<=base;i++){s[i].number=s[i+1].number;strcpy(s[i].name,s[i+1].name);s[i].english=s[i+1].english;s[i].chinese=s[i+1].chinese;s[i].math=s[i+1].math;s[i].programme=s[i+1].programme;s[i].sum=s[i+1].sum;}base--;sign=1;break;}if(sign==0)printf("Sorry,there are no this number.\n");else printf("Have made it!\n");return;
} 
//实现“Modify record”
void modify(){int modify_number,sign=0,j,i,modify_chose; printf("Please input the number that you want to modify:");scanf("%d",&modify_number);for(i=0;i<=base;i++)if(s[i].number==modify_number){printf("\t1.number\t2.name\n");printf("\t3.English grade\t4.Chinese grade\t5.Math grade\t6.Programme grade\n");printf("Please chose what you want to modify:");scanf("%d",&modify_chose);switch(modify_chose){case 1:{printf("Please input the new number:");scanf("%d",&s[i].number);for(j=0;j<base;j++){if(s[i].number==s[j].number)printf("This number has occupied!\n");return;}		break;}case 2:{printf("Please input the new name:");scanf("%s",s[i].name);break;}case 3:{printf("Please input the new English grade:");s[i].sum-=s[i].english;scanf("%d",&s[i].english);s[i].sum+=s[i].english;break;}case 4:{printf("Please input the new Chinese grade:");;s[i].sum-=s[i].chinese;scanf("%d",&s[i].chinese);s[i].sum+=s[i].chinese;break;}case 5:{printf("Please input the new Programme grade:");s[i].sum-=s[i].programme; scanf("%d",&s[i].programme);s[i].sum+=s[i].programme;break;}default:{printf("Please check your input!\n");return;}}printf("Have made it!\n");return;
} if(sign==0)printf("Sorry,there are no this number.\n");return; }
//实现“Search record”
void search(){int search_number,i,sign;printf("Please input the number:");scanf("%d",&search_number);for(i=0;i<=base;i++)if(s[i].number==search_number){sign=1;printf("学号:%d,姓名:%s,英语成绩:%d,语文成绩:%d,数学成绩:%d,编程成绩:%d,总分:%d\n",s[i].number,s[i].name,s[i].english,s[i].chinese,s[i].math,s[i].programme,s[i].sum);break;}if(sign==0)printf("Not found this person!\n");return;
}
//实现“Sort in descending order by sum”
void sort_d_s(){int i,j,change1;char change[10];for(i=0;i<base;i++)for(j=0;j<base-i-1;j++)if(s[j].sum<s[j+1].sum){change1=s[j+1].sum;s[j+1].sum=s[j].sum;s[j].sum=change1;change1=s[j+1].english;s[j+1].english=s[j].english;s[j].english=change1;change1=s[j+1].chinese;s[j+1].chinese=s[j].chinese;s[j].chinese=change1;change1=s[j+1].math;s[j+1].math=s[j].math;s[j].math=change1;change1=s[j+1].programme;s[j+1].programme=s[j].programme;s[j].programme=change1;change1=s[j+1].number;s[j+1].number=s[j].number;s[j].number=change1;strcpy(change,s[j+1].name);strcpy(s[j+1].name,s[j].name);strcpy(s[j].name,change);}return;
}
void sort_a_s (){int i,j,change1;char change[10];for(i=0;i<base;i++)for(j=0;j<base-i-1;j++)if(s[j].sum>s[j+1].sum){change1=s[j+1].sum;s[j+1].sum=s[j].sum;s[j].sum=change1;change1=s[j+1].english;s[j+1].english=s[j].english;s[j].english=change1;change1=s[j+1].chinese;s[j+1].chinese=s[j].chinese;s[j].chinese=change1;change1=s[j+1].math;s[j+1].math=s[j].math;s[j].math=change1;change1=s[j+1].programme;s[j+1].programme=s[j].programme;s[j].programme=change1;change1=s[j+1].number;s[j+1].number=s[j].number;s[j].number=change1;strcpy(change,s[j+1].name);strcpy(s[j+1].name,s[j].name);strcpy(s[j].name,change);}return;
}
void sort_d_n(){int i,j,change1;char change[10];for(i=0;i<base;i++)for(j=0;j<base-i-1;j++)if(s[j].number>s[j+1].number){change1=s[j+1].sum;s[j+1].sum=s[j].sum;s[j].sum=change1;change1=s[j+1].english;s[j+1].english=s[j].english;s[j].english=change1;change1=s[j+1].chinese;s[j+1].chinese=s[j].chinese;s[j].chinese=change1;change1=s[j+1].math;s[j+1].math=s[j].math;s[j].math=change1;change1=s[j+1].programme;s[j+1].programme=s[j].programme;s[j].programme=change1;change1=s[j+1].number;s[j+1].number=s[j].number;s[j].number=change1;strcpy(change,s[j+1].name);strcpy(s[j+1].name,s[j].name);strcpy(s[j].name,change);}return;
}
void sort_a_n(){int i,j,change1;char change[10];for(i=0;i<base;i++)for(j=0;j<base-i-1;j++)if(s[j].number<s[j+1].number){change1=s[j+1].sum;s[j+1].sum=s[j].sum;s[j].sum=change1;change1=s[j+1].english;s[j+1].english=s[j].english;s[j].english=change1;change1=s[j+1].chinese;s[j+1].chinese=s[j].chinese;s[j].chinese=change1;change1=s[j+1].math;s[j+1].math=s[j].math;s[j].math=change1;change1=s[j+1].programme;s[j+1].programme=s[j].programme;s[j].programme=change1;change1=s[j+1].number;s[j+1].number=s[j].number;s[j].number=change1;strcpy(change,s[j+1].name);strcpy(s[j+1].name,s[j].name);strcpy(s[j].name,change);}return;
}
int main(){	char choice_char;int choice;read();while(1){menu();scanf("%d",&choice);switch(choice){case 1:append();break;case 2:list();break;case 3:del();break;case 4:modify();break;case 5:search();break;case 6:sort_d_s();break;case 7:sort_a_s();break;case 8:sort_d_n();break;case 9:sort_a_n();break;//	case'W':{save();getchar();break;}//	case'R':{read();getchar();break;}case 0:{save();exit(1);}break;default:printf("输入了无效指令,请检查!\n");break;}  		}return 0;
}

 

  相关解决方案