C语言结构体实现班级管理系统

main.c

  • 整体功能概述:
    这是整个程序的入口点,实现了一个简单的学生信息管理系统的命令行交互界面。通过循环展示菜单,让用户选择不同的操作来管理学生信息,如录入、展示、添加、删除、修改、查找以及排序等操作,直到用户选择退出(输入 0 )为止。
#include<myhead.h>	
#include"stu.h"
#include"stu_function.h"
#define STUMAX 100
int main(int argc, const char *argv[])
{
	struct Studen stu[STUMAX];//班级成绩信息
	int stu_sum=0;//总人数
	int choise;
	while(1){
		mune();//菜单
		puts("请输入你的选择");
		scanf("%d",&choise);
		switch(choise){
			case 1:{
					   input_stu_info(stu,&stu_sum);
					   break;
				   }
			case 2:{
					   output_stu_info(stu,stu_sum);
					   break;
				   }
			case 3:{
					   add_stu_info(stu,&stu_sum);
					   break;
				   }
			case 4:{
					   del_stu_info(stu,&stu_sum);
					   break;
				   }
			case 5:{
					   updata_stu_info(stu,stu_sum);
					   break;
				   }
			case 6:{
					   find_stu_info(stu,stu_sum);
					   break;
				   }
			case 7:{
					   des_stu_info(stu,stu_sum);
				   		break;
				   }
			case 0:{
					   exit(0);
				   }
			default:{
						puts("重新输入");
						break;
					}

		}



	}
	return 0;
}

stu.h

  • 功能概述:
    主要用于定义学生信息的数据结构,也就是 struct Studen 结构体,使得整个程序中涉及学生信息处理的各个模块(如 main.c、stu_function.c 等)都能知晓学生信息包含哪些具体的成员变量,便于进行数据的存储、传递和操作。
#ifndef STU_H
#define STU_H
struct Studen{
	int id;
	char name[20];
	int score;
	char sex[20];
	char TEL[20];
};
#endif

stu_function.h

  • 功能概述:
    作为函数原型声明的头文件,起到了接口说明的作用。它向其他使用这些函数的源文件(如 main.c)声明了本程序中实现的各种学生信息管理操作函数的名称、参数类型以及返回值类型等信息,使得编译器能够在编译阶段对函数调用进行合法性检查,确保参数传递、返回值使用等符合预期,即使函数的具体实现代码在其他文件(stu_function.c)中也能正常编译调用。
#ifndef STU_FUNCTION_H
#define STU_FUNCTION_H
void mune();
void output_stu_info(struct Studen *stu,int n);
void input_stu_info(struct Studen *stu,int *n);
void add_stu_info(struct Studen *stu,int *n);
void del_stu_info(struct Studen *stu,int *n);
void updata_stu_info(struct Studen *stu,int n);
void find_stu_info(struct Studen *stu,int n);
void des_stu_info(struct Studen *stu,int n);

#endif

stu_function.c

  • 功能概述:
    这是实现各种学生信息管理具体操作函数的源文件,包含了与学生信息的录入、展示、添加、删除、修改、查找以及排序等相关功能对应的函数定义,这些函数与 stu_function.h 文件中声明的函数原型一一对应,实现了 main.c 文件中调用的各种具体操作逻辑。
#include<myhead.h>
#include"stu.h"
void mune(){
puts("菜单选项");
puts("1.信息录入");
puts("2.信息展示");
puts("3.添加一个学生操作");
puts("4.学生信息删除");
puts("5.更改其联系方式");
puts("6.查找学生信息");
puts("7.学生成绩降序排序");
puts("0.退出系统");
}
struct Studen* add_data(struct Studen *stu,int n,int m){
	for(int i=n;i<m;i++){
		printf("请输入第%02d个学生的学号:",i+1);
		scanf("%d",&stu[i].id);
		printf("请输入第%02d个学生的姓名:",i+1);
		scanf("%s",stu[i].name);
		printf("请输入第%02d个学生的成绩:",i+1);
		scanf("%d",&stu[i].score);
		printf("请输入第%02d个学生的性别:",i+1);
		scanf("%s",stu[i].sex);
		printf("请输入第%02d个学生的手机号:",i+1);
		scanf("%s",stu[i].TEL);
		puts("--------------------");	
	}
	return stu;
}
void input_stu_info(struct Studen *stu,int *n){
	puts("请输入添加人数");
	int cout;
	scanf("%d",&cout);
	for(int i=*n;i<cout+*n;i++){
		printf("请输入第%02d个学生的学号:",i+1);
		scanf("%d",&stu[i].id);
		printf("请输入第%02d个学生的姓名:",i+1);
		scanf("%s",stu[i].name);
		printf("请输入第%02d个学生的成绩:",i+1);
		scanf("%d",&stu[i].score);
		printf("请输入第%02d个学生的性别:",i+1);
		scanf("%s",stu[i].sex);
		printf("请输入第%02d个学生的手机号:",i+1);
		scanf("%s",stu[i].TEL);
		puts("--------------------");
	}
	*n=*n+cout;
	puts("录入完成");
}


void output_stu_info(const struct Studen * stu,int n){
	printf("学号\t姓名\t分数\t性别\t联系方式\n");
	for(int i=0;i<n;i++){
		printf("%d\t%s\t%d\t%s\t%s\n",\
				stu[i].id,stu[i].name,stu[i].score,stu[i].sex,stu[i].TEL);
	}
	
}
void add_stu_info(struct Studen *stu,int *n){
	if(stu==NULL){
	puts("请先录入");
	return;
	}
	int cout=0;
	printf("请输入添加的人数");
	scanf("%d",&cout);
	add_data(stu,*n,*n+cout);
	*n=*n+cout;
	puts("添加成功");
}
int find_id(struct Studen *stu,int id,int n ){
	for(int i=0;i<n;i++){
		if(stu[i].id==id){
			return i;
		}
	}
	return -1;
}
int del_data(struct  Studen *stu,int flag,int n){
	n--;
	for(int i=flag;i<n;i++){
		stu[i]=stu[i+1];
	}
	return 1;
}

void del_stu_info(struct Studen *stu,int *n){
	if(stu==NULL){
		puts("暂无数据");
	}

	puts("请输入你要删除的学号");
	int id;
	scanf("%d",&id);
	int flag=find_id(stu,id,*n);
	if(flag<0){
		puts("无此学生");
		return;
	}else{
		del_data(stu,flag,*n);
		(*n)--;
	}
	puts("删除成功");
}
void updata_stu_info(struct Studen *stu,int n){
	puts("请输入你要修改的id");
	int id;
	scanf("%d",&id);
	int flag=find_id(stu,id,n);
	if(flag<0){
		puts("无次学生");
	}else{
		puts("请输入你要修改的联系方式");
		scanf("%s",stu[flag].TEL);
	}
	puts("修改成功");
}

void find_stu_info(struct Studen *stu,int n){
	puts("请输入你要查找的id");
	int id;
	scanf("%d",&id);
	int i=find_id(stu,id,n);
	if(i<0){
	puts("无此学士");
	return ;
	}
	printf("学号\t姓名\t分数\t性别\t联系方式\n");
	printf("%d\t%s\t%d\t%s\t%s\n",\
				stu[i].id,stu[i].name,stu[i].score,stu[i].sex,stu[i].TEL);
}

void des_stu_info(struct Studen *stu,int n){
	for(int i=1;i<n;i++){
		for(int j=0;j<n-i;j++){
			if(stu[j].score<stu[j+1].score){
				struct Studen temp=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=temp;
			}
		}
	}
	printf("ok\n");
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值