大学生实训:学生成绩管理系统


前言

初步学习了C语言,在暑期实训时,我选择了“学生成绩管理系统”这个项目,写这篇文章主要是为了存放代码,同时也希望可以帮助到正在学习C语言的朋友们,本系统没有用到链表,或许可以为不熟悉链表但需要写系统的朋友提供些思路。


一、头文件(head.h)

代码如下:

typedef struct user
{
	char ID[20];//账号
	char password[20];//密码
	char name[20];//名字
	int flag;//老师:0,学生:1
}USER;
typedef struct score
{
	char studentID[20];//学号
	char name[20];//名字
	int chinese;//科目成绩
	int math;
	int english;
	float aver;//平均分
	int total;//科目总成绩
}SCORE;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void zhuce();//注册
void menu();//菜单
void logic();//登录
void save_user(USER user[], int n);//存储用户信息
int read_user(USER user[]);//读用户信息
int xiuPw();//修改登录密码
void teacher();//教师页面
void student();//学生页面
int read_score(SCORE score[]);//读学生成绩信息
void save_score(SCORE score[], int n);//存储学生成绩信息
void increase();//老师向score.txt中添加学生成绩信息
void total();//查询所有学生成绩信息并排序
void find_score();//通过学号或姓名查询学生成绩信息和平均分,总分
int delete();//删除
void sort();//按学号排序     
int xiuscore();//修改学生成绩信息
void total1();//输出学生成绩信息
void user1();//输出用户信息

二、主要函数部分

1.主函数

代码如下:

#include"head.h"
int main()
{
	menu();
	logic();
	zhuce();
	return 0;
}

主函数写的比较简单,因为每个板块之间的调用写在各个模块中了,大家看的时候仔细一点,以免读错。

2.注册模块

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
void zhuce()
{
	USER user[N];
	int i = 0, ch1, ch2;
	do
	{
		printf("请输入账号:\n");
		fflush(stdin);
		scanf("%s",&user[i].ID);
		printf("请输入密码:\n");
		scanf("%s", &user[i].password);
		printf("请输入名字:\n");
		scanf("%s", &user[i].name);
		printf("请选择用户类型:\n教师:0\n学生:1\n");
		scanf("%d", &user[i].flag);
		i++;//保存用户注册信息
		printf("确认注册:0\n取消注册:1\n");
		scanf("%d", &ch1);
		if (ch1 == 0)
		{
			save_user(user, i);
			printf("注册成功\n");
		}
		else
		{
			menu();
		}
		printf("是否继续注册\n继续:0\n返回:1\n");
		scanf("%d", &ch2);
	} while (ch2 ==0);
	menu();//主菜单模块在下面
}

3.主菜单模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
void menu()
{
	int choice;
	printf("-----欢迎来到学生成绩管理系统-----\n请选择登录或者注册?\n1->注册:0\n2->登录:1\n3->退出:2");
	scanf("%d", &choice);
	if (choice == 0)
		zhuce();
	else if (choice == 1)
		logic();
	else if (choice == 2)
		exit(0);
	else
		printf("选择错误");
	exit(0);
} 

4.登录模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
void logic()
{
	char ID[20];//账号
	char password[20];//密码
	USER user[N];
	int i, n, count = 0, result = 0;
	n = read_user(user);
	do 
	{
		printf("请输入学号:\n");
		fflush(stdin);
		scanf("%s", &ID);//获得账号
		printf("请输入密码:\n");
		scanf("%s", &password);//获得密码
		count++;
		for (i = 0 ; i < n; i++)
		{
			if (strcmp(user[i].ID, ID) == 0 && strcmp(user[i].password, password) == 0 && count < 3)
			{
				printf("登陆成功\n");
				result = 1;
				if (user[i].flag == 0)
					teacher();
				else
					student();
				break;
			}
		}
		if (i >= n && count < 3)
		{
			printf("输入错误,还有%d次机会\n",3 - count);
		}
		else if (count >= 3)
		{
			printf("错误次数过多,没有机会了\n");
			exit(0);
		}
	} while (result == 0 && count < 3);
}

登录共有三次机会,在三次机会以内输入正确即可登录,否则退出。

