用C语言简单语句写的学生管理系统

用C语言简单语句写的学生管理系统

涉及知识:输入输出语句,循环语句,字符串,结构体,goto语句,分模块编程
结果图片:在这里插入图片描述实现功能:
1.添加、删除、查看、修改学生信息(5个模块)
2.将学生信息按照成绩排序(1个模块)
我使用的编程软件:Dev
主函数代码如下:
(有大量注释帮助理解,觉得碍眼请手动删除)

/************************************
函数功能:菜单显示
函数原型:int main (void)
函数传参:无
函数返回值: 无
完成时间:22/03/21 18:07 
作者:*****  
***********************************/
#include "main.h"


 int k;                                     //全局变量的定义——使用 
struct add_student_news stu1[100]=	{
				{15,"陈赫","男",560},
				{16,"郝建","男",246},
				{17,"跑男","男",530},
			//	{18,"baby","女",450},
			};                                //结构体的固定定义格式 
int main(int argc, char *argv[])
 {
 	
 	while(1)
 		{
		 //	int i;
		 	int num; 
		 	printf("/********************菜单******************/\n");
		 	printf("1.添加学生信息\n");
			printf("2.删除学生信息\n");
			printf("3.查看学生信息\n");
			printf("4.查看单人信息\n");
			printf("5.修改学生信息\n");
			printf("6.将学生信息按照成绩排序\n"); 
			printf("0 输入0退出\n");
		 	printf("输入数字选择要执行的功能:");
		 	scanf("%d",&num);
		 	getchar();
		 	switch (num)                      //调用子函数 
		 		{
		 			case 0:return 0;
		 			case 1:add_stu_news();break; 
		 			case 2:del_stu_news();break;
		 			case 3:look_stu_news();break;
		 			case 4:look_alone_stu();break;
		 			case 5:ame_stu_news();break;     //删除学生信息 
		 			case 6:order_stu_score();break;
				}
		
		
		}
			return 0;
}
/**********************
六大部分:
1.ifndef 部分
2.头文件
3.宏定义
4.结构体
5.extern 全局变量
6.extern 函数名 
//尽量不要顺序错乱 

************************/ 

#ifndef MAIN_H
#define MAIN_H

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



struct add_student_news  //输入学生信息的结构体   // 结构体声明 
{
	int ID;//添加学号
	char name[100];//添加姓名//此处已经是全局变量了。 
	char sex[100];//添加性别  // 
	int score;//添加成绩 
}; 
/***********************************************
枚举:  菜单选择用枚举显示 
enum  NUM
{
	
} 

***********************************************/ 
struct add_student_news  stu1[100];            //结构体数组声明 

extern int k;//输入学生信息的次数  
//k=0;        ///.h不能赋值,只能声明 

extern void add_stu_news(void); 
extern void del_stu_news(void);
extern void look_stu_news(void);
extern void ame_stu_news(void);
extern void look_alone_stu (void);
extern void order_stu_score(void);
//void aaaa();

#endif

/*******************************
函数功能:添加学生信息 
无参无返类型;
函数原型: void add_stu_news(void)
时间:22/03/21 18:17
*********************************/ 
#include "main.h"

//static int k;
//extern int k;    //再main.c函数中正确定义一次进行了,其他地方不用再定义了 
//	k=0;
	
