利用链表,结构体,文件写一个学生管理系统

可以实现九种功能

代码如下,有详细的注释,文件操作那里感觉有点问题,下来还得再修改修改,其他的运行后看起来都可以。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//定义一个学生
typedef struct _Student
{
	char name[20];//姓名
	int age;      //年龄 
	int stuNum;   //学号
	int score;    //成绩 
 } Student;
 
 //节点
typedef struct _Node
{
	Student stu;
	struct _Node* pNext;//指向下一个结点的指针 
}Node; 

//头结点
Node *g_pHead=NULL;//头结点 
//欢迎
void Welcome(); 
//录入学生信息
void InputStudent(); 
//打印学生信息
void PrintStudent(); 
//保存学生信息
void SaveStudent(); 
//读取学生信息
void ReadStudent();
//删除学生信息
void DeleteStudent(); 
int main()
{
	while(1)
	{
		Welcome();//欢迎
		
		//从键盘接收一个字符
		char ch=getchar(); 
		
		switch(ch)
		{
		case '1'://录入学生信息
			InputStudent();
			break; 
		case '2'://打印学生信息
			PrintStudent();
			break;
		case '3'://保存学生信息
			SaveStudent(); 
			break;
		case '4'://读取学生信息
			ReadStudent();
			break;
		case '5'://统计所有学生人数
			break;
		case &
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是一个简单的学生成绩管理系统示例,采用C语言编: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LEN 20 // 最大姓名长度 #define MAX_STUDENTS 100 // 最大学生数量 #define MAX_SUBJECTS 5 // 最大科目数量 typedef struct { char name[MAX_NAME_LEN]; // 姓名 int scores[MAX_SUBJECTS]; // 科目分数 float average_score; // 平均分 } Student; // 初始化学生信息 void init_student(Student *s) { memset(s->name, 0, MAX_NAME_LEN); memset(s->scores, 0, MAX_SUBJECTS * sizeof(int)); s->average_score = 0.0; } // 计算学生平均分 void calc_average_score(Student *s) { int total_score = 0; for (int i = 0; i < MAX_SUBJECTS; i++) { total_score += s->scores[i]; } s->average_score = (float)total_score / MAX_SUBJECTS; } // 显示学生信息 void print_student(Student *s) { printf("姓名:%s\n", s->name); printf("分数:"); for (int i = 0; i < MAX_SUBJECTS; i++) { printf("%d ", s->scores[i]); } printf("\n平均分:%.2f\n", s->average_score); } int main() { Student students[MAX_STUDENTS]; int student_count = 0; // 添加学生信息 while (student_count < MAX_STUDENTS) { Student *s = &students[student_count]; init_student(s); printf("请输入第%d个学生的姓名:\n", student_count + 1); scanf("%s", s->name); printf("请输入第%d个学生的分数(依次为%d个科目):\n", student_count + 1, MAX_SUBJECTS); for (int i = 0; i < MAX_SUBJECTS; i++) { scanf("%d", &s->scores[i]); } calc_average_score(s); student_count++; printf("是否继续添加学生信息?(y/n)\n"); char answer[10]; scanf("%s", answer); if (strcmp(answer, "n") == 0) { break; } } // 显示所有学生信息 printf("\n所有学生信息如下:\n"); for (int i = 0; i < student_count; i++) { printf("第%d个学生:\n", i + 1); print_student(&students[i]); } return 0; } ``` 这个示例可以用来添加多个学生信息,并且可以显示所有学生的信息和平均分数。你可以根据需要进行修改和扩展。 ### 回答2: 学生成绩管理系统是一个用来记录和管理学生的成绩信息的软件。它可以实现学生信息的录入、查询、修改和删除等功能,以及成绩的输入、统计、排序和展示等功能。 首先,我们可以定义学生的数据结构,包括学号、姓名、班级和成绩等字段。然后,可以利用C语言的结构来表示学生的信息,例如: ``` typedef struct { int student_id; char name[50]; char class[20]; float grade; } Student; ``` 接下来,我们可以利用文件操作函数来实现学生信息的存储和读取。可以将每个学生的信息以文本的方式入一个文件中,每行代表一个学生,字段之间用逗号或其他符号进行分隔。可以通过读取文件的方式获取之前录入的学生信息,并将其保存到数组或链表中进行管理。 具的操作可以包括添加学生信息、查询学生信息、修改学生信息和删除学生信息等。例如,添加学生信息时,可以通过文件追加的方式将新的学生信息入到文件中;查询学生信息时,可以读取文件中的每行数据,按照学号或姓名等关键字进行搜索并输出;修改学生信息时,可以先查询学生信息,然后通过修改相应字段的值来更新;删除学生信息时,可以通过将文件中的相应行数据删除或标记为无效来实现。 此外,还可以实现成绩的输入、统计、排序和展示等功能。例如,可以通过读取文件中的学生成绩信息来进行统计和排序,可以计算平均分、最高分和最低分等统计指标,并将结果输出到屏幕上或入到文件中进行展示。 总的来说,使用C语言编学生成绩管理系统需要运用文件操作、数据结构和相关算法等知识。通过合理的设计和实现各个功能模块,可以使得管理系统实用、高效和易于使用。 ### 回答3: 学生成绩管理系统是一个用于记录和管理学生学业成绩的软件。它可以实现学生信息的录入、成绩的录入和查询、成绩统计和分析等功能,方便教师和学生查看和管理学生成绩。 首先,我们需要设计一个学生信息的结构,包含学生的学号、姓名、性别等基本信息。然后,可以使用链表或者数组来存储多个学生的信息。我们可以通过文件操作将学生信息存储到磁盘上,方便下次打开时直接读取。 接着,我们可以设计一个成绩录入的函数,通过输入学生的学号查询到对应的学生信息,然后输入学生的各科成绩,并将其存储到学生信息结构中。可以使用条件判断来保证输入的成绩在合理的范围内。 为了方便教师和学生查询成绩,可以设计一个成绩查询的函数。可以根据学生的学号或者姓名进行查询,找到对应的学生信息并显示其各科成绩。 除了查询成绩,我们还可以设计一个成绩统计和分析的函数。可以计算每个学生的总分和平均分,并可以按照总分或者平均分进行排序。还可以计算班级的平均分和优秀率,帮助教师更好地了解学生的学习情况。 最后,还可以设计其他功能,如修改学生信息、删除学生记录等。可以通过输入学生的学号来找到对应的记录,然后进行相应的修改或删除操作。 综上所述,学生成绩管理系统是一个简单的C程序,通过学生信息结构文件操作和各种函数的设计实现对学生成绩的录入、查询、统计和分析等管理功能。这个系统可以提高教师和学生学生成绩的管理效率,方便他们更好地了解学生的学习情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值