⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 学生成绩管理系统.cpp

📁 学生成绩管理系统
💻 CPP
字号:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int shoudsave=0;

struct student
{
	char num[10];
	char name[20];
	char sex[6];
	int cgrade;
	int mgrade;
	int egrade;
	int total;
	int ave;
};

typedef struct node
{
	struct student data;
	struct node *next;
}Node,*Link;



void menu()
{
    system("cls");
    printf("\t\tStudent Management Information System\n");
    printf("\t\t\t\tXiong Yan  Student Number:20020288\n");
	printf("\t*********************************************************\n");
	printf("\t*  1.Add informations\t\t2.Change information\t*\n");
	printf("\t*  3.chaxun informations\t4.xianshi informations\t*\n");
	printf("\t*  5.tongji informations\t6.pailie chengji\t*\n");
	printf("\t*  7.save informations\t\t8.Help\t\t\t*\n");
	printf("\t*  0.Quit\t\t\t\t\t\t*\n");
	printf("\t*********************************************************\n");
}

void printstart()
{
	printf("-----------------------------------------------------------------------\n");
}

void Wrong()
{
	printf("\nInput wrong:!\n");
	system("pause");
}

void Nofind()
{
	printf("\nCan not find the student:!\n");
}

void printc()
{
	printf("%-12s%-22s%-8s%6s%6s%6s%7s%6s\n","number","name","sex","EN","Maths","C","total","avg");
}

