制作學生成績管理系統,可以實作以下功能:
- 每條記錄包括:學号、姓名、專業和5門課程的成績;
- 能夠實作添加、删除、修改功能;
- 能夠計算某學生的總分和平均分;
- 能按照總分排序輸出;
利用C語言的基本文法、結構化程式設計、數組、函數、結構體、指針、連結清單、排序算法、檔案存儲等,制作一個具有添加、删除、修改等功能的學生成績管理系統,包含學号、姓名、專業和5門課程的成績這個四個大方面的内容,流程圖如圖1所示。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL1MTM0YmY0YWZmhTYzMzM5MTMxQDZiFGMkZzNxY2YxgzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 詳細設計及實作
學生成績管理系統有幫助,重新整理,查詢,增加,删除,顯示,儲存,退出,清屏這些功能,要實作這些功能,需要用到很多函數,結構體,檔案操作,連結清單,指針等,在這裡會詳細介紹各類函數以及其他知識點所對應的用法,
一 頭檔案
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
做這個學生成績管理系統需要用到這四個頭檔案:
①#include <stdlib.h>:
常用的函數如malloc()、calloc()、realloc()、free()、system()、atoi()...用清屏功能以及删除連結清單釋放記憶體時要用到system("cls");free(p),如圖2所示。
圖2 free函數使用的代碼圖
②#include <malloc.h>
動态存儲配置設定函數頭檔案,當對記憶體區進行操作時,調用相關函數.
在使用連結清單時,建立新的指針時用到malloc(sizeof(LinkList)函數
如圖三所示。
圖3 malloc函數使用的代碼圖
③#include <string.h>
用系統的添加,修改功能時将字元串數組指派給另一個字元串數組,需要字元串連結函數;strcpy()字元串複制函數,就需要使用#include <string.h> 這個頭檔案。
typedef struct score
{
int score_c; //C語言成績
int score_math; //高等數學
int score_english; //大學英語成績
int score_zhengzhi;//政治成績
int score_tiyu;//體育成績
}Score;
學生個體的資訊,包括姓名,學号,專業,成績
typedef struct Student
{
char name[100]; //姓名
char num[100]; //學号
char zhuanye[100]; //專業
Score score; //成績
}stu;
對連結清單的使用創立的個體包含兩個對象,一個是data,還有個指針next
typedef struct LNode
{
stu data;
struct LNode *next;
}LinkList;
三 連結清單的使用
創立一個連結清單,首先要對它初始化:指針L相當于是頭指針
void InitList(LinkList *&L)//初始化連結清單
{
L=(LinkList *)malloc(sizeof(LinkList)); //指針L相當于是頭指針head
L->next=NULL;
}
添加新的連結清單:
void ListInsert(LinkList *&L,LinkList *p)//插入新的節點
{
LinkList *q=NULL;
q=L;
p->next=q->next; //
q->next=p;
創立的第一個節點的時候q->的next就為NULL,再創一個節點的話相當于把它插入到兩節點之間, 重新指向p,連接配接上新的節點(p)
後面的添加學生,修改資訊,删除,排序都是在上面的基礎上進行的,待會函數的時候在分别介紹。
四 選擇控制結構,函數調用
在一開始時,使用系統需要我們選擇使用哪個功能,輸入0~9之間的整數就可以使用不同的功能,這裡需要用到選擇控制結構:
while(1) //無限循環,當使用者使用完某一項功能後,界面就會彈出選擇表
{
printf("\n");
menu(); //功能菜單
printf("請輸入您的選擇:\n");
scanf("%d",&choose);
switch(choose)
{
case 0://系統幫助及說明
help();
break;
case 1://重新整理資訊(按學号排序)
sort(L);
break;
case 2: //查詢學生資訊
findstu(L);
break;
case 3://修改學生資訊
changestu(L);
break;
case 4://增加學生資訊
addstu(L);
break;
case 5://删除學生資訊
deletestu(L);
break;
case 6://輸出所有學生的資訊
display(L);
break;
case 7://儲存學生資訊到檔案
saveStuDentFile(L);
break;
case 8://退出
printf("謝謝使用!");
exit(0);
case 9: //清屏