From cc630dfc915db6c8eb8b8f90704a20bedb196728 Mon Sep 17 00:00:00 2001 From: pvyhm5biq <631382184@qq.com> Date: Fri, 10 Nov 2023 11:22:59 +0800 Subject: [PATCH] =?UTF-8?q?Add=20=E5=AD=A6=E7=B1=8D=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 学籍管理系统 | 359 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100644 学籍管理系统 diff --git a/学籍管理系统 b/学籍管理系统 new file mode 100644 index 0000000..6ecedfe --- /dev/null +++ b/学籍管理系统 @@ -0,0 +1,359 @@ +#include +#include +#include +#define MAX_LEN 10 // 字符串最大长度 +#define STU_NUM 30 // 最多的学生人数 +#define COURSE_NUM 6 // 最多的考试科目数 +typedef struct student +{ + long num; // 每个学生的学号 + char name[MAX_LEN]; // 每个学生的姓名 + float score[COURSE_NUM]; // 每个学生COURSE_NUM门功课的成绩 + float sum; // 每个学生的总成绩 + float aver; // 每个学生的平均成绩 +}STU; +int Menu(void); +void ReadScore(STU stu[], int n, int m); +void AverSumofEveryStudent(STU stu[], int n, int m); +void AverSumofEveryCourse(STU stu[], int n, int m); +void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)); +int Ascending(float a, float b); +int Descending(float a, float b); +void SwapFloat(float *x, float *y); +void SwapLong(long *x, long *y); +void SwapChar(char x[], char y[]); +void AsSortbyNum(STU stu[], int n, int m); +void SortbyName(STU stu[], int n, int m); +void SearchbyNum(STU stu[], int n, int m); +void PrintScore(STU stu[], int n, int m); +int main(void) +{ + char ch; + int n = 0, m = 0; + STU stu[STU_NUM]; + printf("Input student number(n<%d):", STU_NUM); + scanf("%d", &n); + printf("Input course number(m<=%d):",COURSE_NUM); + scanf("%d", &m); + // printf("%d %d",n,m); + while (1) + { + ch = Menu(); // 显示菜单,并读取用户输入 + switch (ch) + { + case 1:ReadScore(stu, n, m); + break; + case 2: AverSumofEveryStudent(stu, n, m); + break; + case 3: SortbyScore(stu, n, m, Descending); + printf("\n按分数排序:\n"); + PrintScore(stu, n, m); + break; + case 4: SearchbyNum(stu, n, m); + break; + case 5:PrintScore(stu, n, m); + break; + case 0: printf("End of program!"); + exit(0); + default:printf("Input error!"); + } + } + return 0; +} +// 函数功能:显示菜单并获得用户键盘输入的选项 +int Menu(void) +{ + int itemSelected; + printf("Management for Students' scores\n"); + printf("1.输入数据\n"); + printf("2.计算总分与平均分\n"); + printf("3.按分数排序\n"); + printf("4.查找\n"); + printf("5.数据总汇\n"); + printf("0.退出\n"); + printf("请输入你的选择:"); + scanf("%d", &itemSelected); // 读入用户输入 + return itemSelected; +} +// 函数功能:输入n个学生的m门课成绩 +void ReadScore(STU stu[], int n, int m) +{ + int i, j; + printf("Input student's ID, name and score:\n"); + /* ---------- begain ---------- */ + for (i=0; i0 ? stu[i].sum / m : -1; + printf("student %d: sum = %.0f, aver = %.0f\n", i+1, stu[i].sum, stu[i].aver); + } +} +// 函数功能:按选择法将数组sum的元素值排序 +void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)) +{ + int i, j, k, t; + for (i=0; i b; // 这样比较决定了按降序排序,如果a>b,则交换 +} +// 交换两个单精度浮点型数据 +void SwapFloat(float *x, float *y) +{ + float temp; + temp = *x; + *x = *y; + *y = temp; +} +// 交换两个长整型数据 +void SwapLong(long *x, long *y) +{ + long temp; + temp = *x; + *x = *y; + *y = temp; +} +// 交换两个字符串 +void SwapChar(char x[], char y[]) +{ + char temp[MAX_LEN]; + strcpy(temp, x); + strcpy(x, y); + strcpy(y, temp); +} +// 函数功能:按选择法将数组num的元素值按从低到高排序 +void AsSortbyNum(STU stu[], int n, int m) +{ + int i, j, k, t; + for (i=0; i 10 - count) + printf("人数不对\n"); + else + { + for (i = 0; i < n; i++) + { + while (1) //查找学号是否已经存在 + { + printf("请输入第%d个学生的学号(以回车结束):", (i + 1)); + scanf("%d", &stu[i + count].num); + k = 0; + while (k < count + i && stu[count + i].num != stu[k].num) + k++; + if (k < count + i) + { + printf("学号已经存在,请重新输入\n"); + } + else + { + break; + } + } + printf("请输入第%d个学生的姓名(以回车结束):", (i + 1)); + scanf("%s", stu[i + count].name); + printf("请输入第%d个学生的成绩(以回车结束):", (i + 1)); + scanf("%d", &stu[i + count].score); + } + count = n + count; //总人数存放到全局变量count中 + show(); + } +} +void find_num(int no) +{ + int found = 0, s; + for (s = 0; s < count; s++) + { + if (stu[s].num == no) + { + printf("%10s %16s %12s\n", "学号", "姓名", "成绩"); + printf("%10d%20s%10d\n", stu[s].num, stu[s].name, stu[s].score); + found = 1; + break; + } + } + if (!found) + { + printf("没有该信息\n"); + } +} +void edit(int no) +{ + int index = 0, i; + while (index < count && stu[index].num != no) + index++; + if (index == count) + { + printf("没有该信息\n"); + } + else + { + while (1) //查找学号是否已经存在 + { + printf("请输入新的学号(以回车结束):"); + scanf("%d", &stu[index].num); + i = 0; + while (i < count && (i == index || stu[i].num != stu[index].num)) + i++; + if (i < count) + { + printf("学号已经存在,请重新输入\n"); + } + else + { + break; + } + } + printf("请输入新的姓名(以回车结束):"); + scanf("%s", &stu[index].name); + printf("请输入新的分数(以回车结束):"); + scanf("%d", &stu[index].score); + show(); + } +} +void del(int no) +{ + int index = 0; + while (index < count && stu[index].num != no) + index++; + if (index == count) + { + printf("没有该信息\n"); + } + else + { + index++; + while (index < count) + { + stu[index - 1] = stu[index]; + index++; + } + count--; + show(); + } +} +void show() +{ + int s = 0; + printf("\n******目前已保存有%d个学生的信息如下:******\n", count); + printf("%10s %16s %12s\n", "学号", "姓名", "成绩"); + for (s = 0; s < count; s++) + { + printf("%10d%20s%10d\n", stu[s].num, stu[s].name, stu[s].score); + } +} \ No newline at end of file