网站虚拟主机购买教程,广州市网站建设制作费用,wordpress文章列表样式,网站优化推广方案#x1f31f; 嗨#xff0c;我是LucianaiB#xff01;
#x1f30d; 总有人间一两风#xff0c;填我十万八千梦。
#x1f680; 路漫漫其修远兮#xff0c;吾将上下而求索。 C语言之小型成绩管理系统
目录
设计题目设计目的设计任务描述设计要求输入和输出要求验收要… 嗨我是LucianaiB 总有人间一两风填我十万八千梦。 路漫漫其修远兮吾将上下而求索。 C语言之小型成绩管理系统
目录
设计题目设计目的设计任务描述设计要求输入和输出要求验收要求进度安排系统分析总体设计详细设计 数据结构设计函数列表及功能简介 程序实现测试数据和运行结果总结与思考参考文献附录代码 设计题目
C语言之小型成绩管理系统
设计目的
加深对C语言基础知识和基本理论的理解培养学生独立分析和解决问题的能力。培养学生在计算机软硬件开发、理论计算、查阅资料等方面的能力树立正确的设计思想。加强理论联系实际培养学生科学严谨、实事求是的工作作风和创新精神。
设计任务描述
设计一个学生信息管理系统能够实现以下功能
添加学生信息录入学生的姓名、学号和三门课程的成绩。显示学生信息显示所有已添加的学生信息。按学号查找学生信息根据学号搜索学生信息。插入学生信息在特定位置插入一个新的学生记录。删除学生信息根据学号删除一个学生记录。按总分降序排序按学生的总分降序排序学生记录。退出系统退出程序。
设计要求
按照分析、设计、编码、调试和测试的软件开发过程独立完成系统。应用模块化编程思想各项功能分别用函数实现。系统功能设计成菜单形式用户通过菜单选择操作。系统界面友好、直观、易操作。
输入和输出要求
系统界面友好、直观、易操作。用户根据提示输入数据。输入数据时提供清晰的提示信息。处理完成后清楚地显示运行结果。
验收要求
运行所设计的系统。回答有关问题。提交课程设计报告。提交源程序。
进度安排
系统分析、设计准备阶段6学时。编程调试阶段26学时。总结和书写报告阶段6学时。考核阶段2学时。
系统分析
学生信息管理系统旨在简化学生信息的管理流程提高管理效率同时为用户提供便捷的操作体验。系统需要实现以下功能
添加学生信息。显示学生信息。按学号查找学生信息。插入学生信息。删除学生信息。按总分降序排序。
总体设计
系统采用模块化设计主要模块包括
学生信息管理模块添加、显示、查找、插入和删除学生信息。排序模块按总分降序排序学生记录。用户界面模块提供友好的用户界面。数据持久化模块将数据存储到文件系统可选。
详细设计
数据结构设计
struct Student {char name[50];int id;int grades[3];
};函数列表及功能简介 addStudent() 功能添加一个新的学生记录到 students 数组中。过程提示用户输入学生的姓名、学号和三门课程的成绩然后将这些信息存储在一个新的 Student 结构体中并将其添加到数组的下一个空位。 displayStudents() 功能显示所有已添加的学生信息。过程检查是否有学生记录如果有则遍历数组并打印每个学生的姓名、学号和成绩。 searchStudentById() 功能根据学号搜索学生信息。过程提示用户输入要搜索的学号然后在数组中查找匹配的学生记录。如果找到打印该学生的详细信息。 insertStudent() 功能在特定位置插入一个新的学生记录。过程首先提示用户输入要插入的学生的学号然后找到合适的插入位置接着提示用户输入新学生的详细信息并将新学生记录插入到数组中。 deleteStudent() 功能根据学号删除一个学生记录。过程提示用户输入要删除的学号找到对应的学生记录然后从数组中删除该记录。 sortByTotalGrades() 功能按学生的总分降序排序学生记录。过程使用冒泡排序算法根据每个学生的总分进行排序然后打印排序后的学生信息。 swap(struct Student *a, struct Student *b) 功能交换两个 Student 结构体指针所指向的记录。过程使用一个临时变量来交换两个学生记录的内容。 calculateTotalGrades(struct Student student) 功能计算一个学生的总分。过程将一个学生的三门课程成绩相加并返回总分。
测试数据和运行结果
测试数据 添加学生信息 请输入学生姓名: John Doe
请输入学生学号: 1001
请输入三门课程的成绩用空格分隔: 85 90 78显示学生信息 所有学生信息如下
姓名: John Doe, 学号: 1001, 成绩: 85 90 78按学号查找学生信息 请输入要查找的学生学号: 1001
学生姓名: John Doe, 学号: 1001, 成绩: 85 90 78插入学生信息 请输入要插入的学生学号: 1002
请输入学生姓名: Jane Smith
请输入三门课程的成绩用空格分隔: 92 88 90删除学生信息 请输入要删除的学生学号: 1001
要删除的学生信息姓名: John Doe, 学号: 1001, 成绩: 85 90 78
学生信息删除成功。按总分降序排序 按总分降序输出的学生信息
姓名: Jane Smith, 学号: 1002, 总分: 270总结与思考
优点
功能完善系统涵盖了添加、显示、查找、插入、删除和排序等核心功能。界面友好系统提供了简洁直观的用户界面操作方便。模块化设计代码结构清晰便于维护和扩展。
改进方向
数据持久化当前系统未实现数据持久化建议将学生信息存储到文件中以便程序重启后仍能读取数据。错误处理增加对用户输入的验证避免非法输入导致程序异常。更多功能可以增加更多功能如修改学生信息、统计平均分等。
参考文献
【排序算法】八大排序下c语言实现附源码-阿里云开发者社区 超详细之C语言实现学生信息管理系统(含文件读写)_c语言学生信息管理系统-CSDN博客
附录代码 #include stdio.h#include stdlib.h#include string.hstruct Student {char name[50];int id;int grades[3];};struct Student students[100]; // 最多存储100个学生信息int studentCount 0;void addStudent();void displayStudents();void searchStudentById();void insertStudent();void deleteStudent();void sortByTotalGrades();void swap(struct Student *a, struct Student *b);int calculateTotalGrades(struct Student student);int main() {int choice;do {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(请选择操作);scanf(%d, choice);switch (choice) {case 1:addStudent();break;case 2:displayStudents();break;case 3:searchStudentById();break;case 4:insertStudent();break;case 5:deleteStudent();break;case 6:sortByTotalGrades();break;case 7:printf(退出程序。\n);break;default:printf(无效选择请重新输入。\n);}} while (choice ! 7);return 0;}void addStudent() {struct Student newStudent;printf(请输入学生姓名: );scanf(%s, newStudent.name);printf(请输入学生学号: );scanf(%d, newStudent.id);printf(请输入三门课程的成绩用空格分隔: );for (int i 0; i 3; i) {scanf(%d, newStudent.grades[i]);}students[studentCount] newStudent;studentCount;printf(学生信息添加成功。\n);}void displayStudents() {if (studentCount 0) {printf(暂无学生信息。\n);return;}printf(所有学生信息如下\n);for (int i 0; i studentCount; i) {printf(姓名: %s, 学号: %d, 成绩: %d %d %d\n, students[i].name, students[i].id, students[i].grades[0], students[i].grades[1], students[i].grades[2]);}}void searchStudentById() {int searchId;printf(请输入要查找的学生学号: );scanf(%d, searchId);for (int i 0; i studentCount; i) {if (students[i].id searchId) {printf(学生姓名: %s, 学号: %d, 成绩: %d %d %d\n, students[i].name, students[i].id, students[i].grades[0], students[i].grades[1], students[i].grades[2]);return;}}printf(未找到该学生。\n);}void insertStudent() {struct Student newStudent;int insertId;printf(请输入要插入的学生学号: );scanf(%d, insertId);int insertIndex 0;while (insertIndex studentCount students[insertIndex].id insertId) {insertIndex;}// 输入学生信息printf(请输入学生姓名: );scanf(%s, newStudent.name);newStudent.id insertId;printf(请输入三门课程的成绩用空格分隔: );for (int i 0; i 3; i) {scanf(%d, newStudent.grades[i]);}// 插入学生信息for (int i studentCount; i insertIndex; i--) {students[i] students[i - 1];}students[insertIndex] newStudent;studentCount;printf(学生信息插入成功。\n);}void deleteStudent() {int deleteId;int deleteIndex -1;printf(请输入要删除的学生学号: );scanf(%d, deleteId);// 寻找要删除的学生for (int i 0; i studentCount; i) {if (students[i].id deleteId) {deleteIndex i;break;}}if (deleteIndex -1) {printf(未找到该学生。\n);} else {printf(要删除的学生信息姓名: %s, 学号: %d, 成绩: %d %d %d\n, students[deleteIndex].name, students[deleteIndex].id, students[deleteIndex].grades[0], students[deleteIndex].grades[1], students[deleteIndex].grades[2]);// 删除学生信息for (int i deleteIndex; i studentCount - 1; i) {students[i] students[i 1];}studentCount--;printf(学生信息删除成功。\n);}}void sortByTotalGrades() {// 使用冒泡排序for (int i 0; i studentCount - 1; i) {for (int j 0; j studentCount - i - 1; j) {if (calculateTotalGrades(students[j]) calculateTotalGrades(students[j 1])) {swap(students[j], students[j 1]);}}}// 显示按总分降序排序后的学生信息printf(按总分降序输出的学生信息\n);for (int i 0; i studentCount; i) {printf(姓名: %s, 学号: %d, 总分: %d\n, students[i].name, students[i].id, calculateTotalGrades(students[i]));}}void swap(struct Student *a, struct Student *b) {struct Student temp *a;*a *b;*b temp;}int calculateTotalGrades(struct Student student) {return student.grades[0] student.grades[1] student.grades[2];}嗨我是LucianaiB。如果你觉得我的分享有价值不妨通过以下方式表达你的支持 点赞来表达你的喜爱 关注以获取我的最新消息 评论与我交流你的见解。我会继续努力为你带来更多精彩和实用的内容。 点击这里LucianaiB 获取最新动态⚡️ 让信息传递更加迅速。