C语言学生成绩管理(文件读取和写入)


# include <stdio.h>
# include <stdlib.h>
# include <string.h>

# include <math.h>
# include <conio.h>

# define eps 1;

typedef struct
{
    char name[50];
    int num;
    int Chinese;
    int Math;
    int English;
    int sum;
}Node;

Node student[1000];

int n;

char text[50];

int cmp(const void *a, const void *b)
{
    return (*(Node *)b).sum > (*(Node *)a).sum?1:-1;
}

int cmpnum(const void *a, const void *b)
{
    return (*(Node *)a).num > (*(Node *)b).num?1:-1;
}

void showstudent()
{
	void menu();
    int i;
	printf(" \t姓名\t学号\t语文\t数学\t英语\t总分\n");
	for(i=0;i<n;i++)
	{
		printf("\t%s\t%d\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English,student[i].sum);
	}
    getch();
    menu();
}

void sortnum()
{
	void menu();
    int i,j,k;
	char a[55];
	for(i=0;i<n;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(student[j].num>student[j+1].num)
			{
				k=student[j].num;
				student[j].num=student[j+1].num;
				student[j+1].num=k;
				k=student[j].Chinese;
				student[j].Chinese=student[j+1].Chinese;
				student[j+1].Chinese=k;
				k=student[j].Math;
				student[j].Math=student[j+1].Math;
				student[j+1].Math=k;
				k=student[j].English;
				student[j].English=student[j+1].English;
				student[j+1].English=k;
				k=student[j].sum;
				student[j].sum=student[j+1].sum;
				student[j+1].sum=k;
				strcpy(a,student[j].name);
				strcpy(student[j].name,student[j+1].name);
				strcpy(student[j+1].name,a);
			}
		}
	}
	showstudent();
    getch();
    menu();
}

void sortsum()
{
	void menu();
    qsort(student, n, sizeof(Node), cmp);
    showstudent();
    getch();
    menu();
}

void searchnum(int number)
{
	void menu();
    int min = 0, max = n-1, mid;
    bool escape = false;
    qsort(student, n, sizeof(Node), cmpnum);
    while(min <= max)
    {
        mid = (min + max) / 2;
        if(student[mid].num > number)
        {
            max = mid - eps;
        }
        else if(student[mid].num < number)
        {
            min = mid + eps;
        }
        else
        {
            escape = true;
            printf("\t姓名\t学号\t语文\t数学\t英语\t总分\n");
            printf("\t%s\t%d\t%d\t%d\t%d\t%d\n", student[mid].name, student[mid].num, student[mid].Chinese, student[mid].Math, student[mid].English, student[mid].sum);
            break;
        }
    }
    if(!escape)
    {
        printf("\t查无此人");
    }
    getch();
    menu();
}

void searchname()
{ 
	void menu();
	int i;
	for(i=0;i<n;i++)
	{
		if(strcmp(text,student[i].name)==0)
		{
			printf("\t姓名\t学号\t语文\t数学\t英语\t总分\n");
            printf("\t%s\t%d\t%d\t%d\t%d\t%d\n", student[i].name, student[i].num, student[i].Chinese, student[i].Math, student[i].English, student[i].sum);
			break;
		}
	}
	if(i>=n)
	{
		printf("\t查无此人\n");
	}
    getch();
    menu();
}

