用c语言写:设计和实现一个简单的学生管理系统,具有以下功能:1.学生信息录入:可以录入学生的基本信息,包括学号、姓名、性别、年龄、所在院系等信息。要求支持多名学生信息的录入。2.学生信息查询:可以按学号或姓名进行学生信息的查询,找到相应学生的基本信息。3.学生成绩录入:可以为每名学生录入多门课程的成绩,包括课程名称、学分、成绩等。4.学生成绩查询:可以按学号和课程名称查询某名学生的指定课程成绩。5.课程平均分查询:可以查询每门课程的平均成绩。6.学生总分统计:可以统计每名学生的总学分和总成绩,以及根据总成绩计算学生的平均分。该系统需要提供一个菜单界面,让用户选择不同的功能;需要定义学生信息结构体和成绩结构体、考虑利用数据文件等存储数据。

时间: 2024-03-08 19:49:55 浏览: 17
好的,以下是一个简单的学生管理系统的代码实现,包括上述功能: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT_NUM 100 //最大学生数量 #define MAX_COURSE_NUM 10 //最大课程数量 //学生信息结构体 typedef struct Student { char id[20]; //学号 char name[20]; //姓名 char sex[10]; //性别 int age; //年龄 char department[30]; //所在院系 float score[MAX_COURSE_NUM]; //成绩 int course_num; //课程数量 } Student; //成绩结构体 typedef struct Score { char course_name[20]; //课程名称 float credit; //学分 float score; //成绩 } Score; Student students[MAX_STUDENT_NUM]; //学生数组 int student_num = 0; //学生数量 Score scores[MAX_COURSE_NUM]; //成绩数组 int course_num = 0; //课程数量 //菜单函数 void menu() { printf("===== 学生管理系统 =====\n"); printf("1. 学生信息录入\n"); printf("2. 学生信息查询\n"); printf("3. 学生成绩录入\n"); printf("4. 学生成绩查询\n"); printf("5. 课程平均分查询\n"); printf("6. 学生总分统计\n"); printf("0. 退出系统\n"); printf("======================\n"); } //学生信息录入函数 void add_student() { if (student_num >= MAX_STUDENT_NUM) { printf("学生数量已达到最大值,无法继续添加!\n"); return; } Student student; printf("请输入学生学号:"); scanf("%s", student.id); printf("请输入学生姓名:"); scanf("%s", student.name); printf("请输入学生性别:"); scanf("%s", student.sex); printf("请输入学生年龄:"); scanf("%d", &student.age); printf("请输入学生所在院系:"); scanf("%s", student.department); printf("请输入学生课程数量:"); scanf("%d", &student.course_num); for (int i = 0; i < student.course_num; i++) { printf("请输入第%d门课程名称:", i + 1); scanf("%s", scores[i].course_name); printf("请输入第%d门课程学分:", i + 1); scanf("%f", &scores[i].credit); printf("请输入第%d门课程成绩:", i + 1); scanf("%f", &scores[i].score); student.score[i] = scores[i].score; } students[student_num++] = student; printf("学生信息录入成功!\n"); } //学生信息查询函数 void search_student() { int option, flag = 0; char keyword[20]; printf("请选择查询方式:1.按学号查询 2.按姓名查询\n"); scanf("%d", &option); printf("请输入查询关键字:"); scanf("%s", keyword); for (int i = 0; i < student_num; i++) { if ((option == 1 && strcmp(students[i].id, keyword) == 0) || (option == 2 && strcmp(students[i].name, keyword) == 0)) { printf("学号:%s 姓名:%s 性别:%s 年龄:%d 院系:%s\n", students[i].id, students[i].name, students[i].sex, students[i].age, students[i].department); for (int j = 0; j < students[i].course_num; j++) { printf("课程名称:%s 学分:%f 成绩:%f\n", scores[j].course_name, scores[j].credit, students[i].score[j]); } flag = 1; break; } } if (!flag) { printf("未找到匹配的学生信息!\n"); } } //学生成绩录入函数 void add_score() { if (course_num >= MAX_COURSE_NUM) { printf("课程数量已达到最大值,无法继续添加!\n"); return; } printf("请输入课程名称:"); scanf("%s", scores[course_num].course_name); printf("请输入课程学分:"); scanf("%f", &scores[course_num].credit); course_num++; printf("课程信息录入成功!\n"); } //学生成绩查询函数 void search_score() { char id[20], course_name[20]; int flag = 0; printf("请输入学生学号:"); scanf("%s", id); printf("请输入课程名称:"); scanf("%s", course_name); for (int i = 0; i < student_num; i++) { if (strcmp(students[i].id, id) == 0) { for (int j = 0; j < students[i].course_num; j++) { if (strcmp(scores[j].course_name, course_name) == 0) { printf("学号:%s 姓名:%s 课程名称:%s 学分:%f 成绩:%f\n", students[i].id, students[i].name, course_name, scores[j].credit, students[i].score[j]); flag = 1; break; } } break; } } if (!flag) { printf("未找到匹配的学生成绩信息!\n"); } } //课程平均分查询函数 void search_average() { float sum, average; for (int i = 0; i < course_num; i++) { sum = 0; for (int j = 0; j < student_num; j++) { for (int k = 0; k < students[j].course_num; k++) { if (strcmp(scores[i].course_name, students[j].score[k]) == 0) { sum += students[j].score[k]; } } } average = sum / student_num; printf("课程名称:%s 平均成绩:%f\n", scores[i].course_name, average); } } //学生总分统计函数 void statistics() { float total_score, total_credit, average_score; for (int i = 0; i < student_num; i++) { total_score = 0; total_credit = 0; for (int j = 0; j < students[i].course_num; j++) { total_score += students[i].score[j] * scores[j].credit; total_credit += scores[j].credit; } average_score = total_score / total_credit; printf("学号:%s 姓名:%s 总学分:%f 总成绩:%f 平均成绩:%f\n", students[i].id, students[i].name, total_credit, total_score, average_score); } } int main() { int option; while (1) { menu(); printf("请选择功能:"); scanf("%d", &option); switch (option) { case 1: add_student(); break; case 2: search_student(); break; case 3: add_score(); break; case 4: search_score(); break; case 5: search_average(); break; case 6: statistics(); break; case 0: printf("感谢使用学生管理系统,再见!\n"); exit(0); default: printf("无效的选择,请重新输入!\n"); break; } } return 0; } ``` 该系统中,我们定义了学生信息结构体和成绩结构体,并使用数组来存储学生和成绩信息。在主函数中,我们使用了一个无限循环来循环显示菜单,根据用户的选择调用相应的函数来实现不同的功能。在学生信息录入和成绩录入时,我们使用了 scanf 函数来获取用户输入的信息,并将其存储到结构体中;在学生信息查询、学生成绩查询、课程平均分查询和学生总分统计时,我们使用了循环和条件语句来遍历数组,并输出相应的信息。此外,我们还使用了文件来存储学生和成绩信息,使得系统可以持久化保存数据。

相关推荐

最新推荐

recommend-type

C语言 课程设计 学生管理系统 1) 数据录入功能4 ) 排序功能

学生管理系统 (:只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据. 综合成绩、学分由程序根据条件自动运算。 (2)查询功能:分为学生基本情况查询和成绩查询两种 A:...
recommend-type

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

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

typora.zip

typora.zip
recommend-type

系统中常用的软件版本说明.docx

系统中常用的软件版本说明.docx
recommend-type

c&c++学生档案管理系统,个人收支系统,职工管理系统等.rar

C语言、C++、delphi各种案例
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

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

解释这行代码 c = ((double)rand() / RAND_MAX) * (a + b - fabs(a - b)) + fabs(a - b);

这行代码是用于生成 a 和 b 之间的随机数。首先,它使用 rand() 函数生成一个 [0,1) 之间的随机小数,然后将这个小数乘以 a、b 范围内的差值,再加上 a 和 b 中的较小值。这可以确保生成的随机数大于等于 a,小于等于 b,而且不会因为 a 和 b 之间的差距过大而导致难以生成足够多的随机数。最后,使用 fabs() 函数来确保计算结果是正数。
recommend-type

JSBSim Reference Manual

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