学生管理系统(C语言简单实现)

仅供借鉴、仅供借鉴、仅供借鉴(整理了一下大一C语言每个章节的练习题、没得题目、只有程序了)

1 、实训名称

实训12:文件

2、实训目的及要求

1、文件的基本应用
2、综合运用已学的知识,包括循环结构、函数、数组、指针等来解决问题。结合程序调试功能和程序3、调试技巧解决程序中存在的逻辑问题。

实现效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、 源码


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h> 
#define N 2

struct student{
	char num[10];//学号
	char name[10];//名字 
	float score_c;//语文 
	float score_m;//数学 
	float score_e;//英语 
	float score_sum; //总成绩 
};

void inputfile(struct student *stu,int n);//输入文件函数
int outputfile(struct student *stu);//输出文件函数
void input(struct student *stu);//输入函数,从键盘输入数据
void output(struct student *stu);//输出函数,将数据输出在屏幕上显示
void rank(struct student *stu);//排序函数,按总成绩排序后调用输出函数输出排序后的情况
void locating(struct student *stu);//查询函数,按姓名进行查询,并输出查询到的数据
void mainview();//界面函数

void inputfile(struct student *stu,int n){
	FILE *f;
 	int i;
 	if((f=fopen("student.txt","w"))!=NULL)
	{
 		for(i=0;i<n;i++)
		{
 			fprintf(f,"学号:%s\t姓名:%s\t语文:%.2lf\t数学:%.2lf\t英语%.2lf\t总分%.2lf\n",
				stu[i].num,stu[i].name,stu[i].score_c,stu[i].score_m,stu[i].score_e,stu[i].score_sum);				    
		 }
		 printf("文件写入成功");
		 fclose(f); 
	 }else{
	 	 printf("文件打开失败!\n");
	 }
}
int outputfile(struct student *stu){
	FILE *f;
    int i,n;
    if((f=fopen("stu.txt","r"))!=NULL)
	{
	    for(i=0;feof(f)==0;i++)//feof(f)函数:指针f所指向的文件若文件结束,该函数返回值为非0值
            fscanf(f,"学号:%s\t姓名:%s\t语文:%.2lf\t数学:%.2lf\t英语%.2lf\t总分%.2lf\n",
			stu[i].num,stu[i].name,stu[i].score_c,stu[i].score_m,stu[i].score_e,stu[i].score_sum);			    
        fclose(f);
    }else{
	    printf("文件打开失败"); 
}
	n=i-1;
	return n;
}
void input(struct student *stu){
	int i;
	for(i=0;i<N;i++)
	{
		printf("\n\t请输入学生信息:\n\t\t学号:");
		scanf("%s",stu[i].num);
		printf("\t\t姓名:");
		scanf("%s",stu[i].name);
		printf("\t\t语文:");
		scanf("%f",&stu[i].score_c);
		printf("\t\t数学:");
		scanf("%f",&stu[i].score_m);
		printf("\t\t英语:");
		scanf("%f",&stu[i].score_e);
		stu[i].score_sum=stu[i].score_c+stu[i].score_m+stu[i].score_e;
	}
	inputfile(stu,N);
}
void output(struct student *stu){
	int i,n;
	printf("\t学号\t姓名\t语文\t数学\t英语\t总分\n");
	for(i=0;i<N;i++)
	{
		printf("\t%-8s%-8s%-8.lf%-8.lf%-8.lf%-8.lf\n",stu[i].num,stu[i].name,
			   stu[i].score_c,stu[i].score_m,stu[i].score_e,stu[i].score_sum);
	}
	
}
void rank(struct student *stu){
	int i,k;
	struct student temp;
	for(k=1;k<N;k++)
		for(i=N-1;i>=k;i--)
			if(stu[i].score_sum>stu[i-1].score_sum)
			{
				temp=stu[i];
				stu[i]=stu[i-1];
				stu[i-1]=temp;
			}
	output(stu);
}
void locating(struct student *stu){
	int i;
	char ch[10];
	if(N==0)
	{
		printf("没有记录!\n");
		return;
	}
	printf("请输入你要查找的姓名:");
	scanf("%s",&ch);
	for(i=0;i<N;i++)
		if(strcmp(stu[i].name,ch)==0)
		{
			printf("\n\t\t查找到的学生,信息如下\n\n");
			printf("\t学号\t姓名\t语文\t数学\t英语\t总分\n");
			printf("\t%-8s%-8s%-8.lf%-8.lf%-8.lf%-8.lf\n",stu[i].num,stu[i].name,
			       stu[i].score_c,stu[i].score_m,stu[i].score_e,stu[i].score_sum);
			return;
		}
	if(i==N)printf("\t\t未找到要查找的学生的信息!\n");
}
void mainview(){
	int c,f;
	struct student stu[N];
	while(1)
	{
		system("CLS");
	printf("*********************************************************\n");
    printf("*\t\t\t\t\t\t\t*\n");
    printf("*\t\t  学生管理系统!         \t\t*\n");
    printf("*\t\t\t\t\t\t\t*\n");
    printf("*********************************************************\n");
    printf("*\t\t\t\t\t\t\t*\n");
    printf("*\t\t    1--输入信息            \t\t*\n");
    printf("*\t\t    2--查看信息            \t\t*\n");
    printf("*\t\t    3--按成绩排序            \t\t*\n");
    printf("*\t\t    4--按姓名查找            \t\t*\n");
	printf("*\t\t    0--退出系统          \t\t*\n");
    printf("*\t\t\t\t\t\t\t*\n");
    printf("*********************************************************\n");
    printf("请输入选项编号(0 ~ 4): (按回车键结束输入)\n");
    scanf("%d",&c);
    switch(c)
	{
	    case 1:input(stu);break;	
	    case 2:output(stu);break;
	    case 3:rank(stu);break;	
	    case 4:locating(stu);break;	
	    case 0: return;
	    default:printf("输入错误,请重新输入!\n");fflush(stdin);//fflush清空缓冲区残余信息	
        }						 
        printf("\n\n");
	    system("pause");
    }
}
int main()
{
    mainview();
	system("pause");
	getchar();
	getchar();
	return 0;
}

4、实验小结

通过本次的作业,了解到文件的读写方式和存储的形式。通过不同函数的结合使用可以解决生活中的一些实际问题。指针的使用能够方便的定位,便于操作。但是指针使用不好会对程序造成危害。数组的使用可以存储大量的数据,在内存中按连续的顺序存储数据有利于数据的操作。

posted on 2022-08-28 22:18  热爱技术的小郑  阅读(186)  评论(0编辑  收藏  举报