la estructura del lenguaje C para lograr sistema de gestión de los estudiantes (incluyendo las funciones de importación y exportación de archivos)

La función general:
marco general y la función son otras funciones por sí mismos, ji, ji escisión.
entrada de vacío (estudiante struct Stu [] ); // Introducir
void enmendar (estudiante struct Stu [] ); // Modificar
void (Stu estudiante struct [] remove ); // Delete
void (Stu estudiante struct [] namefind ); / / consulta por su nombre
numfind vacío (Stu estudiante estructura [] ); // por el número de estudiante consulta
classfind vacío (Stu estudiante estructura [] ); // consulta por clase
printfsort1 vacío (Stu estudiante estructura [] ); // clasificación de puntuación total
printfsort2 vacío (estudiante estructura Stu [] ); // clasificación de sujetos individuales
vacío printfsort3 (Stu estudiante estructura [] ); // excelentes tasas de
vacío SaveFile (Stu estudiante estructura [] ); // guardar en un archivo
readfile vacío (Stu estudiante struct []); // archivo de importación

Function Chart
formato de archivo de importación es txt ejemplos de diseño de contenido:

17001018 廖 10 高数 91 英语 89
17001019 凌 10 高数 61 英语 59
17001020 刘 10 高数 98 英语 81
17001021 陆 10 高数 99 英语 99
17001022 达 11 高数 81 英语 89
17001118 蒙 11 高数 91 英语 69
17001119 梁 11 高数 71 英语 59
17001120 杜 11 高数 88 英语 93
17001121 黄 11 高数 69 英语 80
17001122 李 11 高数 91 英语 99
17001016 萧 10 高数 71 英语 69
17001027 冰 10 高数 98 英语 89
17001028 炎 10 高数 89 英语 90
17001037 杨 10 高数 28 英语 49
17001038 韩 10 高数 59 英语 60
17001021 飞 10 高数 89 英语 99

Código es el siguiente:

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h> //清屏 system("cls");
#include<string.h>
#define N 30

void input(struct student stu[]);     //输入
void amend(struct student stu[]);  //修改
void remove(struct student stu[]); //删除
void namefind(struct student stu[]);//按名字查询
void numfind(struct student stu[]);//按学号查询
void classfind(struct student stu[]);//按班级查询
void printfsort1(struct student stu[]); //总分排名
void printfsort2(struct student stu[]);//单科排名
void printfsort3(struct student stu[]);//优秀率
void savefile(struct student stu[]);//保存成文件
void readfile(struct student stu[]);//导入文件

int n = 1;
struct student
{	
	int num;
	char name[20];
	int Class;
	char classname1[20]; 
	int score1;
	char classname2[20]; 
	int score2;
	int score;
	
};

