简易学生成绩管理系统(C语言实现)

博主分享大一学习C语言时的一个较大程序作业,认为其可能对自学的人有帮助,不建议被用作复制素材,还强调学完知识要多练习。文中列出了main.cpp等多个程序文件名称。

前言(我又来了:)
1.大一作业,我学习C语言的第一个比较大(对当时的本菜鸡来说)的程序。
2.发出来是因为可能对一些自学的人有帮助,不建议(我也管不了 :……(,不过我这种水平写的垃圾应该也不会被)充当ctrlCV素材。
3.学完东西多练习,这样提高的快而且走的稳。(除非实在是不喜欢)

main.cpp

#include<stdio.h>
#include<stdlib.h>
void jieMain();//欢迎界面
void menu();//菜单
void init();//初始化输入
void print();//初始化输出
void addStudent();//添加学生记录
void modifyStu();//修改学生成绩
void qno();//按学号查询学生信息
void qname();//按姓名查询学生信息
void sortStu();//按总成绩从大到小排序
void delStu();//删除学生记录
void sortStuNum();//按学号从大到小排序
void data();//数据还原
void output();//结果存入文件
void input();//从文件中读取学生信息
void visitorMenu();//访客菜单

struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
int ren=0;
int main()
{
	jieMain();//欢迎界面
	//menu();//菜单
	//system("pause");
	return 0;
}

jieMain.cpp

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Rvisitor();
void Wvisitor(int t);
void menu();
void visitorMenu();

void jieMain()
{
   char user[20],pad[20];
   char use[20]="admin";//{'a','d','m','i','n'};
   char pwd[20]="123456";//{1,2,3,4,5,6};
   int num=1,i=0;
   printf("\n");
   printf("     -------------------------------------------------------------\n");
   printf("     |                                                           |\n");
   printf("     |                                                           |\n");
   printf("     |         欢 迎 使 用 学 生 成 绩 管 理 系 统               |\n");
   printf("     |                                                           |\n");
   printf("     |                                                           |\n");
   printf("     -------------------------------------------------------------\n");
   printf("\n");
   printf("      请输入您的账号:");//虚假的用户检验 &^)
   scanf("%s",&user);
   if(strcmp(user,use)==0)
   {
	   while(i<3)
	   {
		printf("\n");
		printf("      请输入您的密码:(输入三次0可退出程序)");
		scanf("%s",&pad);
		if(strcmp(pad,pwd)==0){
			printf("\n");
			printf("      欢迎你,管理员 :)\n");
			printf("\n");
			system("color 1f");
			system("pause");
			system("cls");
			menu();
		}else{
			i++;
		}
	   }
   }else{
		printf("\n");
		num=Rvisitor();
		printf("      %s 您好!您是第%d号访问者\n",user,num);
		num++;
		Wvisitor(num);
		printf("\n");
		system("color 1f");
		system("pause");
		system("cls");
		visitorMenu();
   }
}

int Rvisitor()
{
	FILE *fp;
	int t;
	if((fp=fopen("F:\\作业\\学生成绩管理系统\\访客.txt","r"))==NULL)
		printf("找不到文件\n");
	fscanf(fp,"%d\n",&t);//写入访问量
	fclose(fp);
	return t;
}

void Wvisitor(int t)
{
	FILE *fp;
	if((fp=fopen("F:\\作业\\学生成绩管理系统\\访客.txt","w"))==NULL)
	    printf("找不到文件\n");
	fprintf(fp,"%d\n",t);
	fclose(fp);
}

menu.cpp

#include<stdio.h>
#include<stdlib.h>
void init();
void addStudent();
void modifyStu();
void qno();
void qname();
void sortStu();
void delStu();
void sortStuNum();
void print();
void output();
void input();

void menu()
{
	system("color 0f");
	while(1)
	{
	int num,a;
   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.结果存入文件(成绩.txt)                      |\n");
	printf("     |    9.从文件中读取学生信息(学生信息.txt)           |\n");
    printf("     |    0.退出程序                                      |\n");
    printf("     ------------------------------------------------------\n");
   printf("\n");
    printf("      请输入您的选择,<1,2,3,4,5,6,7,8,9,0>:");
    scanf("       %d",&num);
   printf("\n");

	switch(num)
	{
	  case 1:system("pause");system("cls");system("color 0f");
			 printf("\n     初始化\n");init();break;
	  case 2:system("pause");system("cls");system("color 0f");
			 printf("\n     添加学生信息\n");addStudent();break;
	  case 3:system("pause");system("cls");system("color 0f");
			 printf("\n     删除学生信息\n");delStu();break;
	  case 4:system("pause");system("cls");system("color 0f");
		     printf("\n");
		     printf("     ----选择----------------------------------------\n");
		     printf("     |   1.按姓名查询学生信息                       |\n");
		     printf("     |   2.按学号查询学生信息                       |\n");
			 printf("     ------------------------------------------------\n");
             printf("\n");
			 printf("      请输入您的选择:");
			 scanf("       %d",&a);
			 while(a<1||a>2) 
	         {
				 system("color 04");
		         printf("     错误\n     请重新输入:");
		         scanf("%d",&a);
	         }
			  switch(a)
			 {
			     case 1:system("color 0f");
				    qname();break;
			     case 2:system("color 0f");
				    qno();break;
			 }break;
	  case 5:system("pause");system("cls");system("color 0f");
		     printf("\n     修改学生信息\n");modifyStu();break;
	  case 6:system("pause");system("cls");system("color 0f");
		     printf("\n");
		     printf("     ----选择----------------------------------------\n");
		     printf("     |   1.按总分排名                               |\n");
		     printf("     |   2.按学号排名                               |\n");
			 printf("     ------------------------------------------------\n");
             printf("\n");			 
			 printf("      请输入您的选择:");
			 scanf("       %d",&a);
			 while(a<1||a>2) 
	         {
				 system("color 04");
		         printf("     错误\n     请重新输入:");
		         scanf("%d",&a);
	         }
			 switch(a)
			 {
			     case 1:system("color 0f");sortStu();break;
			     case 2:system("color 0f");sortStuNum();break;
			 }break;
	  case 7:system("pause");system("cls");system("color 0f");
		     printf("\n     查看学生信息库\n");print();system("pause");system("cls");break;
	  case 8:system("pause");system("cls");system("color 0f");
		     printf("\n     结果存入文件\n");output();system("pause");system("cls");break;
	  case 9:system("pause");system("cls");system("color 0f");
		     printf("\n     从文件中读取学生信息\n");input();system("pause");system("cls");break;
	  case 0:printf("\n     结束\n");
		     printf("\n     谢 谢 使 用!\n\n");
		     system("color 70");break;
	  default:system("color 04");printf("\n     错误\n");break;
	}
	if(num==0)
	{
		return;
	}
	}
}

addStudent.cpp

#include<stdio.h>
#include<stdlib.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
extern void print();
struct student gete();
void addStudent()
{
	struct student e,*q,*p;
	int i;
	e=gete();//要插入的学生相关信息
	print();

	printf("\n     请输入要插入的地址:");
	scanf("%d",&i);
	while(i<1||i>ren+1)//若输入的数字不在已有序列中 
	{
		printf("\n     请输入正确的地址:");
		scanf("%d",&i);
	}
	q=&(stu[i-1]);//取地址
	for(p=&stu[ren-1];p>=q;p--)
		*(p+1)=*p;
	*q=e;
	ren++;
	printf("\n");
	print();//输出学生的相关信息
	system("pause");
    system("cls");
}

data.cpp

#include<stdio.h>
#include<stdlib.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
extern void print();
struct student gete();
void addStudent()
{
	struct student e,*q,*p;
	int i;
	e=gete();//要插入的学生相关信息
	print();

	printf("\n     请输入要插入的地址:");
	scanf("%d",&i);
	while(i<1||i>ren+1)//若输入的数字不在已有序列中 
	{
		printf("\n     请输入正确的地址:");
		scanf("%d",&i);
	}
	q=&(stu[i-1]);//取地址
	for(p=&stu[ren-1];p>=q;p--)
		*(p+1)=*p;
	*q=e;
	ren++;
	printf("\n");
	print();//输出学生的相关信息
	system("pause");
    system("cls");
}

delStu.cpp

#include<stdio.h>
#include<stdlib.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void print();
void data();
void menu();
struct student e;
struct student ku[100];struct student *p,*q;
int dat=0;
void delStu()
{
	int i,a;
	printf("\n");
	print();
	printf("\n     请输入要删除的地址:(输入0查看已删除的学生信息)");
	scanf("%d",&i);
	if(i!=0){
	while(i<1||i>ren) 
	{
	    system("color 04");
		printf("     输入错误\n     请重新输入:");
		scanf("%d",&i);
	}
	system("color 0f");
	e=stu[i-1];
	q=&(stu[i-1]);
	for(p=&stu[i];p<&stu[ren];p++)
		*(p-1)=*p;
	ren--;
	print();
	}
	printf("     -----选择---------------------------------------\n");
	printf("     |    1.返回菜单                                |\n");	
	printf("     |    2.查看已删除的学生信息                    |\n");
	printf("     ------------------------------------------------\n");
	printf("      请输入您的选择:");
	scanf("%d",&a);
	while(a<1||a>2) 
	{
		system("color 04");
		printf("     错误\n     请重新输入:");
		scanf("%d",&a);
	}
	system("color 0f");
	switch(a)
	{
        case 1:system("pause");system("cls");menu();break;
		case 2:system("pause");system("cls");data();break;
	}
}

gete.cpp

#include<stdio.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
struct student gete()
{
	int i;
	struct student e;
	printf("\n     请输入学号:");
	scanf("%ld",&e.num);
	printf("     请输入姓名:");
	scanf("%s",&e.name);
	e.add=0;
	for(i=0;i<3;i++)
	{
		if(i==0)printf("     请输入数学成绩:");
	    if(i==1)printf("     请输入语文成绩:");
	    if(i==2)printf("     请输入英语成绩:");
		scanf("%lf",&e.score[i]);
		e.add+=e.score[i];
	}
	return e;
}

init.cpp

#include<stdio.h>
#include<stdlib.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void print();
void init()
{
	while(1)
	{
		printf("\n     请输入学号(若数据已全部输入完成,则输入0.):");     
		scanf("%ld",&stu[ren].num);
		if(stu[ren].num==0)break;
		printf("     请输入姓名:");
		scanf("%s",&stu[ren].name);
		printf("     请输入三门成绩:\n");
		stu[ren].add=0;
		for(int j=0;j<3;j++)
		{
			if(j==0){
				printf("     数学:");
			}
			if(j==1){
				printf("     语文:");
			}
			if(j==2){
				printf("     英语:");
			}
			scanf("%lf",&stu[ren].score[j]);
			stu[ren].add+=stu[ren].score[j];
		}
		ren++;
	}
	print();
	system("pause");
	system("cls");
}

input.cpp

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

extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void print();

void input()
{
	FILE *fp;
	int i=0, flag;
	if((fp=fopen("F:\\作业\\学生成绩管理系统\\学生信息.txt","r"))==NULL)//记得改成自己需要的路径
	{
		printf("不能打开文件,文件读取失败!\n");
		return;
	}
	while(1)
	{
		flag=fscanf(fp, "%ld %s ",&stu[i].num,stu[i].name);
		for(int k=0;k<3;k++)
			fscanf(fp," %lf ",&stu[i].score[k]);
		fscanf(fp,"%lf",&stu[i].add);
		if(flag == EOF)
			break;
		i++; 
	}
	ren=ren+i;
	printf("\n     从文件中成功读取%d条记录!\n\n",i);
	fclose(fp);
	print();
}

modifyStu.cpp

#include<stdio.h>
#include<stdlib.h>
void print();
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void modifyStu()
{
	long i;
	int j,k,h,x;//i:要修改学生的学号;k:要修改的学生信息
	print();
	printf("\n     请输入所要修改学生的学号:");
	scanf("%ld",&i);
	for(x=0;x<ren;x++)
	{
		if(i==stu[x].num)
		{
			printf("     该学生的位置为%d\n",x+1);
			printf("\t学号\t\t姓名\t数学\t语文\t英语\t总分\n");
			printf("\t%ld\t%s\t",stu[x].num,stu[x].name);
			for(j=0;j<3;j++)
				printf("%.2lf\t",stu[x].score[j]);
			printf("%.2lf\n",stu[x].add);
			printf("\n     -----选择---------------------------------------\n");
			printf("     |    1.修改学号                                |\n");
			printf("     |    2.修改姓名                                |\n");
			printf("     |    3.修改数学成绩                            |\n");
			printf("     |    4.修改语文成绩                            |\n");
			printf("     |    5.修改英语成绩                            |\n");
			printf("     |    0.结束                                    |\n");
			printf("     ------------------------------------------------\n");
			printf("      请选择要修改的学生信息:");
			scanf("%d",&k);
			switch(k)
			{
				case 1:
				{
					printf("\n     您要修改的是:学号\n");
					printf("     请输入新的学号:"); 
					scanf("%ld",&stu[x].num);
					break;
				} 
				case 2:
				{
					printf("\n     您要修改的是:姓名 \n");
					printf("     请输入新的姓名:"); 
					scanf("%s",&stu[x].name);
					break;
				} 
				case 3:
				{
					printf("\n     您要修改的是:数学成绩 \n"); 
					printf("     请输入新的数学成绩:"); 
					scanf("%lf",&stu[x].score[0]);		
					break;
				} 
				case 4:
				{
					printf("\n     您要修改的是:语文成绩\n"); 
					printf("     请输入新的语文成绩:");
					scanf("%lf",&stu[x].score[1]); 	
 					break;
				} 
				case 5:
				{
					printf("\n     您要修改的是:英语成绩 \n"); 
					printf("     请输入新的英语成绩:"); 
					scanf("%lf",&stu[x].score[2]);		 
					break;
				} 
				case 0:printf("\n     您选择的是:结束\n"); break;
				default :system("color 04");printf("\n     错误\n"); break;
			}
		    printf("\n\t学号\t\t姓名\t语文\t数学\t英语\t总分\n");
			printf("\t%ld\t%s\t",stu[x].num,stu[x].name);
			stu[x].add=0;
			for(h=0;h<3;h++)
			{
			  printf("%.2lf\t",stu[x].score[h]);
			  stu[x].add+=stu[x].score[h];
			}
			printf("%.2lf\n",stu[x].add);
			system("pause");
	        system("cls");
			break;
		}
	}
}

output.cpp

#include<stdio.h>
#include<string.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void output()
{
	FILE *fp;
	fp=fopen("F:\\作业\\学生成绩管理系统\\成绩.txt","w");//记得改成自己需要的路径
	fprintf(fp,"\t学生记录:\n");
	fprintf(fp,"\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
	for(int j=0;j<ren;j++)
	{
		fprintf(fp,"\t%ld\t%s\t",stu[j].num,stu[j].name);
	for(int k=0;k<3;k++)
		fprintf(fp,"%.2lf\t",stu[j].score[k]);
	fprintf(fp,"%.2lf\n",stu[j].add);
	}
	fclose(fp); 
	printf("\n\n*******************恭喜,保存完成!*******************\n\n");
}

print.cpp

#include<stdio.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void print()
{
	int j=0;
	printf("\n     学生记录:\n");
	printf("\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
	for(;j<ren;j++)
	{
		printf("\t%ld\t%s\t",stu[j].num,stu[j].name);
	for(int k=0;k<3;k++)
		printf("%.2lf\t",stu[j].score[k]);
	printf("%.2lf\n",stu[j].add);
	}
	if(j=0)printf("学生信息为空!");
	printf("\n");
}

qname.cpp

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void qname()
{
	char nam[20];
	int k,a;
	printf("\n     请输入要查询学生信息的学生的姓名:");
	scanf("%s",&nam);
	for(k=0;k<ren;k++)
	{
		a=strcmp(nam,stu[k].name);
		if(a==0)
		{
			printf("\n     学生记录如下:\n");
	        printf("\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
		    printf("\t%ld\t%s\t",stu[k].num,stu[k].name);
	        for(int j=0;j<3;j++)
		    printf("%.2lf\t",stu[k].score[j]);
	        printf("%.2lf\n",stu[k].add);
	        printf("\n");break;
		}
		if(a!=0&&k==ren-1)
	        printf("     查询无此结果\n");
	}
	system("pause");
	system("cls");
}

qno.cpp

#include<stdio.h>
#include<stdlib.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void qno()
{
	long i,k;
	printf("\n     请输入要查询学生信息的学生的学号:");
	scanf("%ld",&i);
	for(k=0;k<ren;k++)
	{
		if(stu[k].num==i)
		{
			printf("\n     学生记录如下:\n");
	        printf("\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
		    printf("\t%ld\t%s\t",stu[k].num,stu[k].name);
	        for(int j=0;j<3;j++)
		    printf("%.2lf\t",stu[k].score[j]);
	        printf("%.2lf\n",stu[k].add);
	        printf("\n");break;
		}
		if(k==ren-1&&stu[k].num!=i)
	        printf("     查询无此结果\n");
	}
	system("pause");
	system("cls");
}

sortStu.cpp

#include<stdio.h>
#include<stdlib.h>
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void qno()
{
	long i,k;
	printf("\n     请输入要查询学生信息的学生的学号:");
	scanf("%ld",&i);
	for(k=0;k<ren;k++)
	{
		if(stu[k].num==i)
		{
			printf("\n     学生记录如下:\n");
	        printf("\t学号\t\t姓名\t数学\t语文\t英语\t总成绩\n");
		    printf("\t%ld\t%s\t",stu[k].num,stu[k].name);
	        for(int j=0;j<3;j++)
		    printf("%.2lf\t",stu[k].score[j]);
	        printf("%.2lf\n",stu[k].add);
	        printf("\n");break;
		}
		if(k==ren-1&&stu[k].num!=i)
	        printf("     查询无此结果\n");
	}
	system("pause");
	system("cls");
}

sortStuNum.cpp

#include<stdio.h>
#include<stdlib.h>
void print();
extern struct student{
	long num;
	char name[20];
	double score[3];
	double add;
}stu[100];
extern int ren;
void sortStuNum()
{
	printf("\n     排序结果为(从小到大):\n");
	struct student *p,*q,e;
	int i,j;
	long a,b;
	for(i=0;i<ren;i++)
	{
		for(j=i+1;j<ren;j++)
		{
			a=stu[i].num;
			b=stu[j].num;
			if(a>b)
			{
				p=&stu[i];
				q=&stu[j];
				e=*p;
				*p=*q;
				*q=e;
			}
		}
	}
	print();
	system("pause");
	system("cls");
}

visitorMenu.cpp

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

void qno();
void qname();
void sortStu();
void sortStuNum();
void print();

void visitorMenu()
{
	system("color 0f");
	while(1)
	{
	int num,a;
   printf("\n");
   
	printf("     |----菜单--------------------------------------------|\n");
    printf("     |    1.查询学生信息                                  |\n");
    printf("     |    2.排名                                          |\n");
    printf("     |    0.退出程序                                      |\n");
    printf("     ------------------------------------------------------\n");
   printf("\n");
    printf("      请输入您的选择,<1,2,3,4,5,6,7,8,9,0>:");
    scanf("       %d",&num);
   printf("\n");

	switch(num)
	{
	  case 1:system("pause");system("cls");system("color 0f");
		     printf("\n");
		     printf("     ----选择----------------------------------------\n");
		     printf("     |   1.按姓名查询学生信息                       |\n");
		     printf("     |   2.按学号查询学生信息                       |\n");
			 printf("     ------------------------------------------------\n");
             printf("\n");
			 printf("      请输入您的选择:");
			 scanf("       %d",&a);
			 while(a<1||a>2) 
	         {
				 system("color 04");
		         printf("     错误\n     请重新输入:");
		         scanf("%d",&a);
	         }
			  switch(a)
			 {
			     case 1:system("color 0f");
				    qname();break;
			     case 2:system("color 0f");
				    qno();break;
			 }break;
	  case 2:system("pause");system("cls");system("color 0f");
		     printf("\n");
		     printf("     ----选择----------------------------------------\n");
		     printf("     |   1.按总分排名                               |\n");
		     printf("     |   2.按学号排名                               |\n");
			 printf("     ------------------------------------------------\n");
             printf("\n");			 
			 printf("      请输入您的选择:");
			 scanf("       %d",&a);
			 while(a<1||a>2) 
	         {
				 system("color 04");
		         printf("     错误\n     请重新输入:");
		         scanf("%d",&a);
	         }
			 switch(a)
			 {
			     case 1:system("color 0f");sortStu();break;
			     case 2:system("color 0f");sortStuNum();break;
			 }break;
	  case 0:printf("\n     结束\n");
		     printf("\n     谢 谢 使 用!\n\n");
		     system("color 70");break;
	  default:system("color 04");printf("\n     错误\n");break;
	}
	if(num==0)
		break;
	}
}

ends

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值