void add_stu_news(void)  //添加学生信息 

	{
	/*	struct add_student_news stu1[3]=
		{
		{15,"陈赫","男",560},
		{16,"郝建","男",246},
		{17,"跑男","男",530},
	//	{18,"baby","女",450},              //结构体 是全局变量。 不要在这里定义 
		};     */
		int i;
		int num;
		char choose;
		char Y,N;
		while(1)
		{
		printf("输入要添加的人数:");
		scanf("%d",&num); 
		printf("请输入学生数据,学号+姓名+性别+成绩\n");
		for(i=3;i<3+num;i++)
		{
			printf("输入学号:");scanf("%d",&stu1[k+3].ID); 	getchar();	  
			printf("输入姓名:");scanf("%s",&stu1[k+3].name); 	getchar();	
			printf("输入性别:");scanf("%s",&stu1[k+3].sex);	getchar();	
			printf("输入成绩:");scanf("%d",&stu1[k+3].score);	getchar();	
			k++;                                   //k是增加的学生的个数,注意:原来已经有三个初始化学生信息,所以以后是k+3表示储存学生人数的数组的长度。 
		}
			printf("%d人以输入完毕\t",num); 
		pe:	printf("是否继续输入?y or n\n");
			scanf("%c",&choose);
			getchar(); 
		//	printf("choose=%c",choose);
			if(choose=='n')
				{
					break;
				}
			else if(choose=='y')
				{
					continue;
				}
			else 
				{
					printf("输入错误,请重新输入。");
					goto pe; 
				} 
		}

	}
	
/****************************
函数功能:删除学生信息
无参无返类型 
函数原型: void del_stu_news(void)
*****************************/ 


#include "main.h"

void del_stu_news(void)

{
	int i;
	int j;
	int put_ID; 
		int k_low;
	printf("输入删除学生学号:");
	scanf("%d",&put_ID);
	getchar();
	int a[10]={0};
	int b[10]={1,2}; 
	 a[10]= b[10];
	for(i=0;i<k+3;i++)
		{	
			printf("测试i");
			if(put_ID==stu1[i].ID)
				{
					k_low=1;
					for(j=i;j<k+3;j++)   //让他少输出一行 
						{
							
							stu1[j]=stu1[j+1];  //结构体可以直接对结构体赋值。数组没法直接对数组赋值 (可以直接赋值),只要内部结构相同就可以赋值 
						//	stu1[j].ID=stu1[j+1].ID;
						//	stu1[j].name=stu1[j+1].name;  //强转?     *************************************** 正解:strcpy(字符串1,字符串2) .可以实现把串2覆盖到串1   
						//	stu1[j].sex=stu1[j+1].sex;     //字符也不能直接复制,数组赋值给数组的赋值方法是     同上↑ 
						//	stu1[j].score=stu1[j+1].score;
						}
					if(k_low==1)          
						{
							k--;   //让存放学生信息的数组长度减1,所以最后一行不输出了。最后一行和倒数第二行相同 ,所以只输出一行 
							}	
						printf("学号为【%d】信息删除完毕!\n",put_ID);
				}
		}
 } 
/*************************
函数功能:查看学生信息
用法:输入密码和初始密码一致,则查看所有学生信息
函数原型: void  look_stu_news(void)
时间:22/03/21 19:07 
*************************/ 

#include "main.h"

void  look_stu_news(void)  //输入密码查找所有学生信息 
{
	char real_passwd[100]={'1','2','3'};
	char put_passwd[100];
	int i;
	int flag=3;  //密码输入错误循环的次数,超过3次结束输入 

//	extern int k;
//	printf("*********************%d",k);
te:	printf("输入密码查看所有学生信息:");
	gets(put_passwd); 
				if(flag==1)
					{	
					
						printf("密码已错误三次,请不要再尝试!\n\n\n"); 
						return ;
					}
				if(strcmp(real_passwd,put_passwd)==0)
					{
						printf("ID\t名字\t性别\t成绩\t\n"); //测试输入的输出 
						for(i=0;i<k+3;i++)
							{
								printf("%d\t%s\t%s\t%d\t\n",stu1[i].ID,stu1[i].name,stu1[i].sex,stu1[i].score);
							}
					}
				else 
					{
						printf("密码输入错误还有%d次机会\n",flag-1);
							flag--;
							//printf("@@@@@@%d",flag);
							goto te;   //跳传开始,并消耗一次机会 
					}
}	
/*******************************
函数功能:按照学生成绩排序
函数类型:无参无返类型 
函数原型: void order_stu_score(void)
时间:22/03/21 19:16 
******************************/ 

