用C语言写一个学生管理系统1.输入、修改和显示n个学生的m门考诚科目的成绩,并计算总和和平均分 2.分别按总分和学号进行排序。 3.输入学生的学号,显示该学生的姓名、各门课程的成绩 4.将输入的学生成绩数据保存到文件中。 5.从文件中读出学生成绩数据, 查询学生成绩 6.程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错 误)或无效时,不会中断程序的执行,程序具有一定的健壮性 写出源码
时间: 2024-03-03 19:51:51 浏览: 52
今天给大家分享一个C语言环境下开发的学生成绩管理系统 这个系统原理很简单:成绩的录入,输出,修改,排序,删除等等
好的,下面是一个简单的学生管理系统的源码,实现了以上所述的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
#define MAX_COURSE_NUM 5
struct student {
int id;
char name[20];
float score[MAX_COURSE_NUM];
float total_score;
float avg_score;
};
int n = 0; // 学生数量
struct student students[MAX_STUDENT_NUM]; // 学生数组
// 比较函数,按总分排序
int cmp_total_score(const void *a, const void *b)
{
float x = (*(struct student *)a).total_score;
float y = (*(struct student *)b).total_score;
return (x > y) ? -1 : ((x < y) ? 1 : 0);
}
// 比较函数,按学号排序
int cmp_id(const void *a, const void *b)
{
int x = (*(struct student *)a).id;
int y = (*(struct student *)b).id;
return (x > y) ? 1 : ((x < y) ? -1 : 0);
}
// 输入学生信息
void input_student_info(int index)
{
printf("请输入第%d个学生的信息:\n", index+1);
printf("学号:");
scanf("%d", &students[index].id);
printf("姓名:");
scanf("%s", students[index].name);
for (int i=0; i<MAX_COURSE_NUM; i++) {
printf("第%d门课程成绩:", i+1);
scanf("%f", &students[index].score[i]);
students[index].total_score += students[index].score[i];
}
students[index].avg_score = students[index].total_score / MAX_COURSE_NUM;
}
// 输入学生信息并添加到数组中
void add_student()
{
if (n >= MAX_STUDENT_NUM) {
printf("学生数量已达到上限,无法添加新学生!\n");
return;
}
input_student_info(n);
n++;
printf("添加成功!\n");
}
// 修改学生信息
void modify_student()
{
int id;
printf("请输入要修改的学生的学号:");
scanf("%d", &id);
for (int i=0; i<n; i++) {
if (students[i].id == id) {
input_student_info(i);
printf("修改成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
// 显示所有学生信息
void display_students()
{
printf("学号\t姓名\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
for (int i=0; i<n; i++) {
printf("%d\t%s\t", students[i].id, students[i].name);
for (int j=0; j<MAX_COURSE_NUM; j++) {
printf("%.2f\t", students[i].score[j]);
}
printf("%.2f\t%.2f\n", students[i].total_score, students[i].avg_score);
}
}
// 按总分排序并显示所有学生信息
void sort_by_total_score()
{
qsort(students, n, sizeof(struct student), cmp_total_score);
printf("按总分排序后的学生信息:\n");
display_students();
}
// 按学号排序并显示所有学生信息
void sort_by_id()
{
qsort(students, n, sizeof(struct student), cmp_id);
printf("按学号排序后的学生信息:\n");
display_students();
}
// 根据学号查询学生信息
void search_student()
{
int id;
printf("请输入要查询的学生的学号:");
scanf("%d", &id);
for (int i=0; i<n; i++) {
if (students[i].id == id) {
printf("学号:%d,姓名:%s,课程成绩:", students[i].id, students[i].name);
for (int j=0; j<MAX_COURSE_NUM; j++) {
printf("%.2f\t", students[i].score[j]);
}
printf("总分:%.2f,平均分:%.2f\n", students[i].total_score, students[i].avg_score);
return;
}
}
printf("未找到该学生!\n");
}
// 将学生信息保存到文件
void save_to_file()
{
char filename[50];
printf("请输入保存文件的文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fwrite(&n, sizeof(int), 1, fp);
fwrite(students, sizeof(struct student), n, fp);
fclose(fp);
printf("保存成功!\n");
}
// 从文件中读取学生信息
void read_from_file()
{
char filename[50];
printf("请输入读取文件的文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fread(&n, sizeof(int), 1, fp);
fread(students, sizeof(struct student), n, fp);
fclose(fp);
printf("读取成功!\n");
}
// 主函数
int main()
{
int choice;
while (1) {
printf("\n**********学生管理系统**********\n");
printf("1. 添加学生信息\n");
printf("2. 修改学生信息\n");
printf("3. 显示所有学生信息\n");
printf("4. 按总分排序并显示所有学生信息\n");
printf("5. 按学号排序并显示所有学生信息\n");
printf("6. 查询学生信息\n");
printf("7. 将学生信息保存到文件\n");
printf("8. 从文件中读取学生信息\n");
printf("0. 退出程序\n");
printf("请输入要执行的操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
modify_student();
break;
case 3:
display_students();
break;
case 4:
sort_by_total_score();
break;
case 5:
sort_by_id();
break;
case 6:
search_student();
break;
case 7:
save_to_file();
break;
case 8:
read_from_file();
break;
case 0:
printf("程序已退出!\n");
return 0;
default:
printf("输入的操作无效,请重新输入!\n");
}
}
return 0;
}
```
这个学生管理系统比较简单,还有很多地方可以优化和改进,例如添加异常处理、输入密码保护等功能。希望这个源码可以对你有所帮助。
阅读全文