设计一种结构体,用来保存学生信息(C语言)

您所在的位置:网站首页 c语言录入学生信息并保存在磁盘中 设计一种结构体,用来保存学生信息(C语言)

设计一种结构体,用来保存学生信息(C语言)

2024-07-14 02:23| 来源: 网络整理| 查看: 265

给设计一种结构体,用来保存学生信息(包括学号、姓名、三科成绩、平均成绩)。除平均成绩外,各项数据均由键盘输入。现在要求输入若干学生的信息,并实现以下功能:(可以使用数组或链表实现) 1)计算学生的平均成绩,并填入相应的数据域; 2)插入学生信息; 3)删除学生信息; 4)查询学生信息。

看到有人问这道题或者这个实验,因为刚帮朋友写了类似的这个代码,所以直接修改一下就发出来了,我的实现是通过数组,通过链表也可以实现:

#include #include #include // 声明结构体 struct Student { int num; char name [20]; int score[3]; float ave; }; // 声明全局变量 const int MAX = 100; struct Student stu[MAX]; int count = 0; // 学生数组下标 // 函数的声明 void menu(); // 功能选择菜单 void put(); // 输入学生信息 void insert(); // 插入学生信息 void getAverage(); // 计算平均数 void query(); // 查询学生信息 void del(); // 删除学生信息 void list(); // 打印全部学生信息 void stuInfo(int index); // 打印index下标对应的学生信息 // main函数 int main() { struct Student s[70]; int choice; while (1) { menu(); scanf("%d", &choice); switch(choice) { case 1 : put(); break; case 2: insert(); break; case 3: query(); break; case 4: getAverage(); break; case 5: del(); break; case 6: list(); break; case 0: exit(0); default: printf("无效的输入,请输入0--6的整型数字\n"); break; } } return 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"); } void put() { int n; printf("请输入你想要输入的学生数量:"); scanf("%d", &n); if(count + n 0) { // 从index以后的都向后移动一个位置 index--; // 因为数组是从0开始存储 for(int i = count, j = count - 1; i >= index; i--, j--) { stu[i].num = stu[j].num; strcpy (stu[i].name, stu[j].name); stu[i].score[0] = stu[j].score[0]; stu[i].score[1] = stu[j].score[1]; stu[i].score[2] = stu[j].score[2]; stu[i].ave = stu[j].ave; } count++; printf("请输入学生信息,按照学号 姓名 成绩1 成绩2 成绩3 的格式\n"); scanf("%d %s %d %d %d", &stu[index].num, stu[index].name, &stu[index].score[0], &stu[index].score[1], &stu[index].score[2]); } else { printf("输入的下标位置已经超过了目前存储的最大位置\n"); } } void getAverage() { if(count == 0) { printf("还没有数据,请先输入学生信息再进行操作\n"); } else { for(int i = 0; i < count; i++) { stu[i].ave = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0; } } } void stuInfo(int index) { printf("学号:%d 姓名:%s 成绩1:%d 成绩2:%d 成绩3:%d 平均成绩:%.2f\n", stu[index].num, stu[index].name, stu[index].score[0], stu[index].score[1], stu[index].score[2], stu[index].ave); } void query() { int num, flag = 0; printf("请输入查询学生的学号:"); scanf("%d", &num); for(int i = 0; i < count; i++) { if(stu[i].num == num) { stuInfo(i); flag = 1; break; } } if(!flag) { printf("没有找到对应学生,请检查输入的学号\n"); } } void del() { int num, flag = 0; printf("请输入要删除的学生学号:"); scanf("%d", &num); for(int i = 0; i < count - 1; i++) { // 当不是在删除的学生在数组中间时 if(stu[i].num == num) { int tmp = i; for(int j = i + 1; j < count; j++, tmp++) { stu[tmp].num = stu[j].num; strcpy (stu[tmp].name, stu[j].name); stu[tmp].score[0] = stu[j].score[0]; stu[tmp].score[1] = stu[j].score[1]; stu[tmp].score[2] = stu[j].score[2]; stu[tmp].ave = stu[j].ave; } count--; flag = 1; break; } } if(!flag) { // 还没有找到,这时可能在最后一个位置,也可能学号输入错误 if(stu[count - 1].num != num) { printf("学号输入错误,请重新检查\n"); } else { count--; } } } void list() { for(int i = 0; i < count; i++) { printf("学号:%d 姓名:%s 成绩1:%d 成绩2:%d 成绩3:%d 平均成绩:%.2f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave); } }

希望一键三连!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3