班级成绩管理系统(C语言)
生活随笔
收集整理的這篇文章主要介紹了
班级成绩管理系统(C语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、設計任務與目標
- 二、實現功能
- 三、程序源碼
- 四、效果展示
一、設計任務與目標
對一個有N個學生的班級,每個學生有M門課程。該系統實現對班級成績的錄入、顯示、修改、排序、保存等操作的管理。
二、實現功能
(1)本系統采用一個結構體數組,每個數據的結構應當包括:學號、姓名、M門課程名稱。
(2)本系統顯示這樣的菜單:
請選擇系統功能項:
a、成績錄入
b、成績顯示
c、成績保存
d、成績排序
e、成績修改(要求先輸入密碼)
f、成績統計
1)顯示每門課程成績最高的學生的基本信息
2)顯示每門課程的平均成績
3)顯示超過某門課程平均成績的學生人數
g、退出系統
(3)執行一個具體的功能之后,程序將重新顯示菜單。
(4)將學生成績保存到文件中。
三、程序源碼
菜單
void menu() //菜單 {printf("========================================\n");printf("| 歡迎來到班級成績管理系統! \n");printf("| a:成績錄入\n");printf("| b:成績顯示\n");printf("| c:成績保存\n");printf("| d:成績排序\n");printf("| e:成績修改\n");printf("| f:成績統計\n");printf("| g:退出系統\n");printf("========================================\n");printf("請輸入你的選擇: "); }錄入學生成績
void inputScores() //成績錄入 {if (courseCount == 0){printf("請輸入課程數量:");scanf("%d", &courseCount); //輸入課程數量 for (int i = 0; i < courseCount; i++) //輸入課程名字 {Course course;printf("請輸入第 %d 門課程名字:", i+1);scanf("%s", course.name);courses[i] = course;}}Student stu;printf("請輸入學生學號:");scanf("%s", stu.id); //輸入學生學號 printf("請輸入學生名字:");scanf("%s", stu.name); //輸入學生姓名 for (int j = 0; j < courseCount; j++) //輸入課程成績 {printf("請輸入 %s 課程成績:", courses[j].name);scanf("%d", &stu.scores[j]);}students[studentCount++] = stu; }顯示所錄入的學生成績
void displayScores() //成績顯示 {if (studentCount == 0){printf("No student\n");return;}printf(" 學號 姓名 ");for (int i = 0; i < courseCount; i++) //輸出課程名字 {printf(" %s", courses[i].name);}printf("\n");for (int i = 0; i < studentCount; i++) //輸出學生信息 {printf("%s %s", students[i].id, students[i].name); //輸出學生學號,姓名 for (int j = 0; j < courseCount; j++) //輸出學生成績 {printf(" %d", students[i].scores[j]);}printf("\n");} }保存錄入的學生成績
void saveScores() //成績保存 {FILE* fp;fp = fopen("scores.txt", "w"); //打開文件 if (fp == NULL){printf("open scores.txt failed!\n");return;}fprintf(fp, "%d\n", courseCount); //輸出文件信息 for (int i = 0; i < courseCount; i++) //輸出課程名字 {fprintf(fp, "%s\n", courses[i].name);}fprintf(fp, "%d\n", studentCount); //輸出學生信息 for (int i = 0; i < studentCount; i++) {fprintf(fp, "%s\n%s\n", students[i].id, students[i].name); //輸出學生學號,姓名 for (int j = 0; j < courseCount; j++) //輸出學生成績 {fprintf(fp, "%d ", students[i].scores[j]);}fprintf(fp, "\n");}fclose(fp); //關閉文件 }對錄入的課程成績進行排序
void sort(int l,int r, int pos) //對課程的成績進行排序 {if (r <= l) return;int i = l, j = r;int key = students[l].scores[pos];while (i <= j){while (students[i].scores[pos] > key) i++;while (students[j].scores[pos] < key) j--;if (i <= j){Student temp = students[i];students[i] = students[j];students[j] = temp;i++;j--;}}sort(l, j, pos);sort(i, r, pos); }比較學生成績
int compare(char a[], char b[]) //比較學生的成績 {int la = strlen(a);int lb = strlen(b);if (la < lb) return -1;if (la > lb) return 1;int len = 0;while (len < la){if (a[len] < b[len]) return -1;if (a[len] > b[len]) return 1;len++;}return 0; }對程序進行排序
void orderScores() //成績排序 {printf("Enter course name:"); //輸入需要進行成績排序的課程名字 char name[PROFILE_LENGTH];scanf("%s", name);int i = courseCount;for (i = 0; i < courseCount; i++){if (compare(courses[i].name, name) == 0)break;}if (i == courseCount){printf("No course %s\n", name);return;}sort(0, studentCount - 1, i); }修改已經錄入但錄入出錯的學生成績
void changeScores() //成績修改 {printf("Enter password:"); //輸入密碼 char pwd[PROFILE_LENGTH];scanf("%s", pwd); //輸入密碼 if (compare(password, pwd) != 0){printf("密碼錯誤!\n");return;}printf("Enter student id:"); char id[PROFILE_LENGTH];scanf("%s", id); //輸入學生學號 int i = studentCount;for (i = 0; i < studentCount; i++){if (compare(students[i].id, id) == 0)break;}if (i == studentCount){printf("No student %s\n", id);return;}printf("Courses: ");for (int j = 0; j < courseCount; j++) //輸出課程名字 {printf(" %s", courses[j].name);}printf("\nEnter the scores:"); for (int j = 0; j < courseCount; j++) //輸入更改后的成績 {scanf("%d", &students[i].scores[j]);} }統計已經錄入的學生成績
void statisticScores() //成績統計 {for (int j = 0; j < courseCount; j++){printf("%s:\n", courses[j].name);int max = 0;int pos = studentCount;double aver = 0.0;for (int i = 0; i < studentCount; i++) //比較學生成績,找出成績最高的學生 {aver = aver + students[i].scores[j];if (students[i].scores[j] > max){max = students[i].scores[j];pos = i;}}aver /= studentCount; //計算平均成績 int count = 0;for (int i = 0; i < studentCount; i++) //計算超過平均成績的人數 {if (students[i].scores[j] > aver){count ++;}}if (pos == studentCount){printf("No student\n");break;}else{printf("成績最高學生:");printf(" %s %s %d\n", students[pos].id, students[pos].name, max);printf("平均成績:");printf(" %.2lf\n", aver);printf("超過平均成績的人數:");printf(" %d\n", count);}} }四、效果展示
菜單
錄入學生成績(這里錄入了6位學生的成績,錄入完畢后進行保存)
顯示已經錄入的學生成績
保存已經錄入的成績,保存后的成績存放在“scores.txt”文件中
按照課程將錄入的成績進行排序(分數從高到低)
修改已經錄入的學生成績
找出每個課程成績最高的學生,統計出平均成績和超過平均成績的人數
總結
以上是生活随笔為你收集整理的班级成绩管理系统(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 湖南计算机职业技术学院专业排名,湖南信息
- 下一篇: java信息管理系统总结_java实现科