C语言学生信息管理系统

一、简介

        包含学生信息的添加、删除、查找、修改、统计功能。

二、实现源代码

1、头文件

# ifndef __PUBLIC_H
# define __PUBLIC_H


typedef struct student
{
	int no;
	int age;
	char name[10];
	char sex[5];
	float chinese;
	float math;
	float english;
}Student;                                //定义存储一个学生信息的结构体

int add(Student *stu, int *len);
int print(Student *stu, int *len);
int del(Student *stu, int *len);
int read (Student *stu, int *len);
int modify(Student *stu, int *len);
int write(Student *stu, int *len);
int seek(Student *stu, int *len);
int read(Student *stu, int *len);
int sort(Student *stu, int *len);        //系列函数声明

#endif

2、主函数

# include <stdio.h>
# include "public.h"

Student stu[100];								//定义存储学生数据的数组 
int len = 0;

int main(void)
{
	read(stu,&len);								//将文件读入数组stu[]中 
	meun();										//打印菜单 
	int number;
	while(1)
	{
		printf("请选择您要执行的操作:\n");
		scanf("%d",&number);
		switch(number)
		{
			case 1: add(stu, &len); break;          //添加学生信息函数                            
			case 2: del(stu, &len); break;			//删除学生信息函数 
			case 3: seek(stu, &len); break;			//查询学生信息函数 
			case 4: sort(stu, &len); break;			//统计学生信息函数 
			case 5: modify(stu, &len); break;		//修改学生信息函数 
			case 6: print(stu, &len); break;		//打印学生信息函数 
			case 0: meun(); break;					//打印菜单函数 
			case 9: return 0;						//退出程序 
			default:
			{
				printf("您输入的数据不合法,请重新输入!\n"); 
			 	fflush(stdin);
			 	break;
			}
		}	
	}
	return 0;
}


3、信息添加

# include <stdio.h>
# include "public.h"


int add(Student *stu, int *len)   
{
	int count;
	Student std;                
	printf("您需要添加几个学生信息:");                
	scanf("%d",&count);                
	int i;
	for(i = 0; i < count; i++)
	{
		printf("请输入第 %d 个学生的信息\n",i+1); 
		printf("学号(1000):");
		scanf("%d",&std.no);
		fflush(stdin);
		printf("姓名:");
		scanf("%s",std.name);
		fflush(stdin);
		printf("性别:");
		scanf("%s",&std.sex);
		fflush(stdin);
		printf("年龄:");
		scanf("%d",&std.age);
		fflush(stdin);
		printf("英语成绩:");
		scanf("%f",&std.english);
		fflush(stdin);
		printf("语文成绩:");
		scanf("%f",&std.chinese);
		fflush(stdin);
		printf("数学成绩:");
		scanf("%f",&std.math);
		fflush(stdin);
		if(*len < 100)                            //100为数组长度
		{
			stu[*len] = std;                      //将添加的学生信息存储到数组中,长度加一 
			(*len)++;	
		}		 
	}
	FILE *fp = fopen("D:/data.txt","ab+");            //文件的写入
	if(fp == NULL)
	{
		printf("打开或创建文件失败\n");
		return -1;
	}
	int j;
	for(j = *len-count; j < *len; j++)
	{
		fwrite(&stu[j], sizeof(Student), 1, fp);
		if(ferror(fp))
		{
			printf("文件写入失败\n");
			return -1;
		}
	}
	fclose(fp);                                    //文件写入完成

    //附加:这里之所以没有直接用写好的write函数是因为这里文件的写入方式为“ab+”,而write函数中写入方式为“wb+”,前者为添加,后者为覆盖,所以这里区分开来。

	return 0;
}

4、信息删除

# include <stdio.h>
# include "public.h"
# include <string.h>

int del(Student *stu, int *len)
{
	while(1)
	{
		printf("----------------删除学生信息方式选择---------------\n\n");
		printf("\t\t1 通过学生编号删除\n");
		printf("\t\t2 通过学生姓名删除\n");
		printf("---------------------------------------------------\n");
		printf("请选择你要使用的方式(1/2):");
		int i;
		scanf("%d",&i);
		fflush(stdin);
		if(i == 1)
		{
			int no;
			printf("请输入要删除学生的编号:\n");
			scanf("%d",&no);
			int j,m = *len+10;
			for(j = 0; j < *len; j++)
			{
				if(stu[j].no == no)
				{
					m = j;
					for(m; m < *len-1; m++)
					{
						stu[m] = stu[m+1];
						j--;
					}
					(*len)--;
					write(stu,len);
				}
			}
			if(m > *len)
			{
				printf("学号输入错误,未查找到学号[ %d ]\n",no);
			}
			else
			{
				break;
			}
		} 
		else if(i == 2)
		{
			printf("请输入你要删除的学生姓名:\n");
			char name[10];
			scanf("%s",name);
			int i,m = *len+10;
			for(i = 0; i < *len; i++)
			{
				if(strcmp(name, stu[i].name) == 0)
				{
					m = i;
					for(m; m < *len-1; m++)
					{
						stu[m] = stu[m+1];
						i--;
					}
					(*len)--;
					write(stu,len);
				}
			}
			if(m > *len)
			{
				printf("姓名输入错误,未查找到姓名[ %s ]\n",name);
			}
			else
			{
				break;
			}
		}
		else
		{
			printf("输入数据不合法,请重新选择:\n");
			fflush(stdin);
		}
	}
	return 0;
}