5.储存用户注册信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
void save_user(USER user[], int n)
{
	FILE* fp = fopen("user.txt", "a+");//将用户的信息储存在user.text文件中
	int i;
	if (fp == NULL)
	{
		printf("文件创建失败\n");
		exit(0);
	}
	for (i = 0; i < n; i++)
	{
		fprintf(fp, "%s  %s  %s  %d\n", user[i].ID, user[i].password,user[i].name,user[i].flag);//储存信息包括账号,密码,姓名和用户类型,学生是1,老师是0
	}
	fclose(fp);
}

6.读取用户注册信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
int read_user(USER user[])
{
	int i;
	FILE* fp = fopen("user.txt", "a+");
	if (fp == NULL)
	{
		printf("文件打开失败\n");
		exit(0);
	}
	for (i = 0; !feof(fp); i++)
	{
		fscanf(fp, "%s  %s  %s  %d", user[i].ID, user[i].password, user[i].name,&user[i].flag);
	}
	fclose(fp);
	return i - 1;
}

7.老师菜单模块

void teacher()
{
	int ch;
	printf("---欢迎老师---\n");
	printf("修改密码:1\n");
	printf("查询班级所有学生成绩:2\n");
	printf("查询班级指定学生成绩:3\n");
	printf("修改学生成绩:4\n");
	printf("删除学生成绩:5\n");
	printf("增加学生成绩信息:6\n");
	printf("退出:0\n");
	scanf("%d", &ch);
	if (ch == 1)
	{
		xiuPw();
	}//修改密码
	else if(ch == 2)
	{
		total();
	}//查看所有学生成绩
	else if(ch == 3)
	{
		find_score();
	}//查看指定学生成绩
	else if (ch == 4)
	{
		xiuscore();
	}//修改学生成绩
	else if (ch == 5)
	{
		delete();
	}//删除学生成绩
	else if (ch == 6)
	{
		increase();
	}//增加学生成绩
	else if (ch == 0)
	{
		exit(0);
	}//退出
}

8.学生菜单模块

void student()
{
	int ch;
	printf("---欢迎同学---\n");
	printf("修改密码:1\n");
	printf("查询班级所有学生成绩:2\n");
	printf("查询班级指定学生成绩:3\n");
	printf("退出:0\n");
	scanf("%d", &ch);
		if (ch == 1)
		{
			xiuPw();
		}//修改密码
		else if (ch == 2)
		{
			total();
		}//查询所有学生成绩
		else if (ch == 3)
		{
			find_score();
		}//查询指定学生成绩
		else if (ch == 0)
		{
			exit(0);
		}//退出
}

9.修改密码模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
int xiuPw()
{
	int n;
	USER user[N];
	n = read_user(user);
	char password[20];
	char password1[20];
	int  i, j, q = n;
	FILE* fp;
	char temp[20], temp1[20];
	int ftemp, ftemp1, ftemp2;
	fp = fopen("user1.txt", "wb+");
	printf("修改前为:\n");
	user1();
	printf("请输入要修改的密码:\n");
	scanf("%s", &password);
	for (i = 0; i < n; i++)
	{
		if (strcmp(user[i].password, password) == 0)
		{
			printf("请输入新密码:\n");
			scanf("%s", &password1);
			user[i].ID;
			strcpy(user[i].password, password1);
			user[i].name;
			user[i].flag;
		}
	}
	printf("修改后结果为:\n");
	for (i = 0; i < n; i++)
	{
		printf("%s  %s  %s  %d\n", user[i].ID, user[i].password, user[i].name, user[i].flag);
	}
	for (i = 0; i < n; i++)
	{
		fprintf(fp, "%s  %s  %s  %d\n", user[i].ID, user[i].password, user[i].name, user[i].flag);
	}
	n = q;
	fclose(fp);
	FILE* ft;
	ft = fopen("score.txt", "rb+");
	for (i = 0; !feof(fp); i++)
	{
		fscanf(ft, "%s  %s  %s  %d", user[i].ID, user[i].password, user[i].name, &user[i].flag);
	}
	fclose(ft);
	remove("user.txt");
	rename("user1.txt", "user.txt");
	printf("修改成功\n");
	int ch;
	printf("返回菜单:0\n退出:1\n");
	scanf("%d", &ch);
	if (ch == 0)
	{
		menu();
	}
	else if (ch == 1)
	{
		exit(0);
	}
	return 0;
}

