学生信息管理系统(兼文件形式保存功能)

本文介绍了一个学生信息管理系统的实现,包括添加、删除、查找和修改等功能。系统使用结构体数组存储学生信息,通过文件操作实现信息的持久化。在调试过程中,作者遇到并解决了循环错误、输入错误等问题,强调了编写程序时的注意事项和测试的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目分析
构造一个学生信息管理系统应包含添加、删除、查找、修改等基本功能,设计不同的函数实现各项功能,可以将学生信息存放在一个结构体数组里,实现添加功能则按照顺序向结构体数组赋值,删除则遍历数组找到要删除的学生的学号然后删除该学生的信息,查找则遍历数组找到所要找的学生信息,修改则建立在查找的基础上找到所要找的学生信息后进行重新赋值操作。在主函数中使用switch语句操作各功能函数,用户则根据选择完成想要的操作。
二、算法构造
在此程序中所要执行的功能有添加、删除、查找、修改,实现这些基本功能其实都是找到需要操作的结构体数组中的某一项或者某些项进行操作,所以在此只列出修改功能的算法代码以及流程图。

void modify() /*修改信息*/
{	
	void sort();
	int i,item,num,j;
	char sex1[LEN],s1[LEN+1],s2[LEN+1]; /* 以姓名和学号最长长度+1为准*/
	float score1;
	printf("请输入要修改的学生的学号:\n");
	scanf("%s",s1);
	for(i=0;i<n;i++)
		if(strcmp(student[i].code,s1)==0) /*比较字符串是否相等*/
			num=i;
		printf("------------------\n");
		printf("1.修改姓名\n");
		printf("2.修改年龄\n");
		printf("3.修改性别\n");
		printf("4.修改C语言成绩\n");
		printf("5.修改高等数学成绩\n");
		printf("6.修改大学英语成绩\n");
		printf("7.退出本菜单\n");
		printf("------------------\n");
		while(1)
		{
			printf("请选择子菜单编号:");
			scanf("%d",&item);
			switch(item)
			{
			case 1:
				printf("请输入新的姓名:\n");
				scanf("%s",s2);
				strcpy(student[num].name,s2);break;
			case 2:
				printf("请输入新的年龄:\n");
				scanf("%d",&student[num].age);break;
			case 3:
				printf("请输入新的性别:\n");
				scanf("%s",sex1);
				strcpy(student[num].sex,sex1); break;
			case 4:
				printf("请输入新的C语言成绩:\n");
				scanf("%f",&score1);
				student[num].score[0]=score1; break;
			case 5:
				printf("请输入新的高等数学成绩:\n");
				scanf("%f",&score1);
				student[num].score[1]=score1; break;
			case 6:
				printf("请输入新的大学英语成绩:\n");
				scanf("%f",&score1);
				student[num].score[2]=score1; break;
			case 7:sort();	return;
			default:printf("请在1-7之间选择\n");
			}
		}
} 

流程图如下所示:
在这里插入图片描述
三、程序实现

#include<stdio.h>	/*I/O函数*/
#include<stdlib.h>	/*其它说明*/
#include<string.h>	/*字符串函数*/
#define LEN 15		/* 学号和姓名最大字符数,实际请更改*/
#define N 500		/* 最大学生人数,实际请更改*/
int k=1,n=0, m=0;/* n代表当前记录的学生人数*/
struct Student
{
	char code[LEN];	/* 学号*/
	char name[LEN];	/* 姓名*/
	int age;			/* 年龄*/
	char sex[LEN];		/* 性别*/
	float score[3];     /* 3门课程成绩*/
}student[N];	 
void seek();
void modify();
void insert();
void del();
void display();
void menu(); 
void shuaxin();
void baocuo();
int main()
{ 
	while(k)
	{
		menu();
	}
	system("pause");
	return 0;
}
void shuaxin()			//实现刷新功能读取文件中的学生信息
{
	FILE *fp;
	if((fp=fopen("student.txt","r"))==NULL)
	{
		printf("打开文件失败\n");
		exit(0);
	}
	for(int i=0;fscanf(fp,"%s %s %d %s %f %f %f",student[i].code,student[i].name,&student[i].age,student[i].sex,
		&student[i].score[0],&student[i].score[1],&student[i].score[2])==7;)
	{
		i++;
	}
	n=i;
	fclose(fp);
}
void baocu
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值