C语言实现学生信息管理系统

C语言课程设计: 

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

typedef struct
{
	char num[10];
	char name[20];
	float cyuyan;
	float math;
	float english;
	float summ;
} STU;

STU per[200];

//该系统有九个功能函数构成,主要功能为对学生信息的增,删,查,改,排序以及自定义范围查看学生信息 

void logon();//系统信息介绍页面
int menu_select();//主页面,为用户提供选项,使用户了解系统的功能
void add();//  增: 添加学生信息函数,用户可以输入学生信息,系统进行保存
void scan();// 查: 向用户展示所有的学生信息
void query();//查: 查询学生信息,可通过姓名活学号两种方式查询
void date();// 排序:用户可以选择某一课程对学生进行排名(高到底)
void amend();//改:用户可以输入学生学号来修改相关学生的信息
void delet();//删:输入学号删除相应的学生信息
void myself();//给定查看范围,函数展示成绩处于范围内的学生信息

int main(void)
{
	int n=0;
	logon();
	for(;;)
	{
		switch(menu_select())
		{
			case 1:
				printf("\t\t *^_^*学生记录添加 *^_^*\n");
				add();
				break;
			case 2:  
            	printf("\t\t *^_^*学生信息浏览 *^_^*\n");  
            	scan();  
            	break;
			case 3:
				printf("\t\t *^_^*学生信息查询 *^_^*\n");  
            	query();  
            	break;
			case 4:
				printf("\t\t *^_^*数据计算 *^_^*\n");  
              	date();  
              	break;
            case 5:
            	printf("\t\t *^_^*数据修改 *^_^*\n");  
              	amend();  
              	break; 
			case 6:
				printf("\t\t *^_^*数据删除 *^_^*\n");  
            	delet();  
            	break;
            case 7:
				printf("\t\t *^-^*自定义查询 *^-^*\n");
				myself();
				break; 
            case 0:
            	printf("\n\t\t谢谢您的使用,再见!^-^\n");
            	printf("\n\t\t");
            	system("pause");
            	exit(0);
   		}
	}
	system("pause");
	return 0;
}

void logon()
//系统信息介绍 
{
	printf("\n\t\t\t   学生信息管理系统\n");  
	printf("\t\t\t      版本号:1.0\n");  
	printf("\t\t\t    20**年 *月 **日\n\n");  
	printf("\t\t\t         ****专业\n");  
	printf("\t\t\t        ****\n");  
	printf("\t\t\t     导演兼制作\n\n");    
}

int menu_select()
//主页面,为用户提供选项,使用户了解系统的功能
//用户输入与展示功能对应的数字,系统进行相应的函数应答 
{
	int c;
	for(int zhe=0;;) 
	{ 
        printf("\t\t -----------------------------------\n");  
        printf("\t\t │       【学生信息管理系统】     │\n");  
        printf("\t\t -----------------------------------\n");  
        printf("\t\t   ******************************* \n");  
        printf("\t\t   │ 1. 添加记录    2. 显示记录 │\n");  
        printf("\t\t   │                            │\n");  
        printf("\t\t   │ 3. 信息查询    4. 排序查看 │\n");  
        printf("\t\t   │                            │\n");  
        printf("\t\t   │ 5. 修改记录    6. 删除记录 │\n");  
        printf("\t\t   │                            │\n");  
        printf("\t\t   │ 7. 自定义查询  0. 退出程序 │\n");  
        printf("\t\t   ******************************* \n");  
        printf("\t\t请您选择(0-7):");  
        scanf("%d", &c);
		if(c<0||c>7)//如果不在给出范围之内则继续循环 
			continue;
		else break;  
	}
	return c;
}

void add()
//添加学生信息到文件中并进行保存 
{
	FILE *fp;
	char sign = 'y';
	int i=0,n=0;
	system("cls");//清屏
	STU p[200];
	while(sign!='n'&&sign!='N')
	{
		printf("             ----学生纪录添加----\n");   
        printf("学号:\n");  
        scanf("\t%s",p[i].num);
		printf("姓名:\n");  
        scanf("\t%s",p[i].name);  
        printf("C语言:\n");  
        scanf("\t%f",&p[i].cyuyan);
        printf("高数: \n");
		scanf("\t%f",&p[i].math);
		printf("英语: \n");
		scanf("\t%f",&p[i].english);
		p[i].summ = p[i].cyuyan+p[i].english+p[i].math;
		printf("是否继续添加?(y/n)");  
        scanf("\t%c",&sign);
        i++;
        n = n+1;
        system("cls");
	}system("pause");
	
	if((fp=fopen("student.txt","a"))==NULL)
	{
		printf("抱歉,打开文件失败\n");
		system("pause");
		return ;
	}
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%s %s %f %f %f %f\n",p[i].num,p[i].name,p[i].cyuyan,p[i].math,p[i].english,p[i].summ);
	}
	fclose(fp);
	system("pause");
}