void printe(Node *p)
{
	printf("%-12s%-22s%-8s%6d%6d%6d%7d%6d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave);
}

Node* Locate(Link l,char findmess[],char nameornum[])
{
	Node *r;
	if(strcmp(nameornum,"num")==0)
	{
		r=l->next;
		while(r!=NULL)
		{
			if(strcmp(r->data.num,findmess)==0)
			return r;
			r=r->next;
		}
	}
	else if(strcmp(nameornum,"name")==0)
	{
		r=l->next;
		while(r!=NULL)
		{
			if(strcmp(r->data.name,findmess)==0)
			return r;
			r=r->next;
		}
	}
	return 0;
}

void Add(Link l)
{
	Node *p,*r,*s;char num[10];r=l;
	s=l->next;
	while(r->next!=NULL)
	{
		r=r->next;
	}
	while(1)
	{
		printf("Please input student's number(Input '0' ,return to last gread:)");
		scanf("%s",num);
		if(strcmp(num,"0")==0)
        {
            system("pause");
            break;
        }
		while(s)
		{
			if(strcmp(s->data.num,num)==0)
			{
				printf("student's number%s exist,if you want to change please input '2'!\n",num);
				printstart();
				printc();
				printe(s);
				printstart();
				printf("\n");
				return;
			}
			s=s->next;
		}
		p=(Node *)malloc(sizeof(Node));
		strcpy(p->data.num,num);
		printf("Input name:");
		scanf("%s",p->data.name);getchar();
		printf("Input sex:");
		scanf("%s",p->data.sex);getchar();
		printf("Input C language:");
		scanf("%d",&p->data.cgrade);getchar();
		printf("Input maths:");
		scanf("%d",&p->data.mgrade);getchar();
		printf("Input English:");
		scanf("%d",&p->data.egrade);getchar();
		p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;
		p->data.ave=p->data.total / 3;
		p->next=NULL;
		r->next=p;
		r=p;
		shoudsave=1;
	}
}

void Qur(Link l)
{
	int sel;
	char findmess[20];
	Node *p;
	if(!l->next)
	{
		printf("\nNo message!\n");
		return;
	}
	printf("\n=====>1Number\n=====>2Name\n");
	scanf("%d",&sel);
	if(sel==1)
	{
		printf("Input student's number:");
		scanf("%s",findmess);
		p=Locate(l,findmess,"num");
		if(p)
		{
			printf("\t\t\t\tResult\n");
			printstart();printc();printe(p); printstart();
		}
		else
			Nofind();
	}
	else if(sel==2)
	{
		printf("Input student's name:");
		scanf("%s",findmess);
		p=Locate(l,findmess,"name");
		if(p)
		{
			printf("\t\t\t\tResult\n");
			printstart();
			printc();
			printe(p);
			printstart();
		}
        else
			Nofind();
	}
	else
		Wrong();
    system("pause");
}

void Modify(Link l)
{
	Node *p;
	char findmess[20];
    if(!l->next)
	{
		printf("\nNo message!\n");
		return;
	}
	printf("Input student's number:");
	scanf("%s",findmess);
	p=Locate(l,findmess,"num");
	if(p)
	{
		printf("Input the new student's number(the old one is%s):",p->data.num);
		scanf("%s",p->data.num);
		printf("Input the new student's name(the old one is%s):",p->data.name);
		scanf("%s",p->data.name);getchar();
		printf("Input the new student's sex(the old one is%s):",p->data.sex);
		scanf("%s",p->data.sex);
		printf("Input the new student's C(the old one is%d):",p->data.cgrade);
		scanf("%d",&p->data.cgrade);getchar();
		printf("Input the new student's maths(the old one is%d)::",p->data.mgrade);
		scanf("%d",&p->data.mgrade);getchar();
		printf("Input the new student's English(the old one is%d):",p->data.egrade);
		scanf("%d",&p->data.egrade);
		p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;
		p->data.ave=p->data.total/3;
		printf("\nOK!\n");
		shoudsave=1;
	}
	else
		Nofind();
    system("pause");
}

void Disp(Link l)
{
	int count=0;
	Node *p;
	p=l->next;
	if(!p)
	{
		printf("\nNo message:!\n");
		return;
	}
	printf("\t\t\t\tResult\n");
	printstart();printc();printf("\n");
	while(p)
	{
		printe(p);
		p=p->next;
	}
	printstart();
	printf("\n");
    system("pause");
}

void Tongji(Link l)
{
	Node *pm,*pe,*pc,*pt,*pa;
	Node *r=l->next;
	if(!r)
	{
		printf("\nNo message can be tongji!\n");
		return ;
	}
	pm=pe=pc=pt=pa=r;
	while(r!=NULL)
	{
		if(r->data.cgrade>=pc->data.cgrade) pc=r;
		if(r->data.mgrade>=pm->data.mgrade) pm=r;
		if(r->data.egrade>=pe->data.egrade) pe=r;
		if(r->data.total>=pt->data.total) pt=r;
		if(r->data.ave>=pa->data.ave) pa=r;
		r=r->next;
	}
	printf("------------------------------Result--------------------------------\n");
	printf("Total:\t%s %d\n",pt->data.name,pt->data.total);
	printf("Average:\t%s %d\n",pa->data.name,pa->data.ave);
	printf("English:\t%s %d\n",pe->data.name,pe->data.egrade);
	printf("maths:\t%s %d\n",pm->data.name,pm->data.mgrade);
    printf("C languane:\t%s %d\n",pc->data.name,pc->data.cgrade);
	printstart();
    system("pause");
}

void Sort(Link l)
{
	Link ll;
	Node *p,*rr,*s;
	ll=(Link)malloc(sizeof(Node));
	ll->next=NULL;
	if(l->next==NULL)
	{
		printf("\nNo message!\n");
		system("pause");
        return ;
	}
	p=l->next;
	while(p)
	{
		s=(Node*)malloc(sizeof(Node));
		s->data=p->data;
		s->next=NULL;
		rr=ll;
		while(rr->next!=NULL && rr->next->data.total>=p->data.total)
			rr=rr->next;
		if(rr->next==NULL)
			rr->next=s;
		else
		{
			s->next=rr->next;
			rr->next=s;
		}
		p=p->next;
	}
    free(l);
    l->next=ll->next;
    printf("\nData had been sorted!\n");
    shoudsave=1;
    system("pause");
}

void Save(Link l)
{
	FILE* fp;
	Node *p;
	int flag=1,count=0;
	fp=fopen("student","wb");
	if(fp==NULL)
	{
         printf("\nWrong happened,when opened this time!\n");
		 exit(1);
	}
	p=l->next;
	while(p)
	{
		if(fwrite(p,sizeof(Node),1,fp)==1)
		{
			p=p->next;count++;
		}
		else
		{
			flag=0;
			break;
		}
	}
	if(flag)
	{
		printf("\n%d data have been saved!\n\n",count);
		shoudsave=0;
	}
	fclose(fp);
	system("pause");
}

int main()
{
	Link l;
	FILE *fp;
	int sel;
	char ch;
	char jian;
	int count=0;
	Node *p,*r;
	printf("\t************Chargeing students system**************\n");
	l=(Node*)malloc(sizeof(Node));
	l->next=NULL;
	r=l;
	fp=fopen("student","rb");
	if(fp==NULL)
	{
		printf("\nFile don't exist.Do you want to build new one:(y/n)\n");
		scanf("%c",&jian);
		if(jian=='y'||jian=='Y')
        {
            fp=fopen("student","wb");
            if(fp!=NULL)fclose(fp);
            printf("Data file had been created!\t Please restart this Program.\n");
            system("pause");
            exit(1);
        }
		else exit(0);
     }
	printf("\nFile open.Loading....\n");
	while(!feof(fp))
    { 
		p=(Node*)malloc(sizeof(Node));
        if(fread(p,sizeof(Node),1,fp))
		{
			p->next=NULL;
			r->next=p;
			r=p;
			count++;
		}
	}
	fclose(fp);
	printf("\nFile is saved,%d in total!\n",count);
	while(1)
	{
		menu();
		printf("What do you want(please selet 0~8):");
		scanf("%d",&sel);
		if(sel==0)
		{
			if(shoudsave==1)
			{
				getchar();
				printf("File changed,do you want save?\n");
				scanf("%c",&ch);
				if(ch=='y'||ch=='Y')
				Save(l);
			}
			printf("\nThank you.wellcome useing this syetem next time\n");
            system("pause");
			break;
		}
		switch(sel)
		{
			case 1:Add(l);break;
			case 2:Modify(l);break;
			case 3:Qur(l);break;
			case 4:Disp(l);break;
			case 5:Tongji(l);break;
			case 6:Sort(l);break;
			case 7:Save(l);break;
			case 8:printf("\tDon't you know English!\n");system("pause");break;
			default: Wrong();getchar();break;
		}
}
   return 0;
}
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -