【C语言】编写一个简单的学生成绩管理系统
生活随笔
收集整理的這篇文章主要介紹了
【C语言】编写一个简单的学生成绩管理系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版本:C99
IDE:CLion
編譯器:MinGW
#include <stdio.h> #include <stdlib.h> #include <string.h>#define MAXSIZE 100 //課程最多人數 #define COURSENUM 6 //課程門數typedef struct student {int num; //學號char name[20]; //姓名float score[COURSENUM]; //各門課的成績float ave; //平均分 } StuType;typedef struct Students {StuType *elem; //學生數組空間起始地址int length; //學生實際個數 } Students;void create(Students *sa, int n) {int i, j;char temp;float ave = 0, sum = 0;for (i = 0; i < n; i++) {printf("請輸入第%d個學生的信息:\n", i+1);printf("學號:");scanf("%d%c", &sa->elem[i].num, &temp);//為了姓名讀入正確,需要去掉錄入學號信息時輸入的回車printf("姓名:");gets(sa->elem[i].name);printf("六門課的成績:英語、哲學、高等數學、數據結構、操作系統、計算機網絡:");for (j = 0; j < COURSENUM; j++) {scanf("%f", &sa->elem[i].score[j]);sum+=sa->elem[i].score[j];}sa->elem[i].ave = sum/COURSENUM;sa->length = n;sum = 0;} }void display(Students sa) {int i, j;printf("%d個學生的信息如下:\n", sa.length);printf("學號、姓名、英語、哲學、高等數學、數據結構、操作系統、計算機網絡、平均分\n");for (i = 0; i < sa.length; i++) {printf("%d %s", sa.elem[i].num, sa.elem[i].name);for (j = 0; j < COURSENUM; j++) {printf("%8.1f", sa.elem[i].score[j]);}printf("%8.1f\n", sa.elem[i].ave);} }void searchByNum(Students sa, int num) {int i, j;for (i = 0; i < sa.length; i++) {if (sa.elem[i].num == num) {printf("學號、姓名、英語、哲學、高等數學、數據結構、操作系統、計算機網絡、平均分\n");printf("%d %s", sa.elem[i].num, sa.elem[i].name);for (j = 0; j < COURSENUM; j++) {printf("%8.1f", sa.elem[i].score[j]);}printf("%8.1f\n", sa.elem[i].ave);break;}}if (i == sa.length){printf("查無此人!\n");} }void searchByName(Students sa, char *name) {int i, j, flag = 0;for (i = 0; i < sa.length; i++) {if (strcmp(sa.elem[i].name, name) == 0) {printf("學號、姓名、英語、哲學、高等數學、數據結構、操作系統、計算機網絡、平均分\n");printf("%d %s", sa.elem[i].num, sa.elem[i].name);for (j = 0; j < COURSENUM; j++) {printf("%8.1f", sa.elem[i].score[j]);}printf("%8.1f\n", sa.elem[i].ave);flag = 1;break;}}if (!flag) {printf("查無此人!\n");} }void add(Students *sa) {int i;float sum = 0;char temp;printf("請輸入該學生的信息:\n");printf("學號:");scanf("%d%c", &sa->elem[sa->length].num, &temp);//為了姓名讀入正確,需要去掉錄入學號信息時輸入的回車printf("姓名:");gets(sa->elem[sa->length].name);printf("六門課的成績:英語、哲學、高等數學、數據結構、操作系統、計算機網絡:");for (i = 0; i < COURSENUM; i++) {scanf("%f", &sa->elem[sa->length].score[i]);sum+=sa->elem[sa->length].score[i];}sa->elem[sa->length].ave = sum/COURSENUM;sa->length++; }void deleteByName(Students *sa, int num) {int i, j, flag = 0;for (i = 0; i < sa->length; i++) {if (sa->elem[i].num == num) {for (j = i; j < sa->length; j++) {sa->elem[j] = sa->elem[j+1];}sa->length--;flag = 1;break;}}if (!flag) {printf("查無此人!\n");} }void modifyByName(Students *sa, int num) {int selected;int i, flag = 0;char temp;for (int i = 0; i < sa->length; i++) {if (sa->elem[i].num == num) {for (;;) {printf("------請選擇要修改的項目:------\n");printf(" 1:姓名\n");printf(" 2:英語成績\n");printf(" 3:哲學成績\n");printf(" 4:高等數學成績\n");printf(" 5:數據結構成績\n");printf(" 6:操作系統成績\n");printf(" 7:計算機網絡成績\n");printf(" 8:返回主菜單\n");scanf("%d", &selected);scanf("%c", &temp);switch (selected) {case 1:printf("請輸姓名:");gets(sa->elem[i].name);break;case 2:printf("請輸入英語成績:");scanf("%f", &sa->elem[i].score[0]);average(sa);break;case 3:printf("請輸入哲學成績:");scanf("%f", &sa->elem[i].score[1]);average(sa);break;case 4:printf("請輸入高等數學成績:");scanf("%f", &sa->elem[i].score[2]);average(sa);break;case 5:printf("請輸入數據結構成績:");scanf("%f", &sa->elem[i].score[3]);average(sa);break;case 6:printf("請輸入操作系統成績:");scanf("%f", &sa->elem[i].score[4]);average(sa);break;case 7:printf("請輸入計算機網絡成績:");scanf("%f", &sa->elem[i].score[5]);average(sa);break;case 8:return;}}flag = 1;break;}}if (!flag) {printf("查無此人!\n");} }void average(Students *sa) {int i, j;float ave = 0, sum = 0;for (j = 0; j < COURSENUM; j++) {scanf("%f", &sa->elem[i].score[j]);sum+=sa->elem[i].score[j];}sa->elem[sa->length].ave = sum/COURSENUM; }void sortByCourse(Students *sa) {int selected;for (;;) {printf("------請選擇排序依據的科目:------\n");printf(" 1:英語\n");printf(" 2:哲學\n");printf(" 3:高等數學\n");printf(" 4:數據結構\n");printf(" 5:操作系統\n");printf(" 6:計算機網絡\n");printf(" 7:返回主菜單\n");scanf("%d", &selected);switch (selected) {case 1:sortByCourse2(sa, 0);break;case 2:sortByCourse2(sa, 1);break;case 3:sortByCourse2(sa, 2);break;case 4:sortByCourse2(sa, 3);break;case 5:sortByCourse2(sa, 4);break;case 6:sortByCourse2(sa, 5);break;case 7:return;}} }void sortByCourse2(Students *sa, int course) {int i, j, max;StuType stu;for (i = 0; i < sa->length; i++) {max = i;for (j = i+1; j < sa->length; i++) {if (sa->elem[j].score[course] > sa->elem[max].score[course]) {max = j;}}if (max != i) {stu.num = sa->elem[i].num;strcpy(stu.name, sa->elem[i].name);for (j = 0; j < COURSENUM; j++) {stu.score[j] = sa->elem[i].score[j];}sa->elem[i].num = sa->elem[max].num;strcpy(sa->elem[i].name, sa->elem[max].name);for (j = 0; j < COURSENUM; j++) {sa->elem[i].score[j] = sa->elem[max].score[j];}sa->elem[max].num = stu.num;strcpy(sa->elem[max].name, stu.name);for (j = 0; j < COURSENUM; j++) {sa->elem[max].score[j] = stu.score[j];}}} }void level(Students sa) {int selected;for (;;) {printf("------請選擇統計分數段的科目:------\n");printf(" 1:英語\n");printf(" 2:哲學\n");printf(" 3:高等數學\n");printf(" 4:數據結構\n");printf(" 5:操作系統\n");printf(" 6:計算機網絡\n");printf(" 7:返回主菜單\n");scanf("%d", &selected);switch (selected) {case 1:levelByCourse(sa, 0);break;case 2:levelByCourse(sa, 1);break;case 3:levelByCourse(sa, 2);break;case 4:levelByCourse(sa, 3);break;case 5:levelByCourse(sa, 4);break;case 6:levelByCourse(sa, 5);break;case 7:return;}} }void levelByCourse(Students sa, int course) {int num[6] = {0}, i, j;for (int i = 0; i < sa.length; i++) {if (sa.elem[i].score[course] < 60) {num[0]++;} else if (sa.elem[i].score[course] < 70) {num[1]++;} else if (sa.elem[i].score[course] < 80) {num[2]++;} else if (sa.elem[i].score[course] < 90) {num[3]++;} else {num[4]++;}}switch (course) {case 0:printf("英語成績分數段分布人數:60分以下、60~69分、70~79分、80~89分、90分以上分別為:\n");break;case 1:printf("哲學成績分數段分布人數:60分以下、60~69分、70~79分、80~89分、90分以上分別為:\n");break;case 2:printf("高等數學成績分數段分布人數:60分以下、60~69分、70~79分、80~89分、90分以上分別為:\n");break;case 3:printf("數據結構成績分數段分布人數:60分以下、60~69分、70~79分、80~89分、90分以上分別為:\n");break;case 4:printf("操作系統成績分數段分布人數:60分以下、60~69分、70~79分、80~89分、90分以上分別為:\n");break;case 5:printf("計算機網絡成績分數段分布人數:60分以下、60~69分、70~79分、80~89分、90分以上分別為:\n");break;}for (int i = 0; i < 5; i++) {printf("%6d", num[i]);}printf("\n"); }int main() {int selected = 10, count, num;Students sa;char name[20], temp;sa.elem = (StuType *)malloc(sizeof(StuType)*MAXSIZE);for (;;) {printf("------本程序為學生程序管理系統,請選擇系統功能:------\n");printf(" 1:錄入全部學生信息\n");printf(" 2:按學號查詢學生信息\n");printf(" 3:按姓名查詢學生信息\n");printf(" 4:添加一個學生信息\n");printf(" 5:按學號刪除學生信息\n");printf(" 6:按學號修改學生信息\n");printf(" 7:顯示所有學生信息\n");printf(" 8:按課程成績從高到低顯示所有學生信息\n");printf(" 9:按分數段統計學生信息\n");printf(" 0:退出程序\n");scanf("%d", &selected);switch (selected) {case 1:printf("請輸入學生個數:");scanf("%d", &count);create(&sa, count);break;case 2:printf("請輸入要查詢的學生的學號:");scanf("%d", &num);searchByNum(sa, num);break;case 3://將菜單選擇時鍵入的回車符刪掉scanf("%c", &temp);printf("請輸入要查詢的學生的姓名:");gets(name);searchByName(sa, name);break;case 4:add(&sa);break;case 5:printf("請輸入要刪除的學生的學號:");scanf("%d", &num);deleteByName(&sa, num);break;case 6:printf("請輸入要修改信息的學生的學號:");scanf("%d", &num);modifyByName(&sa, num);break;case 7:display(sa);break;case 8:sortByCourse(&sa);break;case 9:level(sa);break;case 0:return 0;}}return 0; }總結
以上是生活随笔為你收集整理的【C语言】编写一个简单的学生成绩管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言】如何安装CLion并在CLio
- 下一篇: 【Java】System.out.pri