void scan()
//查询所有学生信息 
{
	char sign = 'y';
	FILE *fp;
	int n;
	system("cls");
	
	if((fp = fopen("student.txt","r"))==NULL)
	{
		printf("打开文件失败!!\n");
		system("pause");
		return ;
	}
	
	int i=0;
	while(fscanf(fp,"%s%s%f%f%f%f",per[i].num,per[i].name,&per[i].cyuyan,&per[i].math,&per[i].english,&per[i].summ)!=EOF)
	{
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
     	printf("学号   姓名     C语言   高数   英语   总分\n");  
     	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
     	printf("%s  %s  %.2f  %.2f  %.2f  %.2f",per[i].num,per[i].name,per[i].cyuyan,per[i].math,per[i].english,per[i].summ);
		printf("\n");
		i++; 
	}
	system("pause");
	system("cls");
}

void query()
//查询学生信息,有两种方式 1.按姓名查询 2.按学号查询
//用户输入查询学生的名字或学号就可以查询到该学生的相关信息 
{
	system("cls");
	STU p[200];
	FILE *fp1;
	int i=0,n=0,m;
	printf("\t\n请选择查询方式:\n");  
    printf("\t┌──────┐\n");    
    printf("\t│1------姓名 │\n");  
    printf("\t│2------学号 │\n");  
    printf("\t│3------返回 │\n");  
    printf("\t└──────┘\n");  
    printf("请输入你要查询的方式\n");
	 
    scanf("%d",&m);  
	while(m!=1&&m!=2&&m!=3)
	{
		printf("输入错误,请重新查询\n");
		getchar();
		scanf("%d",&m);
	}
	if((fp1=fopen("student.txt","r"))==NULL)
	{
		printf("无法打开文件\n");
	}
	
	while(fscanf(fp1,"%s%s%f%f%f%f",p[i].num,p[i].name,&p[i].cyuyan,&p[i].math,&p[i].english,&p[i].summ)!=EOF)
	{
		i++;
		n=n+1;
	}
	
	if(m==1)
	{
		char s[20];
		int j=0;
		printf("\t请输入您想查询的姓名:");
		scanf("\t%s", s);
		while(strcmp(p[j].name,s)!=0&&j<n) j++;
		if(j==n)
		{
			printf("查无此人!!\n");
		}
		else
		{
			printf("\t学号: %s\n",p[j].num);  
            printf("\t姓名: %s\n",p[j].name);  
            printf("\tC语言: %.2f\n",p[j].cyuyan);  
            printf("\t高数: %.2f\n",p[j].math);  
            printf("\t英语: %.2f\n",p[j].english);
            printf("\t总分: %.2f\n",p[j].summ);
		}
	}
	
	if(m==2)
	{
		char s[15];
		int i=0;
		printf("请输入您想查询的学号:");
		scanf("\t%s",s);
		
		while(strcmp(p[i].num,s)!=0&&i<n) i++;
		if(i==n)
		{
			printf("\t查无此人!!!\n");
			system("pause");
			return ;
		}
		else
		{
			printf("\t学号: %s\n",p[i].num);  
            printf("\t姓名: %s\n",p[i].name);  
            printf("\tC语言: %.2f\n",p[i].cyuyan);  
            printf("\t高数: %.2f\n",p[i].math);  
            printf("\t英语: %.2f\n",p[i].english);
            printf("\t总分: %.2f\n",p[i].summ);
		}
	}
	fclose(fp1);
	system("pause");
}