10.打印用户信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
void user1()
{
	int n;
	USER user[N];
	n = read_user(user);
	FILE* fp = fopen("user.txt", "r");
	int i = 0;
	getchar();
	if (fp == NULL)
	{
		printf("打开文件失败\n");
		exit(0);
	}
	for (i = 0; !feof(fp); i++)
	{
		fscanf(fp, "%s  %s  %s  %d", user[i].ID, user[i].password, user[i].name, &user[i].flag);
	}
	for (i = 0; i < n; i++)
	{
		printf("%s  %s  %s  %d\n", user[i].ID, user[i].password, user[i].name, user[i].flag);
	}
	fclose(fp);
}

该模块主要应用在修改密码模块,为修改密码提供账号,密码,姓名,用户类型等信息。

11.查询所有学生成绩信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
void total()
{
	int n;
	SCORE score[N];
	n = read_score(score);
	FILE* fp = fopen("score.txt", "r");
	int i=0;
	getchar();
	if (fp == NULL)
	{
		printf("打开文件失败\n");
		exit(0);
	}
	for (i = 0; !feof(fp); i++)
	{
		fscanf(fp, "%s  %s  %d  %d  %d",
			score[i].studentID, score[i].name, &score[i].chinese,
			&score[i].math, &score[i].english);
	}
	for (i = 0; i <n; i++)
	{
		printf("学号:%s  姓名:%s  语文:%d  数学:%d  英语:%d\n",
			score[i].studentID, score[i].name, score[i].chinese,
			score[i].math, score[i].english);
	}
	sort();//按照语文成绩的大小进行倒序排序
	fclose(fp);
	int ch;
	printf("返回菜单:0\n退出:1\n");
	scanf("%d", &ch);
	if (ch == 0)
	{
		teacher();
	}
	else if (ch == 1)
	{
		exit(0);
	}
}

12.按照语文成绩对学生成绩信息进行排序模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
void sort()//按成绩排序
{
    int n;
    SCORE score[N];
    n = read_score(score);
    int i, j, s, k;
    char temp[20];
    int ftemp, ftemp1, ftemp2;
    for (i = 0; i < n - 1; i++)
    {
        for (j = n - 1; j > i; j--)
            if (score[j - 1].chinese > score[j].chinese)//如果不想按照语文成绩排序,可以改为学号或其他
            {
                strcpy(temp, score[j - 1].studentID);
                strcpy(score[j - 1].studentID, score[j].studentID);
                strcpy(score[j].studentID, temp);
                strcpy(temp, score[j - 1].name);
                strcpy(score[j - 1].name, score[j].name);
                strcpy(score[j].name, temp);
                ftemp = score[j - 1].chinese;
                score[j - 1].chinese = score[j].chinese;
                score[j].chinese = ftemp;
                ftemp1 = score[j - 1].math;
                score[j - 1].math = score[j].math;
                score[j].math = ftemp1;
                ftemp2 = score[j - 1].english;
                score[j - 1].english = score[j].english;
                score[j].english = ftemp2;
            }
    }
    printf("---------按语文成绩升序排序---------\n");
    for (i = 0; i < n; i++)
    {
        printf("学号:%s  姓名:%s  语文:%d  数学:%d  英语:%d\n",
            score[i].studentID, score[i].name, score[i].chinese,
            score[i].math, score[i].english);
    }
}

