应用《C语言程序设计》和《数据结构》课程的内容,编写一个完整的学生成绩管理系统程序,实现以下题目的要求: 1.学生信息包括学号、姓名、3 门考试成绩 2.学生成绩录入功能(成绩信息用文件保存) 3.统计所有学生的总分及平均分 4.统计所有课程的平均分 5.按平均分进行排序 6.输入一个学生学号输出其各科成绩及平均成绩 7.修改、删除学生信息

时间: 2024-02-11 08:08:51 浏览: 26
好的,这是一个比较复杂的程序,需要涉及到文件的读写、数据结构的使用等内容。下面是一个简单的示例程序,可以供您参考: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LEN 20 #define MAX_STUDENTS 100 typedef struct { int id; char name[MAX_NAME_LEN]; int scores[3]; float total_score; float avg_score; } Student; int read_students(Student students[]) { FILE *fp; int i = 0; char filename[] = "students.dat"; fp = fopen(filename, "rb"); if (fp == NULL) { printf("Cannot open file %s\n", filename); return 0; } while (fread(&students[i], sizeof(Student), 1, fp) == 1) { i++; } fclose(fp); return i; } void write_students(Student students[], int num_students) { FILE *fp; char filename[] = "students.dat"; fp = fopen(filename, "wb"); if (fp == NULL) { printf("Cannot open file %s\n", filename); return; } fwrite(students, sizeof(Student), num_students, fp); fclose(fp); } void add_student(Student students[], int *num_students) { if (*num_students >= MAX_STUDENTS) { printf("Cannot add more students\n"); return; } printf("Enter student ID: "); scanf("%d", &students[*num_students].id); printf("Enter student name: "); scanf("%s", students[*num_students].name); printf("Enter scores for three exams:\n"); scanf("%d %d %d", &students[*num_students].scores[0], &students[*num_students].scores[1], &students[*num_students].scores[2]); students[*num_students].total_score = students[*num_students].scores[0] + students[*num_students].scores[1] + students[*num_students].scores[2]; students[*num_students].avg_score = students[*num_students].total_score / 3.0; (*num_students)++; write_students(students, *num_students); } void print_student(Student student) { printf("%d\t%s\t%d\t%d\t%d\t%.2f\t%.2f\n", student.id, student.name, student.scores[0], student.scores[1], student.scores[2], student.total_score, student.avg_score); } void print_all_students(Student students[], int num_students) { int i; printf("ID\tName\tExam 1\tExam 2\tExam 3\tTotal\tAverage\n"); for (i = 0; i < num_students; i++) { print_student(students[i]); } } void compute_scores(Student students[], int num_students) { int i, j; float exam_totals[3] = {0.0}; float class_total = 0.0; for (i = 0; i < num_students; i++) { class_total += students[i].total_score; for (j = 0; j < 3; j++) { exam_totals[j] += students[i].scores[j]; } } printf("Class average:\n"); for (j = 0; j < 3; j++) { printf("Exam %d: %.2f\n", j+1, exam_totals[j] / num_students); } printf("Total: %.2f\n", class_total / num_students); } void sort_by_average(Student students[], int num_students) { int i, j; Student temp; for (i = 0; i < num_students-1; i++) { for (j = i+1; j < num_students; j++) { if (students[i].avg_score < students[j].avg_score) { temp = students[i]; students[i] = students[j]; students[j] = temp; } } } } void find_student(Student students[], int num_students) { int id, i; printf("Enter student ID: "); scanf("%d", &id); for (i = 0; i < num_students; i++) { if (students[i].id == id) { printf("ID\tName\tExam 1\tExam 2\tExam 3\tTotal\tAverage\n"); print_student(students[i]); return; } } printf("No student with ID %d found\n", id); } void modify_student(Student students[], int num_students) { int id, i; printf("Enter student ID: "); scanf("%d", &id); for (i = 0; i < num_students; i++) { if (students[i].id == id) { printf("Enter new scores for three exams:\n"); scanf("%d %d %d", &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]); students[i].total_score = students[i].scores[0] + students[i].scores[1] + students[i].scores[2]; students[i].avg_score = students[i].total_score / 3.0; write_students(students, num_students); printf("Student %d updated\n", id); return; } } printf("No student with ID %d found\n", id); } void delete_student(Student students[], int *num_students) { int id, i, j; printf("Enter student ID: "); scanf("%d", &id); for (i = 0; i < *num_students; i++) { if (students[i].id == id) { for (j = i; j < *num_students-1; j++) { students[j] = students[j+1]; } (*num_students)--; write_students(students, *num_students); printf("Student %d deleted\n", id); return; } } printf("No student with ID %d found\n", id); } int main() { Student students[MAX_STUDENTS]; int num_students = 0; int choice; num_students = read_students(students); while (1) { printf("Choose an option:\n"); printf("1. Add a student\n"); printf("2. Print all students\n"); printf("3. Compute scores\n"); printf("4. Sort by average\n"); printf("5. Find a student\n"); printf("6. Modify a student\n"); printf("7. Delete a student\n"); printf("8. Exit\n"); scanf("%d", &choice); switch (choice) { case 1: add_student(students, &num_students); break; case 2: print_all_students(students, num_students); break; case 3: compute_scores(students, num_students); break; case 4: sort_by_average(students, num_students); print_all_students(students, num_students); break; case 5: find_student(students, num_students); break; case 6: modify_student(students, num_students); break; case 7: delete_student(students, &num_students); break; case 8: write_students(students, num_students); exit(0); default: printf("Invalid choice\n"); break; } } return 0; } ``` 这段代码实现了一个简单的学生成绩管理系统,包含了添加学生、打印所有学生、统计所有学生的总分及平均分、按平均分进行排序、输入一个学生学号输出其各科成绩及平均成绩、修改、删除学生信息等功能。代码中使用了结构体来存储学生信息,使用了文件来保存数据,并且使用了一些简单的数据结构和算法来实现排序等功能。