void date()
//查看学生单科排名,从高到低 
{
	STU per[200];
	FILE *fp;
	STU temp;
	float sum,s[200];
	int i=0,n=0;
	int j,k,t,m;
	system("cls");
	
	printf("\t\n选择排序方式:\n");  
    printf("\t┌──────┐\n");  
    printf("\t│1-----C语言 │\n");  
    printf("\t│2------高数 │\n"); 
    printf("\t│3------英语 │\n");
	printf("\t│4------返回 │\n");
    printf("\t└──────┘\n");  
    printf("请输入你要排序的方式\n");  
    scanf("%d",&m);  
    system("cls"); 
    
    while(m!=1&&m!=2&&m!=3&&m!=4)
	{
		printf("输入错误请重新输入:\n");
		scanf("%d", &m);
	}
	if((fp=fopen("student.txt","r"))==NULL)
	{
		printf("无法打开文件!!!\n");
		system("pause");
		return ;
	}
	 
	 while(fscanf(fp,"%s%s%f%f%f%f",per[i].num,per[i].name,&per[i].cyuyan,&per[i].math,&per[i].english,&per[i].summ)!=EOF)
	 {
	 	i++;
	 	n=n+1;
	 }
	 if(m==1)
	 {
	 	for(i=0;i<n;i++)
	 	{
	 		for(j=i+1;j<n;j++)
	 		{
	 			if(per[i].cyuyan<per[j].cyuyan )
	 			{
	 				temp = per[i];
	 				per[i] = per[j];
	 				per[j] = temp;
				 }
			 }
		 }
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("学号   姓名     C语言   高数   英语   总分\n");  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); 
		 for(i=0;i<n;i++)
		 {
		 	printf("%s  %s  %.2f  %.2f  %.2f  %.2f\n", per[i].num,per[i].name,per[i].cyuyan,per[i].math,per[i].english,per[i].summ);
		 	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
		 }
		 fclose(fp);
		 	
	 }
	 if(m==2)
	 {
	 	for(i=0;i<n;i++)
	 	{
	 		for(j=i+1;j<n;j++)
	 		{
	 			if(per[i].math<per[j].math)
	 			{
	 				temp = per[i];
	 				per[i] = per[j];
	 				per[j] = temp;
				 }
			 }
		 }
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("学号   姓名     C语言   高数   英语   总分\n");  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); 
		 for(i=0;i<n;i++)
		 {
		 	printf("%s  %s  %.2f  %.2f  %.2f  %.2f\n", per[i].num,per[i].name,per[i].cyuyan,per[i].math,per[i].english,per[i].summ);
		 	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
		 }
		 fclose(fp);
	 }
	 
	 if(m==3)
	 {
	 	for(i=0;i<n;i++)
	 	{
	 		for(j=i+1;j<n;j++)
	 		{
	 			if(per[i].english<per[j].english)
	 			{
	 				temp = per[i];
	 				per[i] = per[j];
	 				per[j] = temp;
				}
			}
		}
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("学号   姓名     C语言   高数   英语   总分\n");  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); 
		for(i=0;i<n;i++)
		{
		 	printf("%s  %s  %.2f  %.2f  %.2f  %.2f\n", per[i].num,per[i].name,per[i].cyuyan,per[i].math,per[i].english,per[i].summ);
		 	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
		}
		fclose(fp);
	}
}

void amend()
//按学号修改学生个人信息 
{
	STU temp,p[200];
	int k=-1,i=0,n=0;
	char c1='y',c2,s[20];
	FILE *fp;
	while(c1=='y')
	{
		if((fp=fopen("student.txt","r+"))==NULL)//先用读方式打开文件 
		{
			printf("无法打开文件!\n");
			system("pause");
			return ;
		}
		i=0,n=0,k=-1;
		while(fscanf(fp,"%s%s%f%f%f%f",p[i].num,p[i].name,&p[i].cyuyan,&p[i].math,&p[i].english,&p[i].summ)!=EOF)
		{
			i++;
			n=n+1;
		}//将文件内容输出
		fclose(fp);
		printf("\n请输入要修改的同学的学号:");
		scanf("%s", s);
		for(i=0;i<n;i++)
		{
			if(strcmp(s,p[i].num)==0)
			{
				k=i;
				break;
			}
		}
		if(k<0)
		{
			printf("查无此人!\n");
		}
		else
		{
			printf("该学生的个人信息如下,请修改:\n");
			printf("---------------------------------------------\n");
			printf("学号: %s\n",p[k].num);
			printf("姓名: %s\n",p[k].name);
			printf("C语言:%.2f\n",p[k].cyuyan);
			printf("高数: %.2f\n",p[k].math);
			printf("英语: %.2f\n",p[k].english);
			printf("总分: %.2f\n",p[k].summ);
			printf("---------------------------------------------\n"); 
			printf("请输入修改后的学生信息:\n");
			printf("学号:\n");
			scanf("%s", p[k].num);
			printf("姓名:\n");
			scanf("%s", p[k].name);
			printf("c语言:\n");
			scanf("%f", &p[i].cyuyan);
			printf("高数:\n");
			scanf("%f", &p[i].math);
			printf("英语\n");
			scanf("%f", &p[i].english);
			p[i].summ = p[i].cyuyan + p[i].english +p[i].math;
			if((fp=fopen("student.txt","w"))==NULL)//再用覆盖打开文件 
			{
				printf("无法打开文件!\n");
				system("pause");
				return ;
			}
			for(i=0;i<n;i++)
			{
				fprintf(fp,"%s %s %f %f %f %f\n",p[i].num,p[i].name,p[i].cyuyan,p[i].math,p[i].english,p[i].summ);
			}
			fclose(fp);
			printf("修改完成!!\n");
		}
		c1='n';
	}
} 