13.查询指定学生成绩信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
void find_score()
{
	char studentID[20];//学号
	char name[20];//姓名
	SCORE score[N];
	int i, n, choice, result = 0;
	n = read_score(score);
	do
	{
		printf("按学号查询:0\t,按姓名查询:1\t");
		fflush(stdin);
		scanf("%d", &choice);
		if (choice == 0)
		{
			printf("请输入学号:");
			fflush(stdin);
			scanf("%s", &studentID);//获得账号
			for (i = 0; i < n; i++)
			{
				if (strcmp(score[i].studentID, studentID) == 0)
				{
					int total = score[i].math + score[i].chinese + score[i].english;
					float aver = total / 3;
					printf("学号\t姓名\t语文\t数学\t英语\t平均分\t总分\n");
					printf("%s\t %s\t %d\t %d\t %d\t%0.2f\t %d\n",
						score[i].studentID, score[i].name, score[i].chinese,
						score[i].math, score[i].english, aver, total);
					result = 1;
					int ch;
					printf("返回菜单:0\n退出:1\n");
					scanf("%d", &ch);
					if (ch == 0)
					{
						teacher();
					}
					else if (ch == 1)
					{
						exit(0);
					}
				}
			}
			if (i > n);
			{
				printf("学号输入错误\n");
				int ch;
				printf("返回菜单:0\n退出:1\n");
				scanf("%d", &ch);
				if (ch == 0)
				{
					teacher();
				}
				else if (ch == 1)
				{
					exit(0);
				}
			}
		}
		if (choice == 1)
		{
			printf("请输入姓名:");
			fflush(stdin);
			scanf("%s",&name);//获得姓名
			for (i = 0; i < n; i++)
			{
				if (strcmp(score[i].name, name) == 0)
				{
					int total = score[i].math + score[i].chinese + score[i].english;
					float aver = total / 3;
					printf("学号\t姓名\t语文\t数学\t英语\t平均分\t总分\n");
					printf("%s\t %s\t %d\t %d\t %d\t %0.2f\t %d\n",
						score[i].studentID, score[i].name, score[i].chinese,
						score[i].math, score[i].english, aver, total);
					result = 1;
					int ch;
					printf("返回菜单:0\n退出:1\n");
					scanf("%d", &ch);
					if (ch == 0)
					{
						teacher();
					}
					else if (ch == 1)
					{
						exit(0);
					}
				}
			}
			if (i > n);
			{
				printf("姓名输入错误\n");
				int ch;
				printf("返回菜单:0\n退出:1\n");
				scanf("%d", &ch);
				if (ch == 0)
				{
					teacher();
				}
				else if (ch == 1)
				{
					exit(0);
				}
			}
		}
	} while (result == 0);
}

本模块的查询方式有学号和姓名两种。

14.修改学生成绩信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
int xiuscore()
{
	int n;
	SCORE score[N];
	n = read_score(score);
	char studentID[20];
	char studentID1[20];
	char name1[20];
	int chinese1, math1, english1;
	int  i, j, q = n;
	FILE* fp;
	char temp[20], temp1[20];
	int ftemp, ftemp1, ftemp2;
	fp = fopen("score1.txt", "wb+");
	for (i = 0; i < n - 1; i++)
	{
		for (j = n - 1; j > i; j--)
			if (strcmp(score[j - 1].studentID, score[j].studentID) > 0)
			{
				strcpy(temp, score[j - 1].studentID);
				strcpy(score[j - 1].studentID, score[j].studentID);
				strcpy(score[j].studentID, temp);
				strcpy(temp, score[j - 1].name);
				strcpy(score[j - 1].name, score[j].name);
				strcpy(score[j].name, temp);
				ftemp = score[j - 1].chinese;
				score[j - 1].chinese = score[j].chinese;
				score[j].chinese = ftemp;
				ftemp1 = score[j - 1].math;
				score[j - 1].math = score[j].math;
				score[j].math = ftemp1;
				ftemp2 = score[j - 1].english;
				score[j - 1].english = score[j].english;
				score[j].english = ftemp2;
			}
	}
	printf("修改前为:\n");
	total1();//该模块为打印学生成绩模块,在修改信息前打印一次所有学生成绩信息,为修改和删除提供学号,姓名信息
	printf("请输入要修改的学号:");
	scanf("%s", &studentID);
	for (i = 0; i < n; i++)
	{
		if (strcmp(score[i].studentID, studentID) == 0)
		{
			printf("请输入新的学号:");
			scanf("%s", &studentID1);
			printf("请输入新的新的姓名:");
			scanf("%s", &name1);
			printf("请输入新的语文成绩:");
			scanf("%d", &chinese1);
			printf("请输入新的数学成绩:");
			scanf("%d", &math1);
			printf("请输入新的英语成绩:");
			scanf("%d", &english1);
			strcpy(score[i].studentID, studentID1);
			strcpy(score[i].name, name1);
			score[i].chinese = chinese1;
			score[i].math = math1;
			score[i].english = english1;
		}
	    
	}
	printf("修改后为:\n");
	for (i = 0; i < n; i++)
	{
		printf("学号:%s  姓名:%s  语文:%d  数学:%d  英语:%d\n",
			score[i].studentID, score[i].name, score[i].chinese,
			score[i].math, score[i].english);
	}
	for (i = 0; i < n; i++)
	{
		fprintf(fp, "%s\t %s\t %d\t %d\t %d\n",
			score[i].studentID, score[i].name, score[i].chinese,
			score[i].math, score[i].english);
	}
	n = q;
	fclose(fp);
	FILE* ft;
	ft = fopen("score.txt", "rb+");
	for (i = 0; i < n; i++)
	{
		fscanf(ft, "%s\t %s\t %d\t %d\t %d\n",
			score[i].studentID, score[i].name, &score[i].chinese,
			&score[i].math, &score[i].english);
	}
	fclose(ft);
	remove("score.txt");
	rename("score1.txt", "score.txt");
	int ch;
	printf("返回菜单:0\n退出:1\n");
	scanf("%d", &ch);
	if (ch == 0)
	{
		teacher();
	}
	else if (ch == 1)
	{
		exit(0);
	}
	return 0;
}