#include "main.h"
void order_stu_score(void)
{
	int i;
	int j;
	struct add_student_news temp;    //定义一个struct add_student_news类型的空文件夹。 
	//int temp;
	printf("将学生信息按照成绩排序:\n");//由成绩决定信息。
	for(i=0;i<k-1+3;i++)  //用冒泡法将成绩排序   	//已知有k+3个学生 ,k为输入添加的学生次数,3为初始化的3个学生信息 
		{
			for(j=0;j<k-1-i+3;j++)
				{
					if(stu1[j].score<stu1[j+1].score)
						{
							temp=stu1[j+1];
							stu1[j+1]=stu1[j];
							stu1[j]=temp;
						}
				}
		 } 
	for(i=0;i<k+3;i++)
		{
			printf("ID\t名字\t性别\t成绩\t\n"); //测试输入的输出 
			for(i=0;i<k+3;i++)  
				{
					printf("%d\t%s\t%s\t%d\t\n",stu1[i].ID,stu1[i].name,stu1[i].sex,stu1[i].score);
				}
			printf("成绩排序为:\n"); 
			printf("ID\t姓名\t性别\t成绩\t\n");
			printf("%d\t%s\t%s\t%d\n",stu1[i].score);
		
		}	 
}
/*************************
函数功能:查看单个学生成绩
函数类型:无参无返类型
函数原型: void look_alone_stu (void)
时间:22/03/21 19:19 
*************************/ 

#include "main.h"

void look_alone_stu (void)
{
	int i,j;
	int put_ID=0; 
	char choose;
	int num;
	char put_name[100];
	int flag=0;
	int a,b;
	printf("通过ID查看信息回复“1 ”,通过姓名查看信息回复“2 ”\n");
	scanf("%d",&num);
	getchar(); 
//	while(1)
	//	{
			if(num==1)
			
				{
			te :	printf("输入需要查看学生的【ID】:");
					scanf("%d",&put_ID); 
					getchar();
							//【判断ID是否相同  //检索k次 
						
							for(i=0;i<k+3;i++)   
								{
						
									if(put_ID==stu1[i].ID)  //输入的值和学生信息数组中的ID值相比较,一致则进入if 
										{
												printf("@@@@\t");
												printf("已检索到目标学生,该学生信息如下:\n");
										 		printf("ID\t名字\t性别\t成绩\t\n"); //测试输入的输出 
										 		printf("%d\t%s\t%s\t%d\n",stu1[i].ID,\
												stu1[i].name,stu1[i].sex,stu1[i].score);
												flag++;
												if(flag=1)
													{
														return;
													}
									 	} 
						 		}
						 	
						 		
						 			printf("ID查无此人,是否重新输入?y/n  :\t");
						 				scanf("%c",&choose);
						 				getchar();
						 					if(choose=='y')
						 				{
						 					goto te;
						 					
										 }
										 	else 
										 		return;
				}

			else if(num==2)    //按照姓名查看学生信息; 
				{
					printf("输入需要查看学生的【姓名】:");
					gets(put_name);
				//	getchar();
					for(i=0;i<k+3;i++)//【判断ID是否相同  //检索k次 
						{
							if(!strcmp(put_name,stu1[i].name))
								{
									printf("已检索到目标学生,该学生信息如下:\n");
							 		printf("ID\t名字\t性别\t成绩\t\n"); //测试输入的输出 
							 		printf("%d\t%s\t%s\t%d\n",stu1[i].ID,\
									stu1[i].name,stu1[i].sex,stu1[i].score);
						 		} 
						}	
				} 
			else 
				{
					printf("输入错误\n");
				}
	  //  }
    
}


/**********************
函数功能:修改学生信息
函数类型:无参无返类型
函数原型: void ame_stu_news (void) 
时间:22/03/21 19:20 
***********************/ 
#include "main.h" 