相关推荐

c语言设计课程设计内容 学生信息管理系统设计 (1)问题描述 学生信息包括:学号、姓名、性别、宿舍号码、电话号码、成绩等。试设计一个学生信息管理系统,使之能提供以下功能: ² 系统以菜单方式工作 ² 学生信息录入功能(学生信息用文本文件保存)---输入 ² 学生信息浏览功能——输出 ² 查询功能——算法 1、按学号查询 2、按姓名查询 ² 排序功能 1、按分数升序排序 2、按分数降序排序 (2)功能要求 ² 界面简单明了; ² 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入; (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式,在这里假如我们以数组的方式来存储,首先必须知道学生人数大概是多少,以便我们确定数组的大小。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 (4)保存在文件中的内容可以参考下面的形式 学号 姓名 性别 宿舍号码 电话号码 成绩 01 张成成 男 501 87732111 90 02 李成华 女 101 87723112 78 03 王成凤 女 101 87723112 85 04 张明明 男 502 87734333 60 05 陈东 男 501 87732111 96 06 李果 男 502 87734333 66 07 张园园 女 102 87756122 80 … … … … … …

rar

最新推荐

recommend-type

C语言程序设计实现学生成绩记录簿

通过编写c语言《学生成绩记录簿系统...3)C语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,分析、设计、编写、调试和测试C语言程序及编写设计报告。
recommend-type

学生成绩管理系统(数据结构)实验报告.docx

期末实践周必备(数据结构)学生成绩管理系统,基于C语言完成的,百分百作者原创,资源保证!
recommend-type

C语言程序设计实现区号查询系统C语言程序设计实现

用C语言编程的区号查询系统,要求实现区号查询系统中,添加新记录、删除记录、显示记录信息、按城市查找信息和退出系统等功能。 ①录入有关城市的名称和区号。 ②显示所有城市的信息。 ③通过输入城市名称查找对应...
recommend-type

C语言程序设计实现门禁控制系统

系统将ID卡技术、计算机控制技术与电子门锁有机结合,用ID卡替代钥匙,配合计算机实现智能化门禁控制和管理,有效的解决了传统门锁的使用繁琐和无法信息记录等不足,利用数据控制器采集的数据实现数字化管理可为内部...
recommend-type

C语言实现班档案管理系统课程设计

主要为大家详细介绍了C语言实现班档案管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解答下列问题:S—>S;T|T;T—>a 构造任意项目集规范族,构造LR(0)分析表,并分析a;a

对于这个文法,我们可以构造以下项目集规范族: I0: S -> .S S -> .T T -> .a I1: S -> S. [$ T -> T. [$ I2: S -> T. I3: S -> S.;S S -> S.;T T -> T.;a 其中,点(.)表示已经被扫描过的符号,;$表示输入串的结束符号。 根据项目集规范族,我们可以构造出LR(0)分析表: 状态 | a | $ ---- | - | - I0 | s3| I1 | |acc I2 | | 其中s3表示移进到状态3,acc表示接受。在分析字符串a;a时,我们可以按照以下步骤进行
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。