void delet()
//删除指定学号的学生信息 
{
	STU p[200];
	FILE *fp;
	char s[10];
	int i=0,n=0;
	
	if((fp=fopen("student.txt","r"))==NULL)//先用读方式打开文件 
	{
		printf("无法打开文件!\n");
		system("pause");
		return ;
	}
	
	while(fscanf(fp,"%s%s%f%f%f%f",p[i].num,p[i].name,&p[i].cyuyan,&p[i].math,&p[i].english,&p[i].summ)!=EOF)
	{
		i++;
		n=n+1;
	}//将文件内容输出 
	printf("请输入要删除的学生学号:");
	scanf("%s",s);
	i=0;
	while(strcmp(p[i].num,s)!=0&&i<n)
	{
		i++;
	}
	int k=i;
	fclose(fp);
	if(i==n)
	{
		printf("查无此人!!\n");
		return ;
	}
	else
	{
		printf("该学生的个人信息如下,已删除:\n");
		printf("---------------------------------------------\n");
		printf("学号: %s\n",p[k].num);
		printf("姓名: %s\n",p[k].name);
		printf("C语言:%.2f\n",p[k].cyuyan);
		printf("高数: %.2f\n",p[k].math);
		printf("英语: %.2f\n",p[k].english);
		printf("总分: %.2f\n",p[k].summ);
		printf("---------------------------------------------\n");
		if((fp=fopen("student.txt","w"))==NULL)//再用覆盖打开文件 
		{
			printf("无法打开文件!\n");
			system("pause");
			return ;
		}
		for(i=k;i<n-1;i++)
		{
			p[i] = p[i+1];
		}
		n--;
		for(i=0;i<n;i++)
		{
			fprintf(fp,"%s %s %f %f %f %f\n",p[i].num,p[i].name,p[i].cyuyan,p[i].math,p[i].english,p[i].summ);
		}
	}
	fclose(fp);
	printf("删除成功\n");
}

void myself()
//给定查看范围,函数展示成绩处于范围内的学生信息 
{
	FILE *fp;
	float q,z;
	STU temp;
	STU p[200];
	printf("请输入您要查看的分数段:\n");
	printf("起始分数:\n");
	scanf("%f", &q);
	printf("终止分数:\n");
	scanf("%f", &z);
	if((fp=fopen("student.txt","r"))==NULL)//再用覆盖打开文件 
	{
		printf("无法打开文件!\n");
		system("pause");
		return ;
	}
	int i=0,j,n=0;
	while(fscanf(fp,"%s%s%f%f%f%f",p[i].num,p[i].name,&p[i].cyuyan,&p[i].math,&p[i].english,&p[i].summ)!=EOF)
	{
		i++;
		n=n+1;
	}//将文件内容输出
	
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(p[i].summ>p[j].summ)
			{
				temp = p[i];
				p[i] = p[j];
				p[j] = temp;
			}
		}
	}
	if(p[n-1].summ<q||p[0].summ>z)
	{
		printf("没有成绩处于此范围!!\n");
	}
	else
	{
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("学号   姓名     C语言   高数   英语   总分\n");  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); 
		for(i=0;i<n;i++)
		{
			if(p[i].summ<=z&&p[i].summ>=q)
				printf("%s  %s  %.2f  %.2f  %.2f  %.2f\n", p[i].num,p[i].name,p[i].cyuyan,p[i].math,p[i].english,p[i].summ);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43901998/article/details/88357741