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

题目来源: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;
}

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值