學(xué)生成績管理系統(tǒng)(C語言版)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 100 /* 定義最大的學(xué)生數(shù)量 */
/* 學(xué)生結(jié)構(gòu)體 */
typedef struct {
? ? char name[20];? ? ? /* 姓名 */
? ? int id;? ? ? ? ? ? ?/* 學(xué)號 */
? ? float score;? ? ? ? /* 成績 */
} Student;
Student students[MAX_STUDENT];? /* 存儲學(xué)生數(shù)據(jù)的數(shù)組 */
int studentCount = 0;? ? ? ? ? ?/* 學(xué)生數(shù)量 */
/* 根據(jù)學(xué)號查詢學(xué)生 */
int searchStudentById(int id)
{
? ? int i;
? ? for (i = 0; i < studentCount; i++) {
? ? ? ? if (students[i].id == id) {
? ? ? ? ? ? return i;? ?/* 找到學(xué)生返回下標 */
? ? ? ? }
? ? }
? ? return -1;? ? ? ? ? /* 沒找到返回-1 */
}
/* 添加學(xué)生記錄 */
void addStudent()
{
? ? char name[20];
? ? int id;
? ? float score;
? ? printf("請輸入姓名:");
? ? scanf("%s", name);
? ? printf("請輸入學(xué)號:");
? ? scanf("%d", &id);
? ? /* 判斷學(xué)號是否已存在 */
? ? if (searchStudentById(id) != -1) {
? ? ? ? printf("該學(xué)號已存在!\n");
? ? ? ? return;
? ? }
? ? printf("請輸入成績:");
? ? scanf("%f", &score);
? ? Student student = { .id = id, .score = score };
? ? strcpy(student.name, name);
? ? /* 將新加入的學(xué)生放在數(shù)組的最后 */
? ? students[studentCount] = student;
? ? studentCount++;
? ? printf("添加成功!\n");
}
/* 刪除學(xué)生記錄 */
void deleteStudent()
{
? ? int id, index;
? ? printf("請輸入學(xué)號:");
? ? scanf("%d", &id);
? ? index = searchStudentById(id);
? ? if (index == -1) {
? ? ? ? printf("該學(xué)生不存在!\n");
? ? } else {
? ? ? ? /* 將待刪除的學(xué)生從數(shù)組中移除 */
? ? ? ? for (; index < studentCount - 1; index++) {
? ? ? ? ? ? students[index] = students[index + 1];
? ? ? ? }
? ? ? ? studentCount--;
? ? ? ? printf("刪除成功!\n");
? ? }
}
/* 修改學(xué)生記錄 */
void modifyStudent()
{
? ? int id, index;
? ? float score;
? ? printf("請輸入學(xué)號:");
? ? scanf("%d", &id);
? ? index = searchStudentById(id);
? ? if (index == -1) {
? ? ? ? printf("該學(xué)生不存在!\n");
? ? } else {
? ? ? ? printf("請輸入新成績:");
? ? ? ? scanf("%f", &score);
? ? ? ? students[index].score = score;
? ? ? ? printf("修改成功!\n");
? ? }
}
/* 查詢學(xué)生記錄 */
void queryStudent()
{
? ? int id, index;
? ? printf("請輸入學(xué)號:");
? ? scanf("%d", &id);
? ? index = searchStudentById(id);
? ? if (index == -1) {
? ? ? ? printf("該學(xué)生不存在!\n");
? ? } else {
? ? ? ? printf("姓名:%s 學(xué)號:%d 成績:%.2f\n",
? ? ? ? ? ? ? ? students[index].name, students[index].id, students[index].score);
? ? }
}
/* 計算成績排名 */
void calculateRank()
{
? ? Student tmp[MAX_STUDENT];
? ? memcpy(tmp, students, sizeof(students)); /* 將學(xué)生數(shù)組復(fù)制到臨時數(shù)組中 */
? ? int i, j;
? ? for (i = 0; i < studentCount - 1; i++) {
? ? ? ? for (j = 0; j < studentCount - i - 1; j++) {
? ? ? ? ? ? if (tmp[j].score < tmp[j + 1].score) {
? ? ? ? ? ? ? ? Student temp = tmp[j];
? ? ? ? ? ? ? ? tmp[j] = tmp[j + 1];
? ? ? ? ? ? ? ? tmp[j + 1] = temp;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? printf("成績排名:\n");
? ? for (i = 0; i < studentCount; i++) {
? ? ? ? printf("%d. %s\t%.2f\n", i + 1, tmp[i].name, tmp[i].score);
? ? }
}
/* 主函數(shù) */
int main()
{
? ? int menu;
? ? while (1) {
? ? ? ? printf("\n學(xué)生成績管理系統(tǒng)\n");
? ? ? ? printf("------------------------\n");
? ? ? ? printf("1.添加學(xué)生記錄\n");
? ? ? ? printf("2.刪除學(xué)生記錄\n");
? ? ? ? printf("3.修改學(xué)生記錄\n");
? ? ? ? printf("4.查詢學(xué)生記錄\n");
? ? ? ? printf("5.計算成績排名\n");
? ? ? ? printf("6.退出\n");
? ? ? ? printf("------------------------\n");
? ? ? ? printf("請選擇菜單:");
? ? ? ? scanf("%d", &menu);
? ? ? ? switch (menu) {
? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? addStudent();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? deleteStudent();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 3:
? ? ? ? ? ? ? ? modifyStudent();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 4:
? ? ? ? ? ? ? ? queryStudent();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 5:
? ? ? ? ? ? ? ? calculateRank();
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case 6:
? ? ? ? ? ? ? ? exit(EXIT_SUCCESS);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? default:
? ? ? ? ? ? ? ? printf("請輸入正確的菜單號!\n");
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? }
? ? return 0;
}