5、信息查找

# include <stdio.h>
# include "public.h"
# include <string.h>

int seek(Student *stu, int *len)
{
	printf("请输入你要查询的方式\n");
	printf("-----1.按姓名查询------\n");
	printf("-----2.按学号查询------\n");
	int number;
	scanf("%d",&number);
	switch(number)
	{
		case 1:
		{
			printf("按姓名查询\n");
			printf("请输入你要查询的学生姓名\n");
			char name[10];
			scanf("%s",name);
			int i;
			for(i = 0; i < *len; i++)
			{
				if(strcmp(stu[i].name, name) == 0)
				{
					printf("学号\t姓名\t性别\t年龄\t英语\t语文\t数学\n");
					printf("%d\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\n",stu[i].no, stu[i].name, 
					stu[i].sex, stu[i].age, stu[i].english, stu[i].chinese, stu[i].math);
					break;
				}
			}
			break;
		}
		case 2:
		{
			printf("按学号查询\n");
			printf("请输入你要查询的学生学号\n");
			int no;
			scanf("%d",&no);
			int i;
			for(i = 0; i < *len; i++)
			{
				if(stu[i].no == no)
				{
					printf("学号\t姓名\t性别\t年龄\t英语\t语文\t数学\n");
					printf("%d\t%s\t%s\t%d\t%.1f\t%.1f\t%.1f\n",stu[i].no, stu[i].name, 
					stu[i].sex, stu[i].age, stu[i].english, stu[i].chinese, stu[i].math);
					break;
				}
			}
			break;
		}
	}
	return 0;
}

6、信息修改

# include <stdio.h>
# include "public.h"

