用c实现1个小型的学生管理系统,具有增删查改等功能。

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

struct student {/*定义学生结构体*/ 
    int no; /*学号*/
    char name[20];/*姓名*/ 
    float score; /*成绩*/
};

void inputinformation ( struct student stu[],int n){/*1输入学生信息*/ 
    int m;
	for (int i=1;i<=n;i++)
	{
		stu[i].no=0;
		stu[i].score=0;
		printf ("请输入第%d名学生信息\n",i);
		printf ("学号\n");
		scanf ("%d",&stu[i].no);
		printf ("姓名\n");
		scanf ("%s",&stu[i].name);
		printf ("成绩\n");
		scanf ("%f",&stu[i].score);
		printf ("\n");
		if (stu[i].no==0||stu[i].score==0)
		{
			printf ("输入错误,请重新输入\n");
			i-=1; 
		}
	}
}

void addstu ( struct student stu[],int *num){/*2增加学生信息*/ 
	int n;
	printf ("需要增加多少名学生信息:"); 
	scanf ("%d",&n);
	putchar ('\n');
	for(int i=*num+1;i<=*num+n;i++){
		stu[i].no=0;
		stu[i].score=0;
		printf ("请输入第%d名学生信息\n",i);
		printf ("学号\n");
		scanf ("%d",&stu[i].no);
		printf ("姓名\n");
		scanf ("%s",&stu[i].name);
		printf ("成绩\n");
		scanf ("%f",&stu[i].score);
		printf ("\n");
		if (stu[i].no==0||stu[i].score==0)
		{
			printf ("输入错误,请重新输入\n");
			i-=1; 
		}
	}
	*num+=n;
	
}

void delstu ( struct student stu[],int *num){/*3删除学生信息*/ 
	int m;
	do {
	int n;
	printf ("请输入想要删除的学生学号\n");
	scanf ("%d",&n);
	for (int i=1;i<=*num;i++){
		if (n==stu[i].no){
		for(int j=i;j<*num;j++){
			stu[j].no=stu[j+1].no;
			strcpy (stu[j].name,stu[j+1].name);
			stu[j].score=stu[j+1].score;
		}
		printf ("已删除该学生信息\n"); 
	}
		break;
	}
	*num-=1;
	printf ("是否继续删除学生信息,是请输入1,否请输入2\n");
	scanf ("%d",&m);
	printf ("\n");
	}while (m==1);
	
	
}

void lookup (struct student stu[],int *num){/*4查询学生信息*/ 
	int m;
	do {
	int n;
	printf ("请输入学生的学号:");
	scanf ("%d",&n);
	for (int i=1;i<=*num;i++){
		if (i<*num){
		if (n==stu[i].no){
			printf ("学号%d\n",stu[i].no);
			printf ("姓名%s\n",stu[i].name);
			printf ("成绩%f\n",stu[i].score);
			break;
		}
		else;
	}
	else if (n==stu[i].no){
			printf ("学号%d\n",stu[i].no);
			printf ("姓名%s\n",stu[i].name);
			printf ("成绩%f\n",stu[i].score);
			break;
		}
		else { 
		printf ("查询不到该同学\n");
	}
}
	printf ("是否继续查询学生信息,是请输入1,否请输入2\n");
	scanf ("%d",&m);
}while (m==1);

}

void modify (struct student stu[],int *num){/*5修改学生信息*/ 
	int m;
	do {
	int n,k;
	printf ("请输入想要修改的学生学号\n");
	scanf ("%d",&n);
	for (int i=1;i<=*num;i++){
		if (n==stu[i].no){
		printf ("你想要修改的学生信息为:1姓名,2成绩,3成绩和姓名(请输入数字)\n");
		scanf ("%d",&k);
		switch (k){
			case 1 :printf ("请输入新的名字:");scanf ("%s",&stu[i].name);break;
			case 2 :printf ("请输入新的成绩:");scanf ("%f",&stu[i].score);break;
			case 3 :printf ("请输入新的成绩,新的名字:");scanf ("%f,%s",&stu[i].score,&stu[i].name);break;
		}
	printf ("\n"); 
	printf ("修改成功\n") ;
	}
		break;
	}
	printf ("是否继续修改学生信息,是请输入1,否请输入2\n");
	scanf ("%d",&m);
	printf ("\n");
	}while (m==1);
}

void save (struct student stu[],int *num){/*保存学生信息*/
	int i = 1;
	FILE *file;
	file = fopen("student.txt","ab");
	fprintf (file,"学号\t姓名\t成绩\t");
	fprintf (file,"\n");
	while (i<=*num) {
		fprintf (file,"%d\t", stu[i].no);
		fprintf (file,"%s\t", stu[i].name);
		fprintf (file,"%f\t", stu[i].score);
		i++;
		fprintf (file,"\n");
	}
	fclose (file);
}	

void concludingremarks (int n,int k){/*操作结束语*/
	switch (n){ 
	case 1: printf ("%d名学生信息录入结束。\n\n",k);break; 
	case 2: printf ("学生信息录入结束。\n\n");break;
	case 3: printf ("删除学生信息已结束。\n\n");break;
	case 4: printf ("查询学生信息已结束。\n\n");break;
	case 5: printf ("修改学生信息已结束。\n\n");break;
	case 6: printf ("保存学生信息已完成。\n\n");break;
	}
}

int main (void) {
	int num,key=0;
	int *p=&num;
    
    struct student stu[100]; /*学生结构体数组,至多100人*/
    printf ("请输入学生人数:");
    scanf ("%d",&num);
    putchar ('\n');
    
    
    while (key!=7) {
    	concludingremarks (key,num);
    	
    	puts ("=====================================================================");
    	printf ("序号\t功能详情\n");
    	puts ("---------------------------------------------------------------------");
    	printf ("1\t录入学生信息\n");
    	printf ("2\t增加学生信息\n");
    	printf ("3\t删除学生信息\n");
    	printf ("4\t查找学生信息\n");
    	printf ("5\t修改学生信息\n");
    	printf ("6\t保存学生信息\n");
    	printf ("7\t结束程序\n");
		puts ("=====================================================================");
		
		printf ("请输入功能序号以开启操作:");
		scanf ("%d",&key);
		
		switch (key){
		case 1:inputinformation (stu,num);break;
		case 2:addstu (stu,p);break;
		case 3:delstu (stu,p);break;
		case 4:lookup (stu,p);break;
		case 5:modify (stu,p);break;
		case 6:save (stu,p);break;
		case 7:break;
	}
		system("cls");/*清屏*/
		if (key==7) printf ("程序已结束。");
		 
	
    }
    
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值