void save()
{
	void menu();
    FILE *fp;
	fp=fopen("4.txt","w");
	int i;
	fprintf(fp, "\t姓名\t学号\t语文\t数学\t英语\t总分\n");
	for(i=0;i<n;i++)
	{
		if(student[i].Chinese<60||student[i].Math<60||student[i].English<60)
		{
		    printf("\t%s\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English);
			fprintf(fp,"\t%s\t%d\t%d\t%d\t%d\n",student[i].name,student[i].num,student[i].Chinese,student[i].Math,student[i].English);
		}
	}
	printf("\n");
	printf("┏━━━━┓\n");
    printf("┃保存成功┃\n");
    printf("┗━━━━┛\n");
    getch();
    menu();
}

void menu()
{
    int choice;
    system("cls");
    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("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
    printf("                    选择代码(0,1,2,3,4,5,6): ");
    scanf("%d", &choice);
    switch(choice)
    {
        case 0:
        {
            system("cls");
            printf("谢谢使用!\n");
            exit(0);
        }
        case 1:
        {
            system("cls");
            showstudent();

        }
        case 2:
        {
            system("cls");
            sortnum();
        }
        case 3:
        {
            system("cls");
            sortsum();
        }
        case 4:
        {
            system("cls");
            int num;
            printf("\t请输入要查找学生的学号:");
            scanf("%d", &num);
            searchnum(num);
        }
        case 5:
        {
            system("cls");
            printf("\t请输入要查找学生的姓名:");
            scanf("%s", text);
            searchname();
        }
        case 6:
        {
            system("cls");
            save();
        }
    }
}

int main()
{
	void menu();
    n = 0;
    FILE * fp;
   fp=fopen("1.txt","r+");
   {
        while(fscanf(fp, "%s %d %d %d %d", student[n].name, &student[n].num, &student[n].Chinese, &student[n].Math, &student[n].English)!=EOF)
        {
            student[n].sum = 0;
            student[n].sum +=  student[n].Chinese;
            student[n].sum +=  student[n].Math;
            student[n].sum +=  student[n].English;
            n++;
        }
        fclose(fp);
   }
   fp=fopen("2.txt","r+");
   {
        while(fscanf(fp, "%s %d %d %d %d", student[n].name, &student[n].num, &student[n].Chinese, &student[n].Math, &student[n].English)!=EOF)
        {
            student[n].sum = 0;
            student[n].sum +=  student[n].Chinese;
            student[n].sum +=  student[n].Math;
            student[n].sum +=  student[n].English;
            n++;
        }
        fclose(fp);
   }
    menu();
    return 0;
}

C语言学生成绩管理系统(以包含文件的形式写的),结构体,链表,数组,以下是main.c #include #include #include #define m 3/*宏定义m的值为3*/ struct node/*链表初始化*/ { char name[20]; int no; float score[m]; float sum; float avg; struct node *next; }; char ch[m+4][20]={{"学号"},{"姓名"},{"语文"},{"数学"},{"英语"},{"总分"},{"平均分"}};/*定义并初始化一个全局二维字符数组*/ #include "save.c"/*包含保存文件*/ #include "read.c"/*包含读取文件*/ #include "output.c"/*包含打印文件*/ #include "set.c"/*包含录入文件*/ #include "demand.c"/*包含查询文件*/ #include "sort.c"/*包含排序文件*/ #include "modified.c"/*包含修改文件*/ #include "add.c"/*包含添加文件*/ #include "del.c"/*包含删除文件*/ void main() { int n; printf("\n\t\t\t欢迎使用学生成绩管理系统\n\n"); printf("\t\t\t\t\t\t制 作: XIA XIA\n"); do { printf("\n\n1:学生成绩录入,并保存\n"); printf("2:学生成绩查询\n"); printf("3:学生成绩的排序\n"); printf("4:学生成绩的修改\n"); printf("5:学生成绩的打印\n"); printf("6:学生信息的添加\n"); printf("7:学生信息的删除\n"); printf("0:退出学生成绩管理系统\n\n\n"); printf("输入你要执行操作的相应序号\n"); scanf("%d",&n);/*输入相就的操作的序号*/ switch (n) { case 1: set();break;/*调用录入函数*/ case 2: demand();break;/*调用查询函数*/ case 3: sort();break;/*调用排序函数*/ case 4: modified();break;/*调用修改函数*/ case 5: output();break;/*调用打印函数*/ case 6: add();break;/*调用添加函数*/ case 7: del();break;/*调用删除函数*/ case 0: printf("正在退出学生成绩管理系统......\n");exit(0);/*直到输入“0”退出学生成绩管理系统*/ default:printf("输入错误码,请重新输入\n"); } }while(1); }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值