15.打印学生成绩信息模块(total1())

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
void total1()
{
	int n;
	SCORE score[N];
	n = read_score(score);
	FILE* fp = fopen("score.txt", "r");
	int i = 0;
	getchar();
	if (fp == NULL)
	{
		printf("打开文件失败\n");
		exit(0);
	}
	for (i = 0; !feof(fp); i++)
	{
		fscanf(fp, "%s  %s  %d  %d  %d",
			score[i].studentID, score[i].name, &score[i].chinese,
			&score[i].math, &score[i].english);
	}
	for (i = 0; i < n; i++)
	{
		printf("学号:%s  姓名:%s  语文:%d  数学:%d  英语:%d\n",
			score[i].studentID, score[i].name, score[i].chinese,
			score[i].math, score[i].english);
	}
	fclose(fp);
}

16.删除学生成绩信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
int delete()
{
	int n;
	SCORE score[N];
	n = read_score(score);
	char studentID[20];
	int  i, j, q = n;
	FILE* fp;
	char temp[20],temp1[20];
	int ftemp, ftemp1, ftemp2;
	fp = fopen("score1.txt", "wb+");
	printf("删除前为:\n");
	total1();
	printf("请输入要删除的学号:");
	scanf("%s", &studentID);
	for (i = 0; i < n; i++)
	{
		if (strcmp(score[i].studentID,studentID) == 0)
		{
			for (i = i; i < n - 1; i++)
			{
				strcpy(score[i].studentID, score[i + 1].studentID);
				strcpy(score[i].name, score[i + 1].name);
				score[i].chinese = score[i + 1].chinese;
				score[i].math = score[i + 1].math;
				score[i].english = score[i + 1].english;
			}
		}
	}
	n = n - 1;
	printf("删除后为:\n");
	for (i = 0; i < n; i++)
	{
		printf("学号:%s  姓名:%s  语文:%d  数学:%d  英语:%d\n",
			score[i].studentID, score[i].name, score[i].chinese,
			score[i].math, score[i].english);
	}
	for (i = 0; i <n; i++)
	{
		fprintf(fp, "%s\t %s\t %d\t %d\t %d\n",
			score[i].studentID, score[i].name, score[i].chinese,
			score[i].math, score[i].english);
	}
	n = q;
	fclose(fp);
	FILE* ft;
	ft = fopen("score.txt", "rb+");
	for (i = 0; i < n; i++)
	{
		fscanf(ft, "%s\t %s\t %d\t %d\t %d\n",
			score[i].studentID, score[i].name, &score[i].chinese,
			&score[i].math, &score[i].english);
	}
	fclose(ft);
	remove("score.txt");
	rename("score1.txt", "score.txt");
	int ch;
	printf("返回菜单:0\n退出:1\n");
	scanf("%d", &ch);
	if (ch == 0)
	{
		teacher();
	}
	else if (ch == 1)
	{
		exit(0);
	}
	return 0;
}

17.添加学生成绩信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
#define N 100
void increase()
{
	SCORE score[N];
	int i = 0, ch1,ch2;
	printf("添加前为:\n");
	total1();
	do {
		printf("请输入学号:\n");
		fflush(stdin);
		scanf("%s", &score[i].studentID);
		printf("请输入姓名:\n");
		scanf("%s", &score[i].name);
		printf("请输入语文成绩:\n");
		scanf("%d", &score[i].chinese);
		printf("请输入数学成绩:\n");
		scanf("%d", &score[i].math);
		printf("请输入英语成绩:\n");
		scanf("%d", &score[i].english);
		i++;
		printf("确认输入:0\n取消输入:1\n");
		scanf("%d", &ch1);
		if (ch1 == 0)
		{
			save_score(score, i);
			printf("输入成功\n");
		}
		printf("添加后为:\n");
		total1();
		printf("是否继续输入:\n继续:0\n返回:1\n");
		scanf("%d",&ch2);
	} while (ch2 == 0);
}

