乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      學(xué)生成績(jī)管理系統(tǒng)案例

       C語(yǔ)言與CPP編程 2021-12-15

      案例描述

      案例要求模擬開(kāi)發(fā)一個(gè)學(xué)生成績(jī)管理系統(tǒng),此系統(tǒng)具有以下功能:

      1. 添加學(xué)生信息,包括學(xué)號(hào)、姓名、語(yǔ)文成績(jī)、數(shù)學(xué)成績(jī);
      2. 顯示學(xué)生信息,將所有學(xué)生信息打印輸出;
      3. 修改學(xué)生信息,可以根據(jù)姓名查找到學(xué)生,然后可以修改學(xué)生姓名、成績(jī)項(xiàng);
      4. 刪除學(xué)生信息,根據(jù)學(xué)號(hào)查找到學(xué)生,將其信息刪除;
      5. 查找學(xué)生信息,根據(jù)學(xué)生姓名,將其信息打印輸出;
      6. 按學(xué)生總成績(jī)進(jìn)行從高到低排序。

      這些功能之間的邏輯關(guān)系如下圖所示:

      學(xué)生成績(jī)管理系統(tǒng)

      案例分析

      分析案例需求可知,該系統(tǒng)首先會(huì)向用戶展現(xiàn)一個(gè)菜單選擇界面,用戶可以根據(jù)菜單界面的提示,選擇不同的功能進(jìn)入子界面,因此可以針對(duì)每一個(gè)功能定義一個(gè)函數(shù),通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)相應(yīng)功能。由系統(tǒng)需求可知,該系統(tǒng)主要有6大功能,因此需要定義6個(gè)函數(shù)。

      1. 添加記錄——add()函數(shù)當(dāng)用戶在功能菜單中選擇數(shù)字1時(shí),會(huì)調(diào)用add()函數(shù)進(jìn)入添加記錄模塊,提示用戶輸入學(xué)生的學(xué)號(hào)、姓名、計(jì)算機(jī)基礎(chǔ)成績(jī)、數(shù)據(jù)結(jié)構(gòu)成績(jī)。當(dāng)用戶輸入完畢后,會(huì)提示用戶是否繼續(xù)添加,Y表示繼續(xù),N表示返回。需要注意的是,在添加學(xué)號(hào)時(shí)不能重復(fù),如果輸入重復(fù)的學(xué)號(hào)就會(huì)提示此學(xué)號(hào)已存在。
      void add(struct student stu[])
      {
      int i, id = 0; //i作為循環(huán)變量,id用來(lái)保存新學(xué)號(hào)
      char quit; //保存是否退出的選擇
      do
      {
      printf("學(xué)號(hào):");
      scanf("%d", &id);
      for (i = 0; i < n; i++)
      {
      if (id == stu[i].id)
      {
      printf("此學(xué)號(hào)存在!\n");
      return;
      }
      }

      stu[i].id = id;
      printf("姓名:");
      scanf("%s", &stu[i].name);
      printf("計(jì)算機(jī)基礎(chǔ)成績(jī):");
      scanf("%d", &stu[i].chinese);
      printf("數(shù)據(jù)結(jié)構(gòu)成績(jī):");
      scanf("%d", &stu[i].math);
      stu[i].sum = stu[i].chinese + stu[i].math;
      n++; //記錄條數(shù)加1
      printf("是否繼續(xù)添加?(Y/N)");
      scanf("\t%c", &quit);
      } while (quit != 'N');
      }

      1. 顯示記錄——showAll()函數(shù)當(dāng)用戶在功能菜單中選擇數(shù)字2時(shí),會(huì)調(diào)用show()函數(shù)進(jìn)入顯示記錄模塊,并向控制臺(tái)輸出錄入的所有學(xué)生的學(xué)號(hào)、姓名、數(shù)據(jù)結(jié)構(gòu)成績(jī)、計(jì)算機(jī)基礎(chǔ)成績(jī)和成績(jī)總和。
      void show(struct student stu[], int i)
      {
      printf("%-10d", stu[i].id);
      printf("%-10s", stu[i].name);
      printf("%-10d", stu[i].chinese);
      printf("%-10d", stu[i].math);
      printf("%-10d\n", stu[i].sum);
      }

      1. 修改記錄——modify()函數(shù)當(dāng)用戶在功能菜單中選擇數(shù)字3時(shí),會(huì)調(diào)用modify()函數(shù)進(jìn)入修改記錄模塊,輸入要修改的學(xué)生姓名,當(dāng)用戶輸入了已錄入的學(xué)生姓名后,如果學(xué)生信息存在即可修改除學(xué)號(hào)以外的其他信息,否則輸出沒(méi)有找到該生的記錄。
      void modify(struct student stu[])
      {
      char name[8], ch;
      int i;
      printf("修改學(xué)生的記錄。\n");
      printf("請(qǐng)輸入學(xué)生的姓名:");
      scanf("%s", &name);
      for (i = 0; i < n; i++)
      {
      if (strcmp(name, stu[i].name) == 0)
      {
      getchar();
      printf("找到該生的記錄,如下所示:\n");
      HH; //顯示記錄的標(biāo)題
      show(stu, i);
      printf("是否修改?(Y/N)\n");
      scanf("%c", &ch);
      if (ch == 'Y' || ch == 'y')
      {
      getchar();
      printf("姓名:");
      scanf("%s", &stu[i].name);
      printf("計(jì)算機(jī)基礎(chǔ)成績(jī):");
      scanf("%d", &stu[i].chinese);
      printf("數(shù)據(jù)結(jié)構(gòu)成績(jī):");
      scanf("%d", &stu[i].math);
      stu[i].sum = stu[i].chinese + stu[i].math;
      printf("修改完畢。\n");
      }
      return;
      }
      }
      printf("沒(méi)有找到該生的記錄。\n");
      }

      1. 刪除記錄——del()函數(shù)當(dāng)用戶在功能菜單中選擇數(shù)字4時(shí),會(huì)調(diào)用del()函數(shù)進(jìn)入刪除記錄模塊,對(duì)學(xué)生學(xué)號(hào)進(jìn)行判斷,如果學(xué)號(hào)存在即可刪除該生的所有信息,否則輸出沒(méi)有找到該生的記錄。
      void del(struct student stu[])
      {
      int id, i;
      char ch;
      printf("刪除學(xué)生的記錄。\n");
      printf("請(qǐng)輸入學(xué)號(hào):");
      scanf("%d", &id);
      for (i = 0; i < n; i++)
      {
      if (id == stu[i].id)
      {
      getchar();
      printf("找到該生的記錄,如下所示:\n");
      HH; //顯示記錄的標(biāo)題
      show(stu, i); //顯示數(shù)組stu中的第i條記錄
      printf("是否刪除?(Y/N)\n");
      scanf("%c", &ch);

      if (ch == 'Y' || ch == 'y')
      {
      for (; i < n; i++)
      // 被刪除記錄后面的記錄均前移一位
      stu[i] = stu[i + 1];
      n--; //記錄總條數(shù)減1
      printf("刪除成功!");
      }
      return;
      }
      }
      printf("沒(méi)有找到該生的記錄!\n");
      }

      1. 查找記錄——search()函數(shù)當(dāng)用戶在功能菜單中輸入數(shù)字5時(shí),會(huì)調(diào)用search()進(jìn)入查找記錄模塊,在該模塊中輸入查找的學(xué)生姓名,如果該學(xué)生存在則輸出該學(xué)生的全部信息,否則輸出沒(méi)有找到該生的記錄。
      void search(struct student stu[])
      {
      char name[8];
      int i;
      printf("查找學(xué)生的記錄。\n");
      printf("請(qǐng)輸入學(xué)生的姓名:");
      scanf("%s", &name);
      for (i = 0; i < n; i++)
      {
      if (strcmp(name, stu[i].name) == 0)
      {
      printf("找到該生的記錄,如下所示:\n");
      HH; //顯示記錄的標(biāo)題
      show(stu, i); //顯示數(shù)組stu中的第i條記錄
      return;
      }
      }
      printf("沒(méi)有找到該生的記錄。\n");
      }

      1. 排序——sort()函數(shù)當(dāng)用戶在功能菜單中輸入數(shù)字6時(shí),會(huì)調(diào)用sort()函數(shù)進(jìn)入排序記錄模塊,該模塊會(huì)輸出所有學(xué)生的信息,并按總成績(jī)由高到低進(jìn)行排序。
      void sort(struct student stu[])
      {
      int i, j;
      struct student t;
      printf("按總成績(jī)進(jìn)行排序,");

      for (i = 0; i < n - 1; i++)
      {
      for (j = i + 1; j < n; j++)
      {
      if (stu[i].sum < stu[j].sum)
      {
      t = stu[i];
      stu[i] = stu[j];
      stu[j] = t;
      }
      }
      }
      printf("排序結(jié)果如下:\n");
      showAll(stu); //顯示排序后的所有記錄
      }

      案例實(shí)現(xiàn)

      由于該系統(tǒng)需要定義6個(gè)函數(shù),而且還涉及變量,代碼較多,因此可以分文件實(shí)現(xiàn)該系統(tǒng),將函數(shù)聲明與定義在頭文件student.h中實(shí)現(xiàn),函數(shù)實(shí)現(xiàn)在student.c文件中完成,函數(shù)調(diào)用在main.c文件中執(zhí)行。

      1. 定義student.h文件在student.h文件中定義項(xiàng)目需要的變量與函數(shù)聲明。在定義變量時(shí),因?yàn)閷W(xué)生信息包括學(xué)號(hào)、姓名和成績(jī)等不同數(shù)據(jù)類型的屬性,所以需要定義一個(gè)學(xué)生類型的結(jié)構(gòu)體。在存儲(chǔ)學(xué)生信息時(shí),可選用數(shù)組、字符串指針,考慮到學(xué)生要根據(jù)總成績(jī)來(lái)排序,為方便排序,我們選用數(shù)組來(lái)存儲(chǔ)學(xué)生信息。
      struct student
      {
      int id; // 學(xué)號(hào)
      char name[8]; //姓名
      int chinese; //計(jì)算機(jī)基礎(chǔ)成績(jī)
      int math; //數(shù)據(jù)結(jié)構(gòu)成績(jī)
      int sum; //總分
      };
      1. 定義student.c文件在student.c文件中實(shí)現(xiàn)各個(gè)功能函數(shù)。

      2. 定義main.c文件在main.c文件中,定義保存學(xué)生信息的結(jié)構(gòu)體數(shù)組,構(gòu)建學(xué)生成績(jī)管理系統(tǒng)主界面,使用while(1)循環(huán)控制是否退出系統(tǒng),在while循環(huán)中使用switch語(yǔ)句判斷用戶所選擇的功能,根據(jù)用戶選擇的功能調(diào)用相應(yīng)的函數(shù)。

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多