栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言学生信息管理系统(文件操作)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言学生信息管理系统(文件操作)

测试数据

 000000001      张三       100        99        98     99.00
 000000002      马七         0         1         0      0.33
 000000003      王五        50        60        60     56.67
 000000004      李四        90        90        90     90.00
 000000005      赵六        30        50        80     53.33
 000000006      孙八        64        87        78     76.33
 000000008    王明明        63        66        69     66.00
 000000009      钱九        86        58        79     74.33
 000000007    李琳琳        68        80        69     72.33

代码段落(文件运行完就自动删除了,求解) 

#include
#include
#include 
#include
#include
#define N 9 //文件

//带头结点
typedef struct student
{
	char number[10];    
	char name[15];  
	int C;//Chinese
	int M;//Math
	int E;//English
	float ave;//self_ave
	struct student *next;
}stu;

int login();//密码  --
void menu();//菜单  --
stu *creatNode();//创建带头结点链表  --
void add_infor(stu *head);//学生信息添加 
void seek(stu *head);//学生信息查询 --
void output(stu *head);//输出数据  --
void fail(stu *head);//输出挂科学生 --
stu *NoSort(stu *head);//按学号排序 --
stu *AveSort(stu *head);//按平均分排序 -- 
void AveScore(stu *head,float a[]);//计算各科平均分 --
void freeNode(stu *head);//销链 --
void save(stu *head); //保存数据 --
void save_ave(float a[]);//保存各科平均分数据 --

int main()
{
    stu *head=NULL,*h=NULL;
    float a[3]={0};
    int num,last=0;//last 用来区别保存的数据
    if(login()==0)return 0;
    head=creatNode();
    printf("File reading complete,Please press any key to continue...n");
    getch();//waiting
    menu();
    while(scanf("%d",&num)!=EOF)
    {
       switch(num)
       {
           case 0:printf("end......n");Sleep(1);exit(0);
           case 1:output(head);break;
           case 2:fail(head);break;
           case 3:h=NoSort(head);output(h);freeNode(h);break;
           case 4:h=AveSort(head);output(h);freeNode(h);break;
           case 5:AveScore(head,a);printf("n计算完毕...");break;
           case 6:seek(head);break;
           case 7:add_infor(head);printf("nn添加完成...nn");output(head);break;
           case 8:  if(last==5)         
                        save(head);
                    else
                    {
                        if(last==1)    
                            save(head);
                        else
                        {
                            save(h);
                            free(h);
                        }
                    }
                    printf("n保存完成啦~n");break;
           default :printf("(〃>目<)请输入 0 ~ 6 的数字...");break;
       }
        printf("nback~n");
        getch();
        system("cls");
        menu();
        printf("continue~n");
        last=num;
    }
    free(head);//释放
    return 0;
}

int login()//密码
{
    char key[N];
    printf("请输入密码->__");
    while(1)
    {
        scanf("%s",&key);
        if((strcmp("12345",key)==0))
            return 1;
        else
        printf("one more time-> ");
    }//重复输入密码直到正确
}

void menu()//菜单
{
    printf("n");
    printf("--------------------___学生信息管理系统___--------------------n");
    printf("-----                                                   ------n");
    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("-----               [0]退出                              -----n");
    printf("-----                                                   ------n");
    printf("--------------------------------------------------------------n");

}

stu *creatNode()//创建带头结点链表
{
    char number[10];    
	char name[15];  
	int C;//Chinese
	int M;//Math
	int E;//English
	float ave;//self_ave
    FILE *fp;
    if((fp=fopen("data.txt","r"))==NULL)
    {
        printf("can not open this filen");
        exit(0);
    }
    stu *h=NULL,*tail,*p;
    int i;
    h=(stu *)malloc(sizeof(stu));
    h->next=NULL;
    tail=h;
    for(i=0;inumber,number);strcpy(p->name,name);
		p->C=C;p->M=M;p->E=E;p->ave=ave;
		p->next=NULL;
        tail->next=p;
        tail=p;
    }
    fclose(fp);
    return h;
}

void freeNode(stu *head)//销链
{
    stu *p=head;
    while(p)
    {
        head=head->next;
        free(p);
        p=head;
    }
}

void output(stu *head)//输出数据
{
    stu *p=head->next;
	printf("%10s%10s%10s%10s%10s%11s","学号","姓名","语文","数学","英语","平均分n");
	while(p)
	{
		printf("%10s%10s%10d%10d%10d%10.2fn",p->number,p->name,p->C,p->M,p->E,p->ave);
		p=p->next;
	}
}

void fail(stu *head)//输出挂科学生 
{
    stu *p=head->next;
    printf("%10s%10s%10s%10s%10s%11s","学号","姓名","语文","数学","英语","平均分n");
    while(p)
    {
        if(p->C<60||p->E<60||p->M<60)
            printf("%10s%10s%10d%10d%10d%10.2fn",p->number,p->name,p->C,p->M,p->E,p->ave);  
        p=p->next;
    }
}