18.储存学生成绩信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
void save_score(SCORE score[],int n)
{
	FILE* fp = fopen("score.txt", "a+");//通过添加学生成绩信息方式添加到score.txt文件中
	int i;
	if (fp == NULL)
	{
		printf("文件创建失败\n");
		exit(0);
	}
	for (i = 0; i < n; i++)
	{
		fprintf(fp, "%s\t %s\t %d\t %d\t %d\n",
			score[i].studentID, score[i].name, score[i].chinese,
			score[i].math, score[i].english);
	}
	fclose(fp);
}

19.读取学生成绩信息模块

#define _CRT_SECURE_NO_WARNINGS
#include"head.h"
int read_score(SCORE score[])
{
	int i;
	FILE* fp = fopen("score.txt", "a+");
	if (fp == NULL)
	{
		printf("文件打开失败\n");
		exit(0);
	}
	for (i = 0; !feof(fp); i++)
	{
		fscanf(fp, "%s\t %s\t %d\t %d\t %d\n",
			score[i].studentID, score[i].name, &score[i].chinese,
			&score[i].math, &score[i].english);
	}
	fclose(fp);
	return i;
}

总结

以上就是学生成绩管理系统的所有代码模块,每个模块对应一个.c文件,加一个文件名就能用,因为没有用链表,纯用文件方式进行删除与修改,因此系统比较繁琐,仅供参考,希望能帮助到大家。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学生成绩管理系统是C语言实训中常用的项目,可以帮助学生了解C语言的基本语法和数据结构。下面是一个简单的C语言学生成绩管理系统的实现: 1. 学生信息结构体定义 ``` struct student { char name[20]; // 学生姓名 int id; // 学生学号 float score; // 学生成绩 }; ``` 2. 添加学生信息函数 ``` void add_student(struct student s[], int *count) { printf("请输入学生姓名:"); scanf("%s", s[*count].name); printf("请输入学生学号:"); scanf("%d", &s[*count].id); printf("请输入学生成绩:"); scanf("%f", &s[*count].score); (*count)++; printf("添加成功!\n"); } ``` 3. 查询学生信息函数 ``` void query_student(struct student s[], int count) { int id; printf("请输入要查询的学生学号:"); scanf("%d", &id); int i; for (i = 0; i < count; i++) { if (s[i].id == id) { printf("姓名:%s,学号:%d,成绩:%f\n", s[i].name, s[i].id, s[i].score); return; } } printf("未找到该学生!\n"); } ``` 4. 删除学生信息函数 ``` void delete_student(struct student s[], int *count) { int id; printf("请输入要删除的学生学号:"); scanf("%d", &id); int i; for (i = 0; i < *count; i++) { if (s[i].id == id) { (*count)--; for (; i < *count; i++) { s[i] = s[i+1]; } printf("删除成功!\n"); return; } } printf("未找到该学生!\n"); } ``` 5. 修改学生信息函数 ``` void modify_student(struct student s[], int count) { int id; printf("请输入要修改的学生学号:"); scanf("%d", &id); int i; for (i = 0; i < count; i++) { if (s[i].id == id) { printf("请输入新的学生姓名:"); scanf("%s", s[i].name); printf("请输入新的学生学号:"); scanf("%d", &s[i].id); printf("请输入新的学生成绩:"); scanf("%f", &s[i].score); printf("修改成功!\n"); return; } } printf("未找到该学生!\n"); } ``` 6. 显示所有学生信息函数 ``` void show_all_students(struct student s[], int count) { int i; for (i = 0; i < count; i++) { printf("姓名:%s,学号:%d,成绩:%f\n", s[i].name, s[i].id, s[i].score); } } ``` 7. 主函数 ``` int main() { struct student students[100]; int count = 0; int choice; while (1) { printf("1.添加学生信息\n2.查询学生信息\n3.删除学生信息\n4.修改学生信息\n5.显示所有学生信息\n6.退出\n"); printf("请选择操作:"); scanf("%d", &choice); switch (choice) { case 1: add_student(students, &count); break; case 2: query_student(students, count); break; case 3: delete_student(students, &count); break; case 4: modify_student(students, count); break; case 5: show_all_students(students, count); break; case 6: printf("谢谢使用!\n"); return 0; default: printf("无效操作!\n"); break; } } return 0; } ``` 以上是一个简单的C语言学生成绩管理系统的实现,可以根据需要进行修改和完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值