void ame_stu_news (void)  //修改学生信息 
{
	int i,flag=0;
	int put_ID;
	char choose;
	char amend_content[100]; //字符型修改信息[100] 
//	extern int k;
	
	char id[100]="ID";       //strcmp比较需要两方都是字符串数组 
	char xm[100]="姓名";
	char xb[100]="性别";
	char cj[100]="成绩";
	int change_ID;
	char change_xm[100];
	
//	char arr_amend [100]={'ID','姓名','性别','成绩'};
ne:	printf("输入需要修改学生的ID:");
	scanf("%d",&put_ID); 
	getchar();
	for(i=0;i<k+3;i++)//【判断ID是否相同  //检索k次 
	 	{
					printf("i=%d\n",i);
					printf("000");
			 		if(put_ID==stu1[i].ID)
			 			{
			 				printf("已检索到目标学生,该学生信息如下:\n");
			 				printf("ID\t姓名\t性别\t成绩\t\n"); //测试输入的输出 
			 				printf("%d\t%s\t%s\t%d\n",stu1[i].ID,\
							 	stu1[i].name,stu1[i].sex,stu1[i].score);
							printf("请选择你要修改的内容:ID/姓名/性别/成绩\n");    
						//	scanf("%s",&amend_content); 
					   		gets(amend_content); 
						//	getchar();
						//	printf("@@@%s",amend_content);
							if(!strcmp(amend_content,id)==1)  //变更id 
								{
									printf("输入需要【变更%s】 的内容为:\t",amend_content);
								//	printf("ID前@@@@@%d",stu1[i].ID); 
									  	scanf("%d",&stu1[i].ID);
									//printf("ID后@@@@@@%d",stu1[i].ID);
									//	  scanf("%d",&change_ID);
									  	getchar();
									//	stu1[i].ID=change_ID; 
										flag++;
									 goto me;
								}
					
							else if (!strcmp(amend_content,xm)==1) //变更姓名 
								{
									printf("输入需要【变更%s】 的内容为:\t",amend_content);
								//	printf("姓名前@@@@@%s",stu1[i].name); 
										scanf("%s",&stu1[i].name);       //因为这里直接更改的首地址,所以原来的内容覆盖了 
								//	printf("姓名后#@@@@@%s",stu1[i].name); 
										getchar();
										flag++;
									  //	scanf("%c",&change_xm);
									  //	gets(change_xm);
									  //	printf("+++++++%s",change_xm);
									//	stu1[i].name=&change_xm; 
									goto me;
								}
							else if(!strcmp(amend_content,xb))//变更性别 
								{
									printf("输入需要【变更%s】 的内容为:\t",amend_content);
										
										scanf("%s",&stu1[i].sex); 
										getchar();
										flag++;
										goto me;
								}
							else if(!strcmp(amend_content,cj))//变更成绩 
								{
									printf("输入需要【变更%s】 的内容为:\t",amend_content);
										scanf("%d",&stu1[i].score); 
										getchar();
										flag++;
										goto me;
								}
							else  
								{
									printf("输入错误,请重新输入:或者直接返回\n");
									
								 } 
							
						}
			}
				
					printf("学生ID输入错误\n"); //用于第一次输入错误 选择 
					printf("是否继续输入?y or n\n");
					scanf("%c",&choose);
					getchar();
					
					if(choose=='n')
						{
							return ;
						}
	me:		if(flag>=1) //用于修改一次后继续修改 
				{
					printf("修改完毕,是否退出?y or n ");
					scanf("%c",&choose);
					getchar();
					if(choose=='n') 
						{
							goto ne;
						}
					else 
						return;
				}
	 		
		 }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学生管理系统是一个常见的编程练习题目。下面是一个基本的实现方法: 1. 定义学生的数据结构,可以包括学生的姓名、学号、年龄等信息。 ``` struct student{ char name[100]; int id; int age; }; ``` 2. 定义一个存储学生信息的数组。 ``` struct student stu[100]; ``` 3. 定义输入学生信息的函数,例如`input_student()`。 4. 定义显示学生信息的函数,例如`show_student()`。 5. 在主函数中实现学生管理系统的菜单,提供用户输入学生信息、显示学生信息等功能。 这只是一种简单的实现方法,具体实现还可以根据需求进行改进和扩展。希望以上代码能对您有所帮助。 ### 回答2: 学生管理系统是一种用于管理学生信息的软件,用C语言可以方便地实现这一功能。 首先,我们可以定义一个学生结构体,包含学生的姓名、年龄、性别、学号等属性。可以使用数组来存储多个学生的信息。 接下来,可以实现一些基本的功能,例如添加学生、修改学生信息、删除学生、查找学生等。可以使用循环和条件语句来实现这些功能。 在添加学生时,可以通过输入学生的信息,将其存储到学生数组中。在修改学生信息时,可以先通过学号或姓名等信息查找到对应的学生,然后进行修改。在删除学生时,可以通过学号或姓名等信息查找到对应的学生,然后将其从学生数组中删除。在查找学生时,可以通过学号或姓名等信息查找到对应的学生,并显示其详细信息。 另外,在学生管理系统中,还可以实现一些其他的功能,例如统计学生人数、按照年龄或成绩排序学生等。可以使用数组和排序算法来实现这些功能。 总之,通过使用C语言,我们可以实现一个简单学生管理系统,用于管理学生信息。这个系统可以实现基本的添加、修改、删除和查找功能,同时还可以实现一些其他的功能,以满足不同的需求。 ### 回答3: 学生管理系统是一个可以对学生信息进行增删改查的软件,它能够方便学校或教育机构进行学生管理和相关工作。下面是一个用C语言实现的简单学生管理系统的示例: 示例代码: #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生结构体 typedef struct Student { int id; char name[20]; int age; } Student; // 声明全局变量 Student students[100]; int studentCount = 0; // 添加学生信息函数 void addStudent() { // 从标准输入读取学生信息 printf("请输入学生姓名:"); scanf("%s", students[studentCount].name); printf("请输入学生年龄:"); scanf("%d", &students[studentCount].age); // 分配学生ID students[studentCount].id = studentCount + 1; // 更新学生数量 studentCount++; printf("添加成功!\n"); } // 显示学生信息函数 void showStudents() { printf("学生信息如下:\n"); for (int i = 0; i < studentCount; i++) { printf("学生ID:%d,学生姓名:%s,学生年龄:%d\n", students[i].id, students[i].name, students[i].age); } } // 查找学生信息函数 void findStudent() { int id; printf("请输入要查找的学生ID:"); scanf("%d", &id); // 遍历学生数组查找学生 for (int i = 0; i < studentCount; i++) { if (students[i].id == id) { printf("找到学生信息:学生ID:%d,学生姓名:%s,学生年龄:%d\n", students[i].id, students[i].name, students[i].age); return; } } printf("未找到该学生信息!\n"); } // 删除学生信息函数 void deleteStudent() { int id; printf("请输入要删除的学生ID:"); scanf("%d", &id); // 遍历学生数组查找学生 for (int i = 0; i < studentCount; i++) { if (students[i].id == id) { // 移动数组元素覆盖要删除的学生信息 for (int j = i; j < studentCount - 1; j++) { students[j] = students[j + 1]; } // 更新学生数量 studentCount--; printf("删除成功!\n"); return; } } printf("未找到该学生信息!\n"); } // 主函数 int main() { int choice; do { // 显示菜单 printf("==================== 学生管理系统 ====================\n"); printf("1. 添加学生信息\n"); printf("2. 显示学生信息\n"); printf("3. 查找学生信息\n"); printf("4. 删除学生信息\n"); printf("5. 退出\n"); printf("请输入操作选项:"); scanf("%d", &choice); // 根据选择调用对应的函数 switch (choice) { case 1: addStudent(); break; case 2: showStudents(); break; case 3: findStudent(); break; case 4: deleteStudent(); break; case 5: exit(0); break; default: printf("无效选择,请重新输入!\n"); break; } } while (1); return 0; } 以上是使用C语言实现的一个简单学生管理系统。通过定义结构体存储学生信息,再利用数组进行管理、展示、查找和删除等操作。用户可通过菜单选择进行操作,例如添加学生信息、显示学生信息、查找学生信息以及删除学生信息等。希望以上示例代码能帮助到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值