stu *NoSort(stu *head)//按学号排序 
{
    stu *p=head->next,*q,*h=NULL,*s;
    h=(stu *)malloc(sizeof(stu));
    h->next=NULL; 
    while(p)
    {
        q=h;
        s=(stu *)malloc(sizeof(stu));
        s->C=p->C;
		s->E=p->E;
		s->M=p->M;
		s->ave=p->ave;
		strcpy(s->name,p->name);
		strcpy(s->number,p->number);
		s->next=NULL;
        //插入排序
        if(h->next==NULL)
            h->next=s;
        else
        {
            while(q->next)
            {
                if(strcmp(q->next->number,s->number)>0) break;
                q=q->next;
            }
            if(q->next==NULL)
            q->next=s;
            else
            {
                s->next=q->next;
                q->next=s;
            }
        }
        p=p->next;
    }
    return h;
}

stu *AveSort(stu *head)//按平均分排序
{
    stu *p=head->next,*q,*h=NULL,*s;
    h=(stu *)malloc(sizeof(stu));
    h->next=NULL;
    while(p)
    {
        q=h;
        s=(stu *)malloc(sizeof(stu));
        s->C=p->C;
		s->E=p->E;
		s->M=p->M;
		s->ave=p->ave;
		strcpy(s->name,p->name);
		strcpy(s->number,p->number);
		s->next=NULL;
        //插入排序
        if(h->next==NULL)
            h->next=s;
        else
        {
            while(q->next)
            {
                if(q->next->ave < s->ave) break;
                q=q->next;
            }
            if(q->next==NULL)
            q->next=s;
            else
            {
                s->next=q->next;
                q->next=s;
            }
        }
        p=p->next;
    }
    return h;
}

void AveScore(stu *head,float a[])//计算各科平均分 
{
    stu *p=head->next;
    int i=0;
    printf("%10s%10s%10sn","语文","数学","英语");
	while(p)
	{
		i++;
		a[0]+=p->C ;
		a[1]+=p->M ;
		a[2]+=p->E ;
		p=p->next;
	}
	a[0]/=i;a[1]/=i;a[2]/=i;
	printf("%10.2f%10.2f%10.2fn",a[0],a[1],a[2]);
}

void save(stu *head)//保存数据 
{
    FILE *fp;
    stu *p=head->next;
    if((fp=fopen("data.txt","w+"))==NULL)
    {
        printf("can not save this filen");
        exit(0);
    }
    while(p!=NULL)
    {
        fprintf(fp,"%10s%10s%10d%10d%10d%10.2fn",p->number,p->name,p->C,p->M,p->E,p->ave);
		p=p->next;
    }
    fclose(fp);
}

void save_ave(float a[])//保存各科平均分信息 
{
	FILE *fp;
	if((fp=fopen("data.txt","w+"))==NULL)
	{
		printf("打开文件失败n");
		exit(0);
	}
	fprintf(fp,"%10.2f%10.2f%10.2fn",a[0],a[1],a[2]);
	fclose(fp);
}

void seek(stu *head)//学生信息查询
{
    stu *p;
    int n,flag=0;
    char ch[15];
    printf("--------------------------------------------------------------n");
    printf("-----------------------想要按什么查询呢?----------------------n");
    printf("-----------------------1 学号 or 2 姓名-----------------------n");
    printf("-------------------------- 0 back ----------------------------n");
    printf("---------------------------------------------------------------n");
    printf("n");
    while(scanf("%d",&n)!=EOF)
    {
        p=head->next;
        switch(n)
        {
            case 1:
                printf("请输入要查询的学生的学号:n");
                scanf("%s",&ch);
                while(p)
                {
                    if(strcmp(ch,p->number)==0)
                    {
                        flag=1;
                        printf("%10s%10s%10s%10s%10s%11s","学号","姓名","语文","数学","英语","平均分n");
                        printf("%10s%10s%10d%10d%10d%10.2fn",p->number,p->name,p->C,p->M,p->E,p->ave);
                        break;
                    }
                    p=p->next;
                }
                if(flag==0)
                    printf("未找到...");break;
            case 2:
                printf("请输入要查询的学生的姓名:n");
                scanf("%s",&ch);
                while(p)
                {
                    if(strcmp(ch,p->name)==0)
                    {
                        flag=1;
                        printf("%10s%10s%10d%10d%10d%10.2fn",p->number,p->name,p->C,p->M,p->E,p->ave);
                        break;
                    }
                    p=p->next;
                }
                if(flag==0)
                    printf("未找到...");break;
            case 0:return ;
            default:printf("(〃>目<)请输入 0 ~ 2 的数字...");break;     
        }
    }
} 

void add_infor(stu *head)//学生信息添加 
{
    char number[10];    
	char name[15];  
	int C;//Chinese
	int M;//Math
	int E;//English
	float ave;//self_ave
    FILE *fp;
    int n;
    printf("想加入几个同学嘞~~n");
    scanf("%d",&n);
    printf("%10s%10s%10s%10s%10s%11sn","学号","姓名","语文","数学","英语","平均分");
    stu *p=head->next,*s;
    if((fp=fopen("data.txt","a+"))==NULL)
        {
            printf("can not open this filen");
            exit(0);
        }
    while(p->next)
        p=p->next;
    while(n--)
    {
        s=(stu *)malloc(sizeof(stu));
        scanf("%s%s%d%d%d%f",number,name,&C,&M,&E,&ave);
        strcpy(s->number,number);strcpy(s->name,name);
		s->C=C;s->M=M;s->E=E;s->ave=ave;
		s->next=NULL;
        p->next=s;
        p=s;
        fprintf(fp,"%10s%10s%d%d%d%.2fn",number,name,C,M,E,ave);
    }
    fclose(fp);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/890370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号