int modify(Student *stu, int *len)
{
	printf("-----------修改菜单信息----------\n");
	printf("---------1.按学生学号修改---------\n");
	printf("---------2.按学生姓名修改---------\n");
	printf("请选择修改编号(1/2):\n");
	int number;
	scanf("%d",&number);
	switch(number)
	{
		case 1:
		{
			printf("按学生学号修改\n");
			printf("请输入你要修改学生的学号:\n");
			int no;
			scanf("%d",&no);
			fflush(stdin);
			int i;
			for(i = 0; i < *len; i++)
			{
				if(no == stu[i].no)
				{
					printf("请选择你要修改的选项:\n");
					printf("1.姓名\t2.学号\t3.性别\t4.年龄\t5.语文成绩\t6.数学成绩\t7.英语成绩\n");
					int n;
					scanf("%d",&n);
					switch(n)
					{
						case 1:
						{
							char name[10];
							printf("需要被修改的名字为%s",stu[i].name);
							printf("请输入新的名字:\n");
							scanf("%s",name);
							strcpy(stu[i].name, name);
							printf("修改成功!");
							break;
						}
						case 2:
						{	
							int no;
							printf("需要被修改的学号为%d",stu[i].no);
							printf("请输入新的学号:\n");
							scanf("%d",&no);
							stu[i].no = no;
							printf("修改成功!");
							break;
						}
						case 3:
						{
							char sex[10];
							printf("需要被修改的性别为%s",stu[i].sex);
							printf("请输入新的性别:\n");
							scanf("%s",sex);
							strcpy(stu[i].sex, sex);
							printf("修改成功!");
							break;
						}
						case 4:
						{
							int age;
							printf("需要被修改的年龄为%d",stu[i].age);
							printf("请输入新的年龄:\n");
							scanf("%d",&age);
							stu[i].age = age;
							printf("修改成功!");
							break;
						}
						case 5:
						{
							double chinese;
							printf("需要被修改的语文成绩为%2.lf",stu[i].chinese);
							printf("请输入新的语文成绩:\n");
							scanf("%lf",&chinese);
							stu[i].chinese = chinese;
							printf("修改成功!");
							break;
						}
						case 6:
						{
							double math;
							printf("需要被修改的数学成绩为%2.lf",stu[i].math);
							printf("请输入新的数学成绩:\n");
							scanf("%lf",&math);
							stu[i].math = math;
							printf("修改成功!");
							break;
						}
						case 7:
						{
							double english;
							printf("需要被修改的英语成绩为%2.lf",stu[i].english);
							printf("请输入新的英语成绩:\n");
							scanf("%lf",&english);
							stu[i].english = english;
							printf("修改成功!");
							break;
						}
					}
					break;
				}
			}
			write(stu, len);
			break;
		}
		case 2:
		{
			printf("按学生姓名修改\n");
			printf("请输入你要修改学生的姓名:\n");
			char name[10];
			scanf("%s",name);
			fflush(stdin);
			int i;
			for(i = 0; i < *len; i++)
			{
				if(strcmp(name, stu[i].name) == 0)
				{
					printf("请选择你要修改的选项:\n");
					printf("1.姓名\t2.学号\t3.性别\t4.年龄\t5.语文成绩\t6.数学成绩\t7.英语成绩\n");
					int n;
					scanf("%d",&n);
					switch(n)
					{
						case 1:
						{
							char name[10];
							printf("需要被修改的名字为%s",stu[i].name);
							printf("请输入新的名字:\n");
							scanf("%s",name);
							strcpy(stu[i].name, name);
							printf("修改成功!");
							break;
						}
						case 2:
						{
							int no;
							printf("需要被修改的学号为%d",stu[i].no);
							printf("请输入新的学号:\n");
							scanf("%d",&no);
							stu[i].no = no;
							printf("修改成功!");
							break;
						}
						case 3:
						{
							char sex[10];
							printf("需要被修改的性别为%s",stu[i].sex);
							printf("请输入新的性别:\n");
							scanf("%s",sex);
							strcpy(stu[i].sex, sex);
							printf("修改成功!");
							break;
						}
						case 4:
						{
							int age;
							printf("需要被修改的年龄为%d",stu[i].age);
							printf("请输入新的年龄:\n");
							scanf("%d",&age);
							stu[i].age = age;
							printf("修改成功!");
							break;
						}
						case 5:
						{
							double chinese;
							printf("需要被修改的语文成绩为%2.lf",stu[i].chinese);
							printf("请输入新的语文成绩:\n");
							scanf("%lf",&chinese);
							stu[i].chinese = chinese;
							printf("修改成功!");
							break;
						}
						case 6:
						{
							double math;
							printf("需要被修改的数学成绩为%2.lf",stu[i].math);
							printf("请输入新的数学成绩:\n");
							scanf("%lf",&math);
							stu[i].math = math;
							printf("修改成功!");
							break;
						}
						case 7:
						{
							double english;
							printf("需要被修改的英语成绩为%2.lf",stu[i].english);
							printf("请输入新的英语成绩:\n");
							scanf("%lf",&english);
							stu[i].english = english;
							printf("修改成功!");
							break;
						}
					}
				write(stu, len);
				break;
				}
			}
			break;
		default:
			printf("数据输入错误\n");
			fflush(stdin);
			break;
		}
	}
	
	return 0;
}

7、信息统计

# include <stdio.h>
# include "public.h"

int sort(Student *stu, int *len)
{
	printf("--------------------按总分统计排名--------------------\n");
	int i, j;
	for(i = 0; i < *len-1; i++)
	{
		for(j = 0; j < *len-i-1; j++)
		{
			if((stu[j].chinese + stu[j].math + stu[j].english) < (stu[j+1].chinese + stu[j+1].math + stu[j+1].english))
			{
				Student std;
				std = stu[j];
				stu[j] = stu[j+1];
				stu[j+1] = std;
			}
		} 
	}
	print(stu, len);
}

8、文件写入函数

# include <stdio.h>
# include "public.h"

int write(Student *stu, int *len)
{
	FILE *fp = fopen("D:/data.txt","wb");
	if(fp == NULL)
	{
		printf("打开或创建文件失败\n");
		return -1;
	}
	int j;
	for(j = 0; j < *len ; j++)
	{
		fwrite(&stu[j], sizeof(Student), 1, fp);
		if(ferror(fp))
		{
			printf("文件写入失败\n");
			return -1;
		}
	}
	fclose(fp);
}

9、文件读取函数

# include <stdio.h>
# include "public.h"

int read (Student *stu, int *len)
{
	FILE *fp = fopen("D:/data.txt","ab+");
	if(fp == NULL)
	{
		printf("文件打开失败\n");
		return -1;
	}
	fread(&stu[0], sizeof(Student), 1, fp);
	while(!feof(fp))
	{
		(*len)++;
		fread(&stu[*len], sizeof(Student), 1, fp);
		if(ferror(fp))
		{
			printf("文件写入失败\n");
			return -1;
		}
	}
	return 0;
}

  • 20
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值