int main()
{
	while(1)
	{
		system("cls");
		int a;
		struct student stu[N],*p=stu;
		printf("----------------------------------------------------\n");
		
		printf("               学生成绩管理系统                     \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(" 【10】 导入学生信息文件\n");
		printf(" 【11】 保存学生信息文件\n");
		printf(" 【0】 退出系统\n");
		
		printf("----------------------------------------------------\n");
		
		printf(" 输入0到11选择系统功能\n");
		scanf("%d",&a);
		
		switch(a)
		{
		case 0: printf("		退出系统成功!\n");system("pause");return 0;
		case 1: input(p);
			break;
		case 2: amend(p);
			break;
		case 3: remove(p);
			break;
		case 4: namefind(p);
			break;
		case 5: numfind(p);
			break;
		case 6: classfind(p);
			break;
		case 7: printfsort1(p);
			break;
		case 8: printfsort2(p);
			break;
		case 9: printfsort3(p);
			break;
		case 10: readfile(p);
			break;
		case 11: savefile(p);
			break;
			
		default: 		printf(" 输入错误,请重新输入\n");system("pause");break;
			
		}
	
	}
	return 0;
	
}

void input(struct student stu[])//OK
{
	printf(" 输入添加学生信息的人数\n");
	int b,c=0;
	scanf("%d",&c);
	for(int i=1;i<=c;i++)
	{
		
		printf("  第%d个学生 输入:学号 名字 班级 课程名字1 成绩1 课程名字2 成绩2 \n",i);
		scanf("%d%s%d%s%d%s%d",&stu[n].num,&stu[n].name,&stu[n].Class,&stu[n].classname1,&stu[n].score1,&stu[n].classname2,&stu[n].score2);
		
		stu[n].score=stu[n].score1+stu[n].score2;
		n++;
		
	}
	if(c!=0&&c>0)printf("\n添加成功!\n\n");  
	system("pause");  
	system("cls");
	
	printf(" 输入0结束添加,输入1继续添加。\n");
	scanf("%d",&b);
	switch(b)
	{
	case 0: printf("		结束添加成功!\n");
		system("pause");
		break;
	case 1: input(stu); 
		break;
	default: 		printf(" 输入错误,请重新输入\n");system("pause");
		break;
	}
	
}
void amend(struct student stu[])  //修改
{
	int i,j,o,l,b;  
    char a[20]; 
	printf(" 选择修改方式1.学号 2.姓名\n");
		scanf("%d",&l);
	switch(l)
	{
	case 1:
	printf("输入修改学生的学号:\n");
	scanf("%d",&b); 
	for(i=0;i<n;i++)  
    {  
        if(b==stu[i].num)  
        {  
            printf("学号:%d\n",stu[i].num);  
            printf("姓名:%s\n",stu[i].name);  
            printf("班级:%d\n",stu[i].Class);  
            printf("%s的成绩%d\n",stu[i].classname1,stu[i].score1);  
            printf("%s的成绩%d\n",stu[i].classname1,stu[i].score2);  
            printf("总成绩:%d\n\n",stu[i].score); 
			o=i;
			break;
			
		}
	}
	if(i==n) {printf("输入错误或查询学生不存在\n");system("pause"); return;}
		break;
	case 2:
    printf("输入修改学生的名字:\n");  
    scanf("%s",&a);                           //通过输入需要修改信息的学号找到   
    for(i=0;i<=n;i++)  
    {    
        if(strcmp(a,stu[i].name)==0)  
        {  
            printf("学号:%d\n",stu[i].num);  
            printf("姓名:%s\n",stu[i].name);  
            printf("班级:%d\n",stu[i].Class);  
            printf("%s的成绩%d\n",stu[i].classname1,stu[i].score1);  
            printf("%s的成绩%d\n",stu[i].classname1,stu[i].score2);  
            printf("总成绩:%d\n\n",stu[i].score);  
            o=i;
			break;
        }
	}
		if(i==n) {printf("输入错误或查询学生不存在\n");system("pause"); return;}
      
	break;
	}
	printf(" 输入0到9选择修改的内容\n");
    printf("1.修改学号\n2.修改姓名\n3.修改班级\n4.修改成绩1\n5.修改成绩2\n6.修改总分\n请选择:");  
    scanf("%d",&j);                                                  //选择修改的信息  
    switch(j)                                                       
    {  
	case 1:  
		printf("学号修改为:");  
		scanf("%d",&stu[o].num);  
		break;  
		
	case 2:  
		printf("姓名修改为:");  
		scanf("%s",&stu[o].name);  
		break;  
	case 3:  
		printf("班级修改为:");  
		scanf("%d",&stu[o].Class);  
		break;  
	case 4:  
		printf("成绩1修改为:");  
		scanf("%d",&stu[o].score1);  
		break;  
	case 5:  
		printf("成绩修改为:");  
		scanf("%d",&stu[o].score2);  
		break;  
	case 6:  
		printf("总分修改为:");  
		scanf("%d",&stu[o].score);  
		break;  
    }  
    printf("\n修改成功!\n\n");  
    system("pause");  
    system("cls");  
}
void remove(struct student stu[]) //删除OK
{
	
    char a[20];  
    printf("请输入要删除学生的姓名\n");  
    scanf("%s",&a);  
    for(int i=0;i<n;i++)  
        if(strcmp(a,stu[i].name)==0)  
        {  
            while(i<n)  
            {  
                stu[i]=stu[i+1];  
                i++;  
            }  
            n--;  
		}
		printf("\n删除成功!\n\n");
		system("pause");  
		system("cls"); 
}
void namefind(struct student stu[]) // ok
{	
    char a[20];  
    printf("输入需要查询的姓名:\n");  
    scanf("%s",&a);  
    for(int i=0;i<=n;i++)  
    {  
        if(strcmp(a,stu[i].name)==0)  
        {  
            printf("学号:%d\n",stu[i].num);  
            printf("姓名:%s\n",stu[i].name);  
            printf("班级:%d\n",stu[i].Class);  
            printf("%s的成绩%d\n",stu[i].classname1,stu[i].score1);  
            printf("%s的成绩%d\n",stu[i].classname1,stu[i].score2);  
            printf("总成绩:%d\n\n",stu[i].score);  
            break;
		}
		if(i==n) printf("输入错误或查询学生不存在\n");
	}
	system("pause");  
    system("cls");  
	
}
void numfind(struct student stu[])
{
	int a;  
    printf("输入需要查询的学号:\n");  
    scanf("%d",&a);  
    for(int i=0;i<n;i++)  
    {  
        if(a==stu[i].num)  
        {  
            printf("学号:%d\n",stu[i].num);  
            printf("姓名:%s\n",stu[i].name);  
            printf("班级:%d\n",stu[i].Class);  
            printf("%s的成绩%d\n",stu[i].classname1,stu[i].score1);  
            printf("%s的成绩%d\n",stu[i].classname1,stu[i].score2);  
            printf("总成绩:%d\n\n",stu[i].score);  
			break;
		}
		if(i==n) printf("输入错误或查询学生不存在\n");
	}
	system("pause");  
    system("cls");  
}
void classfind(struct student stu[]) //OK
{
	int a,b; 
    printf("输入需要查询的班级:\n");  
    scanf("%d",&a);  
    for(int i=0;i<n;i++)  
    {  
        if(a==stu[i].Class)  
        {  
            printf("%d.姓名:%s 学号:%d\n",i,stu[i].name,stu[i].num);  
			
		}
	}
	printf("输入要查看学生前的序号\n");
	scanf("%d",&b);  
	if(stu[b].num>0)
	{
		printf("学号:%d\n",stu[b].num);  
		printf("姓名:%s\n",stu[b].name);  
		printf("班级:%d\n",stu[b].Class);  
		printf("%s的成绩%d\n",stu[b].classname1,stu[b].score1);  
		printf("%s的成绩%d\n",stu[b].classname1,stu[b].score2);  
		printf("总成绩:%d\n\n",stu[b].score); 
	}
	else printf("输入错误或查询学生不存在\n");
	
	system("pause");  
    system("cls"); 
}
void printfsort1(struct student stu[]) //总分排名OK
{
	struct student t;  
    int i,j;  
    printf("	%d 个学生总分排名:\n",n-1);  
    for(i=1;i<n;i++)  
    {  
        for(j=i+1;j<n;j++)                 
        {  
			
            if(stu[i].score<=stu[j].score)    
            {  
                t=stu[i];                 
                stu[i]=stu[j];                 
                stu[j]=t;                  
            }  
        }  
    }  
	printf("排名\t学号\t\t名字\t班级\t总分\n");  
	for(i=1;i<n;i++)  
	{ 		    
		printf(" %d\t%d\t%s\t%d\t%d\n",i,stu[i].num,stu[i].name,stu[i].Class,stu[i].score);
		
	}
    system("pause");  
    system("cls");  
}
void printfsort2(struct student stu[])//单科排名
{
	struct student t;  
    int i,j,a;  
	printf("选择要查看的科目排名:1.%s 2.%s\n",stu[n-1].classname1,stu[n-1].classname2);
	scanf("%d",&a); 
	switch(a)                                                       
    {  
	case 1: 
		printf("	%d 个学生排名:\n",n-1);  
		for(i=1;i<n;i++)  
		{  
			for(j=i+1;j<n;j++)                 
			{  
				
				if(stu[i].score1<=stu[j].score1)    
				{  
					t=stu[i];                 
					stu[i]=stu[j];                 
					stu[j]=t;                  
				}  
			}  
		}  
		printf("排名\t学号\t\t名字\t班级\t%s分数\n",stu[n-1].classname1);  
		for(i=1;i<n;i++)  
		{ 		    
			printf(" %d\t%d\t%s\t%d\t%d\n",i,stu[i].num,stu[i].name,stu[i].Class,stu[i].score1);
			
		} break;
	case 2: 
		printf("	%d 个学生排名:\n",n);  
		for(i=1;i<n;i++)  
		{  
			for(j=i+1;j<n;j++)                 
			{  
				
				if(stu[i].score2<=stu[j].score2)    
				{  
					t=stu[i];                 
					stu[i]=stu[j];                 
					stu[j]=t;                  
				}  
			}  
		}  
		printf("排名\t学号\t名字\t班级\t%s分数\n",stu[n-1].classname2);  
		for(i=1;i<n;i++)  
		{ 		    
			printf(" %d\t%d\t%s\t%d\t%d\n",i,stu[i].num,stu[i].name,stu[i].Class,stu[i].score2);
			
		} break;
	}
	system("pause");  
    system("cls");  
}
void printfsort3(struct student stu[])//优秀率OK
{
	int count1=0,count2=0; 
	float s;
	int i,j,a;  
	printf("选择要查看的优秀率:1.班级 2.年级\n");
	scanf("%d",&a);
	switch(a)
	{
	case 1:
		printf("输入需要查看的班级:\n");
		scanf("%d",&j);
		printf("\t%d班优秀学生名单:\n",j);
		printf("\t学号\t\t名字\t班级\t总分\n"); 
		for(i=1;i<n;i++)  
		{  
			if(stu[i].Class==j) count2++;
		
			if(stu[i].score>=180&&stu[i].Class==j)    
			{  
				printf("\t%d\t%s\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].score); 
				count1++;
			}  
			
		} 
		if(count2==0) printf("没有达到优秀的学生\n");
		else
		{
		s=(float)count1/count2;
		printf("%d班优秀率为:%f\n\n",j,s);
		}
		count1=count2=0;
		printf("\t%d班不及格学生名单:\n",j);
		printf("\t学号\t\t名字\t班级\t总分\n"); 
		for(i=1;i<n;i++)  
		{  
			if(stu[i].Class==j) count2++;
		
			if(stu[i].score<120&&stu[i].Class==j)    
			{  
				printf("\t%d\t%s\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].score); 
				count1++;
			}  
			
		} 
		if(count2==0) printf("没有不及格的学生\n");
		else
		{
		s=(float)count1/count2;
		printf("%d班不及格率为:%f\n",j,s);
		}



		break;
	case 2:
		printf("\t年级优秀学生名单:\n");
		printf("\t学号\t\t名字\t班级\t总分\n"); 
		for(i=1;i<n;i++)  
		{  
			
			if(stu[i].score>=180)    
			{  
				printf("\t%d\t%s\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].score); 
				count1++;
			}  
			
		}  
		if(count1==0) printf("没有达到优秀的学生\n");
		s=(float)count1/(n-1);
		printf("年级优秀率为:%f\n\n",s);
		count1=count2=0;
		printf("\t年级不及格学生名单:\n");
		printf("\t学号\t\t名字\t班级\t总分\n"); 
		for(i=1;i<n;i++)  
		{  
			if(stu[i].score<120)    
			{  
				printf("\t%d\t%s\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].score); 
				count1++;
			}  
			
		} 
		if(count1==0) printf("没有不及格的学生\n");
		else
		{
		s=(float)count1/(n-1);
		printf("年级不及格率为:%f\n",s);
		}

		break;
	}
	
	
	
    system("pause");  
    system("cls");
}

void readfile(struct student stu[])
{
	int i =1,j=n;
	char file[200];
	
	FILE *fp;
	printf("输入需要导入的文件位置和文件名:\n");
	scanf("%s",&file);
	
	//char file[200]="C:\\Users\\23607\\Desktop\\c.txt";
	
	if((fp=fopen(file,"r"))==NULL) {printf("输入错误或者文件无法打开\n");	system("pause"); return;}
	
	while(!feof(fp))                     //读取一组数据后指针指向下一组数据,并且判断是否指向最后一行   
    {   
        fscanf(fp,"%d%s%d%s%d%s%d",&stu[n].num,&stu[n].name,&stu[n].Class,&stu[n].classname1,&stu[n].score1,&stu[n].classname2,&stu[n].score2);
		
		
		n++;
    } 
	n--;

	printf("以下学生已导入!\n");
	for(i=j;i<n;i++)
	{
		
		printf("学号:%d\t",stu[i].num);  
		printf("姓名:%s\t",stu[i].name);  
		printf("班级:%d\t",stu[i].Class);  
		printf("%s的",stu[i].classname1);
		printf("成绩:%d\t",stu[i].score1);  
		printf("%s的",stu[i].classname2);
		printf("成绩:%d\t",stu[i].score2);
		stu[i].score=stu[i].score1+stu[i].score2;
		printf("总成绩:%d\t",stu[i].score);
		printf("\n");
	}
	
	
	fclose(fp);
	system("pause");  
	system("cls");
}
void savefile(struct student stu[])
{
	int i =1;
	char file[200];
	
	FILE *fp;
	printf("输入需要保存的文件位置和文件名:\n");
	scanf("%s",&file);
	
	//char file[200]="C:\Users\23607\Desktop\c.txt";
	
	if((fp=fopen(file,"w"))==NULL) {printf("输入错误或者文件无法打开\n");	system("pause"); return;}
	
	//	for (i=1;i<n;i++) fwrite(&stu[i],sizeof(struct student),sizeof(struct student),fp);    
	
	for (i=1;i<n;i++)                     
    {   
        fprintf(fp,"%d %s %d %s %d %s %d\n",stu[i].num,stu[i].name,stu[i].Class,stu[i].classname1,stu[i].score1,stu[i].classname2,stu[i].score2);
		
		
		
    } 
	
	printf("以下学生已保存到位置为%s的文件!\n",file);
	for(i=1;i<n;i++)
	{
		
		printf("学号:%d\t",stu[i].num);  
		printf("姓名:%s\t",stu[i].name);  
		printf("班级:%d\t",stu[i].Class);  
		printf("%s的",stu[i].classname1);
		printf("成绩:%d\t",stu[i].score1);  
		printf("%s的",stu[i].classname2);
		printf("成绩:%d\t",stu[i].score2);
		stu[i].score=stu[i].score1+stu[i].score2;
		printf("总成绩:%d\t",stu[i].score);
		printf("\n");
	}
	
	
	fclose(fp);
	system("pause");  
	system("cls");
}

cangrejo ~

Liberadas nueve artículos originales · ganado elogios 9 · vistas 2953

Supongo que te gusta

Origin blog.csdn.net/Rice__/article/details/91575784
Recomendado
Clasificación